Организация учета дробного товара в БД

Модераторы: kdv, CyberMax

Ответить
nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Организация учета дробного товара в БД

Сообщение nicolas » 28 сен 2006, 17:54

Здравствуй, All!

Надеюсь выбрал правильный раздел. Если нет - модераторов прошу перенести (ну или потереть :( )

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

For example:

Код: Выделить всё

Товар.
шт -            коэфф 1. - базовая ед.
упаковка  - коэфф 5. (в упак 5 штук)
Учет ведется в регистрах: движений и остатков.
В регистрах учет ведется в базовых единицах.
В документах фиксирующих перемещения записи делаются в любых ед.изм. товара, при фиксации в регистры все переводится в базовые.

Все пока было хорошо, но... пользователь хочет ввести еще одну единицу, назовем ее "штучка" - которая есть одна треть штуки.
Соотв. в таблице ед.изм. пишем "штучка, коэфф. 0.333" (разрядность коэффициента - 3 знака после запятой).

Соответственно при записи в регистр будут происходить ошибки округления (продано три "штучки", по регистрам прошло 0.999 шт вместо 1 шт и т.д.)

После долгих размышлений :) придумалась схема такая:

Код: Выделить всё

хранение всех учетных значений в регистрах в виде простых дробей
храниить числитель и знаменатель (если ед.изм. часть базовой).
Т.е. в регистре вместо одного числа, будет 2: кол-во и делитель. 
Для базовой и кратных ей ед.изм. делитель равен 1. 
Для дробных ед.изм. делитель равен коэфф. деления.
Соотв при расчетах это учитывать, т.е. вместо простого SUM(QUANT) придется писать SUM(QUANT)/DIVIDER (с группировкой по одинаковым DIVIDER) и потом все это складывать.

Собственно вопрос :) наконец.
Имеет ли такая схема право на жизнь? Нигде в литературе и в инете, и в программных решениях такое не встречал. Может там есть какие подводные камни?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 29 сен 2006, 04:31

Пусть штучка = 1, а штука = 3 штучки. Таким образом, избавляешься от дробей. То бишь у тебя самая малая величина должна быть единичкой.
Ну и соответственно упаковка это есть 15 штучек и 15/3=5 штук.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 29 сен 2006, 08:28

CyberMax писал(а):Пусть штучка = 1, а штука = 3 штучки. Таким образом, избавляешься от дробей. То бишь у тебя самая малая величина должна быть единичкой.
Ну и соответственно упаковка это есть 15 штучек и 15/3=5 штук.
Дело в том, что у товара может быть история. Т.е. целый год базовой единицей была штука, в регистрах все записано в штуках, а потом пользователь решает разделить штуку на 3 части.
Переход к новой базовой единице требует перерасчета всех регистров движений и остатков, что не есть хорошо, т.к. цены тоже прописаны для базовой единицы и при смене базовой единицы надо и цены пересчитывать.
На самом деле в качестве основной единицы учета пользователь в подавляющем большинстве случаев использует именно штуки. Ну а части штук только иногда.

eugeney
Сообщения: 79
Зарегистрирован: 29 окт 2004, 18:51

Re: Организация учета дробного товара в БД

Сообщение eugeney » 29 сен 2006, 11:31

По опыту надо рассматривать штучка и штука как разные товары. Небольшой гемор при подсчете количеств что по остаткам у тебя
10 штучек и 224 штук, но так правильнее.
Из опыта есть пачкаx20 штук , книг например. Отрыли пачку книг получили получили 20 штук книг но из них опять пачку не сделаеш. Аналогично с бочкой краски например есть бочка она числится как открыли получили приход 80 литров краски и расход бочки. Т.е. это разные позиции должны быть но надо понимать что некоторые позиции можно проброзовать в другие, просто распечатав. Например если у теб яесть кусок проволки на 3 метра, то это равнозначно что у тебя 3 куска по одному метру но не наоборот.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 30 сен 2006, 00:39

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

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 30 сен 2006, 08:32

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 02 окт 2006, 17:37

