Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Нужен совет при разработке склада в учетной системе / 25 сообщений из 44, страница 1 из 2
31.07.2009, 11:21
    #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
31.07.2009, 11:29
    #36119803
ERP'шник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
DelphiLexx,

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

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

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

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

Тема про UOM не такая простая, лучше ознакомьтесь с литературой по предметной области.
...
Рейтинг: 0 / 0
31.07.2009, 11:49
    #36119877
DelphiLexx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
ERP'шникТема про UOM не такая простая, лучше ознакомьтесь с литературой по предметной области.
Спасибо - смысл уловил. Не подскажите как это сделать в самом простом случае? Просто особо времени не дают и соответственно вникать в тонкости UOM особо некогда, поэтому нужно запроектировать более менее не статично, но без излишков по времени
...
Рейтинг: 0 / 0
31.07.2009, 12:19
    #36119996
Naf
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
31.07.2009, 12:50
    #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
31.07.2009, 13:04
    #36120180
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
DelphiLexx
MEA_CONVERT - таблица конвертирования из одних единиц в другие
RAW_ID integer
MEA_ID itneger
MEA_ID integer
Coeff_Convert double precession

если понадобится, например, единицы массы пересчитывать в объем и т.п.
...
Рейтинг: 0 / 0
31.07.2009, 13:12
    #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
31.07.2009, 13:19
    #36120260
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
DelphiLexxВ смысле может получиться так, что для перевода одной единицы в другую будет недостаточно коэф. переводы, ну т.е. для разных компонентов этот компонент будет разный?!

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

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

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

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

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

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

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

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

я как раз про такую ситуацию. У вас создалась запись партии с указанием количества и ссылкой на справочник сырья, которая является источником информации о единице измерения. Через месяц метры, в справочнике сырья, поменяли на сантиметры. Вы сразу же, автоматически, становитесь обладателем множества записей с цифрами, непонятно что означающими.
...
Рейтинг: 0 / 0
31.07.2009, 17:33
    #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
31.07.2009, 18:04
    #36121168
DelphiLexx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
НУ что, так можно?
...
Рейтинг: 0 / 0
01.08.2009, 12:46
    #36121645
DelphiLexx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
Очень жду вашего ответа
...
Рейтинг: 0 / 0
01.08.2009, 16:12
    #36121718
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
Лучше добавьте ЕИ к запись партии. Зачем возможные колизии когда их можно избежать. А из SKLAD, кстати, можно убрать за ненадобностью. При необходимости получить остатки , всегда можно взять ЕИ из справочника
...
Рейтинг: 0 / 0
01.08.2009, 20:48
    #36121815
DelphiLexx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет при разработке склада в учетной системе
iscrafmЛучше добавьте ЕИ к запись партии.
Что за ЕИ - не понял вас, не могли бы структурно через таблицы изобразить

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


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