При автоматизации производственного планирования в конфигурациях 1С (в частности, 1С:Управление производственным предприятием 1.3) часто возникает задача расчета чистой (нетто) потребности в материалах и полуфабрикатах. Обычное разузлование разворачивает изделие на всю глубину до покупных компонентов. Однако если на промежуточных уровнях на складе уже есть готовые полуфабрикаты, разворачивать спецификацию этих веток вглубь не имеет смысла. Рассмотрим, почему не всегда подходят стандартные механизмы и как реализовать алгоритм обхода дерева спецификации с проверкой остатков.
В типовых решениях 1С существуют механизмы работы со структурами изделий, однако при решении задачи расчета нетто-потребности возникают следующие особенности:
РазузлованиеНоменклатуры: Служит для технического разворачивания спецификации продукции до заданной глубины или до исходных материалов. Он работает со структурой изделия, но не сопоставляет потребности с фактическими складскими остатками или резервами.Разберем логику пошагового обхода дерева спецификации, при которой погружение вглубь ветки происходит только при реальном дефиците узла или полуфабриката.
Общий складской остаток номенклатуры брать нельзя, так как часть товара может быть зарезервирована под другие заказы. Вычисляем свободный остаток:
СвободныйОстаток = ОстатокНаСкладах - РезервыПоЗаказам;
В зависимости от задач предприятия к свободному остатку также можно прибавлять остатки в незавершенном производстве (НЗП) или ожидаемые приходы по заказам поставщикам.
При рекурсивном обходе каждого узла спецификации рассчитываем нетто-потребность:
ЧистаяПотребность = ТребуемоеКоличество - СвободныйОстаток;
Проанализируем полученный результат:
ЧистаяПотребность <= 0, то имеющийся свободный остаток полуфабриката полностью перекрывает текущую потребность. В этом случае разворачивать спецификацию этой позиции дальше вглубь не требуется — обход данной ветки прекращается.ЧистаяПотребность > 0, то спецификация полуфабриката разворачивается строго на величину возникшего дефицита (на значение ЧистаяПотребность), а не на исходное количество.Если один и тот же полуфабрикат или материал входит в состав разных узлов на разных уровнях дерева, нельзя списывать один и тот же складской остаток повторно. В процессе обхода необходимо вести таблицу учтенных остатков в оперативной памяти и уменьшать доступный остаток по мере его распределения.
При реализации собственного алгоритма разузлования обратим внимание на следующие моменты:
АналогиНоменклатуры.