При работе с 1С:ERP Управление предприятием 2 (особенно в версиях 2.5) пользователи часто сталкиваются с неочевидным поведением системы при использовании формул в ресурсных спецификациях. Проблема заключается в том, что если количество материала задано жестким числом, система корректно учитывает выбранную единицу измерения (например, килограммы или упаковки). Однако, как только мы переходим к расчету через формулу, логика меняется, и результат может отличаться от ожидаемого в тысячи раз.
В этой статье мы подробно разберем, почему так происходит, проанализируем внутреннюю структуру данных системы и выясним, как правильно составлять формулы, чтобы избежать производственного брака и ошибок в планировании. Также мы затронем критическую ошибку в документе Плановая калькуляция, связанную с кэшированием расчетов по характеристикам.
Рассмотрим стандартную ситуацию. В строке материала ресурсной спецификации у нас есть возможность выбрать единицу измерения. Предположим, базовая единица материала (единица хранения) — граммы, а в спецификации для удобства мы выбираем кг. Если мы просто введем число 5 в колонку количество, система поймет, что это 5 кг, и при формировании этапов производства пересчитает их в 5000 грамм.
Однако, если мы нажмем на значок формулы и введем там то же самое число 5, система интерпретирует результат формулы как 5 единиц хранения. В нашем случае — 5 грамм. Таким образом, единица измерения, указанная визуально в строке спецификации (кг), полностью игнорируется при расчете через формульный редактор.
Проанализируем причину такого поведения. В структуре справочника РесурсныеСпецификации на уровне метаданных отсутствует реквизит Количество, который бы отвечал за хранение значения в единицах измерения строки. Основным реквизитом является КоличествоУпаковок. По логике разработчиков 1С, результат любой формулы — это конечное число «штук» (базовых единиц). Это обусловлено историческими причинами развития ядра ERP и необходимостью унификации расчетов в регистрах накопления, которые всегда ведутся в базовых единицах измерения.
Разберем ситуацию на конкретном примере, чтобы понять масштаб проблемы:
Вариант А (без формулы):
Указываем количество 5. Система видит 5 кг и при расчете потребностей в дереве спецификации выдает 5000 г. Все корректно.
Вариант Б (с формулой):
Пишем формулу: 5. Несмотря на то, что в строке по-прежнему выбрано кг, система возьмет результат формулы «как есть» и подставит его в базовую единицу. Итог: 5 г. Ошибка в 1000 раз!
Для корректного расчета в формуле мы обязаны сразу приводить значение к базовой единице. Правильная формула должна выглядеть так:
// Если нам нужно 5 кг, а единица хранения - граммы
5 * 1000
Ситуация осложняется, когда мы используем параметры изделия (дополнительные реквизиты). Рассмотрим сценарий, где количество материала зависит от площади детали. Выясним причину, по которой расчет может «поплыть».
Если в формуле используется параметр Площадь (в кв. метрах), а результат мы хотим получить в кг (при базовой единице — граммы), формула должна содержать явный коэффициент пересчета. Многие аналитики пытаются использовать в формулах реквизит КоличествоУпаковок, надеясь, что система подтянет коэффициент из строки, но этого не происходит, так как формула вычисляется до того, как происходит привязка к визуальному представлению единиц в строке спецификации.
Рекомендация: При создании параметров спецификации всегда добавляйте в описание единицу измерения, в которой этот параметр должен возвращать значение. Например, вместо просто Объем используйте Объем_м3.
Еще одна серьезная проблема, выявленная в ходе эксплуатации 1С:ERP, касается документа Плановая калькуляция. Если в одной калькуляции рассчитывается изделие с одной и той же номенклатурой, но разными характеристиками в разных строках, механизм расчета по формулам может дать сбой.
Проанализируем ситуацию по шагам:
Выясняется, что система часто кэширует результат вычисления формулы для пары Номенклатура + Спецификация. Поскольку номенклатура ("Стол") и спецификация одинаковые, алгоритм может подставить результат из первой строки (1 литр) во вторую, игнорируя изменение параметров характеристики. Это происходит потому, что при расчете плановой калькуляции система стремится оптимизировать производительность и не пересчитывать одинаковые (с ее точки зрения) выражения.
Как это обойти:
Плановая калькуляция, чтобы упростить закрытие этапов производства.Подводя итог, зафиксируем основные правила работы с формулами в ресурсных спецификациях 1С:ERP:
1000. Это поможет и вам, и другим коллегам при аудите спецификации.Разработчики 1С признают данное поведение «исторически сложившимся», и в ближайших релизах массового изменения этой логики не ожидается, так как это потребует пересчета всех существующих баз клиентов. Поэтому понимание того, что результат формулы — это Количество в единицах хранения, является критически важным навыком для любого специалиста по 1С:ERP.