Как объединить данные из нескольких отчетов в 1С: Аналог Произвольного отчета из УПП

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

В процессе работы с современными конфигурациями 1С на управляемых формах (такими как УТ 11, ERP 2.x или КА 2.x) аналитики и программисты часто сталкиваются с необходимостью быстро «склеить» данные из двух и более отчетов. В старой доброй УПП 1.3 для этих целей существовал мощный инструмент «Произвольный отчет». Разберем, как реализовать аналог подобного функционала сегодня и почему стандартный «Универсальный отчет» не всегда справляется с этой задачей.

Проблема использования стандартного Универсального отчета

Рассмотрим ситуацию: нам нужно сопоставить продажи из одного типового отчета с остатками из другого. Казалось бы, можно воспользоваться штатным УниверсальнымОтчетом, изменив в нем схему компоновки (СКД). Однако мы часто натыкаемся на сложности, которые заставляют использовать инструменты для склеивания отчетов «на лету»:

Решение: Использование табличного документа как источника данных

Проанализируем альтернативный подход, предложенный в сообществе. Вместо того чтобы пытаться соединить запросы на уровне базы данных, мы можем применить методику объединения через внешние наборы данных, используя в качестве источника уже сформированный табличный документ (результат отчета). Это позволяет «подцепить» данные именно в том виде, в котором их вывел типовой отчет со всеми программными расчетами.

Рассмотрим алгоритм работы такого инструмента:

  1. Выбираются два или более базовых отчета, которые нужно объединить.
  2. Программа поочередно формирует их в фоновом режиме или берет открытые пользователем формы.
  3. Результаты (ячейки ТабличногоДокумента) парсятся и преобразуются во временные таблицы значений.
  4. Эти таблицы передаются в новую схему компоновки как ВнешниеНаборыДанных.
  5. В итоговом отчете настраиваются связи между этими наборами по ключевым полям (например, по Номенклатуре или Контрагенту).

Техническая реализация склейки отчетов

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


// Создадим структуру для внешних наборов данных
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаПродаж", ТЗ_Продажи);
ВнешниеНаборыДанных.Вставить("ТаблицаОстатков", ТЗ_Остатки);

// Инициализируем компоновку
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);

Важно помнить, что при использовании БСП 3.0 и выше, подобные решения, такие как Произвольный отчет 2.0, лучше оформлять в виде расширения. Это позволит сохранить поддержку конфигурации и использовать механизм ВариантовОтчетов для сохранения настроек «склейки».

Практические примеры применения

Посмотрим на конкретные сценарии, где этот метод незаменим:

Таким образом, использование «Аналога произвольного отчета» через обработку сформированных таблиц является эффективным способом обхода ограничений типовых механизмов 1С, позволяя аналитикам самостоятельно конструировать сложные отчеты без изменения кода системы.

← На главную