Завис на формирование отчета. Подтолкните пожалуйста, куда дальше копать
Формируются отчет по Меню блюд, в каждом блюде есть рацион питания (Взрослый, детский) нужно этот рацион питания сопоставить с продуктом в печатной форме. Никак этого сделать не получается
Для Каждого Блюдо Из Ссылка.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Пытался сделать таким образом, но добавляет какую то ерунду, везде ставит ошибочно "Детское и взрослое"
Пример печатной формы во вложении, сама форма документа выглядит так
Уже 2 часа пытаюсь шаманить, никак не выходит подтянуть
Процедура СформироватьЖурналЗакладкиПродуктов(ТабличныйДокумент, СписокОбластейКонтрагентов)
Перем НомерПервойСтроки, НомерПоследнейСтроки;
Макет = ПолучитьМакет(ВыходнаяФорма);
СтруктураПараметровШапки = Новый Структура;
Питание_НаСервере.ЗаполнитьСтруктуруОрганизации(Ссылка.Организация, СтруктураПараметровШапки, Ссылка.Дата);
Питание_НаСервере.ЗаполнитьСтруктуруДолжности(Ссылка.Организация, СтруктураПараметровШапки, "Закладчик", Ссылка.Дата, ДолжностьЗакладчика);
Питание_НаСервере.ЗаполнитьСтруктуруДолжности(Ссылка.Организация, СтруктураПараметровШапки, "Контролер", Ссылка.Дата, ДолжностьКонтролера);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Блюда.ПриемПищи КАК ПриемПищи,
| Блюда.Блюдо КАК Блюдо,
| Продукты.Продукт КАК Продукт,
| Продукты.Нетто * Блюда.Количество * Блюда.Коэффициент КАК Нетто,
| Продукты.БруттоВсего * Блюда.Коэффициент КАК Брутто,
| Блюда.ОсновнойДокумент КАК Калькуляция,
| Блюда.Ссылка.Дата КАК СсылкаДата,
| Продукты.БруттоВсего * Блюда.Коэффициент - Продукты.Нетто * Блюда.Количество * Блюда.Коэффициент КАК ВесОтходов,
| КоличествоБлюд.Количество КАК КоличествоБлюд,
| Продукты.Продукт.ОкруглениеВБлюде КАК Округление,
| КоличествоБлюд.Контрагент КАК Контрагент,
| Блюда.Блюдо.Рационы.(
| Ссылка КАК БлюдоСсылка,
| НомерСтроки КАК БлюдоНомерСтроки,
| Использование КАК БлюдоИспользование,
| Рацион КАК БлюдоРацион
| ) КАК Блюдо2
|ИЗ
| (ВЫБРАТЬ
| Питание_КалькуляцияБлюда.Ссылка КАК Ссылка,
| Питание_КалькуляцияБлюда.ПриемПищи КАК ПриемПищи,
| Питание_КалькуляцияБлюда.Блюдо КАК Блюдо,
| Питание_КалькуляцияБлюда.Количество КАК Количество,
| ВЫБОР
| КОГДА Питание_КалькуляцияБлюда.Ссылка.ТипКалькуляции = &ТипВозвратнойКалькуляции
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ КАК Коэффициент,
| Питание_КалькуляцияБлюда.КлючБлюда КАК КлючБлюда,
| ВЫБОР
| КОГДА Питание_КалькуляцияБлюда.Ссылка.ТипКалькуляции = &ТипОсновнойКалькуляции
| ТОГДА Питание_КалькуляцияБлюда.Ссылка
| ИНАЧЕ Питание_КалькуляцияБлюда.Ссылка.ДокументОснование
| КОНЕЦ КАК ОсновнойДокумент
| ИЗ
| Документ.Питание_Калькуляция.Блюда КАК Питание_КалькуляцияБлюда
| ГДЕ
| Питание_КалькуляцияБлюда.Ссылка = &Ссылка
| И Питание_КалькуляцияБлюда.Количество > 0) КАК Блюда
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Питание_КалькуляцияРаскладки.Ссылка КАК Ссылка,
| Питание_КалькуляцияРаскладки.КлючБлюда КАК КлючБлюда,
| Питание_КалькуляцияРаскладки.Продукт КАК Продукт,
| Питание_КалькуляцияРаскладки.Нетто КАК Нетто,
| Питание_КалькуляцияРаскладки.БруттоВсего КАК БруттоВсего
| ИЗ
| Документ.Питание_Калькуляция.Раскладки КАК Питание_КалькуляцияРаскладки
| ГДЕ
| Питание_КалькуляцияРаскладки.Ссылка = &Ссылка
| И НЕ Питание_КалькуляцияРаскладки.НеИспользовать) КАК Продукты
| ПО Блюда.Ссылка = Продукты.Ссылка
| И Блюда.КлючБлюда = Продукты.КлючБлюда
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Питание_КалькуляцияКоличествоБлюд.Ссылка КАК Ссылка,
| Питание_КалькуляцияКоличествоБлюд.КлючБлюда КАК КлючБлюда,
| СУММА(ВЫБОР
| КОГДА Питание_КалькуляцияКоличествоБлюд.флПроба
| ТОГДА Питание_КалькуляцияКоличествоБлюд.Количество + 1
| ИНАЧЕ Питание_КалькуляцияКоличествоБлюд.Количество
| КОНЕЦ) КАК Количество,
| ВЫБОР
| КОГДА &ЭтоКомбинатПитания
| ТОГДА Питание_КалькуляцияКоличествоБлюд.Получатель
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Питание_Получатели.ПустаяСсылка)
| КОНЕЦ КАК Контрагент
| ИЗ
| Документ.Питание_Калькуляция.КоличествоБлюд КАК Питание_КалькуляцияКоличествоБлюд
| ГДЕ
| Питание_КалькуляцияКоличествоБлюд.Ссылка = &Ссылка
| И (Питание_КалькуляцияКоличествоБлюд.Количество > 0
| ИЛИ Питание_КалькуляцияКоличествоБлюд.флПроба)
|
| СГРУППИРОВАТЬ ПО
| Питание_КалькуляцияКоличествоБлюд.Ссылка,
| Питание_КалькуляцияКоличествоБлюд.КлючБлюда,
| ВЫБОР
| КОГДА &ЭтоКомбинатПитания
| ТОГДА Питание_КалькуляцияКоличествоБлюд.Получатель
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Питание_Получатели.ПустаяСсылка)
| КОНЕЦ) КАК КоличествоБлюд
| ПО Блюда.Ссылка = КоличествоБлюд.Ссылка
| И Блюда.КлючБлюда = КоличествоБлюд.КлючБлюда
|
|УПОРЯДОЧИТЬ ПО
| Блюда.Ссылка.Дата,
| Блюда.ПриемПищи.Время,
| Блюда.ПриемПищи.Код,
| Блюда.ПриемПищи.Наименование,
| Блюда.Блюдо.Наименование,
| Продукты.Продукт.Наименование
|ИТОГИ ПО
| Калькуляция,
| Контрагент,
| ПриемПищи,
| Блюдо";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ТипОсновнойКалькуляции", Перечисления.Питание_ТипыКалькуляций.Основное);
Запрос.УстановитьПараметр("ТипВозвратнойКалькуляции", Перечисления.Питание_ТипыКалькуляций.Возврат);
Запрос.УстановитьПараметр("УчитыватьДополненияИВозвраты", Истина);
Запрос.УстановитьПараметр("ЭтоКомбинатПитания", ПолучитьФункциональнуюОпцию("Питание_ЭтоКомбинатПитания"));
РезультатЗапроса = Запрос.Выполнить();
ПостфиксОбластей = "СЧисленностью";
// Формирование отчета
ВыборкаДокумента = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумента.Следующий() Цикл
ВыборкаКонтрагента = ВыборкаДокумента.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаКонтрагента.Следующий() Цикл
Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.Заполнить(ВыборкаКонтрагента);
Область.Параметры.Заполнить(ВыборкаКонтрагента.Калькуляция);
ТабличныйДокумент.Вывести(Область);
Область = Макет.ПолучитьОбласть("Шапка|" + ПостфиксОбластей);
ТабличныйДокумент.Вывести(Область);
ВыборкаПриемаПищи = ВыборкаКонтрагента.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПриемаПищи.Следующий() Цикл
Область = Макет.ПолучитьОбласть("ПриемПищи|" + ПостфиксОбластей);
Область.Параметры.Заполнить(ВыборкаПриемаПищи);
ТабличныйДокумент.Вывести(Область);
ВыборкаБлюда = ВыборкаПриемаПищи.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаБлюда.Следующий() Цикл
НомерСтрокиБлюда = Неопределено;
МассивВыводимыхОбластей = Новый Массив;
ВыборкаПродуктов = ВыборкаБлюда.Выбрать();
Пока ВыборкаПродуктов.Следующий() Цикл
Область = Макет.ПолучитьОбласть("Строка|" + ПостфиксОбластей);
//Если ВыборкаПродуктов.Брутто <> 0 Тогда
// Область.Параметры.ПроцентОтхода = (ВыборкаПродуктов.Брутто - ВыборкаПродуктов.Нетто) / ВыборкаПродуктов.Брутто * 100
//КонецЕсли;
СтруктураПараметровЯчейки = Новый Структура;
СтруктураПараметровЯчейки.Вставить("Нетто", Питание_НаКлиентеНаСервере.глОкруглить(ВыборкаПродуктов.Нетто, ВыборкаПродуктов.Округление));
СтруктураПараметровЯчейки.Вставить("Брутто", Питание_НаКлиентеНаСервере.глОкруглить(ВыборкаПродуктов.Брутто, ВыборкаПродуктов.Округление));
Область.Параметры.Заполнить(ВыборкаПродуктов);
Область.Параметры.Заполнить(ВыборкаПродуктов.Продукт);
Область.Параметры.Заполнить(СтруктураПараметровЯчейки);
МассивВыводимыхОбластей.Добавить(Область);
КонецЦикла;
Номер = 1;
Для Каждого Блюдо Из Ссылка.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
Для каждого Область Из МассивВыводимыхОбластей Цикл
ВыведеннаяОбласть = ТабличныйДокумент.Вывести(Область);
Если НомерСтрокиБлюда = Неопределено Тогда
НомерСтрокиБлюда = ВыведеннаяОбласть.Верх;
КонецЕсли;
КонецЦикла;
ТабличныйДокумент.Область(НомерСтрокиБлюда, 1, ВыведеннаяОбласть.Низ, 1).Объединить();
КонецЦикла;
КонецЦикла;
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.Заполнить(СтруктураПараметровШапки);
Область.Параметры.Заполнить(ВыборкаКонтрагента);
ТабличныйДокумент.Вывести(Область);
КонецЦикла;
КонецЦикла;
Питание_ПечатьОтчетов.УстановитьСоответствиеКонтрагентаОбластиПечати(СписокОбластейКонтрагентов, ТабличныйДокумент, , НомерПервойСтроки, НомерПоследнейСтроки);
КонецПроцедуры
ПоказатьДля Каждого Блюдо Из Ссылка.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Пытался сделать таким образом, но добавляет какую то ерунду, везде ставит ошибочно "Детское и взрослое"
Пример печатной формы во вложении, сама форма документа выглядит так
Уже 2 часа пытаюсь шаманить, никак не выходит подтянуть
Прикрепленные файлы:
Найденные решения
Номер = 1;
Для Каждого Блюдо Из Ссылка.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Вы уверены, что это правильно?: перебираются все рационы из документа (не выборки запроса), а в итоге подставляется один-последний! Должны быть либо условия отбора... Может не Ссылка.Рацион, а (к примеру) ВыборкаБлюда.Блюдо.Рацион. (примерно, поскольку структуры справочника нет).
Для Каждого Блюдо Из ВыборкаБлюда.Блюдо.Рацион Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Номер = 1;
Для Каждого Блюдо Из Ссылка.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Вы уверены, что это правильно?: перебираются все рационы из документа (не выборки запроса), а в итоге подставляется один-последний! Должны быть либо условия отбора... Может не Ссылка.Рацион, а (к примеру) ВыборкаБлюда.Блюдо.Рацион. (примерно, поскольку структуры справочника нет).
Для Каждого Блюдо Из ВыборкаБлюда.Блюдо.Рацион Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
(5)
Попробовал
Тоже самое, подставляет последнее значение
Для Каждого Блюдо Из ВыборкаБлюда.Блюдо.Рацион Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Попробовал
ВыборкаБлюда = ВыборкаПриемаПищи.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Область = Макет.ПолучитьОбласть("Строка|" + ПостфиксОбластей);
Пока ВыборкаБлюда.Следующий() Цикл
Номер = 1;
Для Каждого Блюдо Из ВыборкаБлюда.Блюдо.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Тоже самое, подставляет последнее значение
Вот к этому вёл:
Вариант 1:
СтрокаРацион = СтрокаРацион+Блюдо.Рацион.Наименование;
Вариант 2:
ТабДок.вывести(Область);
Область.Параметры.Диета должна выводиться после заполнения, или где-то учитываться, а не перезаполняться...
Вариант 1:
или если в одну ячейку всё, то:
////////////
СтрокаРацион="";
Для Каждого Блюдо Из ВыборкаБлюда.Блюдо.Рационы Цикл
СтрокаРацион = СтрокаРацион+Блюдо.Рацион.Наименование;
Номер = Номер+1;
КонецЦикла;
Область.Параметры.Диета = СтрокаРацион;
ТабДок.вывести(Область);
////////////////
Вариант 2:
/////////
Для Каждого Блюдо Из ВыборкаБлюда.Блюдо.Рационы Цикл
Область.Параметры.Диета = Блюдо.Рацион.Наименование;
ТабДок.вывести(Область);
Номер = Номер+1;
КонецЦикла;
//////////
Область.Параметры.Диета должна выводиться после заполнения, или где-то учитываться, а не перезаполняться...
(12)
Конечно без двойки, тоже самое выходит.
Вроде получилось сделать вот так как писали выше
то почему я в (9) БЛЮДО2 написал......
без двойки надо, надеюсь Вы без двойки пробовали.
без двойки надо, надеюсь Вы без двойки пробовали.
Конечно без двойки, тоже самое выходит.
Вроде получилось сделать вот так как писали выше
Пока ВыборкаПродуктов.Следующий() Цикл
Область = Макет.ПолучитьОбласть("Строка|" + ПостфиксОбластей);
//Если ВыборкаПродуктов.Брутто <> 0 Тогда
// Область.Параметры.ПроцентОтхода = (ВыборкаПродуктов.Брутто - ВыборкаПродуктов.Нетто) / ВыборкаПродуктов.Брутто * 100
//КонецЕсли;
СтруктураПараметровЯчейки = Новый Структура;
СтруктураПараметровЯчейки.Вставить("Нетто", Питание_НаКлиентеНаСервере.глОкруглить(ВыборкаПродуктов.Нетто, ВыборкаПродуктов.Округление));
СтруктураПараметровЯчейки.Вставить("Брутто", Питание_НаКлиентеНаСервере.глОкруглить(ВыборкаПродуктов.Брутто, ВыборкаПродуктов.Округление));
Область.Параметры.Заполнить(ВыборкаПродуктов);
Область.Параметры.Заполнить(ВыборкаПродуктов.Продукт);
Номер = 1;
СтрокаРацион="";
Для Каждого Блюдо Из ВыборкаПродуктов.Блюдо.Рационы Цикл
Если Блюдо.Использование = Истина Тогда
СтрокаРацион = СтрокаРацион + " " + Блюдо.Рацион.Наименование;
Область.Параметры.Диета = СтрокаРацион;
Номер = Номер+1;
Иначе
Продолжить;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот