|
Составление макета документа | ☑ | ||
---|---|---|---|---|
0
VallyNolan
18.07.23
✎
17:22
|
Добрый день! Задание следующее: разработать печатную форму для документа, чтобы в ней по отдельности выводились проданные/предоставленные товары/услуги.
Проблема: не получается отстортировать отдельно материалы и отдельно услуги, а также посчитать по ним итоги. Код: Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | спрНоменклатура.ВидНоменклатуры КАК НоменклатураВидНоменклатуры, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК Количество, | ОказаниеУслугиПереченьНоменклатуры.Цена КАК Цена, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК Сумма, | ОказаниеУслуги.Клиент КАК Клиент, | ОказаниеУслуги.Номер КАК Номер, | ОказаниеУслуги.Дата КАК Дата, | ОказаниеУслуги.Ссылка КАК Ссылка |ИЗ | Документ.ОказаниеУслуги КАК ОказаниеУслуги | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры | ПО ОказаниеУслуги.Ссылка = ОказаниеУслугиПереченьНоменклатуры.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура | ПО (ОказаниеУслугиПереченьНоменклатуры.Ссылка = спрНоменклатура.Ссылка) |ГДЕ | ОказаниеУслуги.Ссылка В(&Ссылка) | |СГРУППИРОВАТЬ ПО | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Цена, | ОказаниеУслуги.Клиент, | ОказаниеУслуги.Номер, | ОказаниеУслуги.Дата, | ОказаниеУслуги.Ссылка, | спрНоменклатура.ВидНоменклатуры | |УПОРЯДОЧИТЬ ПО | Номер, | НоменклатураВидНоменклатуры УБЫВ |ИТОГИ | СУММА(Сумма), | МАКСИМУМ(Клиент), | МАКСИМУМ(Номер), | МАКСИМУМ(Дата) |ПО | Ссылка, | НоменклатураВидНоменклатуры"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Заголовок = Макет.ПолучитьОбласть("Заголовок"); Шапка = Макет.ПолучитьОбласть("Шапка"); ПереченьНоменклатурыТоварыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыТоварыШапка"); Товары = Макет.ПолучитьОбласть("Товары"); ПереченьНоменклатурыУслугиШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыУслугиШапка"); Услуги = Макет.ПолучитьОбласть("Услуги"); ИтогиТоваров = Макет.ПолучитьОбласть("ИтогиТоваров"); ИтогиУслуг = Макет.ПолучитьОбласть("ИтогиУслуг"); ТабДок.Очистить(); ВставлятьРазделительСтраниц = Ложь; ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаСсылка.Следующий() Цикл ТабДок.Вывести(Заголовок); Шапка.Параметры.Заполнить(ВыборкаСсылка); Шапка.Параметры.Дата = Формат(ВыборкаСсылка.Дата,"ДФ='dd MMMM гггг ""года""'"); ТабДок.Вывести(Шапка); ТабДок.Вывести(ПереченьНоменклатурыТоварыШапка); ВыборкаНоменклатураВидНоменклатуры = ВыборкаСсылка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаНоменклатураВидНоменклатуры.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаНоменклатураВидНоменклатуры.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Товары.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(Товары); ИтогиТоваров.Параметры.Заполнить(ВыборкаДетальныеЗаписи); КонецЦикла; ТабДок.Вывести(ИтогиТоваров); ТабДок.Вывести(ПереченьНоменклатурыУслугиШапка); ВыборкаДетальныеЗаписи = ВыборкаНоменклатураВидНоменклатуры.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Услуги.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(Услуги); ИтогиУслуг.Параметры.Заполнить(ВыборкаДетальныеЗаписи); КонецЦикла; ТабДок.Вывести(ИтогиУслуг); КонецЦикла; КонецЦикла; Подскажите, пожалуйста, в чём ошибка или где нужно поставить параметр(?), условие(?). |
|||
1
Kesim
18.07.23
✎
17:43
|
сделай 2 пакета в запросе один по услугам другой по товарам
и обрабатывай потом 2 выборки |
|||
2
VallyNolan
18.07.23
✎
20:10
|
Поменяла запрос и код (без 2 пакетов всё реализовала), но столкнулась с ещё одной проблемой.
В документах, в которых нет услуг и/или материалов, табличная часть этих документов не выводится, но заголовки, при этом, остаются. Куда мне их логичнее поместить, чтобы они выводились по в соответствии: есть товары в таб ч документа => выводится заголовок и таб часть; нет таб части = > не выводится? Код прилагаю. Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОказаниеУслуги.Ссылка КАК Ссылка, | ОказаниеУслуги.Дата КАК Дата, | ОказаниеУслуги.Номер КАК Номер, | ОказаниеУслугиПереченьНоменклатуры.НомерСтроки КАК НомерСтроки, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура КАК Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Количество КАК Количество, | ОказаниеУслугиПереченьНоменклатуры.Цена КАК Цена, | ОказаниеУслугиПереченьНоменклатуры.Сумма КАК Сумма, | спрНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры |ИЗ | Документ.ОказаниеУслуги КАК ОказаниеУслуги | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура | ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = спрНоменклатура.Ссылка | ПО ОказаниеУслуги.Ссылка = ОказаниеУслугиПереченьНоменклатуры.Ссылка |ГДЕ | ОказаниеУслуги.Ссылка В(&Ссылка) | |УПОРЯДОЧИТЬ ПО | ВидНоменклатуры УБЫВ |ИТОГИ | СУММА(Количество), | СУММА(Цена), | СУММА(Сумма) |ПО | Ссылка, | ВидНоменклатуры"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Заголовок = Макет.ПолучитьОбласть("Заголовок"); Шапка = Макет.ПолучитьОбласть("Шапка"); ПереченьНоменклатурыТоварыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыТоварыШапка"); Товары = Макет.ПолучитьОбласть("Товары"); ПереченьНоменклатурыУслугиШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыУслугиШапка"); Услуги = Макет.ПолучитьОбласть("Услуги"); ИтогиТоваров = Макет.ПолучитьОбласть("ИтогиТоваров"); ИтогиУслуг = Макет.ПолучитьОбласть("ИтогиУслуг"); Отступ = Макет.ПолучитьОбласть("Отступ"); ТабДок.Очистить(); ВставлятьРазделительСтраниц = Ложь; ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаСсылка.Следующий() Цикл ТабДок.Вывести(Заголовок); Шапка.Параметры.Заполнить(ВыборкаСсылка); Шапка.Параметры.Дата = Формат(ВыборкаСсылка.Дата,"ДФ='dd MMMM гггг ""года""'"); ТабДок.Вывести(Шапка); ТабДок.Вывести(ПереченьНоменклатурыТоварыШапка); ВыборкаНоменклатураВидНоменклатуры = ВыборкаСсылка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаНоменклатураВидНоменклатуры.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаНоменклатураВидНоменклатуры.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатур.Материал Тогда Товары.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(Товары); ИтогиТоваров.Параметры.СуммаТоваров = ВыборкаНоменклатураВидНоменклатуры.Сумма; КонецЕсли; КонецЦикла; КонецЦикла; ТабДок.Вывести(ИтогиТоваров); ТабДок.Вывести(Отступ); ТабДок.Вывести(ПереченьНоменклатурыУслугиШапка); ВыборкаНоменклатураВидНоменклатуры = ВыборкаСсылка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаНоменклатураВидНоменклатуры.Следующий() Цикл; ВыборкаДетальныеЗаписи = ВыборкаНоменклатураВидНоменклатуры.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЕСЛИ ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатур.Услуга Тогда Услуги.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(Услуги); ИтогиУслуг.Параметры.СуммаУслуг = ВыборкаНоменклатураВидНоменклатуры.Сумма; КонецЕсли; КонецЦикла; КонецЦикла; ТабДок.Вывести(ИтогиУслуг); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |