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

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

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

Подход первый: использование вычисляемых полей

Это самый популярный и наглядный способ. Вместо попыток заставить УсловноеОформление «видеть» соседние строки, мы добавим в набор данных ВычисляемоеПоле, которое будет хранить эталонное значение. Разберем этот процесс по шагам:

  1. Перейдите на вкладку Вычисляемые поля в настройках схемы компоновки данных.
  2. Добавьте новое поле, например, НеттоПоследнейВерсии.
  3. В качестве выражения укажите функцию, которая найдет нужное значение. Если у вас уже есть признак ПоследняяВерсия, вы можете использовать конструкцию с функцией ВычислитьВыражение.

Рассмотрим пример реализации выражения для вычисляемого поля:

ВычислитьВыражение("Максимум(Нетто)", , , "Группировка", "Группировка")

В этом случае система вычислит максимальное значение (которое фактически является единственным для последней версии) в рамках текущей группировки по ссылке. Теперь, когда у вас в каждой строке есть колонка с эталонным значением, настройка УсловногоОформления становится элементарной задачей:

Подход второй: расчет на уровне запроса

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

Реализовать это можно следующими способами:

  1. Использование временных таблиц: Создайте запрос, который выбирает отдельно записи с ПоследняяВерсия = Истина во временную таблицу.
  2. Соединение: Соедините основной набор данных с полученной временной таблицей по полю Ссылка.
  3. Результат: В итоговой выборке у вас сразу будет присутствовать колонка НеттоЭталон.

Данный метод предпочтительнее, если вы готовите ТЗ или сложный отчет с множеством группировок, так как он делает структуру СКД прозрачной и легкой для последующей поддержки.

Почему не стоит усложнять Условное Оформление?

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

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

Таким образом, мы выяснили, что для решения задачи нам достаточно «подтянуть» эталонное значение в текущую строку. Используя ВычислитьВыражение, вы экономите время на изменении запросов, а используя Соединение в запросе — обеспечиваете максимальную скорость работы для тяжелых отчетов.

← На главную