Проблема с построением отчета 1С 7.7

1. lauranalbandyan 12.03.25 14:10 Сейчас в теме
Добрый день уважаемые знатоки 1С,
Прошу помочь разобраться в правильном построений циклов отчета.
Предоставляю часть цикла:

Для Х = 1 По ТбЗнКС Цикл  
	ТбЗн.ПолучитьСтрокуПоНомеру(Х);
	текПроект = ТбЗн.Проект;
	текПС = ТбЗн.ЭлементыЗатрат;
	текПодр = ТбЗн.Подразделения;  
	   
 Объект = ТбЗн.Объект;
	Количество = ТбЗн.Количество;
	Себестоимость = ТбЗн.Себестоимость;
	Сумма = ТбЗн.Сумма;
	т_Тип = ?(Объект.Вид() = "ТМЦ", "²Ь²", ?(Объект.Вид() = "ОсновныеСредства", "РШ", ?(Объект.Вид() = "БИП", "²²","" )));
	т_ТМЦ = СокрЛП(Объект);
		Если (Объект.Выбран() = 1) Тогда
			т_код = СокрЛП(Объект.Код);
			т_ASкод = СокрЛП(Объект.ВнешКод);
			т_ТМЦполн = СокрЛП(Объект.ПолноеНаименование);
		КонецЕсли;
	    т_текПС = СокрЛП(текПС); 
		т_текПодр = СокрЛП(текПодр);
		т_Количество = СокрЛП(Формат(Количество, стФорматК));
		Если Количество = 0 Тогда
			т_Себестоимость = СокрЛП(Формат(0, стФорматС));
		Иначе
			т_Себестоимость = СокрЛП(Формат(Сумма / Количество, стФорматС));
		КонецЕсли;
		т_Сумма = СокрЛП(Формат(Сумма, стФорматС));
		
		прКоличество = прКоличество + Количество;
		прСумма = прСумма + Сумма;
		
	Если ПоПодр=1  Тогда    		
		Если (текПодр <>  прПодр) И (Х <> 1) Тогда   
			т_Количество = СокрЛП(Формат(прКоличество, стФорматК));
			т_Сумма = СокрЛП(Формат(прСумма, стФорматС));
			т_Подразделения = СокрЛП(текПодр) + "  (кпбс³µ³Е³ЭбхЩ)";
			Таб.ВывестиСекцию("надЭтажПодразделения");
			прКоличество = 0;
			прСумма = 0;
			прНДС = 0;
			прСуммаИтого = 0;
		КонецЕсли;     
	КонецЕсли;  
		
	Если ПоСТ=1  Тогда
		Если (текПС <>  прПС) И (Х <> 1) Тогда 
			т_Количество = СокрЛП(Формат(прКоличество, стФорматК));
			т_Сумма = СокрЛП(Формат(прСумма, стФорматС));
			т_текПС = СокрЛП(текПС) + "  (М³Лл³ЫЗЭ Сб¹н³Н)";
			Таб.ВывестиСекцию("надЭтажСтатья");
			прКоличество = 0;
			прСумма = 0;
			прНДС = 0;
			прСуммаИтого = 0;
		КонецЕсли;  
	КонецЕсли;   
		
	Если ПоСТ1=1  Тогда 
		Если (текПроект <>  прПред) И (Х <> 1) Тогда
			т_Количество = СокрЛП(Формат(прКоличество, стФорматК));
			т_Сумма = СокрЛП(Формат(прСумма, стФорматС));
			т_Проект = СокрЛП(текПроект) + "  (дсбЫ»Пп)";
			Таб.ВывестиСекцию("надЭтаж");
			прКоличество = 0;
			прСумма = 0;
			прНДС = 0;
			прСуммаИтого = 0;
		КонецЕсли;  
	КонецЕсли; 

    Таб.ВывестиСекцию("Этаж");
    прКоличество = прКоличество + Количество;
    прСумма = прСумма + Сумма;
	
    прПред = текПроект;
    прПС = текПС;
    прПодр = текПодр;
		
КонецЦикла;
Показать


