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