При работе с параметрическими ресурсными спецификациями в 1С:ERP Управление предприятием часто возникает ситуация, когда определенный материал должен входить в состав изделия только при выборе конкретной характеристики (свойства). Например, если у продукции выбрана «Насадка 1», материал должен списаться, а если насадка не предусмотрена — строка в Заказе на производство и Этапе производства появляться не должна. Однако стандартная настройка часто приводит к тому, что система создает «пустую» строку с количеством 1, что вносит путаницу в производственный учет. Рассмотрим подробно, как решить эту задачу с помощью встроенных инструментов параметризации.
В системе 1С:ERP ресурсная спецификация является основным «шаблоном» для производства. Когда мы используем автоподбор материала, система пытается сопоставить свойства продукции с номенклатурой из справочника. Если в спецификации указано фиксированное количество (например, 1 шт.), но не задано жесткое условие на использование этой строки, система считает, что материал нужен всегда, просто его конкретный «вид» определится позже. Если свойство в заказе не заполнено, механизм автоподбора не находит соответствия, но сама строка материала остается в документе с пустым значением номенклатуры и количеством по умолчанию.
Проанализируем наиболее эффективный способ — настройку логического условия для всей строки материала. В ресурсной спецификации на вкладке «Материалы и работы» для каждой позиции предусмотрена возможность настройки параметров. Разберем по шагам, как это сделать:
Посмотрим на пример логического выражения в поле «Условие»:
ЗначениеЗаполнено(Свойство.Насадка)
Если результатом этого выражения будет Истина, строка включится в этап производства. Если Ложь (свойство не выбрано) — строка будет полностью исключена, и «пустая» позиция с количеством 1 не появится.
Если по каким-то причинам использование поля «Условие» неудобно, мы можем управлять количеством материала. Проанализируем ситуацию: если насадка не выбрана, количество должно быть равно нулю. Для этого в поле «Количество» выберем вариант «Расчет по формуле».
В конструкторе формул можно использовать тернарный оператор ?(). Рассмотрим структуру формулы:
?(ЗначениеЗаполнено(Свойство.Насадка), 1, 0)
Разберем, как работает эта формула:
ЗначениеЗаполнено проверяет, выбрано ли значение в доп. реквизите характеристики.Важный нюанс: в некоторых релизах 1С:ERP, если формула возвращает 0, система может выдать предупреждение или все равно оставить строку с нулевым количеством. Именно поэтому использование «Условия» (Решение 1) является более приоритетным и «чистым» методом с точки зрения корректности данных в Этапе производства.
Выясним причину распространенной ошибки, когда программист или аналитик открывает редактор формул, но во вкладке «Реквизиты изделия» видит только стандартное Количество. Чтобы ваши дополнительные реквизиты (характеристики) стали доступны для расчетов, необходимо проверить следующие настройки:
Иногда возникают сложности с логикой NULL или пустыми значениями в базе данных. В таком случае мы рекомендуем административный метод обхода проблемы. Разберем его:
В справочник значений свойства «Насадка» добавим явный элемент «Не требуется». В таблице настройки автоподбора материала в спецификации для значения «Не требуется» мы просто не указываем номенклатуру (оставляем поле пустым) или указываем условие, при котором количество будет равно 0. Это заставляет пользователя в Заказе на производство явно указывать отсутствие элемента, что минимизирует риск того, что система «забудет» рассчитать строку или рассчитает её неверно.
При написании формул в последних версиях 1С:ERP следует учитывать, что синтаксис может отличаться в зависимости от того, используете ли вы стандартный конструктор или пишете код вручную. Если система выдает ошибку «Поле значение не заполнено» при сравнении с пустой строкой, всегда используйте встроенную функцию ЗначениеЗаполнено(), так как она корректно обрабатывает и пустые ссылки, и неопределенные значения.
Посмотрим на более сложный пример, если количество насадок зависит от другого параметра изделия:
Если ЗначениеЗаполнено(Свойство.Насадка) Тогда
Результат = Свойство.КоличествоГнезд * 1;
Иначе
Результат = 0;
КонецЕсли;
В данном случае мы используем многострочный расчет (доступен в некоторых версиях расширенного редактора формул), что позволяет гибко управлять потребностью в материалах.
Подводя итог, для корректного исключения пустых строк материалов в 1С:ERP следует придерживаться следующего алгоритма:
ЗначениеЗаполнено().Соблюдение этих правил позволит формировать чистые и понятные Заказы на производство, где будут только те материалы, которые действительно необходимы для выпуска конкретной модификации продукции.