Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 02:24

Внешний отчет Меню

Автор Таня Куталова, 16 авг 2021, 10:47

0 Пользователей и 1 гость просматривают эту тему.

Таня Куталова

Добрый день! Столкнулась с такой проблемой. Имеется типовой отчет "меню, где отсутствует определенная колонка, а именно "Категория", Категория пишется только сверху самого отчета, а нужно чтобы писалось в колонке, В общем помогите, я не знаю что нужно изменить, чтобы вместо колонки "номер" выводилась колонка "категория", через предприятие отчет не изменитьПроцедура СформироватьОтчет(ДокументРезультат = Неопределено, ДанныеРасшифровки = Неопределено, Схема = Неопределено, ОтветственныеТЗ, ТабДок) Экспорт

// Сформируем структуру параметров для получения таблицы списываемых продуктов.
мСтруктураПараметров = СформироватьСтруктуруДляПолученияТаблицыДанных();

ТаблицаПоВидамПриема = УППБУ_КалькуляцияПродуктовПитания.ПолучитьПлановыйРасходПродуктовПоБлюдам(мСтруктураПараметров);
Настройки = КомпоновщикНастроек.ПолучитьНастройки();

Если Не мСтруктураПараметров.ФормироватьПоСтолам Тогда
Для каждого ВыбранноеПоле Из Настройки.Выбор.Элементы Цикл
Если ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Стол") Тогда
ВыбранноеПоле.Использование = Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, Новый Структура("ТаблицаПоВидамПриема", ТаблицаПоВидамПриема), Неопределено, Истина);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

ТаблицаРезультат = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);

ПодготовитьТаблицуДляВывода(ТаблицаРезультат);

ДокументРезультат.Очистить();

Если РасчетСтоимости = 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" + ":" + ИмяОбласти);
ОбластьОбъединения.Объединить();
ОбластьОбъединения.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЕсли;
КонецЦикла;

// выводим подвал "Меню Блюд".
ОблОтветственные = Макет.ПолучитьОбласть("Ответственные");
Для Каждого ТекСтрока Из ОтветственныеТЗ Цикл
Если Не ПустаяСтрока(ТекСтрока.Ответственный) Тогда
ОтветственныйФИО = КорреспондентыКлиентСервер.ФИО(ТекСтрока.Ответственный.Наименование, Ложь);
ОблОтветственные.Параметры.Должность = ТекСтрока.Должность;
ОблОтветственные.Параметры.Ответственный = ОтветственныйФИО;
ДокументРезультат.Вывести(ОблОтветственные);
КонецЕсли;
КонецЦикла;
ДокументРезультат.ИмяПараметровПечати = "УППБУ_МенюБлюд";
ДокументРезультат.ЧерноБелаяПечать    = Ложь;
ДокументРезультат.АвтоМасштаб = Истина;

КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск