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

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Управленческий учет Сфера услуг, туризм и социальный сектор
← На главную

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

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

Понимание механики кросс-таблиц в СКД

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

  1. Группировки строк (например, ФизическоеЛицо).
  2. Группировки колонок (например, Дисциплина).
  3. Область пересечения (значения).

Важно запомнить фундаментальное правило СКД: в области пересечения кросс-таблицы могут отображаться только Ресурсы.

Когда мы просто перетаскиваем поле в список «Выбранные поля» отчета, СКД пытается определить, куда его поместить. Если поле не является ресурсом, оно привязывается к ближайшей группировке (строке или колонке), но не попадает в центр таблицы. Чтобы текст появился внутри ячейки, мы должны явно сообщить системе, что это поле нужно рассчитывать (агрегировать) для каждой уникальной пары «ФизЛицо — Дисциплина».

Решение 1: Превращение поля в Ресурс с функцией Максимум

Это самый распространенный и надежный способ. Даже если ваше поле строковое (Строка) или ссылочное (СправочникСсылка, ПеречислениеСсылка), его нужно добавить на вкладку Ресурсы.

Пошагово выполним настройку:

  1. Откройте схему компоновки данных.
  2. Перейдите на вкладку Ресурсы.
  3. Перенесите ваше поле (например, Отметка) из списка доступных полей в таблицу ресурсов.
  4. В колонке «Выражение» по умолчанию может ничего не подставиться или система предложит Сумма(Отметка). Функция Сумма не работает со строками и приведет к ошибке или пустому полю.
  5. Измените выражение на агрегатную функцию, применимую к любым типам данных. Чаще всего используют Максимум.

Выражение должно выглядеть так:

Максимум(Отметка)

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

Решение 2: Использование поля без агрегатной функции

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

Отметка

Однако этот метод менее стабилен. Если в выборке попадутся дубли, система может выдать ошибку «Неверные параметры» или вывести NULL. Мы рекомендуем всегда оборачивать нечисловые поля в функцию Максимум().

Решение 3: Объединение строк (если значений несколько)

Представим ситуацию, когда сотрудник сдавал одну дисциплину дважды, и у него есть две разные оценки. Функция Максимум(Отметка) покажет только одну из них (например, «Хорошо», проигнорировав «Удовлетворительно»).

Если ваша задача — увидеть все значения в одной ячейке через запятую, нужно использовать функцию соединения строк. Начиная с версии платформы 8.3.20, в языке выражений СКД доступна специальная функция СоединитьСтроки.

На вкладке Ресурсы в поле «Выражение» напишите:

СоединитьСтроки(Отметка, ", ")

Для старых версий платформы (до 8.3.20) приходится использовать более сложную конструкцию через вычисляемые поля с использованием функции Массив(Отметка) и последующей обработкой в общем модуле, но в современных конфигурациях это уже не требуется.

Решение 4: Проверка настроек вывода («Выбранные поля»)

Частая ошибка, описанная в обсуждении: поле добавлено в ресурсы, но в отчете все равно пусто. Это происходит из-за иерархии настроек.

Давайте проверим настройки на вкладке Настройки:

  1. В дереве настроек выберите элемент Таблица (или пересечение таблицы).
  2. Перейдите на вкладку Выбранные поля в нижней части окна.
  3. Убедитесь, что там присутствует либо группа «Автополе», либо ваше поле-ресурс Отметка добавлено явно.

Иногда, если вы вручную настраивали выбранные поля для группировки «Строки» или «Колонки», поле-ресурс может не попасть в область данных таблицы. Лучше всего добавлять поле Отметка в выбранные поля именно на уровне самой Таблицы, а не всего Отчета в целом.

Альтернативный подход: Условное оформление

Существует еще один метод, который мы часто применяем, когда нужно вывести сложный текст или иконку вместо числа. Он называется «подмена текста через условное оформление».

Суть метода:

  1. Создаем фиктивный числовой ресурс. В запросе можно написать 1 КАК СлужебноеПоле или на вкладке «Вычисляемые поля» создать поле со значением 1.
  2. Добавляем это поле в Ресурсы с выражением Сумма(СлужебноеПоле).
  3. Добавляем это поле в кросс-таблицу. Теперь во всех ячейках у нас отображается цифра 1.
  4. Переходим на вкладку Настройки -> Условное оформление.
  5. Добавляем новый элемент оформления.
  6. В условии (Отбор) указываем: Отметка Заполнено.
  7. В оформляемых полях выбираем наше СлужебноеПоле (которое выводится в отчете).
  8. В параметре Текст нажимаем на три точки (открывается выбор типа значения), выбираем «Поле компоновки данных» и указываем поле Отметка.

Таким образом, физически в ячейке находится число, но визуально пользователь видит текст из поля Отметка. Этот способ работает безотказно, если стандартный метод с ресурсами по каким-то причинам не дает результата (например, сложная структура макетов).

Обработка пустых значений (NULL)

В кросс-таблицах часто бывают пустоты (разреженная матрица). Например, сотрудник Иванов не сдавал «Философию». В этом случае на пересечении будет NULL.

Чтобы вместо пустоты вывести красивый текст (например, «Нет оценки» или прочерк), скорректируйте выражение ресурса:

ЕстьNULL(Максимум(Отметка), "—")

Это выражение сделает отчет более читаемым и профессиональным.

Резюме: чек-лист для проверки

Если у вас не выводится нечисловое поле в кросс-таблице, проверьте эти пункты:

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

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

← На главную