Skip to content

Latest commit

 

History

History
229 lines (173 loc) · 19 KB

File metadata and controls

229 lines (173 loc) · 19 KB

Алгоритм планирования ресурсов - MRP

readme-mrg-img1.svg

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

Модель данных

Основные данные системы:

  • продукты: перечень продукции, производство которой планируется
  • остатки продукции: сколько готовой продукции было на складе на начало периода, и какие партии продукции находятся в производстве на начало периода; по результатам планирования записывается планируемые партии производства
  • ресурсы: материалы и сырье, которые используются в производстве продуктов
  • остатки ресурсов: сколько ресурсов было на начало периода и сколько ресурсов находится в процессе доставки и прибудет несколько позднее начальной даты планирования; по результатам планирования записываются планируемые поставки ресурсов
  • этапы: схема производства продукции
  • поставщики: сведения о поставщиках ресурсов и основных условиях их поставки
  • план: это основные исходные данные алгоритма планирования - план продаж, сформулированный в виде количества продукции, которое нужно для сбыта в указанные даты.

MrpProduct: Продукция

Продукция и базовые сведения о ней

Свойства:

  • id(id): Id. Идентификатор
  • caption(text): Название. Название продукции
  • unit(text): Единица. Единица измерения количества продукции
  • initialDate(datetime): Дата. Начальная дата появления данной продукции
  • qntMin(decimal): Количество. Минимальная партия для заказа в производство
  • qntStep(decimal): Шаг. Минимальный шаг изменения количества в заказе в производство
  • baseQnt(decimal): База. Базовое количество продукции, относительно которого установлены нормы расхода (например, "на 100 штук")
  • inWorkingDays(boolean): Рабочие дни. Длительность этапов производства указана в рабочих днях
  • comments(text): Примечания. Примечания о продукции в свободной форме

MrpProductStock: Остатки продукции

Сведения об остатках продукции, включают в себя остатки на складе, остатки в незавершенном производстве, поступления из производства (в результате планирования)

Свойства:

  • id(id): Id. Идентификатор
  • product(-> MrpProduct): Продукт. Ссылка на продукт
  • type(text): Тип. Тип остатков: - начальные (initial), в процессе производства (in-production)
  • date(datetime): Дата. Дата фиксации данных остатков, для остатков в незавершенном производстве - дата завершения производства и передачи готовой продукции на склад
  • qnt(decimal): Количество. Количество продукции
  • price(decimal): Себестоимость. Материальная себестоимость продукции

MrpResource: Ресурсы

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

Свойства:

  • id(id): Id. Идентификатор
  • caption(text): Название. Название ресурса
  • unit(text): Единица. Единица измерения количества ресурса
  • minStock(decimal): Мин остаток. Минимальный складской остаток ресурса, который должен остаться на складе

Методы:

  • planOrderRes: заказ ресурса
  • обработать ресурсы в транспортировке - сформировать регистр остаток ресурсов с учетом поступления ресурсов из транзита. Посмотреть остатки можно через ресурс "resource-stock"
  • получить остатки ресурсов на определенную дату.
  • сделать заказ сырья к определенной дате: получить срок размещения заказа

MrpResourceStock: остатки ресурсов

Свойства:

  • id: идентификатор записи
  • type: тип записи, одно из значений:
    • initial: начальный остаток
    • in-transfer: в транзите (доставляется)
    • order: заказан у поставщика в процессе планирования
    • prod: списан в производство
  • resource(-> MrpResource): Ресурс. Ссылка на ресурс
  • date(datetime): Дата.
  • qnt(decimal): Количество.
  • price(decimal): Цена. Себестоимость ресурса
  • vendor(-> MrpVendorTerm): Поставщик. Ссылка на поставщика
  • comments(text): Примечания. Примечания

MrpStage: Этап производства

Этап производства продукции

Свойства:

  • id(id): Id. Идентификатор
  • product(-> MrpProduct): Продукт. Ссылка на производимый на этом этапе продукт
  • order(decimal): Порядок. Порядковый номер этапа производства
  • caption(text): Название. Наименование этапа производства
  • duration(decimal): Длительность. Длительность в днях этого этапа производства
  • comments(text): Примечания. Примечания, в свободной форме

MrpStageResource: Нормы расхода

Нормы расхода ресурсов на этапе производства

Свойства:

  • id(id): Id. Идентификатор
  • stage(-> MrpStage): Этап. Ссылка на этап производства, для которого указана норма расхода
  • resource(-> MrpResource): Ресурс. Ссылка на ресурс, для которого указана норма расхода на этапе производства
  • qnt(decimal): Количество. Количество потребляемого ресурса на этом этапе, в отношении к resource.baseQnt

MrpVendorTerm: Поставщик

Компания - поставщик ресурса, а также сведения о базовых условиях поставки

