К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как задать формулу в 1С: практическое руководство

Как задать формулу в 1С: в запросах, СКД, печатных формах и коде. Синтаксис, примеры, проверка результата и типичные ошибки при работе с формулами.

Формулы в 1С встречаются в нескольких разных местах: в языке запросов, в схеме компоновки данных (СКД), в печатных формах, в произвольных выражениях обработчиков и непосредственно в программном коде. В каждом из этих контекстов действует свой синтаксис и свои ограничения, поэтому универсального «одного места для формул» в системе нет. Чтобы корректно задать формулу, сначала нужно понять, где именно она будет использоваться.

Чаще всего под формулой пользователи понимают вычисляемое выражение: например, расчёт суммы с НДС, процента скидки, цены по курсу валюты или условного значения в отчёте. Ниже разобраны основные сценарии — от простых выражений в коде до вычисляемых полей в отчётах, с примерами, проверкой результата и типичными ошибками.

Где в 1С используются формулы

Перед тем как писать выражение, определите контекст. От этого зависит синтаксис: одна и та же логика «если сумма больше нуля, то...» записывается по-разному в коде, в запросе и в СКД.

Основные места применения формул:

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

Как выбрать место для формулы

Нужно посчитать значение при проведении документа или изменении реквизитаИспользуйте встроенный язык в модуле объекта или формы
Нужно вычислить поле при выборке из базыДобавьте выражение в текст запроса
Нужна колонка с расчётом в отчёте без изменения запросаСоздайте вычисляемое поле в СКД
Нужно вывести расчётное значение на печатьИспользуйте параметр макета и заполните его в коде

Формулы в программном коде (встроенный язык)

Самый прямолинейный способ — написать выражение на встроенном языке 1С. Он поддерживает арифметические операции, функции работы со строками, датами и числами, а также условный оператор.

Пример расчёта суммы с НДС в модуле документа:

СуммаСНДС = СуммаБезНДС + СуммаБезНДС * СтавкаНДС / 100;

Условная формула записывается через конструкцию Если...Тогда...Иначе...КонецЕсли или через оператор выбора ?():

ЦенаСоСкидкой = ?(СуммаЗаказа > 100000, Цена * 0.95, Цена);

Полезные встроенные функции для формул: Окр(Число, Разрядность) — округление, Цел() — целая часть, Макс() и Мин() — выбор из двух значений, Формат() — представление числа строкой. Округление особенно важно в денежных расчётах: без него в итогах накапливаются копеечные расхождения.

Формулы в языке запросов

В запросах формулы задаются как вычисляемые выражения в списке полей выборки. Поддерживаются арифметика, функции и условная конструкция ВЫБОР.

ВЫБРАТЬ

Продажи.Номенклатура,

Продажи.Количество,

Продажи.Сумма,

ВЫБОР

КОГДА Продажи.Количество > 0

ТОГДА Продажи.Сумма / Продажи.Количество

ИНАЧЕ 0

КОНЕЦ КАК СредняяЦена

ИЗ

РегистрНакопления.Продажи КАК Продажи

Обратите внимание на защиту от деления на ноль: условие КОГДА Количество > 0 предотвращает ошибку выполнения запроса. Это одна из самых частых причин «падения» отчётов — деление на ноль в вычисляемом поле.

Для приведения типов используется функция ВЫРАЗИТЬ, например ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 2)). Она нужна, когда результат вычисления получает слишком большую разрядность или когда требуется сравнение значений разных типов.

Типичные ошибки в формулах
01
Деление на ноль без проверки знаменателя — запрос или отчёт завершается с ошибкой
02
Смешение типов: сложение числа и строки приводит к ошибке или неожиданному результату
03
Отсутствие округления в денежных расчётах — итоги не сходятся на копейки
04
Использование синтаксиса встроенного языка в запросе и наоборот — конструкции не взаимозаменяемы

Формулы в СКД: вычисляемые поля и ресурсы

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

Пример: у вас в наборе данных есть поля «Сумма» и «СуммаНДС». Чтобы получить сумму без НДС, добавьте вычисляемое поле с выражением:

Сумма - СуммаНДС

Для итогов по группировкам формулы задаются на закладке «Ресурсы». Там выражение оборачивается в агрегатную функцию: Сумма(СуммаБезНДС), Среднее(Цена), Количество(Различные Контрагент). Если ресурс не добавить, поле будет выводиться только в детальных записях, а итоги останутся пустыми.

