Отчет Меню

1. user1416843 16.08.21 11:14 Сейчас в теме
Добрый день! Столкнулась с такой проблемой. Имеется типовой отчет "меню, где отсутствует определенная колонка, а именно "Категория", Категория пишется только сверху самого отчета, а нужно чтобы писалось в колонке, В общем помогите, я не знаю что нужно изменить, чтобы вместо колонки "номер" выводилась колонка "категория", через предприятие отчет не изменить
Процедура СформироватьОтчет(ДокументРезультат = Неопределено, ДанныеРасшифровки = Неопределено, Схема = Неопределено, ОтветственныеТЗ, ТабДок) Экспорт
	
	// Сформируем структуру параметров для получения таблицы списываемых продуктов.
	мСтруктураПараметров = СформироватьСтруктуруДляПолученияТаблицыДанных();
	
	ТаблицаПоВидамПриема = УППБУ_КалькуляцияПродуктовПитания.ПолучитьПлановыйРасходПродуктовПоБлюдам(мСтруктураПараметров);
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	Если Не мСтруктураПараметров.ФормироватьПоСтолам Тогда
		Для каждого ВыбранноеПоле Из Настройки.Выбор.Элементы Цикл
			Если ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Стол") Тогда
				ВыбранноеПоле.Использование = Ложь;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, Новый Структура("ТаблицаПоВидамПриема", ТаблицаПоВидамПриема), Неопределено, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

	ТаблицаРезультат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
	
	ПодготовитьТаблицуДляВывода(ТаблицаРезультат);
	
	ДокументРезультат.Очистить();
	
	Если РасчетСтоимости = 0 Тогда
		ПолучитьОбщееКоличествоПорцийПоСпецификации(ТаблицаРезультат);
	КонецЕсли;
	
	Макет = ПолучитьМакет("Меню1");
	
	// Добавляем заголовок о формировании отчета по плановым или фактическим данным.
	Если Настройки.ДополнительныеСвойства.ВыводитьЗаголовок Тогда
		ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
		ОбластьЗаголовок.Параметры.ТекстЗаголовка = "По " + ?(ВидОтчета = 0, "плановым", "фактическим") + " показаниям";
		ДокументРезультат.Вывести(ОбластьЗаголовок);
	КонецЕсли;
	
	// Выводим шапку отчета.
	ОблШапка = Макет.ПолучитьОбласть("Шапка");
	ОблШапка.Параметры.НаименованиеУчреждения = Организация.Наименование;
	ОблШапка.Параметры.Учреждение = Организация;
	ОблШапка.Параметры.ПредставлениеПериода = Формат(НачалоПериода, "ДЛФ=ДД");
	
	//ОблШапка.Параметры.пКатегория = ПредставленияПоОтбору(Настройки.Отбор.Элементы, "Категория", "Справочник.КатегорииДовольствующихся", "Без учета категорий");
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ОблШапка.Параметры.пКВД = ПредставленияПоОтбору(Настройки.Отбор.Элементы, "КФО", "Перечисление.КВД", "Без учета кода вида финансового обеспечения");
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	ДокументРезультат.Вывести(ОблШапка);
	
	////////////////////////////////////////////////////////////­/////
	// ВЫВОД ТАБЛИЦЫ МЕНЮ
	
	// Выводим шапку таблицы МЕНЮ.
	ОблШапкаКатегория                 = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецНомерСтроки");
	ОблШапкаБелки                     = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецБелки");
	ОблШапкаЖиры                      = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецЖиры");
	ОблШапкаУглеводы                  = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецУглеводы");
	ОблШапкаКалорийность              = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецКалорийность");
	ОблШапкаНомерКарточкиНаименование = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецНомерКарточкиНаименование");
	ОблШапкаОписание                  = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецОписание");
	ОблШапкаКоличество                = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецКоличество");
	ОблШапкаВес                       = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецВес");
	ОблШапкаСтоимость                 = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецСтоимость");
	ОблШапкаСумма                     = Макет.ПолучитьОбласть("ШапкаТЧ|СтолбецСумма");
	
	ИмяСтрокиОбласти = ?(ВыводитьДанныеОСпецификации, "СтрокаТЧ", "СтрокаТЧБезСпецификации");
	//ВыводитьИтоги = ВыводитьБелки Или ВыводитьЖиры Или ВыводитьКалорийность Или ВыводитьУглеводы Или ВыводитьКоличествоСумму;
	
	ДокументРезультат.Вывести(ОблШапкаКатегория);
	
	Если ВыводитьБелки Тогда
		ДокументРезультат.Присоединить(ОблШапкаБелки);
	КонецЕсли;
	Если ВыводитьЖиры Тогда
		ДокументРезультат.Присоединить(ОблШапкаЖиры);
	КонецЕсли;
	Если ВыводитьУглеводы Тогда
		ДокументРезультат.Присоединить(ОблШапкаУглеводы);
	КонецЕсли;
	Если ВыводитьКалорийность Тогда
		ДокументРезультат.Присоединить(ОблШапкаКалорийность);
	КонецЕсли;
	
	ДокументРезультат.Присоединить(ОблШапкаНомерКарточкиНаименование);
	
	Если ВыводитьОписание Тогда
		ДокументРезультат.Присоединить(ОблШапкаОписание);
	КонецЕсли;
	
	Если ВыводитьКоличествоСумму Тогда
		ДокументРезультат.Присоединить(ОблШапкаКоличество);
	КонецЕсли;
	ДокументРезультат.Присоединить(ОблШапкаВес);
	ДокументРезультат.Присоединить(ОблШапкаСтоимость);
	Если ВыводитьКоличествоСумму Тогда
		ДокументРезультат.Присоединить(ОблШапкаСумма);
	КонецЕсли;
	
	// Выводим шапку таблицы на каждой странице.
	ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область("R11");
	
	// Выводим строки таблицы МЕНЮ.
	ТаблицаПриемаПищи =  УППБУ_КалькуляцияПродуктовПитания.ПолучитьТаблицуПриемовПищи();
	
	СписокПриемаПищи = ТаблицаПриемаПищи.Скопировать(, "ВидПриемаПорядок, ВидПриемаПищи");
	СписокПриемаПищи.Свернуть("ВидПриемаПорядок, ВидПриемаПищи",);
		
	СуммаИтого = 0;
	
	Для Каждого ТекЭлементПорядка Из СписокПриемаПищи Цикл
		
		СтруктураПоиска = Новый Структура;
		СтруктураПоиска.Вставить("ВидПриемаПищи", ТекЭлементПорядка.ВидПриемаПищи);
		СтрокиПоВидуПриема = ТаблицаРезультат.НайтиСтроки(СтруктураПоиска);
		
		// Если по текущему виду приема ничего не найдено, перейдем к поиску по следующему.
		Если СтрокиПоВидуПриема.Количество() = 0 Тогда    			
			Продолжить;
		КонецЕсли;
		
		ОблВидПриемаНомерСтроки               = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецНомерСтроки");
		ОблВидПриемаБелки                     = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецБелки");
		ОблВидПриемаЖиры                      = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецЖиры");
		ОблВидПриемаУглеводы                  = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецУглеводы");
		ОблВидПриемаКалорийность              = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецКалорийность");
		ОблВидПриемаНомерКарточкиНаименование = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецНомерКарточкиНаименование");
		ОблВидПриемаОписание                  = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецОписание");
		ОблВидПриемаКоличество                = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецКоличество");
		ОблВидПриемаВес                       = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецВес");
		ОблВидПриемаСтоимость                 = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецСтоимость");
		ОблВидПриемаСумма                     = Макет.ПолучитьОбласть("СтрокаВидПриема|СтолбецСумма");
		
		// Текущий вид приема из таблицы результата.
		ТекВидаПриема = СтрокиПоВидуПриема[0].ВидПриемаПищи;
		
		ОблВидПриемаНомерСтроки.Параметры.ВидПриемаПищи = ТекВидаПриема;
		ДокументРезультат.Вывести(ОблВидПриемаНомерСтроки);
		
		Если ВыводитьБелки Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаБелки);
		КонецЕсли;
		Если ВыводитьЖиры Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаЖиры);
		КонецЕсли;
		Если ВыводитьУглеводы Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаУглеводы);
		КонецЕсли;
		Если ВыводитьКалорийность Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаКалорийность);
		КонецЕсли;
		
		ДокументРезультат.Присоединить(ОблВидПриемаНомерКарточкиНаименование);
		
		Если ВыводитьОписание Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаОписание);
		КонецЕсли;
		
		Если ВыводитьКоличествоСумму Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаКоличество);
		КонецЕсли;
		
		ДокументРезультат.Присоединить(ОблВидПриемаВес);
		ДокументРезультат.Присоединить(ОблВидПриемаСтоимость);
		
		Если ВыводитьКоличествоСумму Тогда
			ДокументРезультат.Присоединить(ОблВидПриемаСумма);
		КонецЕсли;
		
		СуммаИтогоНаВидПриема = 0;
		
		Если Не ВыводитьВПорядкеВидовБлюд Тогда
			
			Для Инд = 0 По (СтрокиПоВидуПриема.Количество() - 1) Цикл
				
				ТекущиеДанные = СтрокиПоВидуПриема[Инд];
				
				ОблСтрокаТЧНомерСтроки               = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецНомерСтроки");
				ОблСтрокаТЧВес                       = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецВес");
				ОблСтрокаТЧБелки                     = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецБелки");
				ОблСтрокаТЧЖиры                      = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецЖиры");
				ОблСтрокаТЧУглеводы                  = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецУглеводы");
				ОблСтрокаТЧКалорийность              = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецКалорийность");
				ОблСтрокаТЧНомерКарточкиНаименование = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецНомерКарточкиНаименование");
				ОблСтрокаТЧОписание                  = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецОписание");
				ОблСтрокаТЧКоличество                = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецКоличество");
				ОблСтрокаТЧВес                       = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецВес");
				ОблСтрокаТЧСтоимость                 = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецСтоимость");
				ОблСтрокаТЧСумма                     = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецСумма");
				
				Если СокрЛП(ТекущиеДанные.Блюдо.ЕдиницаИзмерения.Код) = "163" Тогда
					ОблСтрокаТЧВес.Параметры.ВесПорции = ТекущиеДанные.ВесПорции / 1000;
				ИначеЕсли СокрЛП(ТекущиеДанные.Блюдо.ЕдиницаИзмерения.Код) <> "166" Тогда
					ОблСтрокаТЧВес.Параметры.ВесПорции = Строка(ТекущиеДанные.ВесПорции) +" ("+ТекущиеДанные.Блюдо.ЕдиницаИзмерения+")";
				КонецЕсли;
				
				ОблСтрокаТЧНомерСтроки.Параметры.Заполнить(ТекущиеДанные);

				ДокументРезультат.Вывести(ОблСтрокаТЧНомерСтроки);
				
				Если ВыводитьБелки Тогда
					ОблСтрокаТЧБелки.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧБелки);
				КонецЕсли;
				Если ВыводитьЖиры Тогда
					ОблСтрокаТЧЖиры.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧЖиры);
				КонецЕсли;
				Если ВыводитьУглеводы Тогда
					ОблСтрокаТЧУглеводы.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧУглеводы);
				КонецЕсли;
				Если ВыводитьКалорийность Тогда
					ОблСтрокаТЧКалорийность.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧКалорийность);
				КонецЕсли;
				
				ОблСтрокаТЧНомерКарточкиНаименование.Параметры.Заполнить(ТекущиеДанные);
				ДокументРезультат.Присоединить(ОблСтрокаТЧНомерКарточкиНаименование);
				
				Если ВыводитьОписание Тогда
					ТекОписание = СтрЗаменить(ТекущиеДанные.Спецификация.Описание, Символы.ПС, " ");
					ОблСтрокаТЧОписание.Параметры.Описание = ТекОписание;
					ДокументРезультат.Присоединить(ОблСтрокаТЧОписание);
				КонецЕсли;
				
				Если ВыводитьКоличествоСумму Тогда
					ОблСтрокаТЧКоличество.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧКоличество);
				КонецЕсли;
				
				ОблСтрокаТЧВес.Параметры.Заполнить(ТекущиеДанные);
				ДокументРезультат.Присоединить(ОблСтрокаТЧВес);
				
				ОблСтрокаТЧСтоимость.Параметры.Заполнить(ТекущиеДанные);
				
				СтоимостьБлюда = 0;
				
				Если РасчетСтоимости = 0 Тогда
					
					СуммаЗатрат			= ПолучитьСуммуЗатратНаБлюдо(ТекущиеДанные.Блюдо, ТекущиеДанные.Спецификация, ТекВидаПриема);
					текКоличествоПорций	= ТекущиеДанные.КоличествоПорций;
					
					СтоимостьБлюда = СтоимостьБлюда + (СуммаЗатрат / ТекущиеДанные.ОбщееКоличествоПорций) + (ПроцентНаценки / 100) * (СуммаЗатрат / ТекущиеДанные.ОбщееКоличествоПорций);
					
				Иначе
					СтруктураПараметровДляПолученияЦены = Новый Структура;
					СтруктураПараметровДляПолученияЦены.Вставить("Организация", Организация);
					СтруктураПараметровДляПолученияЦены.Вставить("Номенклатура", ТекущиеДанные.Блюдо);
					СтруктураПараметровДляПолученияЦены.Вставить("ТипЦены", ТипЦен);
					СтруктураПараметровДляПолученияЦены.Вставить("ТипВеса", Константы.УППБУ_ТипВесаДляРасчетаКоличестваПродуктов.Получить());
					СтруктураПараметровДляПолученияЦены.Вставить("ДатаЦены", НачалоПериода);
					
					СтоимостьБлюда = УППБУ_КалькуляцияПродуктовПитания.ПолучитьЦенуБлюда(СтруктураПараметровДляПолученияЦены);
				КонецЕсли;
				
				//ОблСтрокаТЧСтоимость.Параметры.СтоимостьБлюда = СтоимостьБлюда;
				
				ДокументРезультат.Присоединить(ОблСтрокаТЧСтоимость);
				
			
				
			КонецЦикла;
			
		Иначе
			
			ДокументРезультат.НачатьАвтогруппировкуСтрок();
			
			текВидБлюда = Неопределено;
			
			Для Инд = 0 По (СтрокиПоВидуПриема.Количество() - 1) Цикл
				
				ТекущиеДанные = СтрокиПоВидуПриема[Инд];
				
				// Если это новый вид блюда, выводиться наименование вида блюда.
				Если ТекущиеДанные.ВидБлюда <> текВидБлюда Тогда
					
					ОблСтрокаВидБлюдаНомерСтроки               = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецНомерСтроки");
					ОблСтрокаВидБлюдаБелки                     = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецБелки");
					ОблСтрокаВидБлюдаЖиры                      = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецЖиры");
					ОблСтрокаВидБлюдаУглеводы                  = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецУглеводы");
					ОблСтрокаВидБлюдаКалорийность              = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецКалорийность");
					ОблСтрокаВидБлюдаНомерКарточкиНаименование = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецНомерКарточкиНаименование");
					ОблСтрокаВидБлюдаОписание                  = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецОписание");
					ОблСтрокаВидБлюдаКоличество                = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецКоличество");
					ОблСтрокаВидБлюдаВес                       = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецВес");
					ОблСтрокаВидБлюдаСтоимость                 = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецСтоимость");
					ОблСтрокаВидБлюдаСумма                     = Макет.ПолучитьОбласть("СтрокаВидБлюда|СтолбецСумма");
					
					ОблСтрокаВидБлюдаНомерСтроки.Параметры.ВидБлюда = ?(ЗначениеЗаполнено(ТекущиеДанные.ВидБлюда), ТекущиеДанные.ВидБлюда, "<без учета вида блюда>");
					ДокументРезультат.Вывести(ОблСтрокаВидБлюдаНомерСтроки, 2);
					
					Если ВыводитьБелки Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаБелки);
					КонецЕсли;
					Если ВыводитьЖиры Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаЖиры);
					КонецЕсли;
					Если ВыводитьУглеводы Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаУглеводы);
					КонецЕсли;
					Если ВыводитьКалорийность Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаКалорийность);
					КонецЕсли;
					
					ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаНомерКарточкиНаименование);
					
					Если ВыводитьОписание Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаОписание);
					КонецЕсли;
					
					Если ВыводитьКоличествоСумму Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаКоличество);
					КонецЕсли;
					ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаВес);
					ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаСтоимость);
					Если ВыводитьКоличествоСумму Тогда
						ДокументРезультат.Присоединить(ОблСтрокаВидБлюдаСумма);
					КонецЕсли;
					
					текВидБлюда = ТекущиеДанные.ВидБлюда;
					
				КонецЕсли;
				
				ОблСтрокаТЧНомерСтроки               = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецНомерСтроки");
				ОблСтрокаТЧВес                       = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецВес");
				ОблСтрокаТЧБелки                     = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецБелки");
				ОблСтрокаТЧЖиры                      = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецЖиры");
				ОблСтрокаТЧУглеводы                  = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецУглеводы");
				ОблСтрокаТЧКалорийность              = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецКалорийность");
				ОблСтрокаТЧНомерКарточкиНаименование = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецНомерКарточкиНаименование");
				ОблСтрокаТЧОписание                  = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецОписание");
				ОблСтрокаТЧКоличество                = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецКоличество");
				ОблСтрокаТЧВес                       = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецВес");
				ОблСтрокаТЧСтоимость                 = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецСтоимость");
				ОблСтрокаТЧСумма                     = Макет.ПолучитьОбласть(ИмяСтрокиОбласти + "|СтолбецСумма");
				
				Если СокрЛП(ТекущиеДанные.Блюдо.ЕдиницаИзмерения.Код) = "163" Тогда
					ОблСтрокаТЧВес.Параметры.ВесПорции = ТекущиеДанные.ВесПорции / 1000;
				ИначеЕсли СокрЛП(ТекущиеДанные.Блюдо.ЕдиницаИзмерения.Код) <> "166" Тогда
					ОблСтрокаТЧВес.Параметры.ВесПорции = "" + ТекущиеДанные.ВесПорции +" ("+ТекущиеДанные.Блюдо.ЕдиницаИзмерения+")";
				КонецЕсли;
				
				ОблСтрокаТЧНомерСтроки.Параметры.Заполнить(ТекущиеДанные);

				ДокументРезультат.Вывести(ОблСтрокаТЧНомерСтроки);
				
				Если ВыводитьБелки Тогда
					ОблСтрокаТЧБелки.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧБелки);
				КонецЕсли;
				Если ВыводитьЖиры Тогда
					ОблСтрокаТЧЖиры.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧЖиры);
				КонецЕсли;
				Если ВыводитьУглеводы Тогда
					ОблСтрокаТЧУглеводы.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧУглеводы);
				КонецЕсли;
				Если ВыводитьКалорийность Тогда
					ОблСтрокаТЧКалорийность.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧКалорийность);
				КонецЕсли;
				
				ОблСтрокаТЧНомерКарточкиНаименование.Параметры.Заполнить(ТекущиеДанные);
				ДокументРезультат.Присоединить(ОблСтрокаТЧНомерКарточкиНаименование);
				
				Если ВыводитьОписание Тогда
					ТекОписание = СтрЗаменить(ТекущиеДанные.Спецификация.Описание, Символы.ПС, " ");
					ОблСтрокаТЧОписание.Параметры.Описание = ТекОписание;
					ДокументРезультат.Присоединить(ОблСтрокаТЧОписание);
				КонецЕсли;
				
				Если ВыводитьКоличествоСумму Тогда
					ОблСтрокаТЧКоличество.Параметры.Заполнить(ТекущиеДанные);
					ДокументРезультат.Присоединить(ОблСтрокаТЧКоличество);
				КонецЕсли;
				
				ОблСтрокаТЧВес.Параметры.Заполнить(ТекущиеДанные);
				ДокументРезультат.Присоединить(ОблСтрокаТЧВес);
				
				ОблСтрокаТЧСтоимость.Параметры.Заполнить(ТекущиеДанные);
				
				СтоимостьБлюда = 0;
				
				Если РасчетСтоимости = 0 Тогда
					
					СуммаЗатрат			= ПолучитьСуммуЗатратНаБлюдо(ТекущиеДанные.Блюдо, ТекущиеДанные.Спецификация, ТекВидаПриема);
					текКоличествоПорций	= ТекущиеДанные.КоличествоПорций;
					
					СтоимостьБлюда = СтоимостьБлюда + (СуммаЗатрат / ТекущиеДанные.ОбщееКоличествоПорций) + (ПроцентНаценки / 100) * (СуммаЗатрат / ТекущиеДанные.ОбщееКоличествоПорций);
					
				Иначе
					СтруктураПараметровДляПолученияЦены = Новый Структура;
					СтруктураПараметровДляПолученияЦены.Вставить("Организация", Организация);
					СтруктураПараметровДляПолученияЦены.Вставить("Номенклатура", ТекущиеДанные.Блюдо);
					СтруктураПараметровДляПолученияЦены.Вставить("ТипЦены", ТипЦен);
					СтруктураПараметровДляПолученияЦены.Вставить("ТипВеса", Константы.УППБУ_ТипВесаДляРасчетаКоличестваПродуктов.Получить());
					СтруктураПараметровДляПолученияЦены.Вставить("ДатаЦены", НачалоПериода);
					
					СтоимостьБлюда = УППБУ_КалькуляцияПродуктовПитания.ПолучитьЦенуБлюда(СтруктураПараметровДляПолученияЦены);
				КонецЕсли;
				
				ОблСтрокаТЧСтоимость.Параметры.СтоимостьБлюда = СтоимостьБлюда;
				
				ДокументРезультат.Присоединить(ОблСтрокаТЧСтоимость);
				
				Если ВыводитьКоличествоСумму Тогда
					ТекСумма = ТекущиеДанные.КоличествоПорций * СтоимостьБлюда;
					ОблСтрокаТЧСумма.Параметры.Сумма = ТекСумма;
					
					СуммаИтогоНаВидПриема = СуммаИтогоНаВидПриема + ТекСумма;
					СуммаИтого            = СуммаИтого            + ТекСумма;
					
					ДокументРезультат.Присоединить(ОблСтрокаТЧСумма);
				КонецЕсли;
					
			КонецЦикла;
			
			ДокументРезультат.ЗакончитьАвтогруппировкуСтрок();
			
		КонецЕсли;
		
		Если ВыводитьИтоги Тогда
			
			// Подготовка итогов по виду приема.
			ИтогиПоВидуПриема = ТаблицаРезультат.Скопировать();
			ИтогиПоВидуПриема.Свернуть("ВидПриемаПищи",
									   "Белки,
									   |Жиры,
									   |Углеводы,
									   |Калорийность,
									   |Сумма");
									   
			СтрокаИтоговПоВидуПриема = ИтогиПоВидуПриема.Найти(ТекВидаПриема, "ВидПриемаПищи");
			
			Если СтрокаИтоговПоВидуПриема = Неопределено Тогда // Если итогов нет, пропускаем.
				Продолжить;
			КонецЕсли;
			
			ОблСтрокаИтогоВидПриемаНомерСтроки               = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецНомерСтроки");
			ОблСтрокаИтогоВидПриемаВес                       = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецВес");
			ОблСтрокаИтогоВидПриемаБелки                     = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецБелки");
			ОблСтрокаИтогоВидПриемаЖиры                      = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецЖиры");
			ОблСтрокаИтогоВидПриемаУглеводы                  = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецУглеводы");
			ОблСтрокаИтогоВидПриемаКалорийность              = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецКалорийность");
			ОблСтрокаИтогоВидПриемаНомерКарточкиНаименование = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецНомерКарточкиНаименование");
			ОблСтрокаИтогоВидПриемаОписание                  = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецОписание");
			ОблСтрокаИтогоВидПриемаКоличество                = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецКоличество");
			ОблСтрокаИтогоВидПриемаВес                       = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецВес");
			ОблСтрокаИтогоВидПриемаСтоимость                 = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецСтоимость");
			ОблСтрокаИтогоВидПриемаСумма                     = Макет.ПолучитьОбласть("СтрокаИтогоВидПриема|СтолбецСумма");
			
			ОблСтрокаИтогоВидПриемаНомерСтроки.Параметры.ВидПриема = ТекВидаПриема;
			ДокументРезультат.Вывести(ОблСтрокаИтогоВидПриемаНомерСтроки);
			
			Если ВыводитьБелки Тогда
				ОблСтрокаИтогоВидПриемаБелки.Параметры.Заполнить(СтрокаИтоговПоВидуПриема);
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаБелки);
			КонецЕсли;
			Если ВыводитьЖиры Тогда
				ОблСтрокаИтогоВидПриемаЖиры.Параметры.Заполнить(СтрокаИтоговПоВидуПриема);
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаЖиры);
			КонецЕсли;
			Если ВыводитьУглеводы Тогда
				ОблСтрокаИтогоВидПриемаУглеводы.Параметры.Заполнить(СтрокаИтоговПоВидуПриема);
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаУглеводы);
			КонецЕсли;
			Если ВыводитьКалорийность Тогда
				ОблСтрокаИтогоВидПриемаКалорийность.Параметры.Заполнить(СтрокаИтоговПоВидуПриема);
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаКалорийность);
			КонецЕсли;
			
			ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаНомерКарточкиНаименование);
			
			Если ВыводитьОписание Тогда
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаОписание);
			КонецЕсли;
			
			Если ВыводитьКоличествоСумму Тогда
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаКоличество);
			КонецЕсли;
			
			ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаВес);
			ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаСтоимость);
			
			Если ВыводитьКоличествоСумму Тогда
				ОблСтрокаИтогоВидПриемаСумма.Параметры.Сумма = СуммаИтогоНаВидПриема;
				ДокументРезультат.Присоединить(ОблСтрокаИтогоВидПриемаСумма);
			КонецЕсли;
			
			ИтогиПоВидуПриема.Очистить();
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ВыводитьИтоги Тогда
		
		// Подготовка общих итогов.
		ИтогиОбщие = ТаблицаРезультат.Скопировать();
		ИтогиОбщие.Колонки.Добавить("ДляСвертки");
		ИтогиОбщие.Свернуть("ДляСвертки",
		"Белки,
		|Жиры,
		|Углеводы,
		|Калорийность,
		|Сумма");
		
	//	Если ИтогиОбщие.Количество() <> 0 Тогда // Проверка на наличие итогов.
	//		
	//		СтрокаОбщихИтогов = ИтогиОбщие[0];
	//	
	//		// Выводим итоги таблицы МЕНЮ.
	//		ОблСтрокаИтогоНомерСтроки               = Макет.ПолучитьОбласть("СтолбецНомерСтроки");
	//		ОблСтрокаИтогоВес                       = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецВес");
	//		ОблСтрокаИтогоБелки                     = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецБелки");
	//		ОблСтрокаИтогоЖиры                      = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецЖиры");
	//		ОблСтрокаИтогоУглеводы                  = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецУглеводы");
	//		ОблСтрокаИтогоКалорийность              = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецКалорийность");
	//		ОблСтрокаИтогоНомерКарточкиНаименование = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецНомерКарточкиНаименование");
	//		ОблСтрокаИтогоОписание                  = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецОписание");
	//		ОблСтрокаИтогоКоличество                = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецКоличество");
	//		ОблСтрокаИтогоВес                       = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецВес");
	//		ОблСтрокаИтогоСтоимость                 = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецСтоимость");
	//		ОблСтрокаИтогоСумма                     = Макет.ПолучитьОбласть("СтрокаИтого|СтолбецСумма");
	//		
	//		//ДокументРезультат.Вывести(ОблСтрокаИтогоНомерСтроки);
	//		
	//		ОблСтрокаИтогоБелки.Параметры.Заполнить(СтрокаОбщихИтогов);
	//		ОблСтрокаИтогоЖиры.Параметры.Заполнить(СтрокаОбщихИтогов);
	//		ОблСтрокаИтогоУглеводы.Параметры.Заполнить(СтрокаОбщихИтогов);
	//		ОблСтрокаИтогоКалорийность.Параметры.Заполнить(СтрокаОбщихИтогов);
	//		
	//		Если ВыводитьБелки Тогда
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоБелки);
	//		КонецЕсли;
	//		Если ВыводитьЖиры Тогда
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоЖиры);
	//		КонецЕсли;
	//		Если ВыводитьУглеводы Тогда
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоУглеводы);
	//		КонецЕсли;
	//		Если ВыводитьКалорийность Тогда
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоКалорийность);
	//		КонецЕсли;
	//		
	//		ДокументРезультат.Присоединить(ОблСтрокаИтогоНомерКарточкиНаименование);
	//		
	//		Если ВыводитьОписание Тогда
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоОписание);
	//		КонецЕсли;
	//		
	//		Если ВыводитьКоличествоСумму Тогда
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоКоличество);
	//		КонецЕсли;
	//		
	//		ДокументРезультат.Присоединить(ОблСтрокаИтогоВес);
	//		ДокументРезультат.Присоединить(ОблСтрокаИтогоСтоимость);
	//		
	//		Если ВыводитьКоличествоСумму Тогда
	//			ОблСтрокаИтогоСумма.Параметры.Сумма = СуммаИтого;
	//			ДокументРезультат.Присоединить(ОблСтрокаИтогоСумма);
	//		КонецЕсли;
	//		
	//	КонецЕсли;
	//	
	//	ИтогиОбщие.Очистить();
	//	
	КонецЕсли;
	
	////////////////////////////////////////////////////////////­/////
	// ВЫВОД ТАБЛИЦЫ №2
	
	Если ВыводитьВитаминыИМинВещества Тогда
		
		ТабДок    = Новый ТабличныйДокумент;
		
		// Выводим шапку отчета.
		ОблШапка = ОблШапка.ПолучитьОбласть("R1C1:R7C60");
		ТабДок.Вывести(ОблШапка);

		// выводим вторую шапку
		
		ОблШапкаДоп = Макет.ПолучитьОбласть("ШапкаДоп");
		ОблШапкаДоп.Параметры.ПредставлениеПериода = Формат(НачалоПериода, "ДЛФ=ДД");
		ТабДок.Вывести(ОблШапкаДоп);
		
		ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("ШапкаДоп");
		
		// выводим шапку таблицы 2
		ОблШапкаТЧДоп = Макет.ПолучитьОбласть("ШапкаТЧДоп");
		ТабДок.Вывести(ОблШапкаТЧДоп);
		
		// выводим строки таблицы 2
		Для Каждого ТекЭлементПорядка Из СписокПриемаПищи Цикл
		
			СтруктураПоиска = Новый Структура;
			СтруктураПоиска.Вставить("ВидПриемаПищи", ТекЭлементПорядка.ВидПриемаПищи);
			СтрокиПоВидуПриема = ТаблицаРезультат.НайтиСтроки(СтруктураПоиска);
			
			// Если по текущему виду приема ничего не найдено, перейдем к поиску по следующему.
			Если СтрокиПоВидуПриема.Количество() = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			// текущий вид приема из таблицы результата
			ТекВидаПриема = СтрокиПоВидуПриема[0].ВидПриемаПищи;
			
			ОблСтрокаВидПриемаДоп = Макет.ПолучитьОбласть("СтрокаВидПриемаДоп");
			ОблСтрокаВидПриемаДоп.Параметры.ВидПриемаПищи = ТекВидаПриема;
			
			ТабДок.Вывести(ОблСтрокаВидПриемаДоп);
			
			Для Инд = 0 По (СтрокиПоВидуПриема.Количество() - 1) Цикл
				
				ТекущиеДанные = СтрокиПоВидуПриема[Инд];
				
				ОблСтрокаТЧДоп = Макет.ПолучитьОбласть("СтрокаТЧДоп");
				ОблСтрокаТЧДоп.Параметры.Заполнить(ТекущиеДанные);
				ТабДок.Вывести(ОблСтрокаТЧДоп);
				
			КонецЦикла;
			
			// Подготовка итогов по виду приема для витаминов и минералов.
			ИтогиПоВидуПриема = ТаблицаРезультат.Скопировать();
			ИтогиПоВидуПриема.Свернуть("ВидПриемаПищи",
									   "ВитаминА,
									   |ВитаминB1,
									   |ВитаминB2,
									   |ВитаминB6,
									   |ВитаминB12,
									   |ВитаминPP,
									   |ВитаминC,
									   |ВитаминD,
									   |ВитаминE,
									   |Na,K,Ca,Mg,P,Fe,Zn,J");
									   
			СтрокаИтоговПоВидуПриема = ИтогиПоВидуПриема.Найти(ТекВидаПриема, "ВидПриемаПищи");
			
			Если СтрокаИтоговПоВидуПриема = Неопределено Тогда // если итогов нет, пропускаем
				Продолжить;
			КонецЕсли;
			
			ОблСтрокаИтогоВидПриемаДоп = Макет.ПолучитьОбласть("СтрокаИтогоВидПриемаДоп");
			ОблСтрокаИтогоВидПриемаДоп.Параметры.Заполнить(СтрокаИтоговПоВидуПриема);
			ОблСтрокаИтогоВидПриемаДоп.Параметры.ВидПриемаПищи = ТекВидаПриема;
			ТабДок.Вывести(ОблСтрокаИтогоВидПриемаДоп);
			
			ИтогиПоВидуПриема.Очистить();
			
		КонецЦикла;
		
		// Вывод общих итогов таблицы по витаминам и минералам.
		ИтогиОбщие = ТаблицаРезультат.Скопировать();
		ИтогиОбщие.Колонки.Добавить("ДляСвертки");
		ИтогиОбщие.Свернуть("ДляСвертки",
		"ВитаминА,
		|ВитаминB1,
		|ВитаминB2,
		|ВитаминB6,
		|ВитаминB12,
		|ВитаминPP,
		|ВитаминC,
		|ВитаминD,
		|ВитаминE,
		|Na,K,Ca,Mg,P,Fe,Zn,J");
		
		Если ИтогиОбщие.Количество() <> 0 Тогда // проверка на наличие итогов
			
			СтрокаОбщихИтогов = ИтогиОбщие[0];
			
			ОблСтрокаИтогоДоп = Макет.ПолучитьОбласть("СтрокаИтогоДоп");
			ОблСтрокаИтогоДоп.Параметры.Заполнить(СтрокаОбщихИтогов);
			ТабДок.Вывести(ОблСтрокаИтогоДоп);
			
		КонецЕсли;
		
		ИтогиОбщие.Очистить();
				
		ОбластьТекста = ТабДок.Область("R1C1");
		Пока Не ОбластьТекста = Неопределено Цикл
			ОбластьТекста = ТабДок.НайтиТекст("ВспомогательныйТекстДляОбъединения", ОбластьТекста, , Истина);
			Если Не ОбластьТекста = Неопределено Тогда
				ОбластьТекста.Текст = "";
				ИмяОбласти = ОбластьТекста.Имя;
				НомерСимволаС = Найти(ИмяОбласти, "C");
				ПозицияСтолбец = Лев(ИмяОбласти, НомерСимволаС - 1);
				ОбластьОбъединения = ТабДок.Область(ПозицияСтолбец + "C2" + ":" + ИмяОбласти);
				ОбластьОбъединения.Объединить();
				ОбластьОбъединения.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
			КонецЕсли;
		КонецЦикла;
		
		// выводим подвал "Содержание Витаминов и Минеральных Веществ".
		ОблОтветственные = Макет.ПолучитьОбласть("Ответственные");
		Для Каждого ТекСтрока Из ОтветственныеТЗ Цикл
			Если Не ПустаяСтрока(ТекСтрока.Ответственный) Тогда
				ОтветственныйФИО = КорреспондентыКлиентСервер.ФИО(ТекСтрока.Ответственный.Наименование, Ложь);
				ОблОтветственные.Параметры.Должность = ТекСтрока.Должность;
				ОблОтветственные.Параметры.Ответственный = ОтветственныйФИО;;
				ТабДок.Вывести(ОблОтветственные);
			КонецЕсли;
		КонецЦикла;
		
		ТабДок.ИмяПараметровПечати = "УППБУ_МенюБлюд";
		ТабДок.АвтоМасштаб = Истина;
	КонецЕсли;
	
	ОбластьТекста = ДокументРезультат.Область("R1C1");
	Пока Не ОбластьТекста = Неопределено Цикл
		ОбластьТекста = ДокументРезультат.НайтиТекст("ВспомогательныйТекстДляОбъединения", ОбластьТекста, , Истина);
		Если Не ОбластьТекста = Неопределено Тогда
			ОбластьТекста.Текст = "";
			ИмяОбласти = ОбластьТекста.Имя;
			НомерСимволаС = Найти(ИмяОбласти, "C");
			ПозицияСтолбец = Лев(ИмяОбласти, НомерСимволаС - 1);
			ОбластьОбъединения = ДокументРезультат.Область(ПозицияСтолбец + "C2" + ":" + ИмяОбласти);
			ОбластьОбъединения.Объединить();
			ОбластьОбъединения.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
		КонецЕсли;
	КонецЦикла;
	
	// выводим подвал "Меню Блюд".
	ОблОтветственные = Макет.ПолучитьОбласть("Ответственные");
	Для Каждого ТекСтрока Из ОтветственныеТЗ Цикл
		Если Не ПустаяСтрока(ТекСтрока.Ответственный) Тогда
			ОтветственныйФИО = КорреспондентыКлиентСервер.ФИО(ТекСтрока.Ответственный.Наименование, Ложь);
			ОблОтветственные.Параметры.Должность = ТекСтрока.Должность;
			ОблОтветственные.Параметры.Ответственный = ОтветственныйФИО;
			ДокументРезультат.Вывести(ОблОтветственные);
		КонецЕсли;
	КонецЦикла;
	ДокументРезультат.ИмяПараметровПечати = "УППБУ_МенюБлюд";
	ДокументРезультат.ЧерноБелаяПечать    = Ложь;
	ДокументРезультат.АвтоМасштаб = Истина;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1416843 16.08.21 11:15 Сейчас в теме
Скрины как должно быть, и как есть в макете
3. alxarz 32 16.08.21 11:21 Сейчас в теме
(1) заголовок отчета не совпадает с макетом, наверное не тот макет смотрите?
4. user1416843 16.08.21 11:23 Сейчас в теме
(3)да вроде бы тот, 1 выгруженный отчет и один макет, помимо СКД
5. user1559729 16.08.21 11:53 Сейчас в теме
Вероятно, в запрос СКД нужно добавить Категорию.
6. user1416843 16.08.21 11:56 Сейчас в теме
7. user1559729 16.08.21 13:04 Сейчас в теме
8. user1416843 16.08.21 14:31 Сейчас в теме
(7)Там ее нет, но она есть в "ТаблицаПоВИдамПриема", подскажите как ее добавиться, в выбранных полях категория есть
Оставьте свое сообщение

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