powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Нужен совет при разработке склада в учетной системе
25 сообщений из 44, страница 1 из 2
Нужен совет при разработке склада в учетной системе
    #36119775
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю программистом в одной компании, сейчас в одном из проектов реализовывается ф-ции склада. Сообственно на меня возложена эта задача, а опыта построения программ складского учета особо не было. Вообщем нужен совет программера участвующий в подобных проектах. Столкнулся с такой проблемой: как известно склад может хранить сырьё разного типа, а соответственно и за каждым видом сырья закрепляюся свои ед. измерения, т.е. одни в килограммах, другие в литрах, третьи в метрах, четвертые в штуках и т.д., в справочнике сырья есть возможность за каждым видом компонентов указывать свою единицу, которая используется по умолчанию при добавлении данного компонента на склад (сырье на склад, естестественно добавляется только из справочника сырья). Дать ли пользователю возможность задавать размерность отличную от заданной в справочнике сырья.
Я не знаю нужно ли отрывать такую функцию для пользователя или это полный абсурд, чтобы на складе единицы различались от заданных в справочнике сырья. Дело в том что в зависимости от решения по разному будет выглядеть БД и по разному будет работать логика программы.

Если такую функцию запретить, то изменения ед. изм. у каких-либо компонентов, сразу автоматически отразиться на эти компоненты хранимые на складе. БД в самом простом случает выглядит приблизительно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
MEA_DICT - справочник ед. изм.
  MEA_ID integer
  MEA_NAME varchar( 16 )
RAW_DICT- справочник сырья
  RAW_ID integer
  MEA_ID integer
  RAW_NAME varchar( 64 )
SKLAD - склад
  SKLAD_ID integer
  RAW_NAME integer

Если такую функцию открыть, то изменения ед. изм. у каких-либо компонентов, отразиьтся на эти компоненты только при их новом добавлении. БД в самом простом случает выглядит приблизительно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
MEA_DICT - справочник ед. изм.
  MEA_ID integer
  MEA_NAME varchar( 16 )
RAW_DICT- справочник сырья
  RAW_ID integer
  MEA_ID integer
  RAW_NAME varchar( 64 )
