170 похожих чатов

Всем добрый день! Есть система учета товаров на складах написанная на

PHP.

Простыми словами, платформа показывает количество остатков товара на разных складах.

На данный момент есть таблица products_availability:
id, product_id, warehouse_id, quantity;

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

Какие варианты решения задачи вы видите? Как бы вы это реализовали?

Мне нужно по каждому дню хранить количество остатков.

Неужели нужно клонировать таблицу ежедневно?)

26 ответов

62 просмотра

Остатки постоянно в течении дня меняются ведь. Нужна историческая таблица

Maqsud-A. Автор вопроса
SiZE
Остатки постоянно в течении дня меняются ведь. Нуж...

Да, поэтому в голову пришло под конец дня клонировать таблицу остатков)

Вести лог изменений, на его основе можно восстановить состояние за любую дату.

Maqsud-A. Автор вопроса

Да именно так, в конце дня копировать остатки в новую таблицу

Maqsud A.
Как она должна выглядеть?

Самое простое id, product_id, warehouse_id, change_amount, timestamp. А дальше берете текущее состояние и разматываете на столько дней назад, насколько надо. Это если прямо в лоб решение.

в данном случае нужна таблица где описываются все движения товара, т.е. product_id sklad_id amount created_at т.е. при измении кол-ва на складе, у тебя появлется запись 1 1 -1 текущая дата если произошло перемещение товара на другой склад, то будет 1 1 -1 текущая дата 1 2 +1 текущая дата для большей инфомативности можно доавбить тип (перемещение на другой склад, выдано покупателю, утилизация, поступление)

Egor Gruzdev
в данном случае нужна таблица где описываются все ...

если совсем упороться можно поставить бд от оракла и там можно цеплять фильтрабельный json с хронологией для каждой колонки но думаю размер обьекта не обрадует сервер при извлечении через пару лет)

Egor Gruzdev
в данном случае нужна таблица где описываются все ...

ты еще не учел что у него с таким числом товара с каждым днем база пополняется в среднем 20к позиций * 10 складов на 200к записей это очень быстро истощит даже uint64 идентификаторы

FFx0001
если совсем упороться можно поставить бд от оракл...

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

FFx0001
ты еще не учел что у него с таким числом товара с ...

из того что у него написано, я такаого не заметил, он указал что у него всего 20к SKU по 10 складам, это не очень много

Пиши логику перемещений. Всё равно когда нибудь кладовщик накладные попросит.

Event Suorsing по моему хорошое ришения пожете почитат

что будите делат проста по ивену будете добавля новий запис в таблитсу допустим product_historys

Maqsud-A. Автор вопроса
Egor Gruzdev
в данном случае нужна таблица где описываются все ...

Все это уже имеется. Накладные по перемещениям, продажи, приходы, возвраты, отмены и тд. Но этот подход все равно не дает мне получить количество остатков за определенный день, я могу видеть остатки только на текущий день. Структура такая: product_id, warehouse_id, quantity 1 1 50 1 2 30 1 3 5

Maqsud-A. Автор вопроса
Egor Gruzdev
в данном случае нужна таблица где описываются все ...

Твое предложение у меня называется логом движений товара😁 Но все равно нет возможности вытащить конкретное количество остатка за определенный день.

Maqsud A.
Твое предложение у меня называется логом движений ...

Это не лог модете не обновлять а только дабавлят, например запис 1 это означает поступил товар и второй запис -1 ушол тавар, при сумировне по дате все должен быть в порядке

Maqsud A.
Твое предложение у меня называется логом движений ...

Помимо еденицы изменения храни ещё состояние или до или после. Или вообще хранить значение после операции перемещении... Или как предложили выше, вести расчёт на конец дня, недели, месяца, так например делает 1С.

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

Maqsud-A. Автор вопроса

Нет, если хорошенько подумаете, это так не будет работать

Egor Gruzdev
Единственно сразу решить, что нельзя менять транза...

можно пересчитывать всю историю вперед с даты изменения, у него же не строгая отчётность

Maqsud A.
Нет, если хорошенько подумаете, это так не будет р...

Можете дапустим по имени event a филтроват

Maqsud A.
Все это уже имеется. Накладные по перемещениям, пр...

Почему не даёт? Ты же можешь сложить приход и расход до определённой даты, если перемещения все имеются.

Maqsud-A. Автор вопроса
Pavel
Почему не даёт? Ты же можешь сложить приход и расх...

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

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта