|
Заполнение макета с заранее не известным числом колонок | ☑ | ||
---|---|---|---|---|
0
Neznaika9
14.11.22
✎
16:13
|
Здравствуйте. Подскажите пожалуйста. Делаю отчет (скд не предлагать), нужно именно так. задается период неделя, макет: колонки Заказ, Номенклатура, контрагент,Грузоотправитель, Дата(количество колонок зависит от периода) скрин ниже. Так вот, подскажите что я делаю не так, не могу расставить количество по дням периода. что бы в макет выводилось по какому заказу в какой день и сколько отгрузка. Голову сломала уже. Конфигурация Упп. https://transfiles.ru/rrms6 , макет https://transfiles.ru/fuojg. Очень буду благодарна за помощь.
Код Процедура КнопкаСформироватьНажатие(Элемент) ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; ТабДок.Очистить(); Макет = Отчеты.ртбПланОтгрузки.ПолучитьМакет("Макет"); ШапкаОтчета = Макет.ПолучитьОбласть("ШапкаОтчета"); ШапкаОтчета.Параметры.НачалоПериода = Формат(НачалоПериода, "ДФ=dd.MM.yyyy"); ШапкаОтчета.Параметры.КонецПериода = Формат(КонецПериода, "ДФ=dd.MM.yyyy"); ТабДок.Вывести(ШапкаОтчета); Отступ = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбщийОтступ"); ТабДок.Вывести(Отступ); ШапкаТаблицыЗаказ = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбластьЗаказ"); ТабДок.Присоединить(ШапкаТаблицыЗаказ); ШапкаТаблицыНоменклатура = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбластьНоменклатура"); ТабДок.Присоединить(ШапкаТаблицыНоменклатура); ШапкаТаблицыКонтрагент = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбластьКонтрагент"); ТабДок.Присоединить(ШапкаТаблицыКонтрагент); ШапкаТаблицыГрузополучатель = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбластьГрузополучатель"); ТабДок.Присоединить(ШапкаТаблицыГрузополучатель); ДатаКолонки = НачалоПериода; ДатыПериода = Макет.ПолучитьОбласть("ШапкаТаблицы|ДатыПериода"); Пока ДатаКолонки <= КонецПериода цикл ДатыПериода.Параметры.Дата = Формат(ДатаКолонки , "ДФ=dd.MM.yy"); ЭлементыФормы.ПолеТабличногоДокумента.Присоединить(ДатыПериода); ДатаКолонки = ДатаКолонки + 60*60*24; КонецЦикла; ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателя.Ссылка КАК Заказ, | ЗаказПокупателяГрафикОтгрузки.Номенклатура.Наименование КАК Номенклатура, | ЗаказПокупателя.Контрагент.Наименование КАК Контрагент, | НАЧАЛОПЕРИОДА(ЗаказПокупателяГрафикОтгрузки.ДатаОтгрузки, ДЕНЬ) КАК ДатаОтгрузки, | ЗаказПокупателяГрафикОтгрузки.Количество КАК Количество, | ЗаказПокупателя.Грузополучатель.Наименование КАК Грузополучатель |ИЗ | Документ.ЗаказПокупателя.ГрафикОтгрузки КАК ЗаказПокупателяГрафикОтгрузки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя | ПО ЗаказПокупателяГрафикОтгрузки.Ссылка = ЗаказПокупателя.Ссылка |ГДЕ | ЗаказПокупателя.ГрафикОтгрузки.Количество <> 0 | И ЗаказПокупателяГрафикОтгрузки.ДатаОтгрузки > &НачДата | И ЗаказПокупателяГрафикОтгрузки.ДатаОтгрузки < &КонДата |ИТОГИ ПО | Заказ"; Запрос.УстановитьПараметр("НачДата", ЭлементыФормы.НачалоПериода.Значение); Запрос.УстановитьПараметр("КонДата", ЭлементыФормы.КонецПериода.Значение); РезультатЗапроса = Запрос.Выполнить(); ТабДанных = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); ТабДок.НачатьАвтогруппировкуСтрок(); Для Каждого ВыборкаЗаказ Из ТабДанных.Строки Цикл ОбластьСтрока.Параметры.Заказ = ВыборкаЗаказ.Заказ; ТабДок.Вывести(ОбластьСтрока,ВыборкаЗаказ.Уровень()); Для Каждого ВыборкаНоменклатура Из ВыборкаЗаказ.Строки Цикл ОбластьСтрока.Параметры.Номенклатура = ВыборкаНоменклатура.Номенклатура ; ОбластьСтрока.Параметры.Контрагент = ВыборкаНоменклатура.Контрагент; ОбластьСтрока.Параметры.Грузополучатель = ВыборкаНоменклатура.Грузополучатель; ТабДок.Вывести(ОбластьСтрока,ВыборкаНоменклатура.Уровень()); ТекДата = НачалоПериода; Пока ТекДата <= НачалоДня(КонецПериода) цикл Если ТекДата = ВыборкаНоменклатура.ДатаОтгрузки Тогда ОбластьСтрока.Параметры.Количество = ВыборкаНоменклатура.Количество; //ТабДок.Вывести(ОбластьСтрока) ; КонецЕсли; ТекДата = ТекДата + 60*60*24; КонецЦикла; КонецЦикла; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.Показать(); |
|||
1
saaken
14.11.22
✎
18:57
|
так в чем проблема
|
|||
2
Neznaika9
15.11.22
✎
05:12
|
(1) проблема в том что не выводит по датам количество, все лепит в один первый столбик с датой. а должен на каждый заказ по датам за период вставлять количество. например есть заказ дата отгрузки 3,5,7 числа в количестве к примеру 10.
|
|||
3
Bigbro
15.11.22
✎
05:22
|
а где таб док присоединить область в шапку с датой?
|
|||
4
Neznaika9
15.11.22
✎
05:31
|
(3) Выше над запросом вывожу шапку с датой.
|
|||
5
Bigbro
15.11.22
✎
05:40
|
ТабДок.Присоединить(ШапкаТаблицыГрузополучатель);
ЭлементыФормы.ПолеТабличногоДокумента.Присоединить(ДатыПериода); очевидно что если первая строка работает а вторая нет то проблема в ней |
|||
6
Neznaika9
15.11.22
✎
05:54
|
ШапкаТаблицыГрузополучатель = Макет.ПолучитьОбласть("ШапкаТаблицы|ОбластьГрузополучатель");
ТабДок.Присоединить(ШапкаТаблицыГрузополучатель); ДатаКолонки = НачалоПериода; ДатыПериода = Макет.ПолучитьОбласть("ШапкаТаблицы|ДатыПериода"); Пока ДатаКолонки <= КонецПериода цикл ДатыПериода.Параметры.Дата = Формат(ДатаКолонки , "ДФ=dd.MM.yy"); ЭлементыФормы.ПолеТабличногоДокумента.Присоединить(ДатыПериода); ДатаКолонки = ДатаКолонки + 60*60*24; КонецЦикла; Вот этот кусок работает. Шапка с датой выводиться как нужно, по периоду. если период 5 дней то добавляется 5 колонок с датой на каждый день. Не происходит именно заполнения по этим датам. Как мне кажется не работает как нужно вот этот кусок: ТекДата = НачалоПериода; Пока ТекДата <= НачалоДня(КонецПериода) цикл Если ТекДата = ВыборкаНоменклатура.ДатаОтгрузки Тогда ОбластьСтрока.Параметры.Количество = ВыборкаНоменклатура.Количество; ТабДок.Вывести(ОбластьСтрока) ; КонецЕсли; ТекДата = ТекДата + 60*60*24; Ну или я что то не так делаю. |
|||
7
EgorovaSE
15.11.22
✎
10:43
|
(6) надо через присоединение Строка|ДатыПериода
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |