Как организовать вывод нескольких независимых таблиц в одной группировке СКД?

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

В процессе разработки сложных отчетов на системе компоновки данных (СКД) часто возникают ситуации, когда требуется вывести под одной группировкой, например, «Номенклатура», сразу несколько наборов данных, имеющих разное количество строк. Стандартная логика СКД ориентирована на иерархическое построение «родитель-потомок», поэтому вывод нескольких независимых списков рядом или последовательно требует применения нестандартных подходов.

Рассмотрим детально, как можно реализовать эту задачу, какие существуют методы и с какими ограничениями вы можете столкнуться.

Способ 1: Объединение наборов данных и нумерация

Данный метод основан на приведении разных таблиц к общему знаменателю. Если вам нужно вывести три независимых списка, вы можете объединить их в один запрос с помощью оператора UNION ALL.

  1. Создайте НаборДанных, который объединяет все три источника данных (продажи1, продажи2, история цен).
  2. Добавьте вычисляемое поле, которое будет выполнять роль идентификатора строки или индекса. Это необходимо для того, чтобы «склеить» записи разных таблиц по порядку.
  3. Используйте нумерацию для каждой строки внутри своей группы товаров. Это позволит СКД правильно распределить данные по колонкам или секциям при группировке по номенклатуре.

Этот подход позволяет сохранить интерактивность отчета — вы сможете настроить расшифровку, так как данные остаются в рамках стандартных ресурсов СКД.

Способ 2: Использование вычисляемых полей и СоединитьСтроки

Если визуальное представление является приоритетным, а интерактивность расшифровки вторична, можно воспользоваться функцией СоединитьСтроки. Этот метод позволяет сформировать строковое представление таблицы внутри одной ячейки.

Для реализации этого метода:

  1. Создайте основной НаборДанных1 (например, список номенклатуры).
  2. Создайте дополнительные наборы данных НаборДанных2 и НаборДанных3, содержащие детальные данные (продажи и историю цен).
  3. В настройках СКД определите вычисляемые поля для каждой группы данных.
  4. Используйте функцию СоединитьСтроки, передавая ей результат запроса, преобразованный в таблицу значений.

Пример логики формирования данных для вычисляемого поля:


// В модуле объекта или при формировании данных
// Получаем данные для таблицы
Запрос = Новый Запрос;
Запрос.Текст = "...";
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
// Преобразуем таблицу в строковое представление для вывода
СтроковоеПредставление = СоединитьСтроки(ТаблицаРезультат, Символы.ПС);

Важно помнить, что при таком подходе ячейка отчета будет содержать просто текст. Пользователь не сможет «провалиться» в документ из такой «таблицы», так как это уже не стандартный объект СКД, а просто отформатированная строка.

Способ 3: Макеты группировок

Макеты позволяют полностью контролировать внешний вид отчета. Вместо того чтобы полагаться на автоматическую генерацию колонок СКД, вы можете самостоятельно нарисовать форму отчета в табличном документе.

  1. Перейдите на вкладку Макеты в схеме компоновки данных.
  2. Добавьте Макет группировки.
  3. Укажите группировку, для которой будет применен макет (например, «Номенклатура»).
  4. В области макета вручную разместите ячейки так, как они должны выглядеть на экране. Вы можете зарезервировать отдельные области под таблицы, заголовки и итоговые данные.

Этот способ является наиболее гибким, так как позволяет совместить мощь запросов СКД с возможностями ручного оформления табличного документа 1С.

Программная отрисовка через процессор вывода

Если функционала настроек СКД все равно не хватает, используйте гибридный подход. Система компоновки данных выполняет основную работу по получению данных, а финальная верстка выполняется через ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.

После того как данные выведены в ТабличныйДокумент, вы можете:

Этот метод требует написания кода в модуле формы или отчета, но дает полный контроль над итоговым отображением данных. При выборе способа решения задачи всегда оценивайте, насколько критична для пользователя возможность расшифровки (перехода к документам) — если она необходима, рекомендуем придерживаться стандартных средств СКД, таких как Макеты группировок или Вложенные схемы компоновки.

← На главную