Как в конструкторе запроса 1С создать конструкцию ВЫБОР КОГДА ТОГДА?

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

Конструктор запроса в системе 1С:Предприятие — это мощный инструмент, который позволяет разработчикам создавать сложные SQL-подобные инструкции без необходимости помнить весь синтаксис наизусть. Однако некоторые элементы управления скрыты за контекстными меню или функциональными кнопками. Одной из наиболее часто используемых, но вызывающих вопросы у новичков конструкций, является ВЫБОР (аналог CASE в SQL). В данной статье мы подробно разберем, как реализовать эту логику, используя только визуальные средства конструктора.

Метод 1: Использование редактора выражений (Кнопка f(x))

Рассмотрим самый распространенный и правильный способ создания сложных полей. Чаще всего нам требуется создать вычисляемое поле, результат которого зависит от определенного условия. Выполним следующие шаги:

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

Система автоматически сформирует каркас запроса:


ВЫБОР
    КОГДА  ТОГДА 
    ИНАЧЕ 
КОНЕЦ

Проанализируем структуру: после ключевого слова КОГДА мы должны вписать условие (например, Остаток < 0), а после ТОГДА — результат, который вернет запрос (например, "Дефицит"). Ветка ИНАЧЕ является необязательной, но крайне рекомендуемой для обработки исключений или значений по умолчанию.

Метод 2: Контекстное меню в списке полей

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

Важный нюанс: если вы хотите обернуть уже существующее поле в конструкцию ВЫБОР, просто выделите это поле в списке и нажмите кнопку f(x). Текст поля уже будет в окне, и вам останется только «дорисовать» логические условия вокруг него.

Метод 3: Использование Drag-and-drop (Перетаскивание)

Мало кто знает, что конструктор выражений поддерживает перетаскивание элементов. Если вы открыли окно редактирования выражения, вы можете перетаскивать поля из дерева Доступные поля (левая часть) прямо в текст условия внутри ВЫБОР. Это позволяет избежать опечаток в именах реквизитов через точку, таких как Номенклатура.НаименованиеПолное.

Разбор типов конструкции ВЫБОР

Проанализируем две формы записи, которые поддерживает конструктор и язык запросов 1С:

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

Практические советы и ограничения

Разберем типичные ситуации, с которыми сталкиваются разработчики при работе в конструкторе:

Типизация результата: Важно помнить, что все ветки ТОГДА и ветка ИНАЧЕ должны возвращать данные одного и того же типа (или совместимых типов). Если в одном случае вы возвращаете число 0, а в другом строку "Нет данных", конструктор выдаст ошибку несовместимости типов. В таких случаях лучше возвращать либо пустую строку, либо числовой ноль.

Вложенные условия: Конструктор позволяет создавать вложенные конструкции ВЫБОР. Рассмотрим пример, когда внутри одного условия нам нужно проверить еще одно:


ВЫБОР
    КОГДА Сумма > 1000 ТОГДА
        ВЫБОР
            КОГДА Валюта = &ВалютаРубль ТОГДА "Крупная рублевая"
            ИНАЧЕ "Крупная валютная"
        КОНЕЦ
    ИНАЧЕ "Мелкая"
КОНЕЦ

Хотя визуально это может выглядеть громоздко, конструктор запроса корректно обрабатывает такие вложения при закрытии окна по кнопке ОК.

Потеря форматирования: Посмотрим на ситуацию глазами опытных разработчиков. Часто отмечается, что конструктор запроса «схлопывает» красиво написанный текст. Если вы вручную расставили отступы и переносы строк в сложном блоке ВЫБОР, будьте готовы к тому, что после повторного открытия конструктора и нажатия ОК, система может выстроить код в более компактный (и менее читаемый) вид. Именно поэтому сложные запросы иногда предпочитают дописывать вручную в текстовом режиме.

Использование в Группировках и Условиях: Конструкция ВЫБОР не ограничивается только списком полей. Мы можем использовать ее на вкладке Группировка, чтобы объединить данные в группы по какому-то сложному признаку, или на вкладке Условия, хотя в последнем случае чаще эффективнее использовать стандартные логические операторы И, ИЛИ.

Заключение

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

← На главную