Разработка и Конфигурация · 11 мин
Как изменить формулу в 1С 8
Как изменить формулу в 1С 8: расшифровка расчёта, формулы в СКД, печатных формах и конфигураторе. Пошаговые инструкции, типичные ошибки и проверка результата.
Формула в 1С 8 может находиться в нескольких местах: в расшифровке расчёта показателя (например, в зарплатных начислениях), в схеме компоновки данных отчёта, в ресурсах регистра, в заполнении табличных частей документов или в модуле конфигурации. Прежде чем что-то менять, нужно точно определить, где именно лежит нужная формула, иначе правка в одном месте не даст эффекта в другом.
Способ изменения зависит от режима работы: часть формул доступна прямо в пользовательском режиме (режиме «Предприятие»), а часть — только через конфигуратор. Пользовательские формулы меняются без программирования и без остановки работы базы, а изменения в конфигураторе требуют прав разработчика, резервной копии и, как правило, монопольного доступа при обновлении.
Важно понимать разницу между «показателями» и «формулами». Показатель — это переменная (например, «Оклад», «ОтработаноДней»), а формула — выражение, которое связывает показатели: Оклад * ОтработаноДней / НормаДней. Если переменной в списке показателей нет, сначала добавляют показатель, и только потом используют его в формуле.
Определяем, где находится нужная формула
Первый шаг — локализация. Если речь о расчёте зарплаты, формула обычно лежит в справочнике «Начисления» (или «Виды расчёта»). Если нужно поменять расчёт цены — смотрите виды цен или соглашения с клиентами. Если формула участвует в отчёте — она находится в схеме компоновки данных или в настройках варианта отчёта.
Признак того, что формула доступна пользователю: в форме элемента есть поле «Формула», кнопка «Изменить формулу» или гиперссылка с текстом самой формулы. Если формула нигде в интерфейсе не отображается и не редактируется — она, скорее всего, жёстко прописана в конфигурации, и потребуется конфигуратор.
Как выбрать способ изменения
Изменение формулы начисления в режиме «Предприятие»
Типичный сценарий — изменить формулу начисления в зарплатной конфигурации (1С:ЗУП). Откройте раздел «Настройка» → «Начисления», найдите нужное начисление и перейдите на вкладку, где указана формула. Нажмите «Изменить формулу» — откроется редактор, где слева список доступных показателей, а справа поле выражения.
Формулу можно набрать вручную или собрать двойным щелчком по показателям и кнопкам операторов. Используйте круглые скобки для задания порядка вычислений — редактор не проверяет «здравый смысл» выражения, поэтому Оклад + Премия / 2 и (Оклад + Премия) / 2 дадут разные результаты.
После сохранения формулы проверьте расчёт на сотруднике с известными исходными данными. Введите документ «Начисление зарплаты и взносов» за тестовый период, найдите строку с изменённым начислением и сверьте сумму с ручным расчётом на калькуляторе. Расхождение даже в копейках — повод перепроверить формулу и порядок округления.
- 1Сделайте резервную копию базы или выполните правку сначала на копии
- 2Откройте «Настройка» → «Начисления» и найдите нужный вид расчёта
- 3Нажмите «Изменить формулу» и скорректируйте выражение
- 4Проверьте, что все используемые показатели существуют и заполняются
- 5Сохраните элемент и выполните тестовый расчёт зарплаты
- 6Сверьте результат с ручным расчётом на контрольном примере
Изменение формулы расчёта цен и заполнения полей
В торговых конфигурациях формулы встречаются в видах цен: цена может рассчитываться от закупочной с наценкой, от другого вида цены с коэффициентом или по произвольной формуле. Откройте справочник «Виды цен», выберите способ задания «Рассчитывать по формуле от других видов цен» и отредактируйте выражение в конструкторе.
В конструкторе формул цен операнды — это другие виды цен и арифметические операции. Учтите, что формула сработает только для товаров, у которых заданы базовые цены-операнды: если закупочная цена не заполнена, расчётная цена будет нулевой или не заполнится вовсе.
После изменения формулы цены не пересчитываются автоматически в уже записанных документах установки цен. Нужно сформировать новый документ «Установка цен номенклатуры» и проверить, что цены рассчитались по новой формуле.
Изменение формулы в отчёте через пользовательские поля
Если нужно добавить или изменить вычисляемую колонку в отчёте, не всегда требуется конфигуратор. В отчётах на СКД откройте «Настройки» → расширенный режим → вкладка «Пользовательские поля». Нажмите «Добавить» → «Новое поле-выражение» и задайте формулу на языке выражений компоновки данных.
В выражении доступны поля набора данных, арифметические операции и функции языка выражений СКД: Сумма(Продажи.Стоимость), условия через Выбор Когда ... Тогда ... Иначе ... Конец. После добавления поле нужно вывести в структуру отчёта на вкладке «Выбранные поля».
Ограничение: пользовательские поля работают с уже полученными данными отчёта. Если нужного исходного поля в наборе данных нет, одной формулой проблему не решить — придётся менять саму схему компоновки в конфигураторе.
Изменение формулы в конфигураторе
Когда формула зашита в конфигурации, откройте конфигуратор (меню «Конфигурация» → «Открыть конфигурацию»). Типичные места: ресурсы регистров с формулами в процедурах проведения, вычисляемые поля в схемах компоновки данных, формулы в макетах печатных форм, процедуры расчёта в общих модулях.
Быстрее всего найти нужное место глобальным поиском: «Правка» → «Глобальный поиск» по тексту фрагмента формулы или имени показателя. Найдя строку в модуле, измените выражение на встроенном языке 1С. Пример простой правки:
// Было:
СуммаНачисления = Оклад * ОтработаноДней / НормаДней;
// Стало (добавлен районный коэффициент):
СуммаНачисления = Оклад ОтработаноДней / НормаДней РайонныйКоэффициент;
Перед правкой типовой конфигурации проверьте, стоит ли объект на поддержке. Изменение типового объекта затруднит последующие обновления — при автообновлении правка может быть затёрта. Предпочтительные альтернативы: расширение конфигурации или механизм «Дополнительные отчёты и обработки», если задачу можно решить ими.
После правки выполните «Конфигурация» → «Обновить конфигурацию базы данных». В клиент-серверном режиме пользователи должны выйти из базы, иначе обновление не выполнится. Затем протестируйте расчёт на контрольном примере.
Проверка результата после изменения
Контрольный расчёт — обязательный этап. Возьмите пример с известными исходными данными, посчитайте ожидаемый результат вручную и сравните с тем, что выдала программа. Проверяйте не только «средний» случай, но и граничные: нулевые значения показателей, отсутствие отработанных дней, пустая базовая цена.
Особое внимание уделите делению: если знаменатель может быть нулём (например, норма дней не заполнена), формула вызовет ошибку деления на ноль. В пользовательских формулах зарплатных начислений это часто обрабатывается типовыми механизмами, но в собственных выражениях СКД и кода защиту нужно добавлять явно.
Как проверить результат
Сумма совпадает с ручным расчётом
Расхождение, ошибка деления на ноль, пустой результат
Расчёт выполняется без ошибок, результат логичен
Ошибка выполнения или нереалистичные суммы
Понятно, что они не пересчитались, при необходимости перепроведены
Ожидание, что формула применится задним числом автоматически
Обновление прошло, база работает
Ошибки обновления, конфликты при последующих автообновлениях
Типичные ошибки при изменении формул
Самая частая ошибка — использование в формуле показателя, который не заполняется в данных. Формула синтаксически верна, но результат нулевой, потому что показатель никогда не вводится документами. Перед правкой убедитесь, что каждый показатель реально где-то рассчитывается или вводится.
Вторая группа ошибок — неправильный приоритет операций и потеря округления. Денежные суммы в 1С обычно округляются до двух знаков, но промежуточные вычисления могут накапливать копеечные расхождения, если округление не задано явно в нужном месте.
Часто задаваемые вопросы
Кнопка «Изменить формулу» есть, но не нажимается. Что делать?
Скорее всего, у пользователя недостаточно прав на редактирование этого справочника. Проверьте роли пользователя в разделе администрирования или попросите администратора выполнить изменение. Также поле может быть заблокировано, если объект редактируется другим пользователем.
Можно ли изменить формулу, не заходя в конфигуратор?
Да, если формула вынесена в пользовательский режим: начисления в ЗУП, виды цен, пользовательские поля отчётов, произвольные формулы в настройках заполнения. Если в интерфейсе редактора формулы нет — без конфигуратора или расширения не обойтись.
Изменил формулу, а расчёт не поменялся. Почему?
Частые причины: документ не перепроведён (старые строки хранят уже рассчитанные суммы), изменена не та формула (аналогичная зашита в модуле), либо в кэше. Перезаполните и перепроведите документ, а при правке в конфигураторе убедитесь, что обновление конфигурации базы данных выполнено.
Как безопасно изменить формулу в типовой конфигурации?
Оптимальный путь — расширение конфигурации: типовой объект не меняется, а ваша логика подключается поверх. Прямая правка типового объекта возможна, но потребует ручного контроля при каждом обновлении конфигурации, иначе изменения будут потеряны.
Где посмотреть, какие показатели доступны для формулы?
В редакторе формулы начисления список доступных показателей отображается слева. Для отчётов СКД доступные поля видны в настройках на вкладке «Доступные поля». В конфигураторе перечень переменных определяется контекстом модуля — используйте синтакс-помощник (Ctrl+Shift+F1).
Формула выдаёт ошибку «Деление на ноль». Как исправить?
Найдите в формуле операцию деления и проверьте, чему равен знаменатель. В выражениях СКД добавьте условие через «Выбор Когда знаменатель = 0 Тогда 0 Иначе ... Конец». В коде на встроенном языке — проверку «Если Знаменатель <> 0 Тогда». В типовых зарплатных формулах проверьте, что показатель нормы дней заполняется графиком работы.
Что важно запомнить
Сначала определите, где лежит формула: пользовательский режим или конфигуратор. Пользовательские формулы меняются через редактор в форме элемента, конфигурационные — через модули и СКД, желательно через расширение. Любую правку проверяйте на контрольном расчёте и помните: старые документы автоматически не пересчитываются.