При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются со специфическим поведением объекта Таблица. Типичная ситуация: в строках у нас объекты (например, стройки), в колонках — динамические данные (периоды или виды работ), а в самом конце таблицы нужно вывести статичное поле (например, ответственного сотрудника), которое не должно превращаться в еще одно измерение кросс-таблицы. Кроме того, часто требуется визуально объединить несколько колонок под одним общим заголовком.
В этой статье мы подробно разберем, как решить эти задачи стандартными средствами СКД, не прибегая к жесткому кодированию макетов, чтобы сохранить гибкость настроек для пользователя.
Рассмотрим ситуацию, когда СКД при добавлении нового поля в колонки начинает «размножать» его для каждой записи или выводить в отдельной иерархии, создавая пустые ячейки. Выясним причину: СКД воспринимает любое поле в группировке колонок как новое измерение. Если нам нужно просто вывести значение в той же строке в конце таблицы, самым эффективным методом будет использование механизма Ресурсов.
Разберем этот процесс по шагам:
Сотрудник) выбрано в запросе.Сотрудник в список ресурсов. В поле Выражение укажем агрегатную функцию. Если мы точно знаем, что для одной строки (объекта строительства) предусмотрен только один сотрудник, можно использовать Максимум(Сотрудник) или Минимум(Сотрудник).Пример выражения в ресурсах:
Максимум(Сотрудник)
После этого в настройках отчета (закладка Настройки -> Выбранные поля) нам достаточно добавить этот ресурс. СКД выведет его в конце таблицы как отдельную колонку. Поскольку это ресурс, система не будет пытаться построить по нему новую группировку колонок, а просто отобразит значение на пересечении строк.
Часто требуется сгруппировать несколько колонок (например, «План», «Факт», «Отклонение») под общим заголовком «Показатели выполнения». Это делается через механизм группировки выбранных полей. Проанализируем, как это настроить:
Горизонтально.Важный нюанс: Чтобы заголовок группы выглядел как объединенная ячейка над колонками, убедитесь, что в дополнительных настройках отчета параметр Расположение ресурсов не установлен в значение, которое разрывает иерархию заголовков.
Иногда при превращении поля в ресурс (как мы сделали с Сотрудником в первом методе) возникает проблема: становится невозможно обратиться к его реквизитам напрямую в настройках (например, вывести Сотрудник.Должность). Рассмотрим, как обойти это ограничение:
Вместо того чтобы пытаться вытащить реквизит через точку от ресурса, создадим для этого реквизита отдельное Вычисляемое поле:
ДолжностьСотрудника.Сотрудник.Должность.Максимум(ДолжностьСотрудника).Теперь мы можем выводить и сотрудника, и его должность в отдельных колонках в конце таблицы, используя их как ресурсы.
Если метод с ресурсами не подходит (например, нужно вывести данные, которые принципиально не являются агрегатами), воспользуемся профессиональным приемом — группировкой без полей. Разберем ситуацию подробнее:
В структуре отчета в ветку Колонки таблицы добавим новую группировку. В списке полей группировки ничего не указываем (оставляем поле пустым). В Выбранные поля именно этой группировки добавляем наше поле Сотрудник.
Что при этом происходит в СКД:
Чтобы отчет выглядел профессионально, важно правильно настроить вывод реквизитов строк. Если мы добавили Сотрудника просто в группировку строк к Объекту, он может выводиться либо в той же ячейке через запятую, либо в следующей строке (лесенкой).
Посмотрим, как вынести его в отдельную колонку, сохранив при этом его принадлежность к строке:
ОбъектСтроительства.Отдельно.В этом случае Объект будет в первой колонке, а его реквизит Сотрудник — во второй, при этом они будут находиться в одной горизонтальной строке, что визуально воспринимается как обычная таблица, а не кросс-отчет.
Мы проанализировали основные способы кастомизации таблиц в СКД. Использование ресурсов — самый простой и надежный способ вывести данные в конце таблицы. Группировка выбранных полей позволяет создавать красивые многоуровневые шапки, а настройка расположения реквизитов помогает управлять визуальным представлением строк. Комбинируя эти методы, можно реализовать практически любой макет, сохраняя при этом работоспособность стандартных пользовательских настроек 1С.