Почему в ресурсной спецификации 1С:ERP формула игнорирует единицы измерения и как это исправить

Бизнес-аналитик 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

При работе с 1С:ERP Управление предприятием 2 (особенно в версиях 2.5) пользователи часто сталкиваются с неочевидным поведением системы при использовании формул в ресурсных спецификациях. Проблема заключается в том, что если количество материала задано жестким числом, система корректно учитывает выбранную единицу измерения (например, килограммы или упаковки). Однако, как только мы переходим к расчету через формулу, логика меняется, и результат может отличаться от ожидаемого в тысячи раз.

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

Механика работы формул: Базовая единица против Упаковок

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

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

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

Практический пример: расчет материала «Пластилин»

Разберем ситуацию на конкретном примере, чтобы понять масштаб проблемы:

  1. Номенклатура: Пластилин.
  2. Единица хранения (базовая): грамм (г).
  3. Дополнительная единица (упаковка): килограмм (кг), коэффициент = 1000.
  4. В ресурсной спецификации мы указываем материал «Пластилин» и выбираем единицу кг.

Вариант А (без формулы):
Указываем количество 5. Система видит 5 кг и при расчете потребностей в дереве спецификации выдает 5000 г. Все корректно.

Вариант Б (с формулой):
Пишем формулу: 5. Несмотря на то, что в строке по-прежнему выбрано кг, система возьмет результат формулы «как есть» и подставит его в базовую единицу. Итог: 5 г. Ошибка в 1000 раз!

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


// Если нам нужно 5 кг, а единица хранения - граммы
5 * 1000

Проблема использования параметров и реквизитов в формулах

Ситуация осложняется, когда мы используем параметры изделия (дополнительные реквизиты). Рассмотрим сценарий, где количество материала зависит от площади детали. Выясним причину, по которой расчет может «поплыть».

Если в формуле используется параметр Площадь (в кв. метрах), а результат мы хотим получить в кг (при базовой единице — граммы), формула должна содержать явный коэффициент пересчета. Многие аналитики пытаются использовать в формулах реквизит КоличествоУпаковок, надеясь, что система подтянет коэффициент из строки, но этого не происходит, так как формула вычисляется до того, как происходит привязка к визуальному представлению единиц в строке спецификации.

Рекомендация: При создании параметров спецификации всегда добавляйте в описание единицу измерения, в которой этот параметр должен возвращать значение. Например, вместо просто Объем используйте Объем_м3.

Кэширование в Плановых калькуляциях: скрытая ловушка

Еще одна серьезная проблема, выявленная в ходе эксплуатации 1С:ERP, касается документа Плановая калькуляция. Если в одной калькуляции рассчитывается изделие с одной и той же номенклатурой, но разными характеристиками в разных строках, механизм расчета по формулам может дать сбой.

Проанализируем ситуацию по шагам:

  1. Строка 1: Изделие "Стол" (Характеристика: Красный). Формула расхода краски считает 1 литр.
  2. Строка 2: Изделие "Стол" (Характеристика: Зеленый). Формула должна посчитать 2 литра (например, из-за другой укрывистости краски).

Выясняется, что система часто кэширует результат вычисления формулы для пары Номенклатура + Спецификация. Поскольку номенклатура ("Стол") и спецификация одинаковые, алгоритм может подставить результат из первой строки (1 литр) во вторую, игнорируя изменение параметров характеристики. Это происходит потому, что при расчете плановой калькуляции система стремится оптимизировать производительность и не пересчитывать одинаковые (с ее точки зрения) выражения.

Как это обойти:

Итоги и правила хорошего тона при написании формул

Подводя итог, зафиксируем основные правила работы с формулами в ресурсных спецификациях 1С:ERP:

  1. Всегда считайте в «базе». Результат формулы — это всегда количество в единицах хранения номенклатуры. Забудьте о том, какая единица измерения выбрана в интерфейсе строки спецификации.
  2. Проверяйте карточку материала. Перед написанием формулы обязательно загляните в карточку номенклатуры (выполнив проверку корректности спецификации), чтобы точно знать, что является единицей хранения (метры, штуки, литры или граммы).
  3. Явные коэффициенты. Если вы привыкли мыслить килограммами, а база в граммах — пишите в формуле явное умножение на 1000. Это поможет и вам, и другим коллегам при аудите спецификации.
  4. Осторожность с характеристиками. Если расчет по формуле зависит от свойств характеристики, всегда проверяйте итоговое дерево спецификации и плановые калькуляции на предмет «залипания» (кэширования) результатов.
  5. Использование упаковок. Помните, что использование упаковок в ERP целесообразно тогда, когда списание происходит целыми единицами (например, труба по 6 метров). Если же у вас идет расчетный расход (например, 0.456 кг), лучше работать напрямую с базовыми единицами без лишних прослоек в виде упаковок в спецификации.

Разработчики 1С признают данное поведение «исторически сложившимся», и в ближайших релизах массового изменения этой логики не ожидается, так как это потребует пересчета всех существующих баз клиентов. Поэтому понимание того, что результат формулы — это Количество в единицах хранения, является критически важным навыком для любого специалиста по 1С:ERP.

← На главную