Свойства:

  • id(id): Id. Идентификатор
  • resource(-> MrpResource): Ресурс. Ссылка на ресурс, который поставляет данный поставщик
  • caption(text): Название. Наименование поставщика
  • address(text): Адрес. Адрес поставщика, для документов
  • date(datetime): Дата. Дата начала работы с поставщиком
  • invoicePrice(decimal): Цена. Цена поставляемого ресурса по прайсу
  • invoiceCurrency(text): Валюта. Валюта, в которой номинирована цена
  • orderDuration(decimal): Длительность заказа. Длительность выполнения заказа от даты размещения заказа до даты отгрузки
  • inWorkingDays(boolean): Рабочие дни. Признак, что длительность выполнения заказа указана в рабочих днях
  • orderMin(decimal): Минимальное количество. Минимальное количество ресурса для заказа
  • unit(text): Единица. Единица измерения количества ресурса
  • orderStep(decimal): Шаг количества. Шаг изменения количества заказываемого ресурса, кратно которому можно менять размер заказа
  • deliveryCompany(text): Доставка. Способ доставки партий заказываемого ресурса, например, транспортная компания
  • deliveryDuration(decimal): Длительность доставки. Длительность доставки партии ресурса от даты передачи в доставку до даты поступления на склад заказчика, в днях
  • deliveryInWorkingDays(boolean): Доставка, рабочие дни. Признак, что длительность доставки заказа указана в рабочих днях

MrpVendorPayment: Схема оплаты

Схема оплаты поставщику для формирования календарного графика платежей

Свойства:

  • id(id): Id. Идентификатор
  • vendor(-> MrpVendorTerm): Поставщик. Ссылка на поставщика
  • type(text): Тип. Тип затрат - оплата товара (invoice), доставки (delivery)
  • term(text): Условие. Как указана величина платежа: фиксированная сумма (fixed) или в процентах от суммы счёта (percent)
  • value(decimal): Значение. Величина оплаты, указана в соответствии с условиями
  • currency(text): Валюта. Валюта, в котором номинирован платёж
  • base(text): База. База, относительно которой указан платёж - от суммы заказа
  • time(decimal): Период. Период в днях от даты заказа, когда необходимо сделать платеж
  • caption(text): Описание. Описание этого платежа в свободной форме

MrpPlan: план продаж

План продаж

Свойства:

  • id(id): Код. Идентификатор записи
  • date(datetime): Дата. Дата, на которую планируется выдать на склад указанное количество продукции
  • product(-> MrpProduct): Продукт. Продукция, производство которой планируется
  • qnt(decimal): Количество продукции, которое планируется получить на склад в указанную дату.
  • status(text): Статус. Статус планирования производства этой позиции плана продаж

Алгоритм планирования

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

Алгоритм планирования работает при добавлении записи в таблицу MrpPlan "Планы продаж".

Результатом работы алгоритма планирования является появление сведений о заказе ресурсов в таблице MrpResourceStock "Остатки ресурсов", а также сведений о произведенных партиях продукции в таблице MrpProductStock "Остатки продукции".

Алгоритм работает следующим образом. Записи о планах продаж обрабатываются по мере внесения их в базу данных, при сохранении записи.

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

Для планирования производства партии: Берем все этапы производства этой продукции. Сортируем в порядке следования прозводственных этапов, от самых первых этапов к последующим. Обрабатываем все этапы. Берем текущий этап. Производим вычисление даты начала этого этапа. Если дата меньше начальной даты в системе - пишем ошибку и прекращаем расчеты: система не может получить нужную продукцию к запланированной дате. Получаем список ресурсов, требуемых для данного этапа. Для каждого ресурса получаем остаток на дату начала этапа. Производим расчет требуемого объема ресурсов для данного производственного этапа. Если остатки ресурсов не позволяют начать этап, производим планирование поставки партии ресурсов. Берём новые остатки ресурсов с учётом запланированной поставки. Если остатки ресурсов позволяют произвести продукцию, сохраняем данные о себестоимости производства и фиксируем расход ресурсов на производство.

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

Планирование поставки партии ресурсов: на входе - дата поступления ресурсов и требуемое количество. Справочно указываем основание заказа. Получаем длительность перевозки и изготовления требуемого ресурса для расчёта даты заказа. На эту дату получаем - какой поставщик и условия поставки будут действовать. В соответствии с этими условиями записываем финансовые планы и требуемое количество ресурса для заказа. Записываем в список партий ресурсов эту партию как заказанную (planned order). Основание заказа - продукция, этап.

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

Списать ресурсы на производство: продукция, этап, дата начала этапа. Берем список ресурсов, требуемый для данного этапа. Для каждого ресурса берем текущий ресурс. Получаем остатки этого ресурса на дату. Делаем расчет требуемого количества ресурса на производство. Если ресурса не хватает - пишем об ошибке. Если ресурса хватает, то для каждой партии ресурса на складе списываем имеющееся количество ресурсов из этой партии до тех пор, пока не наберем требуемое количество ресурсов.

Важные замечания

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