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