SKLAD - склад
  SKLAD_ID integer
  RAW_NAME integer
  MEA_ID integer /*при добавлении сырья на склад MEA_ID копируется из RAW
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36119803
ERP'шник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DelphiLexx,

Конечно лучше дать пользователю задавать Trans UOM

Для этого вводят вторую единицу измерения - единица измерения для операции.

И в транзакции пишут поля такого типа: item_code, trans_quantity, trans_uom, base_quantity (вычисляется системой), base_uom

Отдельно заводят таблицы пересчетов единиц измерения, в том числе между разными классами UOM. (например пересчет коробок в кг для позиции "Молоко")

Тема про UOM не такая простая, лучше ознакомьтесь с литературой по предметной области.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36119877
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ERP'шникТема про UOM не такая простая, лучше ознакомьтесь с литературой по предметной области.
Спасибо - смысл уловил. Не подскажите как это сделать в самом простом случае? Просто особо времени не дают и соответственно вникать в тонкости UOM особо некогда, поэтому нужно запроектировать более менее не статично, но без излишков по времени
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36119996
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
остатки и движения на складе необходимо хранить в одной и той же единице номенклатуры, а вот справочники:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
table Raw --сырье
  ID integer
  Name varchar( 100 )
  DefaultMeasure Measure --единица в которой ведутся движения и остатки

table Measure --единицы измерения
  ID integer
  Name varchar( 20 )
  Raw Raw --данную единица только для этого сырья!
  Coef numeric( 7 , 3 ) --коэффициент к другим единицам того сырья (например 1 упаковка = 120 штук: у штуки ставим 1, у упаковки 120)

table Warehouse --склады (собственно с единицами не связано)
  ID integer
  Name varchar( 100 )

Допустим, есть поступление количества N в единицах Х, тогда нужно перевести в DefaultMeasure по формуле: N*X.Coef/X.Raw.DefaultMeasure.Coef
Желательно, чтобы DefaultMeasure имело минимальную степень вхождения (обычно 1).
Для получения отчета в произвольных едиицах нужно воспользоваться обратной формулой:
M*X.Raw.DefaultMeasure.Coef/X.Coef

С уважением, Naf
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120112
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafостатки и движения на складе необходимо хранить в одной и той же единице номенклатуры, а вот справочники:

что-то не совсем понял зачем в таблицу Measure запихивать поле Raw_ID и также не понятно почему в Warehouse нельзя использовать MEA_ID.
Вот смотрите, как мне кажется, если я ошибаюсь, пожалуйста, поправьте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
RAW_DICT- справочник сырья
  RAW_ID integer
  MEA_ID integer
  RAW_NAME varchar( 64 )

MEA_DICT - справочник ед. изм.
  MEA_ID integer
  MEA_NAME varchar( 16 )

MEA_CONVERT - таблица конвертирования из одних единиц в другие
  MEA_ID itneger
  MEA_ID integer
  Coeff_Convert double precession

SKLAD
  SKLAD_ID integer
  RAW_NAME integer
  MEA_ID integer /*при добавлении сырья на склад MEA_ID по умолчанию копируется из RAW

теперь предположим есть сырья A у которого в справочнике сырья стоит использовать кг (килограммы), на складе мы хотим указывать для него в т (тоннах). В таблице соответствия между кг и т стоит коэффициент 0.001
т и кг стоит коэфф 1000

пусть на складе мы указали, что сырья A у нас 5тонн, тогда если в каких-то модулях программы используется в каких-либо расчетах компонент А в кг, то согласно таблице конвертирования мы получим что надо домножить на 1000
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120180
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexx
MEA_CONVERT - таблица конвертирования из одних единиц в другие
RAW_ID integer
MEA_ID itneger
MEA_ID integer
Coeff_Convert double precession

если понадобится, например, единицы массы пересчитывать в объем и т.п.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120220
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmDelphiLexx
MEA_CONVERT - таблица конвертирования из одних единиц в другие
RAW_ID integer
MEA_ID itneger
MEA_ID integer
Coeff_Convert double precession

если понадобится, например, единицы массы пересчитывать в объем и т.п.
В смысле может получиться так, что для перевода одной единицы в другую будет недостаточно коэф. переводы, ну т.е. для разных компонентов этот компонент будет разный?! Тогда таблицу конвертирования следует разбить на:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
MEA_CONVERT - таблица конвертирования из одних единиц в другие
  MC_ID integer
  MEA_ID itneger
  MEA_ID integer
  Coeff_Convert double precession

RAWMEA_SPECIAL -т.е. одному коэф. перевода может соответствовать несколько RAW_ID
  MC_ID
  RAW_ID

А почему в таблице склад не нужно использовать MEA_ID
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120260
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexxВ смысле может получиться так, что для перевода одной единицы в другую будет недостаточно коэф. переводы, ну т.е. для разных компонентов этот компонент будет разный?!

да. если такого товара нет и не предвидится, то конечно не стоит усложнять.

DelphiLexxА почему в таблице склад не нужно использовать MEA_ID
суть таблицы склад уточните плз. по структуре непонятно.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120348
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmсуть таблицы склад уточните плз. по структуре непонятно.
SKLAD
SKLAD_ID integer
RAW_ID integer
MEA_ID integer
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120495
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexx,

тогда единица измерения нужна. Правило простое: храните рядом (в одной записи) с цифрой, обозначающей количество, единицу измерения этого количества. всегда. Иначе можете попасть в ситуацию, похожую на 38 попугаев.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120527
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmИначе можете попасть в ситуацию, похожую на 38 попугаев.
Т.е поле MEA_ID необходимо в таблице SKLAD?
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120595
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexxiscrafmИначе можете попасть в ситуацию, похожую на 38 попугаев.
Т.е поле MEA_ID необходимо в таблице SKLAD?
если я правильно понял, то эта таблица суть карточка складского учета. если в нее записывается количество, то конечно нужна и единица измерения этого количества
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120707
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmесли я правильно понял, то эта таблица суть карточка складского учета. если в нее записывается количество, то конечно нужна и единица измерения этого количества
на самом деле эта таблица более сложна и состоит еще из дополнительной, ну суть уловил правильно здесь собственно указывается что у нас на складе, а уже партии конкретного вида сырья храняться в другой таблице. Я разрешаю менять ед. изм. только у вида сырья, но никак ни у партия, все партии одного вида имееют одну и туже размерность, а иначе просто будет большой геморой
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120790
Тоже ипотечник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexx
на самом деле эта таблица более сложна и состоит еще из дополнительной, ну суть уловил правильно здесь собственно указывается что у нас на складе, а уже партии конкретного вида сырья храняться в другой таблице. Я разрешаю менять ед. изм. только у вида сырья, но никак ни у партия, все партии одного вида имееют одну и туже размерность, а иначе просто будет большой геморой

каждый программист должен написать свой компилятор и свой склад

справочник партий конечно должен быть отдельным. а вот партия для текущей операции должна указываться в той же строке. и trans_uom в этом случае будет работать и для партии, а не только для "вида_сырья"

item_code, lot, trans_quantity, trans_uom, base_quantity (вычисляется системой), base_uom
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120802
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже ипотечник
справочник партий конечно должен быть отдельным. а вот партия для текущей операции должна указываться в той же строке. и trans_uom в этом случае будет работать и для партии, а не только для "вида_сырья"

Завязать единицы измерения за партиями я не хочу, это усложняет процесс да и абсурд это
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120842
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexx,

усложнение процесса наступает в тот момент, когда вдруг возникает запись с количеством, непонятно в каких единицах измеренным. Конечно можно реализовать логику, которая на каждом шагу будет контролировать логическую целостность данных, но спрашивали как проще.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120908
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmусложнение процесса наступает в тот момент, когда вдруг возникает запись с количеством, непонятно в каких единицах измеренным...
Нет я имел ввиду другое, дело в том, что у меня реализовано так: сначала выбираем сырье которое хотим добавить на склад, для этого сырья есть возможность задать ед. изм. отличное по умолчанию (которое задается в справочнике сырья). После того, как добавлено сырье для него автоматически формируется одна партия в которой задается цена, дата и кол-во. Партий для конкретного сырья можно задавать сколь угодно.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36120940
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexx,

я как раз про такую ситуацию. У вас создалась запись партии с указанием количества и ссылкой на справочник сырья, которая является источником информации о единице измерения. Через месяц метры, в справочнике сырья, поменяли на сантиметры. Вы сразу же, автоматически, становитесь обладателем множества записей с цифрами, непонятно что означающими.
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36121114
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmя как раз про такую ситуацию.
Опять вы неправильно поняли, сейчас наглядно отображу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
RAW_DICT- справочник сырья
  RAW_ID integer
  MEA_ID integer
  RAW_NAME varchar( 64 )

MEA_DICT - справочник ед. изм.
  MEA_ID integer
  MEA_NAME varchar( 16 )

SKLAD - склад
  SKLAD_ID integer
  RAW_ID integer
  MEA_ID integer /*при добавлении сырья на склад MEA_ID копируется из RAW

SKLAD_BY_PARTY
  SK_PARTY_ID integer //primary key
  SKLAD_ID integer  //foreign key
  COUNT
  PRICE double
  DATE  
  DESCRIPTION
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36121168
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НУ что, так можно?
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36121645
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень жду вашего ответа
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36121718
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше добавьте ЕИ к запись партии. Зачем возможные колизии когда их можно избежать. А из SKLAD, кстати, можно убрать за ненадобностью. При необходимости получить остатки , всегда можно взять ЕИ из справочника
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36121815
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmЛучше добавьте ЕИ к запись партии.
Что за ЕИ - не понял вас, не могли бы структурно через таблицы изобразить

Модератор: Тема перенесена из форума "ERP и учетные системы".
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36122162
DelphiLexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все же как расшифровывается ЕИ?
...
Рейтинг: 0 / 0
Нужен совет при разработке склада в учетной системе
    #36122164
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiLexxИ все же как расшифровывается ЕИ?
ЕИ, Ед.Изм., UOM, Unit of Meassure, Единица измерения...
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Нужен совет при разработке склада в учетной системе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]