Archarious
@Archarious
ИП, Веб-разработчик.

С чего начать систему учёта склада?

Поставлена задача: вести управление складскими запасами магазина на собственной платформе.
Сейчас склад выглядит как таблица, каждый столбец которой вычитает значение для списания товара и прибавляет значение артикула для пополнения.
ffcc1363c24b4bdb9ef39611fa073692.JPG
Мрак полнейший, никуда не годится.

Минимзирую работу до атомарных единиц:
Для начала создал БД.
Вначале таблица склада (коллекция в моём случае) с основными полями:
[ {артикул товара, число товара на складе} ].
Далее таблица с заказами, содержащими товар к списанию:
[ {артикул товара, число товара к списанию} ].
Ещё есть поставки и возвраты – это действия обратные для заказа, но суть та же:
[ {артикул товара, число товара к пополнению} ].
Всё остальное в данных условиях не играет роли.

Знатоки, внимание, вопрос:
Укажите, пожалуйста, как правильно организовать подсчёт текущего количества товарных позиций на складе, если:
  • нельзя вычитать и прибавлять напрямую значения при создании нового заказа или поставки, т.к. нельзя выполнять необратимые операции. (Или без вариантов надо делать транзакции?)
  • при каждом обращении рассчитывать предыдущее состояние склада, вычитать из него 3-4 тысячи заказов и прибавлять 3-4 сотни поставок – не решение
  • необходимо будет добавить подгруппы числа товара на складе «в резерве» «брак» и прочие
  • при поступлении нового заказа должна происходить проверка на наличие позиций склада, а так же резервирование продукции из наличия на этот заказ.


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

Язык, СУБД, и прочие технические аспекты не имеют решительно никакого значения, так как вопрос в данной плоскости сугубо теоретический.
  • Вопрос задан
  • 3728 просмотров
Решения вопроса 1
k1lex
@k1lex
Программист торг. сети. C# (WPF, WinForms), T-SQL
Я на своей практике (а работаю я именно с системами учета) из нормальных могу порекомендовать такую структуру:
1) таблица Приходов Income (заголовок, где указанны дата прихода, подразделение куда пришел и прочее) + IncomeGoods - (тело заголовка, где указан товар, количество и цена)
2) Таблица Расходов Outgo(заголовок, где указанны дата расхода, подразделение от куда ушел) + OutgoGoods - (тело заголовка, где указан товар, количество и цена)
3) таблица взаимосвязей - RelationIO (идентификаторы приходной позиции товара из IncomeGoods и OutgoGoods )-> таблица взаимосвязей приходов и расходов.
В чем суть таблицы: у вас есть приход допустим 20 штук. Вам нужно забрать из него 10 штук. Вы записываете в RelationIO то количество которое вы забрали из прихода и что его забрало.
Только понадобится написать процедуру проведения накладной - под проведением я подразумеваю набор свободных остатков для расхода.
Теперь по отдельным пунктам.
  • Проводить документ только в транзакции. Никакие вычитания в данной системе не нужны. Все операции обратимы. Вы можете убрать взаимосвязи и удалить расход
  • при каждом обращении рассчитывать предыдущее состояние склада, вычитать из него 3-4 тысячи заказов и прибавлять 3-4 сотни поставок – не решение

    Для проведения это единственное правильное решение. Иначе готовьтесь к большой Ж... в приходах и расходах, когда вся ваша система разрастется.
  • Создайте в заголовках места хранения "Основное" и "Брак" + прочие
  • По последнему писать не буду. Много там слишком. Если такая система заинтересует, могу примерную структуру таблиц прислать с алгоритмом (или кодом на MS SQL) для проведения

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
по квадратикам:
1. только транзакции
2. ничего не надо рассчитывать: пакетная обработка с длиной пакета N-операций между состояниями
3. это пару свойств (если детально нужно, то - подмножества) товарного предложения
4. см. п.1
Советую Вам спроектировать диаграмму состояний на UML, чтобы Вы могли наглядно анализировать движение данных между конечными состояниями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы