Методика планирования закупок с учетом аналогов

закупки

В статье рассматриваются обобщенные требования с нескольких проектов, дополненные с учетом теоретических методик, по расширению функционала 1C:ERP в области задач обеспечения производства материалами.

Достаточно часто при внедрении функционала ERP-систем, обеспечивающих формирование заказов поставщикам по производственным потребностям, приходится решать задачу учета возможности замены «оригинальных» материалов, указанных на входах спецификаций, на аналоги – и тем самым снижать запасы неликвидов и уменьшать потребный объем закупок.

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

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

Ограничения и допущения

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

Наиболее простой вариант, алгоритм для которого будет предложен ниже:

  1. Одна Номенклатура может быть заменена только на одну другую номенклатуру, но не на набор номенклатур (принцип «1 : 1»). Таких пар замен для конкретного входа спецификации может быть множество. В каждой паре можно указать коэффициент пересчета количества потребности при использовании номенклатуры-замены. Таким образом, варианты замен «1 ко многим» и «Многие ко многим» в рамках настоящей статьи не рассматриваются.
  2. Любое количество потребности в некоторой номенклатуре допускается закрыть несколькими номенклатурами материалов. Данное ограничение не учитывает ситуацию, когда техпроцесс имеет свойство партионности/кратности. Например, реактор загружается партиями сырья по 100 кг. Нельзя в этих 100 кг часть загрузить оригинальное сырье, а часть – замену. Замена должна быть произведена на всю партию загрузки. Иначе говоря, количество замены должно быть кратным 100 кг.
  3. При расчете погашения потребности заменами используется «жадный» алгоритм. Это значит, что если программа назначила погашение потребности некоей заменой, то это погашение в целях оптимизации далее программа не пересматривает. Пример:

Допустимые номенклатуры (Б, В, Г) для погашения потребности П1:

П1<-Б

П1<-В

П1<-Г

Допустимые номенклатуры (только Б) для погашения потребности П2:

П2<-Б

Предположим, сначала программа обрабатывает потребность П1. Номенклатура Б есть в плановом остатке на начало месяца, поэтому за счет Б погашается потребность П1. Предположим, номенклатура Б полностью израсходована для погашения П1. При обработке потребности П2– система не может закрыть эту потребность. Номенклатура Б планируется к закупке.

Но если бы программа начала закрывать потребности начиная с П2, то она бы закрыла потребность П2 позицией Б, а потребность П1 закрыла бы уже позицией В. При таком порядке погашения потребностей получаем выигрыш:

  • Плановый объем закупок при данном варианте прохода алгоритма был бы уменьшен (не надо закупать номенклатуру Б),
  • Уменьшен объем неликвида (В) на складе.

Данное ограничение («жадный» алгоритм) означает, что выполняется только один проход в определенном направлении сортировки дефицитных номенклатур, и далее программа не пытается оптимизировать (перераспределить) погашение остатками потребностей с целью уменьшить объем плана закупок.

Тем не менее, усовершенствование  однопроходного «жадного алгоритма» возможно. Наиболее простой вариант – использование множества вариантов (сценариев) обхода потребностей в некотором порядке (например, случайном), в каждом из которых применяется «жадный» алгоритм. В каждом сценарии обхода вычислить целевую функцию, например, минимума объема закупок (по стоимости, количеству и т.д.). Далее выбирается тот сценарий, в котором целевая функция имеет минимальное значение.

Далее предлагаются два варианта алгоритма – двухпроходный и однопроходный.

Двухпроходной алгоритм

Основное свойство этого алгоритма – допущение, что материалы, указанные на входах спецификаций, (т.е. «оригинальные» материалы) являются наиболее приоритетными к использованию с точки зрения качества и минимизации затрат, длительности производства, требований к квалификации рабочих и т.п.

Алгоритм выполняется в две итерации.

Итерация 1.

После формирования плана производства становится известным количество потребности производства по всей номенклатуре материалов  (как входов спецификаций) на плановый период. Также известны планово – расчетные остатки материалов  на начало периода, и требуемые плановые остатки (целевые) на конец периода.

Список Номенклатуры материалов (производственных потребностей, согласно входам спецификаций, а также материалов, имеющих некоторый ненулевой целевой остаток на конец периода) сортируется по произвольному признаку.

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

По каждой позиции списка определяется расчетный доступный (для использования в заменах) остаток материалов:

Доступный  остаток для замен=

Остаток на начало периода – (Потребность производства за период + целевой остаток на конец периода(не менее))

Т.е. этот остаток – излишек материала, который остается после погашения оригинальным материалом потребности производства с учетом необходимости получить целевой остаток на конец периода. Его трактовка зависит от знака:

(+) значение – расчетный остаток, доступный к погашению как замена других материалов

(-) значение – дефицит

Определяется структура дефицита:

Если остаток на начало периода больше остатка на конец периода, то разница между этими остатками может быть израсходована на частичное обеспечение потребности в производстве. Остается необеспеченная потребность, которая может быть закрыта за счет замен или за счет закупок.

Необеспеченная потребность =

Потребность производства – (Начальный остаток – Конечный остаток)

Если остаток на начало периода меньше остатка на конец периода, то разница между остатками обязательна к закупке (опционально для всех материалов или заданного списка вариантов). Но это только предварительное количество к закупке – для обеспечения конечного целевого остатка. Позже необходимо будет определить количество к закупке для обеспечения потребности в производстве, если не удалось подобрать замены.

К закупке (для остатка) = Конечный остаток – Начальный остаток

Необеспеченная потребность = Потребность производства

Потребность в производстве далее можно попробовать обеспечить за счет замен.

На следующей схеме представлены эти три варианта распределения начального остатка:


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

Итерация 2.

На этой итерации обрабатываются материалы, потребность производства для которых не обеспечена начальным остатком (М2 и М3 на схеме выше).

Потребность в производстве таких материалов  обеспечивается за счет допустимых замен материалами, у которых есть излишек – Доступный остаток для замен, которым можно заменять другие материалы (на схеме это М 1). В процессе обеспечения Доступный остаток для замен использованных материалов уменьшается.

Программа проходит весь список оставшихся материалов, потребность производства для которых не обеспечена начальным остатком.

Для каждой позиции списка (необеспеченного материала) определяются материалы – аналоги в приоритете замены, номенклатура-замена проверяется на ненулевой Доступный остаток для замен.

Примеры определения приоритета замены приведены в следующем разделе «Однопроходный алгоритм».

Если есть ненулевой Доступный остаток для замен, то потребность в производстве по заменяемой номенклатуре обеспечивается за счет этого остатка аналога.

Количество обеспечено = min(Количество потребности, Доступный остаток для замен)

В результате уменьшаются Доступный остаток для замен использованного материала-аналога и количество потребности:

Доступный остаток  для замен = Доступный остаток          – Количество обеспечено

Количество потребности             = Количество потребности – Количество обеспечено

Если количество потребности не обнулилось (т.е. оно не обеспечено еще полностью) – программа переходит к следующему материалу – аналогу согласно приоритету замен.

Если все материалы – аналоги просмотрены и после этого осталось ненулевое количество потребности производства, то это количество планируется к закупке:

К закупке (для производства) = Количество потребности

Итого окончательная потребность в закупке будет равна:

Окончательная потребность в закупке = 

К закупке (для остатка) + К закупке (для производства)

Для визуализации результата планирования необходимо предусмотреть отчет.

Приблизительный вид отчета:

План закупки на февраль 2020 г. (расшифровка колонки плана закупки по периодам)

Итерация 1 – обеспечение за счет оригинальных материалов. Получаем по каждой позиции материалов  либо дефицит (который надо пытаться закрыть заменами на 2-й итерации), либо ненулевой расчетный остаток, который можно использовать как замены на 2-й итерации.

 

2

 

Итерация 2 – обеспечение за счет замен и расчет потребности к закупке, окончательный вид отчета

Номенклатура А может быть заменена номенклатурой Б С, К

Полезно реализовать редактирование вручную распределения замен, с целью оптимизации распределения.

Однопроходный алгоритм

Если все допустимые замены материалов равносильны с оригинальными материалами, т.е. для технологии нет разницы, используются оригинальные материалы или замены-аналоги, то можно использовать однопроходный алгоритм.

