Как вывести все записи из регистра сведений в таблицу СКД на пересечении строк и колонок?

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

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

Анализ проблемы: почему данные не попадают в колонки

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

В рассматриваемом случае у автора был регистр сведений Фотографии с измерениями Дата, НоменклатурнаяГруппа, Контрагент и ресурсом Фотография (строка с путем к файлу). Несмотря на то что в самом регистре это поле является ресурсом, в СКД его необходимо явно определить как ресурс на соответствующей закладке, иначе система будет считать его обычным полем группировки.

Шаг 1: Настройка ресурсов в СКД

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

Рассмотрим, какую формулу использовать. Если мы просто укажем Фотография, система может выводить только одно значение. Если мы укажем МАКСИМУМ(Фотография), мы получим только одну фотографию (последнюю по алфавиту или коду) для этой группы. Но нам нужно вывести все фотографии, сделанные за этот день по этому контрагенту.

Правильным решением будет использование функции МАССИВ(). Пропишем в поле «Выражение» на закладке ресурсы следующее:

МАССИВ(Фотография)

Эта функция соберет все значения поля Фотография, попавшие в данную группировку (пересечение строки и колонки), в один массив данных.

Шаг 2: Настройка структуры отчета

Теперь перейдем на закладку «Настройки» и проанализируем структуру нашей таблицы. Нам нужно настроить ее следующим образом:

  1. Добавим элемент «Таблица».
  2. В Строки таблицы добавим нужные нам группировки, например: Контрагент, а под ним — НоменклатурнаяГруппа.
  3. В Колонки таблицы добавим поле Дата.
  4. В Выбранные поля всей таблицы или конкретно в «Автополе» колонок добавим наш ресурс — Фотография.

Важно: Поле Фотография не должно присутствовать в группировках строк или колонок. Оно должно быть только в «Выбранных полях». Если оставить его в группировках, СКД создаст для каждого фото отдельную строку, что нарушит структуру таблицы.

Шаг 3: Тонкая настройка вывода (СоединитьСтроки)

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

Вернемся на закладку «Ресурсы» и изменим выражение для поля Фотография:

СоединитьСтроки(МАССИВ(Фотография), Символы.ПС)

В данном примере функция СоединитьСтроки возьмет массив наших фотографий и объединит их, используя в качестве разделителя Символы.ПС (перенос строки). Таким образом, каждое фото в ячейке таблицы будет отображаться с новой строки.

Шаг 4: Проверка настроек итогов

Выясним еще одну причину, по которой колонки могут не заполняться. В СКД есть «Другие настройки», где присутствует параметр «Расположение итогов». Если для строк или колонок установлено значение «Нет», это может повлиять на расчет ресурсов на пересечениях, если группировки настроены сложным образом. Рекомендуется устанавливать значение «Авто» или «В конце», чтобы убедиться, что ресурс рассчитывается корректно для всех уровней иерархии.

Шаг 5: Использование детальных записей (альтернативный метод)

Если нам категорически не подходит использование ресурсов и нам нужно вывести именно «детальные записи» внутри таблицы, мы можем применить другой подход. Рассмотрим его:

  1. В строках таблицы оставляем Контрагент.
  2. В колонках оставляем Дата.
  3. Внутрь таблицы (на пересечение) добавляем группировку «Детальные записи».
  4. В «Выбранные поля» этой вложенной группировки добавляем поле Фотография.

Однако этот метод сложнее в управлении оформлением, и использование ресурсов с функцией МАССИВ() считается в 1С более «правильным» и стандартным способом для таблиц компоновки данных.

Резюме

Проанализировав ситуацию, мы выяснили, что для вывода данных в ячейках таблицы на пересечении дат и номенклатуры необходимо:

Эти действия позволяют обойти ограничения платформы по группировке нечисловых данных и получить наглядный отчет, в котором информация распределена строго под соответствующими колонками периодов.

← На главную