Имя: Пароль:
1C
1С v8
Заполнение макета с заранее не известным числом колонок
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) надо через присоединение Строка|ДатыПериода