Этот алгоритм подразумевает, в отличие от двухпроходного алгоритма,  (в интерпретации приведенной в настоящей статье), что, если запаса оригинального материала достаточно для закрытия производственной потребности в нем, это вовсе не значит что именно этим материалом будет закрыта потребность. Возможно, есть равносильная замена, по которой есть избыточный запас и именно этой заменой выгодно закрыть потребность.

На первом шаге – так же как в двухпроходном алгоритме формируется список потребностей. Но отбираются только материалы, имеющие ненулевую потребность производства.

Список Номенклатуры материалов (потребностей, согласно входам спецификаций) сортируется по произвольному признаку.

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

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

Например:

1)Частотность использования материалов. Характеризует степень универсальности материалов, их широты применяемости. Чем ниже частотность (чем меньше применяемость материалов), тем меньше вероятность использования этого материала в производстве, тем больше вероятность образования неликвида. Значит, такие материалы надо расходовать в первую очередь. Более применяемые материалы стоит оставить в запасе для закрытия других потребностей.

2)Расчетный коэффициент уникальности материала для технологий. Самое высокое значение коэффициента имеют безальтернативные материалы, не имеющие разрешенных замен в некоторых спецификациях. Если в данной потребности возможный материал указан как допустимая замена-аналог (наряду со многими), а в других потребностях он единственно допустимый  – в данной потребности он используются в последнюю очередь для погашения потребности. Или (опционально) вообще не используется.

3)Размер невостребованных запасов. Чем больше отношение размера остатка на начало месяца к статистике потребления материала за прошлые периоды тем приоритетнее закрывать таким материалом потребность производства.

И т.д.

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

Доступный остаток = Остаток на начало периода – целевой остаток на конец периода (не менее).

Доступный остаток, если он получился больше нуля,  трактуется как излишек материала, который можно использовать в планируемом периоде. Если доступный остаток получился меньше нуля, то данный материал на погашение потребности (обеспечение)  не расходуется.

Далее доступный остаток расходуется на обеспечение:

Количество обеспечено = min(Количество потребности, Доступный остаток)

Доступный остаток           = Доступный остаток          – Количество обеспечено

Количество потребности = Количество потребности – Количество обеспечено

Доступный остаток в алгоритме расходуется на погашение потребности и тем самым  доступный остаток уменьшается на количество погашенной потребности. Потребность также уменьшается на погашенную потребность.

Разумеется, доступный остаток должен учитываться в целом для материала, а не в подчиненных строках, в которых указан этот материал.

Если потребность погашена не в полном размере (Количество потребности >0), то переходим к следующей строке подчиненного списка и за счет нее выполняем погашение оставшейся потребности родительской строки.

Если после обхода всех строк подчиненного списка в родительской строке останется непогашенное количество потребности производства (Количество потребности >0), то это количество планируется к закупке.

К закупке (производство) = Количество потребности

Следует учесть, что на данном шаге были закрыты только потребности производства за период. Но есть еще потребность в закупках, обусловленная необходимостью формирования целевого остатка материала на конец периода, если расчетный остаток на конец периода меньше целевого.

Как было показано выше,  доступный остаток, который используется для погашения производственной потребности, равен начальному остатку минус конечный целевой остаток. Если Доступный остаток получился меньше нуля, то этот доступный остаток есть не что иное как потребность в закупке.

К закупке (для остатка) = – Доступный остаток

Поэтому (возможно, это делается опционально в целом или для заданного списка материалов) следует сформировать дополнительные потребности в закупках для формирования целевого конечного остатка на конец периода:

Окончательная потребность в закупке = 

К закупке (для остатка) + К закупке (для производства)

Отчет  данном случае может выглядеть следующим образом:

 

В этом примере номенклатура «Б» –  аналог номенклатуры «А» была использована для обеспечения номенклатуры «А» в первую очередь по критерию максимального остатка на начало месяца.

За технической реализацией предложенных алгоритмов с использованием имеющихся наработок и с адаптацией под специфику вашего предприятия – обращайтесь: 1c@itrp.ru.

Автор: Лисин Николай, ИТРП

^