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

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

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

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

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

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

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

Определите, где именно нужна формула

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

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

Маршрут решения

Как выбрать способ

Нужно считать цены, наценки или скидки в УТ / ERP / КАИспользуйте штатный редактор формул в настройках видов цен или скидок
Нужна формула начисления зарплаты в ЗУПСоздайте или измените показатель и формулу начисления в настройках расчёта зарплаты
Нужно вычисляемое поле в отчётеДобавьте выражение на закладке «Вычисляемые поля» или «Пользовательские поля» в настройках СКД
Штатных средств не хватает или есть доступ разработчикаПишите алгоритм на встроенном языке через конфигуратор или расширение

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

В конфигурациях «Управление торговлей», ERP и «Комплексная автоматизация» формулы цен задаются в карточке вида цен. Откройте раздел «CRM и маркетинг» (или «Настройки и справочники») → «Виды цен», создайте новый вид цены и выберите способ задания «Произвольная формула от других видов цен» или «Наценка на другой вид цен». После этого станет доступна ссылка для открытия редактора формул.

В редакторе формул вы собираете выражение из доступных операндов: базовых видов цен, курсов валют, арифметических операций и функций. Например, формула розничной цены может выглядеть как [Закупочная] * 1.25, а с округлением — с использованием функции округления, доступной в редакторе. Операнды вставляются двойным щелчком из списка, вручную имена в квадратных скобках лучше не набирать — легко ошибиться в точном написании.

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

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

Формулы начислений в 1С:ЗУП

В «Зарплате и управлении персоналом» формулы применяются к начислениям и удержаниям. Откройте «Настройка» → «Начисления», выберите или создайте начисление и на закладке с формулой задайте выражение. Формула собирается из показателей: например, Оклад / НормаДней ВремяВДнях или ТарифнаяСтавкаЧасовая ВремяВЧасах.

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

Обратите внимание на разделители и функции: в формулах ЗУП доступны арифметические операции, функции вроде Макс(), Мин(), Окр(), а также условные конструкции через ?(Условие, Значение1, Значение2). После изменения формулы обязательно выполните тестовый расчёт зарплаты по одному сотруднику и сверьте сумму с ручным расчётом.

Вычисляемые поля в отчётах на СКД

Система компоновки данных позволяет добавлять формулы в отчёты без изменения конфигурации. Откройте отчёт, перейдите в «Ещё» → «Изменить вариант» (или «Настройки» с расширенным режимом) и найдите закладку «Пользовательские поля» — это самый простой путь. Нажмите «Добавить» → «Новое поле-выражение» и задайте формулу: например, [СуммаПродажи] - [Себестоимость] для расчёта валовой прибыли.

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

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

1c
ВЫБОР
  КОГДА СуммаПродажи > 0
    ТОГДА (СуммаПродажи - Себестоимость) / СуммаПродажи * 100
  ИНАЧЕ 0
КОНЕЦ

Формулы на встроенном языке в конфигураторе

Если штатных редакторов недостаточно и у вас есть права разработчика, формулы пишутся напрямую в модулях. Откройте конфигуратор, найдите нужный объект (документ, справочник, обработку) и откройте его модуль объекта или формы. Расчёт размещается либо в обработчике события (например, «ПриИзменении» поля количества), либо в процедуре, вызываемой перед записью.

Классический пример — пересчёт суммы строки документа:

&НаКлиенте

Процедура ТоварыКоличествоПриИзменении(Элемент)

Строка = Элементы.Товары.ТекущиеДанные;

Строка.Сумма = Строка.Количество * Строка.Цена;

КонецПроцедуры

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

Проверка результата и типичные ошибки

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

Отдельно проверьте округление. 1С хранит числа с заданной точностью, и промежуточное округление внутри формулы может дать копеечные расхождения с ручным расчётом. Решите заранее, где именно округлять: на каждой строке документа или только в итоге — и зафиксируйте это в формуле через функцию Окр().

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

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

Расчёт на контрольном примере
Норма

Результат совпадает с ручным расчётом до копейки

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

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

Граничные значения (0, пусто, максимум)
Норма

Формула возвращает осмысленное значение или управляемую ошибку

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

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

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

Формула в штатном редакторе или расширении продолжает работать

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

Доработка в основной конфигурации затёрта обновлением

Ограничения и когда привлекать специалиста

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

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

Итог

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

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

Частые вопросы

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

Да, в большинстве типовых конфигураций есть штатные редакторы: формулы видов цен и скидок в УТ/ERP, формулы начислений в ЗУП, пользовательские поля в настройках отчётов. Этого достаточно для типовых задач ценообразования, расчёта премий и аналитических показателей.

Как написать условие «если» в формуле?

В формулах ЗУП и СКД используется тернарный оператор ?(Условие, ЗначениеЕслиИстина, ЗначениеЕслиЛожь), а в выражениях СКД также конструкция ВЫБОР КОГДА ... ТОГДА ... ИНАЧЕ ... КОНЕЦ. В модулях конфигуратора применяется полноценный оператор Если ... Тогда ... Иначе ... КонецЕсли;.

Почему формула сохранилась, но результат не считается?

Чаще всего причина в показателях или операндах без значений: показатель не назначен сотруднику, базовый вид цены не заполнен, поле не выведено в отчёт. Проверьте, что все входные данные формулы реально заполнены в базе, и что формула привязана к действующему объекту (виду цены, начислению, варианту отчёта).

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

Используйте функцию Окр(Значение, Точность): второй параметр 2 — копейки, 0 — целые. В редакторах формул цен функция округления доступна в списке функций. Важно единообразие: округляйте в том же месте, где это принято в вашей учётной политике, иначе появятся расхождения между документами и отчётами.

Что делать, если после обновления конфигурации формула пропала?

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

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

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