При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача вывести данные в виде горизонтальной таблицы (кросс-таблицы), где строки представляют собой документы или контрагентов, а колонки — динамический список номенклатуры. В процессе реализации разработчики сталкиваются с двумя основными проблемами: правильной связью наборов данных и избыточностью заголовков ресурсов, которые СКД по умолчанию дублирует для каждой колонки. Разберем пошагово, как эффективно решить эти задачи.
Рассмотрим ситуацию, когда данные поступают из двух источников. Первый набор содержит общую информацию о документах (ссылка, контрагент), а второй — детальные строки (номенклатура, количество). Проанализируем наиболее оптимальный способ их объединения.
Существует два подхода к организации данных в СКД:
ЛЕВОЕ СОЕДИНЕНИЕ непосредственно в тексте запроса. Это наиболее производительный метод, так как база данных строит единый план выполнения.Если мы используем два набора, крайне важно правильно настроить связь. В поле "Источник связи" указываем первый набор, в поле "Приемник" — второй. В колонках "Выражение источник" и "Выражение приемник" выбираем поле Ссылка. Чтобы избежать проблемы производительности (известной как запрос в цикле N+1), обязательно используем параметры связи. Выясним, как это выглядит в коде запроса второго набора:
ВЫБРАТЬ
ТЧ.Ссылка КАК Ссылка,
ТЧ.Номенклатура КАК Номенклатура,
ТЧ.Количество КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК ТЧ
ГДЕ
ТЧ.Ссылка В (&СписокСсылок)
В настройках связи СКД, в колонке Параметры, необходимо указать имя параметра СписокСсылок. В этом случае СКД передаст массив ссылок из первого набора во второй одним пакетом, что значительно ускорит формирование отчета.
Для того чтобы получить вид "Документ | Контрагент | Номенклатура 1 | Номенклатура 2", нам необходимо использовать объект Таблица в настройках компоновки. Посмотрим, как настроить иерархию группировок:
Ссылка (Документ) и Контрагент.Номенклатура.Количество.После таких настроек СКД развернет всю имеющуюся номенклатуру по горизонтали, а на пересечении строк и колонок выведет количество.
Часто пользователи жалуются, что над каждой колонкой номенклатуры выводится заголовок "Количество". Это загромождает отчет, особенно если ресурс всего один и его название очевидно из контекста. Разберем, как убрать это название, сохранив только наименование номенклатуры.
Способ 1: Другие настройки
Это самый простой и быстрый способ. Рассмотрим его выполнение:
Номенклатура.Этот параметр отвечает за вывод строки с названиями ресурсов. При значении Нет СКД скроет ячейку с текстом "Количество", оставив только значения группировки в шапке.
Способ 2: Использование макетов
Если стандартная настройка не помогает или требуется сложная визуализация шапки, воспользуемся вкладкой Макеты. Проанализируем алгоритм создания пользовательского макета:
ГруппировкаНоменклатура.ГруппировкаНоменклатура.Номенклатура.При использовании макета вы полностью контролируете отрисовку шапки, и СКД не будет подставлять системные заголовки ресурсов автоматически.
Чтобы отчет выглядел профессионально, проанализируем еще несколько полезных настроек. Во-первых, работа с пустыми ячейками. Когда по документу нет движения конкретной номенклатуры, ячейка остается пустой. Мы можем воспользоваться Условным оформлением:
Количество.Количество НЕ ЗАПОЛНЕНО.Во-вторых, обратим внимание на иерархию. Если номенклатура распределена по папкам, установите тип группировки Иерархия для колонок. Это позволит пользователю сворачивать целые группы товаров в заголовке отчета, что значительно повышает удобство анализа при большом ассортименте.
Таким образом, комбинируя правильную структуру Таблица, настройки расположения ресурсов и механизмы макетирования, мы получаем мощный инструмент для кросс-анализа данных в 1С.