Небось аптеку автоматизируешь? Где упаковки вскрываются и продают частями (поампульно)?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 окт 2006, 18:09

Где упаковки вскрываются и продают частями (поампульно)?
кстати, я тоже в некоторых апреках наблюдаю возможность купить пару блистеров из пачки. как это проводится через кассу - не знаю. Похоже, касса обычная, не "компьютерная".

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 02 окт 2006, 18:59

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

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 02 окт 2006, 19:30

WildSery писал(а):Небось аптеку автоматизируешь? Где упаковки вскрываются и продают частями (поампульно)?
Угу.
И примеры у нас при постановке задачи именно "в ампулах" (не поймите мя неправильно :) )

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 02 окт 2006, 19:34

Merlin писал(а):Достигается учётом в минимальных единицах и отслеживанием их количеств в агрегированных (упаковках и итоговом). При взятии минимальной единицы указывается не только что её взяли вообще, а и из какой упаковки, количество в которой декрементируется вместе с общим.
Учет в минимальных единицах - эт конечно хорошо. Но вот с поставщиками обычно на уровне упаковок работают, а не на уровне ампул. Т.е. все цены - на упаковку. А вот тут и засада - как расписать цену ампулы, если цена упаковки 10 руб, а ампул в упаковке - 3?
А отчеты все тоже хотят по-упаковочно. Если продали по 1 ампуле из 3 упаковок, сколько ушло со склада упаковок?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 02 окт 2006, 19:49

Код: Выделить всё

Номенклатура
ID             эт понятно
Ed_Izm      ссылка на каталог единиц измерения, на минимальную
PriceKol      цену указывать/хранить за единиц измерения (за 10 например)
ещё много чего

Упаковки на складе
ID
Человечий символьный номер если надо
ID_Tovar
Kolvo         в минимальных единицах
если продали по одной ампуле из трёх упаковок, то упаковок на складе не уменьшилось, но три из них неполные, и в записях о них количество не равно стандартному. А если нужно выдать отчёт по упаковкам, то никого не должно удивлять, что там 2 упаковки с четвертью.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 03 окт 2006, 12:26

nicolas писал(а):Но вот с поставщиками обычно на уровне упаковок работают, а не на уровне ампул. Т.е. все цены - на упаковку. А вот тут и засада - как расписать цену ампулы, если цена упаковки 10 руб, а ампул в упаковке - 3?
Не "обычно", а всегда. По крайней мере мы - точно. Цена же в аптеке не расписывается как ЦенаУпаковки/КолвоШтук, а чаще ставится _своя_, обычно больше этой "вычисленной". Т.е. хочешь "разбить" упаковку - пожалуйста, но отдельная штучка будет дороже.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 03 окт 2006, 14:27

WildSery писал(а):
nicolas писал(а):Но вот с поставщиками обычно на уровне упаковок работают, а не на уровне ампул. Т.е. все цены - на упаковку. А вот тут и засада - как расписать цену ампулы, если цена упаковки 10 руб, а ампул в упаковке - 3?
Не "обычно", а всегда. По крайней мере мы - точно. Цена же в аптеке не расписывается как ЦенаУпаковки/КолвоШтук, а чаще ставится _своя_, обычно больше этой "вычисленной". Т.е. хочешь "разбить" упаковку - пожалуйста, но отдельная штучка будет дороже.
Ну тогда или для каждой единицы измерения своя цена, что сильно затрудняет процедуры переоценки, и др.
Либо действительно ампула - самостоятельный товар.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 04 окт 2006, 12:57

Не знаю как с таблетками, но если мы на складе разделяем костюм на штаны+пинжак и продаем по отдельности, то пинжак списываем как внутреннее перемещение, потом опять же по внутреннему перемещению приходуем отдельно штаны и отдельно пинжак как 2 новых изделия и продаем на сторону уже новые изделия.

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

Ответить