Как использовать условный оператор ВЫБОР КОГДА в вычисляемом поле СКД?

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

При разработке отчетов с помощью Схемы Компоновки Данных (СКД) в 1С часто возникает задача: необходимо вывести в отчет поле, значение которого зависит от определенных условий. Например, вместо логического "Да/Нет" показать "Активен/Не активен" или рассчитать статус документа в зависимости от его даты и суммы. Пытаться решить это через модификацию основного запроса не всегда удобно. Гораздо эффективнее использовать вычисляемые поля или СКДБилдер для упрощения программного создания схемы. Разберем, как правильно реализовать условную логику в вычисляемом поле с помощью конструкции ВЫБОР КОГДА.

Анализ проблемы и типичная ошибка

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


ВЫБОР КОГДА НачислениеУдержание = ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ОтпускОсновной)
ТОГДА "Основной"
ИНАЧЕ "Дополнительный"

При попытке сохранить такое выражение система выдавала ошибку. Проблема заключается в незавершенности синтаксической конструкции. Язык выражений СКД во многом похож на язык запросов 1С, и, как и в запросах, условный оператор ВЫБОР должен быть обязательно закрыт ключевым словом КОНЕЦ.

Решение: правильный синтаксис ВЫБОР КОГДА ... КОНЕЦ

Для корректной работы условного оператора в вычисляемом поле СКД необходимо использовать полную конструкцию ВЫБОР ... КОНЕЦ. Давайте исправим исходный пример.

Правильный синтаксис:


ВЫБОР
    КОГДА НачислениеУдержание = ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ОтпускОсновной)
    ТОГДА "Основной"
ИНАЧЕ "Дополнительный"
КОНЕЦ

Рассмотрим по шагам, что здесь происходит:

  1. ВЫБОР — начало условного блока.
  2. КОГДА [Условие] — проверяется первое условие. В нашем случае это сравнение поля НачислениеУдержание с конкретным значением из плана видов расчета.
  3. ТОГДА — если условие в блоке КОГДА истинно, выражение принимает указанное значение (в примере — строка "Основной").
  4. ИНАЧЕ [Результат по умолчанию] — если ни одно из предыдущих условий КОГДА не выполнилось, выражение принимает значение, указанное после ИНАЧЕ.
  5. КОНЕЦкритически важная часть, которая завершает условный блок.

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

Примеры с несколькими условиями

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

Пример: Определим текстовый статус для числового поля "Приоритет".


ВЫБОР
    КОГДА Приоритет = 1 ТОГДА "Высокий"
    КОГДА Приоритет = 2 ТОГДА "Средний"
    КОГДА Приоритет = 3 ТОГДА "Низкий"
ИНАЧЕ "Не определен"
КОНЕЦ

В этом случае система сначала проверит, равен ли приоритет единице. Если да, вернет "Высокий" и прекратит дальнейшие проверки. Если нет, перейдет к проверке на равенство двойке, и так далее.

Работа с NULL и неопределенными значениями

Важный аспект при работе с условными выражениями — правильная обработка значений NULL. Если в поле, которое вы проверяете, может оказаться NULL, стандартное сравнение не сработает. Для проверки на NULL в языке выражений СКД существует специальный оператор ЕСТЬ NULL.

Пример: Допустим, нам нужно вывести "Не заполнено", если контрагент не указан в документе.


ВЫБОР
    КОГДА Контрагент ЕСТЬ NULL
    ТОГДА "Не заполнено"
ИНАЧЕ Контрагент.Наименование
КОНЕЦ

Кроме того, чтобы избежать ошибок при операциях с числами, удобно использовать функцию ЕСТЬNULL().


СуммаДокумента - ЕСТЬNULL(СуммаСкидки, 0)

Когда использовать вычисляемое поле, а когда — условное оформление?

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

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

← На главную