Умные итоги по запросу с регистратором

Писал запрос по бухгалтерскому регистру с регистратором и держал пальцы крестиком, чтобы итоги были верными.

Предчувствия меня не обманули, они посчитались правильно, именно как остатки, а не сумма остатков по каждому регистратору. Пронесло!

	Запрос = Новый Запрос;
	Запрос.Текст =  
	"ВЫБРАТЬ
	|	ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
	|	ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
	|	ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
	|	ХозрасчетныйОстаткиИОбороты.СуммаОборот КАК СуммаОборот,
	|	ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
	|	ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
	|	ХозрасчетныйОстаткиИОбороты.Регистратор КАК Регистратор,
	|	ХозрасчетныйОстаткиИОбороты.Период КАК Период
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, Движения, Счет = &Счет, , Субконто2 = &Контрагент) КАК ХозрасчетныйОстаткиИОбороты
	|ИТОГИ
	|	СУММА(СуммаНачальныйОстаток),
	|	СУММА(СуммаКонечныйОстаток),
	|	СУММА(СуммаОборотДт),
	|	СУММА(СуммаОборотКт)
	|ПО
	|	ОБЩИЕ,
	|	Номенклатура";
	
	Запрос.УстановитьПараметр("Дата1", Объект.Дата1);
	Запрос.УстановитьПараметр("Дата2", КонецДня(Объект.Дата2));
	Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТМЦпринятыеНаОтветственноеХранение); //002.
	Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
	
	НомерПП = 0;
	ВыборкаВсего = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока ВыборкаВсего.Следующий() Цикл
		ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		Пока ВыборкаНоменклатура.Следующий() Цикл
			
			НомерПП = НомерПП + 1; 
			
			Область = Макет.ПолучитьОбласть("Товар");
			
			Область.Параметры.НаименованиеТовара = ВыборкаНоменклатура.Номенклатура;
			Область.Параметры.НомерПП = НомерПП;
			
			Область.Параметры.НачальныйОстаток = ВыборкаНоменклатура.СуммаНачальныйОстаток;
			Область.Параметры.КонечныйОстаток = ВыборкаНоменклатура.СуммаКонечныйОстаток;
			Область.Параметры.Приход = ВыборкаНоменклатура.СуммаОборотДт;
			Область.Параметры.Расход = ВыборкаНоменклатура.СуммаОборотКт;
			
			Результат.Вывести(Область);
			
			ВыборкаДокумент = ВыборкаНоменклатура.Выбрать();
			Пока ВыборкаДокумент.Следующий() Цикл
				
				Область = Макет.ПолучитьОбласть("Документ");
				
				Если ТипЗнч(ВыборкаДокумент.Регистратор) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
					ПредставлениеДокумента = "Поступление №" + СокрЛП(ВыборкаДокумент.Регистратор.Номер);
				ИначеЕсли ТипЗнч(ВыборкаДокумент.Регистратор) = Тип("ДокументСсылка.ВозвратТоваровПоставщику") Тогда
					ПредставлениеДокумента = "Возврат №" + СокрЛП(ВыборкаДокумент.Регистратор.Номер);
				Иначе
					ПредставлениеДокумента = Строка(ВыборкаДокумент.Регистратор);
				КонецЕсли;   
				
				Область.Параметры.Документ = ПредставлениеДокумента;
				Область.Параметры.Дата = ВыборкаДокумент.Период;
				
				Область.Параметры.НачальныйОстаток = ВыборкаДокумент.СуммаНачальныйОстаток;
				Область.Параметры.КонечныйОстаток = ВыборкаДокумент.СуммаКонечныйОстаток;
				Область.Параметры.Приход = ВыборкаДокумент.СуммаОборотДт;
				Область.Параметры.Расход = ВыборкаДокумент.СуммаОборотКт;
				
				Результат.Вывести(Область);
				
			КонецЦикла;
			
		КонецЦикла;                              
		
		Область = Макет.ПолучитьОбласть("Итого");
		Область.Параметры.НачальныйОстаток = ВыборкаВсего.СуммаНачальныйОстаток;
		Область.Параметры.КонечныйОстаток = ВыборкаВсего.СуммаКонечныйОстаток;
		Область.Параметры.Приход = ВыборкаВсего.СуммаОборотДт;
		Область.Параметры.Расход = ВыборкаВсего.СуммаОборотКт;
		Результат.Вывести(Область);
	КонецЦикла;

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *