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

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

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

Метод 1. Использование агрегатной функции СоединитьСтроки

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

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

СоединитьСтроки(Поле, ", ", " ")

Проанализируем параметры этой функции:

  1. Поле — имя поля, значения которого нужно объединить.
  2. ", " — разделитель, который будет вставлен между значениями.
  3. " " — (необязательно) разделитель, используемый для объединения различных группировок.

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

Метод 2. Вывод через массив с группировкой

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


СоединитьСтроки(ВычислитьВыражениеСГруппировкойМассив("Представление(Поле)", "Поле"), "; ")

Выясним, как это работает. Функция ВычислитьВыражениеСГруппировкойМассив собирает все уникальные значения Поле в массив именно в контексте текущей ячейки кросс-таблицы. Затем функция СоединитьСтроки превращает этот массив в читабельный текст. Это позволяет избежать ситуации, когда одно и то же значение дублируется несколько раз из-за особенностей соединений в запросе.

Метод 3. Структурный подход: Группировка внутри ячейки

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

  1. Переходим на вкладку «Настройки».
  2. Выбираем нашу кросс-таблицу.
  3. В структуре кросс-таблицы находим область пересечения (строки и столбцы уже заданы).
  4. Вместо использования стандартных ресурсов («Авто»), нажимаем правой кнопкой на область пересечения и выбираем «Добавить группировку».
  5. В качестве поля группировки выбираем наше Поле.

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

Метод 4. Создание «Шахматки» с использованием условного оформления

Автор исходного вопроса упоминал, что ему нужно ставить «пометки цветом» в зависимости от наличия связи. Для решения этой задачи лучше всего использовать комбинацию фиктивного ресурса и условного оформления. Разберем ситуацию:

В запросе или в вычисляемых полях создаем поле НаличиеСвязи, которое будет принимать значение 1, если данные есть, и 0 (или NULL), если данных нет. Добавим это поле в ресурсы с функцией Максимум.

Далее настроим Условное оформление:

  1. Добавим новое правило оформления.
  2. В оформлении укажем нужный Цвет фона.
  3. В условии укажем: НаличиеСвязи Больше 0.
  4. В области укажем наше Поле или ячейку ресурса.

Если мы хотим, чтобы в ячейке выводился какой-то текст (например, «V» или само название поля), мы можем в том же условном оформлении заполнить свойство «Текст». Таким образом, даже числовой ресурс визуально превратится в текстовую пометку или раскрашенную ячейку.

Важные нюансы работы с соединениями и NULL

Проанализируем структуру запроса автора. Использование Левое соединение часто приводит к появлению значений NULL. В кросс-таблицах СКД это может привести к тому, что ячейки на пересечении просто не будут созданы, и условное оформление к ним не применится. Чтобы избежать этого, рекомендуется:

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

← На главную