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

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

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

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

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

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

Ниже разобраны основные сценарии: от простого пользовательского поля в отчёте до формулы в запросе и программного расчёта. Для каждого случая указаны условия применения, ограничения и способ проверить результат.

Где в 1С можно использовать формулы

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

  • Отчёты на СКД — пользовательские поля и вычисляемые поля с выражениями на языке выражений СКД.
  • Запросы — вычисляемые поля в конструкторе запроса (арифметика, функции, ВЫБОР).
  • Печатные формы — параметры макета, значения которых вычисляются программно.
  • Ценообразование — формулы расчёта цен в видах цен (в конфигурациях с таким механизмом).
  • Формы и документы — расчёт реквизитов в обработчиках событий на встроенном языке.

Как добавить формулу в отчёт через пользовательские поля

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

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

Пример выражения для расчёта процента наценки:

ВЫБОР

КОГДА Себестоимость = 0

ТОГДА 0

ИНАЧЕ (СуммаПродажи - Себестоимость) / Себестоимость * 100

КОНЕЦ

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

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

Как добавить вычисляемое поле в запрос

Если отчёт или обработка строится на запросе, формулу можно добавить прямо в текст запроса. Для этого откройте конструктор запроса в конфигураторе, выберите нужное поле и в колонке выражения введите формулу, либо добавьте новое поле через «Добавить».

В языке запросов доступны арифметические операции, строковые функции (ПОДСТРОКА), работа с датами (РАЗНОСТЬДАТ, ДОБАВИТЬКДАТЕ), функции агрегации и конструкция ВЫБОР для условной логики. Пример вычисляемого поля:

ВЫБРАТЬ

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

Продажи.СуммаОборот - Продажи.СебестоимостьОборот КАК Маржа,

ВЫБОР

КОГДА Продажи.СуммаОборот = 0

ТОГДА 0

ИНАЧЕ Продажи.СебестоимостьОборот / Продажи.СуммаОборот * 100

КОНЕЦ КАК ДоляСебестоимости

ИЗ

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

Обратите внимание на защиту от деления на ноль: в запросах 1С деление на ноль вызывает ошибку выполнения, поэтому знаменатель всегда проверяйте через ВЫБОР. Это одна из самых частых причин «падающих» отчётов после добавления формулы.

Как добавить формулу в печатную форму

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

Типовая последовательность: откройте макет печатной формы, добавьте в нужную ячейку параметр (например, СуммаСНДС), затем в процедуре формирования печатной формы вычислите значение и передайте его через Область.Параметры.СуммаСНДС = РасчётноеЗначение;.

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

bsl
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Номенклатура = Выборка.Номенклатура;
ОбластьСтрока.Параметры.СуммаСНДС = Выборка.Сумма + Выборка.СуммаНДС;
ТабличныйДокумент.Вывести(ОбластьСтрока);

Формулы в ценообразовании и расчётах документов

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

В документах расчёт реквизитов (сумма как цена × количество, итоги по табличной части) выполняется в обработчиках событий формы: ПриИзменении для полей ввода. Если нужно добавить собственный расчёт в типовой документ, корректный способ — расширение с подменой или дополнением обработчика, а не правка типового модуля.

Способы добавить формулу

Пользовательские поля в отчёте

Без конфигуратора, быстро; ограничены возможностями языка выражений СКД

Вычисляемое поле в запросе

Гибче и быстрее по производительности; требует конфигуратора и прав на изменение

Программный расчёт в модуле

Максимальные возможности, включая обращения к базе; требует навыков разработки и расширения для типовых объектов

Внешняя обработка или отчёт

Не меняет конфигурацию, выживает обновления; нужно подключение через механизм дополнительных отчётов

Как проверить, что формула работает правильно

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

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

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

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

Значение формулы на контрольном документе
Норма

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

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

Расходится — проверьте поля-источники и порядок операций

Строки с пустыми или нулевыми значениями
Норма

Формула выводит 0 или пусто без ошибок

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

Ошибка деления на ноль или пропуск строк

Поведение после обновления конфигурации
Норма

Формула сохранилась (расширение или внешний объект)

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

Доработка пропала — она была внесена в типовой объект

Типичные ошибки при добавлении формул

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

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

Часто задаваемые вопросы

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

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

Чем язык выражений СКД отличается от встроенного языка 1С?

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

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

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

Как сохранить доработку с формулой при обновлении конфигурации?

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

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

Да. В СКД для этого служат ресурсы (поля итогов) с выражением агрегата — например, Сумма(Маржа) или собственное выражение итога. В запросе используются агрегатные функции с группировкой и итоги по ИТОГИ. Учтите, что среднее от отношения и отношение сумм — разные результаты; для процентных показателей обычно правильнее считать формулу от суммарных значений.

Итог

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

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