Динамическое резервирование материалов (товаров, сырья)

программирование алгоритм erp MRP планирование ресурсов

Коллеги, помогите решить проблему. Представьте себе оптовую фирму.
Есть заказы на отгрузку товара со склада. И есть ожидаемые поступления товара на склад. Даты планируемых отгрузок и даты поступлений известны и, для упрощения, полагаем, что фиксированы и точны. Таким образом складской запас на вечер дня номер i выглядит как: Qi = Q0 + P1+P2+...+Pi - Z1-Z2-...-Zi, где P- суммарные поступления в данный день, Z-отгрузки.
Задача: создать процедуру оформления нового заказа на отгрузку в конкретную дату,с обеспечением неухода склаского запаса в минус.
Простой вариант понятен - пересчитывать прогноз и проверять неотрицательность на каждый день. Беда в том, что заказов очень много, а сервер "не резиновый". Как можно оптимизировать алгоритм ?
Может, кто-нибудь знает, как это у классиков типа SAP R/3 сделано ?

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

Примечание:
2 crimaniak
Спасибо. Вариант с партиями понятен. Я о нем думал. Но у него есть ряд недостатков:
1. Партии нужно "протаскивать" во всех функциях системы. Это очень долго и муторно. Хотелось бы избежать.
2. Усложняются алгоритмы отмены заказа, изменения количества, переноса даты отгрузки и прочее.
Ответы:
Партии товара должны быть. Свободные и заказанные. У партии есть дата начала и дата конца. Начало - когда партия возникла (поступление или заказ). Конец - когда партия исчезла (заказ). Поступление товара: если на эту дату на складе есть свободная партия товара (А), закрываем ее до этой даты, и делаем новую свободную партию (B), начинающуюся с этой даты, заканчивающуюся старой датой конца А (которая может быть NULL), с количеством, равным количеству А плюс поступление. Если партии такого товара не было, просто создаем новую партию от этой даты с незакрытым концом (null). Заказ товара: ну ты понял :) При заказе смотрим на наличие свободной партии товара в этот момент. Закрываем ее на этот день и порождаем две партии - заказанную, которая в этом алгоритме дальше не участвует (можно их вообще не хранить, заказанные партии тут для полноты картины). И свободную, представляющую собою незаказанный остаток. Ну, еще надо обработать вариант поступления или заказа в один и тот же день. По такому же алгоритму. Новых объектов можно вообще не создавать, а менять количества в имеющихся. Таким образом, возможность заказа проверяется одним запросом с проверкой по нескольким индексированным полям (код товара, дата начала, дата конца, количество). Любая операция над товаром меняет максимум три записи в таблице.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.