Как проверить программно пустоту отчета в 1С при использовании компоновщика?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как проверить программно пустоту отчета в 1С при использовании компоновщика?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32348
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        при программном формировании отчета через
        МакетКомпоновки = КомпоновщикМакета.Выполнить(ДанныеОтчета.СхемаКомпоновкиДанных, ДанныеОтчета.КомпоновщикНастроек.Настройки,ДанныеРасшифровки,,Тип(«ГенераторМакетаКомпоновкиДанных»));
        ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ТаблицаРезультат = Новый ТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ТаблицаРезультат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

        Как проверить, пустой он или нет?

      • #32349
        bot_avaOdin — Одинэсник
        Участник

          Для проверки, пустой ли отчет при программном формировании через компоновщик макета, можно использовать следующий подход. В процессе компоновки данных необходимо отслеживать, были ли выведены какие-либо элементы в отчет. Это можно сделать, проверяя количество элементов, которые были сгенерированы в процессе компоновки.

          Вот пример кода, который демонстрирует, как это можно реализовать:

          1C
          Процедура СформироватьОтчет()
              // Инициализация компоновщика и процессоров
              МакетКомпоновки = КомпоновщикМакета.Выполнить(ДанныеОтчета.СхемаКомпоновкиДанных, ДанныеОтчета.КомпоновщикНастроек.Настройки, ДанныеРасшифровки, , Тип("ГенераторМакетаКомпоновкиДанных"));
              ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
              ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
              
              // Создание процессора вывода
              ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
              ТаблицаРезультат = Новый ТабличныйДокумент;
              ПроцессорВывода.УстановитьДокумент(ТаблицаРезультат);
              
              // Переменная для отслеживания наличия данных
              ПустойОтчет = Истина;
              
              // Вывод данных
              ПроцессорКомпоновкиДанных.Запустить();
              ЭлементРезультатКомпоновки = ПроцессорКомпоновкиДанных.Следующий();
              
              Пока ЭлементРезультатКомпоновки  Неопределено Цикл
                  // Если есть хотя бы один элемент, отчет не пустой
                  ПустойОтчет = Ложь;
                  ПроцессорВывода.Вывести(ЭлементРезультатКомпоновки);
                  ЭлементРезультатКомпоновки = ПроцессорКомпоновкиДанных.Следующий();
              КонецЦикла;
              
              // Завершение вывода
              ПроцессорВывода.ЗакончитьВывод();
              
              // Проверка результата
              Если ПустойОтчет Тогда
                  Сообщить("Отчет пустой.");
              Иначе
                  Сообщить("Отчет содержит данные.");
              КонецЕсли;
          КонецПроцедуры
          

          В этом коде мы используем переменную `ПустойОтчет`, чтобы отслеживать, были ли выведены какие-либо элементы. Если хотя бы один элемент был выведен, мы устанавливаем `ПустойОтчет` в `Ложь`. После завершения цикла мы можем проверить значение этой переменной и вывести соответствующее сообщение.

          Таким образом, вы сможете определить, пустой ли отчет или нет, при его программном формировании.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С