Система предназначена для планирования снабжения ресурсами производства продукции, которое описано этапами производства с указанием норм расхода ресурсов на каждом этапе. Система позволяет спланировать даты поставки ресурсов для обеспечения плана производства.
Основные данные системы:
- продукты: перечень продукции, производство которой планируется
- остатки продукции: сколько готовой продукции было на складе на начало периода, и какие партии продукции находятся в производстве на начало периода; по результатам планирования записывается планируемые партии производства
- ресурсы: материалы и сырье, которые используются в производстве продуктов
- остатки ресурсов: сколько ресурсов было на начало периода и сколько ресурсов находится в процессе доставки и прибудет несколько позднее начальной даты планирования; по результатам планирования записываются планируемые поставки ресурсов
- этапы: схема производства продукции
- поставщики: сведения о поставщиках ресурсов и основных условиях их поставки
- план: это основные исходные данные алгоритма планирования - план продаж, сформулированный в виде количества продукции, которое нужно для сбыта в указанные даты.
Продукция и базовые сведения о ней
Свойства:
id(id): Id. Идентификаторcaption(text): Название. Название продукцииunit(text): Единица. Единица измерения количества продукцииinitialDate(datetime): Дата. Начальная дата появления данной продукцииqntMin(decimal): Количество. Минимальная партия для заказа в производствоqntStep(decimal): Шаг. Минимальный шаг изменения количества в заказе в производствоbaseQnt(decimal): База. Базовое количество продукции, относительно которого установлены нормы расхода (например, "на 100 штук")inWorkingDays(boolean): Рабочие дни. Длительность этапов производства указана в рабочих дняхcomments(text): Примечания. Примечания о продукции в свободной форме
Сведения об остатках продукции, включают в себя остатки на складе, остатки в незавершенном производстве, поступления из производства (в результате планирования)
Свойства:
id(id): Id. Идентификаторproduct(-> MrpProduct): Продукт. Ссылка на продуктtype(text): Тип. Тип остатков: - начальные (initial), в процессе производства (in-production)date(datetime): Дата. Дата фиксации данных остатков, для остатков в незавершенном производстве - дата завершения производства и передачи готовой продукции на складqnt(decimal): Количество. Количество продукцииprice(decimal): Себестоимость. Материальная себестоимость продукции
Ресурсы - это материалы и сырье, необходимые для производства продукции
Свойства:
id(id): Id. Идентификаторcaption(text): Название. Название ресурсаunit(text): Единица. Единица измерения количества ресурсаminStock(decimal): Мин остаток. Минимальный складской остаток ресурса, который должен остаться на складе
Методы:
- planOrderRes: заказ ресурса
- обработать ресурсы в транспортировке - сформировать регистр остаток ресурсов с учетом поступления ресурсов из транзита. Посмотреть остатки можно через ресурс "resource-stock"
- получить остатки ресурсов на определенную дату.
- сделать заказ сырья к определенной дате: получить срок размещения заказа
Свойства:
- id: идентификатор записи
- type: тип записи, одно из значений:
initial: начальный остатокin-transfer: в транзите (доставляется)order: заказан у поставщика в процессе планированияprod: списан в производство
resource(-> MrpResource): Ресурс. Ссылка на ресурсdate(datetime): Дата.qnt(decimal): Количество.price(decimal): Цена. Себестоимость ресурсаvendor(-> MrpVendorTerm): Поставщик. Ссылка на поставщикаcomments(text): Примечания. Примечания
Этап производства продукции
Свойства:
id(id): Id. Идентификаторproduct(-> MrpProduct): Продукт. Ссылка на производимый на этом этапе продуктorder(decimal): Порядок. Порядковый номер этапа производстваcaption(text): Название. Наименование этапа производстваduration(decimal): Длительность. Длительность в днях этого этапа производстваcomments(text): Примечания. Примечания, в свободной форме
Нормы расхода ресурсов на этапе производства
Свойства:
id(id): Id. Идентификаторstage(-> MrpStage): Этап. Ссылка на этап производства, для которого указана норма расходаresource(-> MrpResource): Ресурс. Ссылка на ресурс, для которого указана норма расхода на этапе производстваqnt(decimal): Количество. Количество потребляемого ресурса на этом этапе, в отношении к resource.baseQnt
Компания - поставщик ресурса, а также сведения о базовых условиях поставки
Свойства:
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): Доставка, рабочие дни. Признак, что длительность доставки заказа указана в рабочих днях
Схема оплаты поставщику для формирования календарного графика платежей
Свойства:
id(id): Id. Идентификаторvendor(-> MrpVendorTerm): Поставщик. Ссылка на поставщикаtype(text): Тип. Тип затрат - оплата товара (invoice), доставки (delivery)term(text): Условие. Как указана величина платежа: фиксированная сумма (fixed) или в процентах от суммы счёта (percent)value(decimal): Значение. Величина оплаты, указана в соответствии с условиямиcurrency(text): Валюта. Валюта, в котором номинирован платёжbase(text): База. База, относительно которой указан платёж - от суммы заказаtime(decimal): Период. Период в днях от даты заказа, когда необходимо сделать платежcaption(text): Описание. Описание этого платежа в свободной форме
План продаж
Свойства:
id(id): Код. Идентификатор записиdate(datetime): Дата. Дата, на которую планируется выдать на склад указанное количество продукцииproduct(-> MrpProduct): Продукт. Продукция, производство которой планируетсяqnt(decimal): Количество продукции, которое планируется получить на склад в указанную дату.status(text): Статус. Статус планирования производства этой позиции плана продаж
Исходными данными для алгоритма планирования являются сведения об остатках продукции и ресурсов, а также справочные сведения об этапах производства, нормах расхода ресурсов, поставщиках и условиях оплаты поставщикам.
Алгоритм планирования работает при добавлении записи в таблицу MrpPlan "Планы продаж".
Результатом работы алгоритма планирования является появление сведений о заказе ресурсов в таблице MrpResourceStock "Остатки ресурсов", а также сведений о произведенных партиях продукции в таблице MrpProductStock "Остатки продукции".
Алгоритм работает следующим образом. Записи о планах продаж обрабатываются по мере внесения их в базу данных, при сохранении записи.
Обрабатываем остатки продукции и вычисляем остаток продукции на планируемую дату. Если есть дефицит на данную дату, то приступаем к планированию производства данной продукции к этой дате.
Для планирования производства партии: Берем все этапы производства этой продукции. Сортируем в порядке следования прозводственных этапов, от самых первых этапов к последующим. Обрабатываем все этапы. Берем текущий этап. Производим вычисление даты начала этого этапа. Если дата меньше начальной даты в системе - пишем ошибку и прекращаем расчеты: система не может получить нужную продукцию к запланированной дате. Получаем список ресурсов, требуемых для данного этапа. Для каждого ресурса получаем остаток на дату начала этапа. Производим расчет требуемого объема ресурсов для данного производственного этапа. Если остатки ресурсов не позволяют начать этап, производим планирование поставки партии ресурсов. Берём новые остатки ресурсов с учётом запланированной поставки. Если остатки ресурсов позволяют произвести продукцию, сохраняем данные о себестоимости производства и фиксируем расход ресурсов на производство.
Вычислить дату начала этапа: дата конечная, продукция, этап. Сортируем этапы хронологически. От самого последнего этапа начинаем. Отнимаем от даты конечной длительность текущего этапа. Если это требуемый этап - возвращаем дату начала. Если этапы кончились - ошибка. Иначе - берем предшествующий этап.
Планирование поставки партии ресурсов: на входе - дата поступления ресурсов и требуемое количество. Справочно указываем основание заказа. Получаем длительность перевозки и изготовления требуемого ресурса для расчёта даты заказа. На эту дату получаем - какой поставщик и условия поставки будут действовать. В соответствии с этими условиями записываем финансовые планы и требуемое количество ресурса для заказа. Записываем в список партий ресурсов эту партию как заказанную (planned order). Основание заказа - продукция, этап.
Получить остаток ресурсов на дату: берем перечень всех партий ресурсов в хронологическом порядке - от начальных остатков, остатков в транзите, и спланированных поставок. Далее получаем список всех расходных операций на дату. Соотносим приходные операции и расходные операции. Оставляем список всех партий, у которых остаток получился положительный - его и возвращаем.
Списать ресурсы на производство: продукция, этап, дата начала этапа. Берем список ресурсов, требуемый для данного этапа. Для каждого ресурса берем текущий ресурс. Получаем остатки этого ресурса на дату. Делаем расчет требуемого количества ресурса на производство. Если ресурса не хватает - пишем об ошибке. Если ресурса хватает, то для каждой партии ресурса на складе списываем имеющееся количество ресурсов из этой партии до тех пор, пока не наберем требуемое количество ресурсов.
Алгоритм не учитывает планирование продаж - план представляет собой сразу план производственных партий. Для учета плана продаж необходима агрегация планов продаж из различных источников, планирование остатка продукции, соотнесение их с планом продаж и планирование производственных партий.