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