Отчеты и Аналитика · 10 мин
Вычисляемые поля СКД в 1С и конструкция Выбор Когда
Как создать вычисляемое поле в СКД 1С, использовать Выбор Когда для условий, проверить результат и избежать типичных ошибок при настройке отчётов.
Вычисляемые поля в системе компоновки данных (СКД) позволяют добавить в отчёт колонки, значения которых рассчитываются на основе других полей — без изменения запроса и без доработки конфигурации. Классический сценарий — вывести цену с НДС, разницу между планом и фактом или текстовый статус документа по условию. Для условной логики внутри вычисляемого поля чаще всего применяется конструкция Выбор Когда ... Тогда ... Иначе ... Конец.
Особенность СКД в том, что выражения вычисляемых полей пишутся на языке выражений компоновки данных — это не язык запросов и не встроенный язык 1С, хотя синтаксис Выбор Когда внешне похож на конструкцию запроса. Смешение этих языков — самая частая причина ошибок «Поле не найдено» и «Ошибка в выражении».
Ниже разобрано, где именно создаются вычисляемые поля, как правильно записать условие Выбор Когда, какие ограничения есть у языка выражений СКД и как проверить, что отчёт считает корректно.
Где создаются вычисляемые поля и когда они нужны
Вычисляемые поля добавляются в схеме компоновки данных на одноимённой закладке — рядом с наборами данных и ресурсами. Открыть схему можно из конструктора отчёта в конфигураторе (кнопка «Открыть схему компоновки данных») или через «Ещё — Изменить вариант» в режиме предприятия, если речь идёт о пользовательских настройках. Важно понимать разницу: в пользовательском режиме доступны только настройки, а полноценные вычисляемые поля обычно добавляются в конфигураторе.
Вычисляемое поле оправдано, когда значение можно получить простой арифметикой или условием из уже выбранных полей: сумма с налогом, процент от итога, признак просрочки, текстовая категория. Если же нужны обращения к другим таблицам, агрегатные функции по группировкам или сложная логика с временными таблицами — правильнее решать задачу в запросе набора данных, а не вычисляемым полем.
Создание вычисляемого поля: пошаговый порядок
Порядок действий одинаков для большинства конфигураций на управляемых формах. На закладке «Вычисляемые поля» нажмите «Добавить» и заполните три ключевых свойства. Первое — «Путь к данным»: имя, под которым поле появится в настройках отчёта (принято давать осмысленное имя без пробелов, например СуммаСНДС). Второе — «Выражение»: формула расчёта. Третье — «Тип значения»: явно укажите число, строку, дату или булево, иначе СКД может неправильно интерпретировать результат.
После добавления поле нужно включить в выбранные поля отчёта на закладке «Настройки» — иначе оно существует в схеме, но не выводится. Также проверьте свойство «Ограничение доступности»: если снять флажки «Поле» и «Условие», пользователь не сможет вывести колонку или отфильтровать по ней.
- 1Откройте схему компоновки данных отчёта и перейдите на закладку «Вычисляемые поля»
- 2Нажмите «Добавить», задайте путь к данным без пробелов и спецсимволов
- 3Введите выражение с конструкцией Выбор Когда и обязательной веткой Иначе
- 4Укажите тип значения результата (число, строка, дата)
- 5Перейдите в «Настройки» и добавьте поле в выбранные поля отчёта
- 6Сформируйте отчёт и сверьте несколько строк с исходными данными
Синтаксис конструкции Выбор Когда
Конструкция выглядит так: Выбор Когда Условие Тогда Значение1 Иначе Значение2 Конец. Условий «Когда» может быть несколько — они проверяются сверху вниз, и срабатывает первое истинное. Ветка Иначе обязательна: если её опустить и ни одно условие не выполнится, выражение вернёт неопределённое значение, что часто приводит к ошибке компоновки или пустым ячейкам.
Пример для текстового статуса по сумме:
Выбор
Когда Сумма > 100000 Тогда "Крупная"
Когда Сумма > 10000 Тогда "Средняя"
Иначе "Мелкая"
Конец
Пример для числового расчёта с проверкой деления на ноль:
Выбор
Когда Количество = 0 Тогда 0
Иначе Сумма / Количество
Конец
Обратите внимание: все ветки должны возвращать значения одного типа. Если в одной ветке число, а в другой строка, СКД либо выдаст ошибку, либо приведёт значения непредсказуемо. Для «пустого» результата используйте Неопределено или нулевое значение соответствующего типа, а не смешивайте типы.
Выбор
Когда ДнейПросрочки > 30 Тогда "Критично"
Когда ДнейПросрочки > 0 Тогда "Просрочено"
Иначе "В срок"
КонецУсловия внутри Выбор Когда: сравнения, NULL и функции
В условиях доступны операции сравнения, логические И, Или, Не, а также проверка Есть NULL. Работа с NULL — отдельный подводный камень: сравнение Поле = NULL не сработает, нужна конструкция Поле Есть NULL или функция ЕстьNULL(Поле, ЗначениеПоУмолчанию). Если поле может быть NULL (например, после левого соединения в запросе), обрабатывайте это явно, иначе вся ветка условия даст не тот результат.
Из функций языка выражений СКД в вычисляемых полях чаще всего применяются ЕстьNULL, Подстрока, Строка, ДатаВремя. Набор функций ограничен по сравнению со встроенным языком — функции типа Формат или работа с датами через ДобавитьМесяц здесь недоступны в полном объёме. Если выражения не хватает, переносите расчёт в запрос или используйте ресурсы с выражениями.
Проверка результата и типичные ошибки
После настройки сформируйте отчёт и сверьте вычисляемую колонку с ручным расчётом на 3–5 строках, включая граничные случаи: пустые значения, нули, максимальные суммы. Отдельно проверьте итоги: вычисляемые поля по умолчанию не агрегируются, и в группировочных итогах колонка может остаться пустой. Чтобы итоги считались, поле нужно добавить в ресурсы на закладке «Ресурсы» с выражением, например Сумма(СуммаСНДС).
Ещё одна проверка — поведение при детальных записях и группировках. Вычисляемое поле рассчитывается для каждой строки до группировки, поэтому выражение вида «процент от итога» через вычисляемое поле не построить — для этого служат выражения ресурсов с ВычислитьВыражение или процент по группировке в настройках.
Как проверить результат
Значения совпадают с ручным расчётом на тестовых строках
Пустые ячейки или ошибка «Поле не найдено»
Нули и NULL обработаны через ЕстьNULL и отдельные ветки Когда
Ошибка деления на ноль или пропуски строк
Поле добавлено в ресурсы, итоги суммируются
Итоговая строка по колонке пустая
Альтернативы вычисляемым полям
Вычисляемое поле — не единственный способ получить расчётную колонку, и не всегда оптимальный. Если условие простое и значение нужно уже на этапе выборки, надёжнее написать ВЫБОР КОГДА ... ТОГДА ... КОНЕЦ прямо в запросе набора данных: там доступен полный язык запросов, включая соединения и функции дат. Результат придёт в СКД уже готовым полем.
Для итогов и агрегатов используйте ресурсы с выражениями, для сложной логики с обращением к данным вне запроса — собственные функции в общем модуле, вызываемые из выражений СКД (если это разрешено настройками безопасности). Вычисляемые поля оставляйте для построчных расчётов, которые логично держать рядом со схемой отчёта.
Сравнение вариантов
Подходит для простой построчной арифметики и условий; ограниченный набор функций, не агрегируется без ресурса
Полный язык запросов, работа с NULL и датами; требует изменения текста запроса набора данных
Нужен для итогов и агрегатов; не выводится как детальная колонка без дополнительных настроек
Любая сложная логика; требует доработки конфигурации и аккуратности с производительностью
FAQ
Почему отчёт выдаёт ошибку «Поле не найдено» после добавления вычисляемого поля?
Чаще всего поле создано, но не добавлено в выбранные поля на закладке «Настройки», либо путь к данным содержит пробелы или недопустимые символы. Проверьте также, что в выражении используются имена полей набора данных точно так, как они названы в запросе, с учётом регистра.
Можно ли использовать несколько условий в одном Выбор Когда?
Да, веток «Когда» может быть сколько угодно, они проверяются сверху вниз до первой истинной. Порядок важен: сначала ставьте более строгие условия, иначе широкое условие перехватит строки раньше узкого.
Почему в итогах по группировке вычисляемая колонка пустая?
Вычисляемые поля рассчитываются только для детальных записей и не агрегируются автоматически. Добавьте поле на закладку «Ресурсы» с выражением вида Сумма(ИмяПоля) — тогда итоги начнут считаться.
Как сравнить значение с NULL в условии?
Оператор равенства с NULL не работает. Используйте конструкцию «Поле Есть NULL» или функцию ЕстьNULL(Поле, ЗначениеПоУмолчанию), чтобы подставить значение вместо NULL до сравнения.
Чем Выбор Когда в вычисляемом поле отличается от ВЫБОР КОГДА в запросе?
Синтаксис похож, но это разные языки: в запросе доступны агрегатные функции, соединения и функции дат, а в выражении СКД — только ограниченный набор операций над полями уже полученной строки. Переносите логику в запрос, если выражения СКД не хватает.
Можно ли редактировать вычисляемые поля в режиме предприятия без конфигуратора?
Полноценное добавление вычисляемых полей выполняется в схеме компоновки через конфигуратор. В пользовательском режиме доступны только настройки варианта отчёта: выбор полей, отборы, группировки и условное оформление, но не создание новых выражений.
Что важно запомнить
Вычисляемые поля СКД создаются на отдельной закладке схемы, условия в них пишутся через Выбор Когда с обязательной веткой Иначе и единым типом результата. После настройки добавьте поле в выбранные поля и ресурсы, проверьте граничные значения и сверьте несколько строк с ручным расчётом.