Как выявить и подсветить дублирующиеся строки в отчете СКД с помощью функции ВычислитьВыражение?

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

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

Разбор проблемы и принцип работы функции ВычислитьВыражение

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

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

Пошаговое решение задачи

Чтобы реализовать подсчет дублей и оставить отчет «плоским» (без иерархических отступов), выполните следующие действия:

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

Пример корректного выражения для подсчета:

ВычислитьВыражение("КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка)", "Наименование, ДатаРождения")

После того как вы вычислили количество, вы можете использовать это поле в Условном оформлении. Например, если КоличествоОдинаковых > 1, установите цвет фона или текста для всей строки. Так дубли станут наглядно видны пользователю.

Почему это работает?

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

Рекомендации по альтернативным методам

Хотя предложенный выше метод является стандартным для СКД, важно помнить о производительности:

Мы рекомендуем начинать с настройки группировок внутри СКД, так как это наиболее гибкий способ, не требующий изменения исходного запроса. Если вы столкнетесь с падением производительности на больших объемах данных, смело переносите логику вычисления количества дублей непосредственно в текст запроса.

← На главную