Как добавить вычисляемое поле в отчёт СКД
  1. 1
    Откройте схему компоновки данных отчёта
  2. 2
    Перейдите на закладку «Вычисляемые поля» и добавьте новое поле
  3. 3
    Укажите имя поля (латиницей, без пробелов) и выражение
  4. 4
    На закладке «Ресурсы» добавьте поле с агрегатной функцией, если нужны итоги
  5. 5
    На закладке «Настройки» выведите поле в структуру отчёта
  6. 6
    Сформируйте отчёт и сверьте результат с контрольным расчётом

Формулы в печатных формах и типовых механизмах

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

Область.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ИтоговаяСумма, Валюта);

Имя конкретной функции зависит от конфигурации — в типовых решениях есть свои общие модули для суммы прописью, работы с валютами и округления. Перед использованием найдите подходящий модуль через глобальный поиск по конфигурации.

В некоторых конфигурациях формулы задаются прямо в пользовательском режиме — например, формулы расчёта цен в «Управлении торговлей» или произвольные показатели в зарплатных решениях. Там выражение вводится в специальном редакторе с подстановкой доступных операндов, и изменять код не требуется. Такие механизмы описаны в документации к конкретной конфигурации.

Проверка результата и отладка формул

Любую формулу после ввода нужно проверить на контрольных данных. Возьмите 2–3 примера, где результат известен заранее (например, сумма 1000 при ставке НДС 20% должна дать 1200), и сравните с тем, что выдаёт система.

Для кода используйте отладчик конфигуратора: точка останова перед строкой с формулой, просмотр значений переменных в табло. Для запросов удобна консоль запросов — она позволяет выполнить запрос с реальными параметрами и увидеть результат без запуска всего отчёта. Для СКД проверяйте сначала детальные записи, потом итоги по группировкам.

Контрольные точки

Как проверить результат

Результат на контрольном примере
Норма

Совпадает с расчётом вручную

Тревожный признак

Расхождение даже в копейках — проверяйте округление и порядок операций

Поведение при пустых и нулевых значениях
Норма

Формула возвращает 0 или осмысленное значение

Тревожный признак

Ошибка выполнения или пустое поле

Итоги по группировкам в отчёте
Норма

Сумма детальных строк равна итогу

Тревожный признак

Итог пустой или не сходится — не добавлен ресурс в СКД

Ограничения и частые вопросы

Формулы в 1С не являются «формулами Excel»: синтаксис другой, а возможности зависят от контекста. Например, в языке запросов нет циклов и нельзя вызвать произвольную функцию встроенного языка — только предопределённые функции запроса. В СКД набор функций шире, но тоже ограничен. Сложную логику, которую нельзя выразить декларативно, выносят в код: сначала вычисляют значения в таблицу значений, затем подключают её к отчёту как внешний набор данных.

Итог

Что важно запомнить

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

FAQ

Можно ли задать формулу в 1С без программирования?

Да, в ряде случаев. В типовых конфигурациях есть пользовательские механизмы: формулы расчёта цен, произвольные показатели, настраиваемые отчёты с вычисляемыми полями. Они редактируются в режиме «Предприятие» без изменения кода. Наличие таких механизмов зависит от конкретной конфигурации.

Почему запрос с формулой выдаёт ошибку «Деление на 0»?

Потому что в выражении есть деление на поле, которое в части строк равно нулю. Оберните выражение в конструкцию ВЫБОР с проверкой знаменателя: если он больше нуля — выполняйте деление, иначе возвращайте 0 или NULL.

Как округлить результат формулы до двух знаков?

Во встроенном языке используйте функцию Окр(Значение, 2). В запросе применяется ВЫРАЗИТЬ(Значение КАК ЧИСЛО(15, 2)) — приведение типа одновременно округляет значение до указанной разрядности.

Чем вычисляемое поле СКД отличается от поля в запросе?

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

Можно ли использовать в формуле значения из других таблиц?

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

Формула правильная, но в отчёте колонка пустая. В чём причина?

Чаще всего поле не выведено в настройках отчёта или для него не задан ресурс. Проверьте закладку «Настройки» в СКД: поле должно быть добавлено в выбранные поля структуры отчёта. Если пустые только итоги — добавьте поле на закладку «Ресурсы» с агрегатной функцией.