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