8.х 1c83 Внешний отчет с макетом. Присоединяемые области. Не правильно заполняется.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем АртемБууууу, 4 сен 2019.

  1. TopicStarter Overlay
    АртемБууууу
    Offline

    АртемБууууу Опытный в 1С

    Регистрация:
    30 авг 2017
    Сообщения:
    202
    Симпатии:
    1
    Баллы:
    29
    Добрый день!
    Делаю отчет, заполняется данными, но не могу проверить правильно или нет, так как заполняется как-то странно (на скриншоте видно)
    Заполняет сначала один столбец, потом другой столбец справа и ниже от первого, то есть не в одну строку, а как-то криво.
    И выводит несколько раз одну и туже строку.
    Должен группировать по Машинам и По водителям. При этом еще и литры должны суммироваться.
    И склад должен заполняться только если количество литров заполнено...
    Что-то не так я делаю.
    Подскажите что.


    Вот код, может кто-то может помочь разобраться, что делаю не так.
    Всем заранее благодарен.

    Код:
    //чтобы получить макет в форме внешнего отчета необходимо выполнить ВнешОбработка = РеквизитФормыВЗначение("Отчет"); и после этого нам будет доступен "ПолучитьМакет"
        ВнешОбработка = РеквизитФормыВЗначение("Отчет");   
        Макет = ВнешОбработка.ПолучитьМакет("Макет");
    
       
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоплива.ТС КАК ТС,
        |    ОстаткиТоплива.Водитель КАК Водитель,
        |    ОстаткиТоплива.Период КАК Период,
        |    ОстаткиТоплива.Количество КАК АЗСЗаправки,
        |    ОстаткиТоплива.Склад КАК Склад
        |ИЗ
        |    РегистрНакопления.ОстаткиТоплива КАК ОстаткиТоплива
        |ГДЕ
        |    ОстаткиТоплива.Период МЕЖДУ &Дата1 И &Дата2
        |
        |УПОРЯДОЧИТЬ ПО
        |    Период";
       
        Запрос.УстановитьПараметр("Дата1", НачалоДня(Отчет.Дата1));
        Запрос.УстановитьПараметр("Дата2", КонецДня(Отчет.Дата2));
        //Запрос.УстановитьПараметр("ТС", Отчет.ТС);
       
        РезультатЗапроса = Запрос.Выполнить();
       
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
        //получаем области макета
        ОбластьШапка          = Макет.ПолучитьОбласть("ОбластьШапка");
        ОбластьШапкаТаблицы   = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы");
    
        //заполняем шапку   
        ТабДок.Очистить();
        ОбластьШапка.Параметры.Дата1 = Отчет.Дата1;
        ОбластьШапка.Параметры.Дата2 = Отчет.Дата2;
        ОбластьШапка.Параметры.ТС    = Отчет.ТС;
       
        //выводим шапку отчета и шапку таблицы
        ТабДок.Вывести(ОбластьШапка);
    
        //заполняем даты периода  >>   
        ЗапросДни = Новый Запрос;
        ЗапросДни.Текст =
        "ВЫБРАТЬ
        |    КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика,
        |    КалендарныеГрафики.ДеньВключенВГрафик КАК ДеньВключенВГрафик
        |ИЗ
        |    РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
        |ГДЕ
        |    КалендарныеГрафики.ДатаГрафика МЕЖДУ &Дата1 И &Дата2";
        ЗапросДни.УстановитьПараметр("Дата1", НачалоДня(Отчет.Дата1));
        ЗапросДни.УстановитьПараметр("Дата2", КонецДня(Отчет.Дата2));
       
        РезультатЗапросаДни = ЗапросДни.Выполнить();
       
        ВыборкаДни = РезультатЗапросаДни.Выбрать();
       
        ТаблицаДней = Новый ТаблицаЗначений;
        ТаблицаДней.Колонки.Добавить("ДатаГрафика");
        ТаблицаДней.Колонки.Добавить("ДеньВключенВГрафик");
       
        ТаблицаДней = РезультатЗапросаДни.Выгрузить();
        ОбластьШапкаДней1 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область1");   
        ОбластьШапкаДней2 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область2");
        ОбластьШапкаДней3 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область3");
        ОбластьШапкаДней4 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область4");
        ОбластьШапкаДней5 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область5");
    
        ОбластьСтрока1     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область1");
        ОбластьСтрока11    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область2");
        ОбластьСтрока12    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область3");
        ОбластьСтрока13    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область4");
        ОбластьСтрока14    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область5");
       
        ОбластьСтрока2     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область1");
        ОбластьСтрока21    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область2");
        ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3");
        ОбластьСтрока23    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область4");
        ОбластьСтрока24    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область5");
    
        ОбластьСтрока3     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область1");
        ОбластьСтрока31    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область2");
        ОбластьСтрока32    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область3");
        ОбластьСтрока33    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область4");
        ОбластьСтрока34    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область5");
       
        //ОбластьСтрока4     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область4");
           
        ОбластьСтрока5     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область1");
        ОбластьСтрока51    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область2");
        ОбластьСтрока52    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область3");
        ОбластьСтрока53    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область4");
        ОбластьСтрока54    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область5");
       
        ТабДок.Вывести(ОбластьШапкаДней1);
    
        Для Каждого Стр Из ТаблицаДней Цикл
            Если Стр.ДеньВключенВГрафик = Истина  Тогда
                ОбластьШапкаДней2.Параметры.Дата = Формат(Стр.ДатаГрафика, "ДФ=dd.MM");
                ТабДок.Присоединить(ОбластьШапкаДней2);
            Иначе
                ОбластьШапкаДней3.Параметры.Дата = Формат(Стр.ДатаГрафика, "ДФ=dd.MM");
                ТабДок.Присоединить(ОбластьШапкаДней3);
            КонецЕсли;
        КонецЦикла;
        //заполняем даты периода  //
       
        //присоединяем область с итогами по заправкам
        ТабДок.Присоединить(ОбластьШапкаДней5);
       
        ТабДок.НачатьАвтогруппировкуСтрок();
       
        ТЗЗаправкиАЗС = Запрос.Выполнить().Выгрузить();
       
        //заполняем таблицу
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        ОбластьСтрока1.Параметры.НомерПП = 0;
        ОбластьСтрока24.Параметры.ИтогоКоличесвоАЗС = 0;
        ВыборкаДетальныеЗаписи.Следующий();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ЗаполнитьЗначенияСвойств(ОбластьСтрока1.Параметры,ВыборкаДетальныеЗаписи);
            ОбластьСтрока1.Параметры.НомерПП = ОбластьСтрока1.Параметры.НомерПП + 1;
            ТабДок.Вывести(ОбластьСтрока1);
           
            Для Каждого СтрДни Из ТаблицаДней Цикл
            Если НЕ СтрДни.ДеньВключенВГрафик = Истина Тогда
                    ТабДок.Присоединить(ОбластьСтрока12);
                Иначе
                    ТабДок.Присоединить(ОбластьСтрока11);
                Конецесли;
            КонецЦикла;
            ТабДок.Присоединить(ОбластьСтрока14);
           
            ТабДок.Вывести(ОбластьСтрока2);
    
            //Заполняем и выводим заправки на АЗС
            Для Каждого Стр Из ТаблицаДней Цикл
                Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
                    ОбластьСтрока22.Параметры.КоличесвоАЗС = 0;
                    Если НачалоДня(Стр.ДатаГрафика) = НачалоДня(ВыборкаДетальныеЗаписи.Период) Тогда
                    ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3");   
                    ОбластьСтрока22.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
                КонецЕсли;
                    ИтогоЛитровВых = ВыборкаДетальныеЗаписи.АЗСЗаправки;
                    ТабДок.Присоединить(ОбластьСтрока22);
                ИначеЕсли Стр.ДеньВключенВГрафик = Истина Тогда
                    ОбластьСтрока21.Параметры.КоличесвоАЗС = 0;
                    Если НачалоДня(ВыборкаДетальныеЗаписи.Период) = НачалоДня(Стр.ДатаГрафика) Тогда
                    ОбластьСтрока21    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область2");
                    ОбластьСтрока21.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
                    ИтогоЛитровБуд = ВыборкаДетальныеЗаписи.АЗСЗаправки;
                    КонецЕсли;
                    ТабДок.Присоединить(ОбластьСтрока21);           
                Конецесли;
            КонецЦикла;
           
            ТабДок.Присоединить(ОбластьСтрока24);
    
            //заполняем и выводим ДУТ
            //ТабДок.Вывести(ОбластьСтрока2);
            //Для Каждого Стр Из ТаблицаДней Цикл
            //    Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
            //        ТабДок.Присоединить(ОбластьСтрока22);
            //    Иначе
            //        Стр.ДеньВключенВГрафик = Истина;
            //        ТабДок.Присоединить(ОбластьСтрока21);
            //    Конецесли;
            //КонецЦикла; 
            //ТабДок.Присоединить(ОбластьСтрока4);
    
           
            ТабДок.Вывести(ОбластьСтрока3);
            Для Каждого СтрДни Из ТаблицаДней Цикл
            Если НЕ СтрДни.ДеньВключенВГрафик = Истина Тогда
                    ТабДок.Присоединить(ОбластьСтрока32);
                Иначе
                    ТабДок.Присоединить(ОбластьСтрока31);
                Конецесли;
            КонецЦикла;
            ТабДок.Присоединить(ОбластьСтрока34);
    
           
            ТабДок.Вывести(ОбластьСтрока5);
            //заполняем и выводим склады
            Для Каждого Стр Из ТаблицаДней Цикл
                Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
                    ОбластьСтрока52.Параметры.Склад = "";
                    Если НЕ ОбластьСтрока22 = "" Тогда
                        ОбластьСтрока52.Параметры.Склад = ВыборкаДетальныеЗаписи.Склад;
                    Иначе
                        ОбластьСтрока52.Параметры.Склад = "";
                    Конецесли;
                    ТабДок.Присоединить(ОбластьСтрока52);
                ИначеЕсли Стр.ДеньВключенВГрафик = Истина  Тогда
                    ОбластьСтрока51.Параметры.Склад = "";
                    Если НЕ ОбластьСтрока21 = "" Тогда
                    ОбластьСтрока51.Параметры.Склад = ВыборкаДетальныеЗаписи.Склад;
                    Иначе
                    ОбластьСтрока52.Параметры.Склад = "";
                    Конецесли;
                    //Стр.ДеньВключенВГрафик = Истина;
                    ТабДок.Присоединить(ОбластьСтрока51);
                Конецесли;
            КонецЦикла;
            ТабДок.Присоединить(ОбластьСтрока54);
        КонецЦикла;
       
       
        ТабДок.ЗакончитьАвтогруппировкуСтрок();
       
        ТабДок.ФиксацияСверху = 6;
        ТабДок.ФиксацияСлева = 4;
        ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.173
    Симпатии:
    554
    Баллы:
    204
    Как Вы себе представляете, чтобы кто-то разобрался в вашем коде без отладки и без макета?! Всегда поражаюсь этому.

    Метод Вывести - выводит область макета на НОВОЙ строке. Метод присоединить - присоединяет область к последней выведенной области в конце с права.

    Судя по изобилию методов в коде, то вполне возможно где то ошибка.
  3. TopicStarter Overlay
    АртемБууууу
    Offline

    АртемБууууу Опытный в 1С

    Регистрация:
    30 авг 2017
    Сообщения:
    202
    Симпатии:
    1
    Баллы:
    29
    выводится и присоединяется вроде бы все правильно, не правильно заполняется

    Вложения: