Как в отчете СКД вывести несколько документов на пересечении строк и колонок?

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

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

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

Метод 1: Использование структуры группировок вместо ресурсов

Это наиболее правильный и гибкий подход с точки зрения архитектуры СКД. Вместо того чтобы принудительно «сворачивать» документы в один ресурс, мы используем иерархическую структуру отчета.

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

Преимущество этого метода в том, что стандартная функциональность Расшифровки (открытие документа двойным кликом) будет работать «из коробки», так как поле сохраняет свой тип Ссылка.

Метод 2: Применение функций ВычислитьВыражениеСГруппировкой

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

Рассмотрим использование функции ВычислитьВыражениеСГруппировкойМассив. Она позволяет собрать все найденные ссылки на документы в массив, который затем будет преобразован в строковое представление.

Для настройки выполните следующие шаги:

  1. Откройте вкладку Ресурсы.
  2. В поле Выражение для ресурса Документ введите следующую формулу:
  3. ВычислитьВыражениеСГруппировкойМассив("Документ")
  4. Также можно воспользоваться функцией ВычислитьВыражениеСГруппировкойТаблицаЗначений("Документ"), если вы хотите вывести документы в более структурированном виде, хотя это потребует дополнительных настроек отображения.

Важное примечание: При использовании массивов в ресурсах, значение ячейки превращается в строковое представление списка. В этом случае прямая Расшифровка может перестать работать, так как тип данных в ячейке станет Строка, а не Ссылка. Чтобы вернуть возможность открывать документы кликом, вам потребуется программная обработка события ПриКомпоновкеРезультата или использование обработки расшифровки в модуле формы отчета с вызовом метода ОткрытьЗначение().

Анализ ситуации: почему стандартное поведение не подходит

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

Поэтому основной совет при проектировании таблиц: избегайте ресурсов, если вам нужно отобразить нечисловые данные. Использование вложенных группировок позволяет вывести неограниченное количество документов без потери ссылочности и необходимости писать сложные формулы.

Подведем итоги

Разберем, какой подход выбрать:

Выполняя эти рекомендации, вы сможете добиться корректного отображения данных в ваших отчетах и обеспечите пользователям удобство работы с документами.

← На главную