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