Отчет должен выводить секции "надЭтажПодразделения" , "надЭтажСтатья" и "надЭтаж" как группировки, то есть выводить каждый раз, когда меняется проект, элемент затрат или подразделение и должны выводятся итоговые данные для проекта, элемента затрат и подразделения. Это делается перед выводом секции "Этаж".

Проблема сейчас в том что по этому коду сначала выводеться пусатя строка секции этаж затем секции "надЭтажПодразделения" , "надЭтажСтатья" и "надЭтаж" , но итоги в этих секциях не считаються а берет толко сумму и количество первой строки.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 12.03.25 17:31 Сейчас в теме
отладчик можно включить и смотреть, что там где выводится. В 7 тоже есть отладка
3. jmw 61 13.03.25 06:30 Сейчас в теме
Примерно так:
	т = СоздатьОбъект("ТаблицаЗначений");
	т.НоваяКолонка("подр");
	т.НоваяКолонка("колво");
	т.НоваяКолонка("сумма");
	т.НоваяКолонка("тПС");
	
	тПС = СоздатьОбъект("ТаблицаЗначений");
	тПС.НоваяКолонка("ПС");
	тПС.НоваяКолонка("колво");
	тПС.НоваяКолонка("сумма");
	тПС.НоваяКолонка("тХЗ");
	заготовкаПС = ЗначениеВСтрокуВнутр(тПС);
	
	тХЗ = СоздатьОбъект("ТаблицаЗначений");
	тХЗ.НоваяКолонка("ХЗ");
	тХЗ.НоваяКолонка("колво");
	тХЗ.НоваяКолонка("сумма");
	заготовкаХЗ = ЗначениеВСтрокуВнутр(тХЗ);
	
	тбзн.ВыбратьСтроки();
	Пока тбзн.ПолучитьСтроку() = 1 Цикл
		подр  = тбзн.Подразделения;
		ПС    = тбзн.ЭлементыЗатрат;
		ХЗ    = тбзн.ХЗ;
		колво = тбзн.Количество;
		сумма = тбзн.Сумма;
		
		стрТ = 0;
		Если т.НайтиЗначение(подр, стрТ, "подр") = 0 Тогда
			т.НоваяСтрока();
			т.подр  = подр;
			т.колво = 0;
			т.сумма = 0;
			т.тПС   = ЗначениеИзСтрокиВнутр(заготовкаПС);
		Иначе
			т.ПолучитьСтрокуПоНомеру(стрТ);
		КонецЕсли;
		
		т.колво = т.колво + колво;
		т.сумма = т.сумма + сумма;
		
		тПС   = т.тПС; 
		стрПС = 0;
		Если тПС.НайтиЗначение(ПС, стрПС, "ПС") = 0 Тогда
			тПС.НоваяСтрока();
			тПС.ПС    = ПС;
			тПС.колво = 0;
			тПС.сумма = 0;
			тПС.тХЗ   = ЗначениеИзСтрокиВнутр(заготовкаХЗ);
		Иначе
			тПС.ПолучитьСтрокуПоНомеру(стрПС);
		КонецЕсли;
		
		тПС.колво = тпс.колво + колво;
		тПС.сумма = тПС.сумма + сумма;
		
		тХЗ = тПС.тХЗ;
		тХЗ.НоваяСтрока();
		тХЗ.ХЗ    = ХЗ;
		тХЗ.колво = колво;
		тХЗ.сумма = сумма;
	КонецЦикла;
	
	т.ВыбратьСтроки();
	Пока т.ПолучитьСтроку() = 1 Цикл
		таб.ВывестиСекцию("подр");
		
		тПС = т.тПС;
		тПС.ВыбратьСтроки();
		Пока тПС.ПолучитьСтроку() = 1 Цикл
			таб.ВывестиСекцию("ПС");
			
			тХЗ = тПС.тХЗ;
			тХЗ.ВыбратьСтроки();
			Пока тХЗ.ПолучитьСтроку() = 1 Цикл
				таб.ВывестиСекцию("ХЗ");
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот