Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Учет товара разной стоимости, но одного наименован, какие поля внести в таблицу БД? 
:(
    Опции темы
thomas
Дата 10.9.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



Приветствую всех.

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

Как все это отслеживать? Какому клиенту сколько товара и какой начальной стоимости было отпущено. Тут надо обновлять данные по остатку товара на складе. Просто по ID товара не прокатит. (если входная цена всегда одна и таже, то без проблем)
На конец года надо делать отчет по наличию товара на складе и его общей стоимости. А тут может возникнуть ситуация:
товар А цена 10ед 100шт
товар А цена 12ед 500шт
товар А цена   9ед  25шт.
Всего 625шт 
Ну и так далее.

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

Заранее спасибо.       


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Akina
Дата 10.9.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(thomas @  10.9.2007,  12:50 Найти цитируемый пост)
Просто по ID товара не прокатит

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

Select * From Incoming Where GoodsID = ... And Closed = False


Либо производят вычисления по средневзвешенной цене остатков на складе - но это порождает просто дикую бухгалтерскую отчетность.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
thomas
Дата 10.9.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



Akina, 
спасибо за отклик.  smile 

Но,  вопрос не про накладные, а про таблицу описывающую товары на складе.

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

Вот поэтому я и задал вопрос, как "взрослые" организовали хранение данных на товар в БД.

Какие поля и почему нужно добавить в таблицу "Товар" что бы получить реальную модель?
ID для поставщика, дату поставки, ... , что-то еще?  smile 

В учебниках всегда приводят самые простейшие варианты организации БД. 



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
DimW
Дата 10.9.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(thomas @  10.9.2007,  16:04 Найти цитируемый пост)
Какие поля

thomas, прежде чем думать о полях таблицы, нужно определить логическую структуру процесса, одним добавлением полей в таблицу товаров не обойтись.
давай по порядку:
1) у нас есть поставщик который нам поставляет товар, таким образом у нас есть сущность "поставщик".
2) от поставщика мы получаем товар в партиях, иначе быть не может, отсуда еще сущность "партия"
3) и сущность "товар"
и так детализируем:
ПОСТВЩИК:
поставщик есть поставщик к нему не прикопаешься smile.

ПАРТИЯ:
при получении партии нужно сделать наценку на товар.
наценка на товар может идти несколькими способами.
     а) индивидуально(чаще всего не используется)
     б) по типу продукции (алкоголь, молочные продукты, консерванты и т.д.)
     в) в зависимомти от цены товара, к примеру если колбаса у поставщика стоит 200р. то наценка на нее 10%, а если бомжатник стоит 3р. то наценку 10% на него не сделаешь т.к.  за привоз больше отдашь(бензин, з.п. водителя, грузчики), соответственно наценка от 100% и выше.
вариант "в" чаще всего используется.
идем дальше нужно определиться где будут вестись ценовые изменения, для этого лучше добавить еще одну сущность т.к. наценка на товар из партии может меняться несколько раз.
и так выресовывается еще одна сущность, назовем ее "наценки(умнее ничего не придумал)".

ТОВАР:
эта сущность является справочником товаров которые сожержаться на складе. здесь тоже есть подвох, ведь товар может продаваться не только упаковками, но и штуками, к примеру шокаладку дольками продавать не будешь, а вот ампулы каких нить лекарств легко продаются штуками, соответственно это тоже нужно учитывать. пока по этому поводу предложить ни чего не могу. будем думать...

и так мы имеем 4 сушности которые 100% будем использовать:
ПОСТАВЩИК
ПАРТИЯ
НАЦЕНКИ
ТОВАР

но над этой схемой нужно еще поработать т.к. не понятно как организовать штучную продажу, т.е. мысли есть, но лучше послушать тех кто это организовывал. возможно придется добавить еще одну сущность. 
PM MAIL ICQ   Вверх
SergeBS
Дата 11.9.2007, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



thomas, 
Цитата
Просто по ID товара не прокатит. (если входная цена всегда одна и таже, то без проблем)

Ну почему так пессимистично. Вот у меня например есть справочник услуг. Так для услуги я завожу таблицу истории изменения цен, и в результате всегда знаю, какая услуга когда сколько стоила. Ну а ежели различать услугу и по поставщику - так эта таблица еще ценнее становится. Создание такой таблицы достаточно просто автоматизировать, а дальше - в зависимости от ситуации (в твоем случае) после окончания срока актуальности (товар уже распродан, но бух.данные нужно хранить достаточно долго) скидывать либо в архив этой базы, либо в архивную базу.
PM MAIL   Вверх
DimW
Дата 11.9.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



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

схема такая:

ПОСТАВЩИК ---< ПАРТИЯ ---< НАЦЕНКИ >---ТОВАР ("<", ">"- вторичные ключи)

определим поля для каждой сущности (ограничимся минимальным набором полей):

ПОСТАВЩИК:
id
name (некое название поставщика)

ПАРТИЯ:
id
id_ПОСТАВЩИКA

ТОВАР
id
name (наименование товара)

НАЦЕНКИ (это та самая таблица о которой сказал выше SergeBS)
id
id_ТОВАРA
id_ПАРТИИ
количество
ед_имерения
цена_поставщика
наценка_на_товар
дата_изменения_наценки

PM MAIL ICQ   Вверх
SergeBS
Дата 11.9.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



DimW, 
В ПАРТИЯ еще полезно добавить поле "дата поставки". И перенести туда же поле "цена_поставщика". Получится динамика изменения цены товара. Но тут уже надо тщательно изучать, насколько это надо и т.п. Если "цена_поставщика" у партии может меняться (типа у.е. в рубли), то начальная дата - начальная цена, а дальше даты - изменение. Ну и т.п. Дальше мне думать лень... Информации мало.
PM MAIL   Вверх
DimW
Дата 11.9.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(SergeBS @  11.9.2007,  12:09 Найти цитируемый пост)
В ПАРТИЯ еще полезно добавить поле "дата поставки". И перенести туда же поле "цена_поставщика". 

ага, так будет лучше. 

Цитата(SergeBS @  11.9.2007,  12:09 Найти цитируемый пост)
Дальше мне думать лень... Информации мало. 

да мне что то тоже т.к. сам автор не проявляет интереса.
PM MAIL ICQ   Вверх
thomas
Дата 14.9.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: нет
Всего: 65



SergeBS, 
DimW, 
Цитата

Цитата(SergeBS @  11.9.2007,  12:09 Найти цитируемый пост)
Дальше мне думать лень... Информации мало. 

да мне что то тоже т.к. сам автор не проявляет интереса.


Автор бился в конвульсиях.  smile 
Днем работаем, вечером в вечерней вышке учимся, а в перерывах между боями решаем очень гадкую проблему.
Вот переустановился, пока полет нормальный  smile 

На данный момент я имею такую структуру БД, см. прилагаемый файл.

От проблемы не соответствия цены в таблице описывающей товар и таблицах фактур и , скажем так, заказов я ушел следующим образом.
В таблице Artikel(товар) есть поле HuidigeVerkoopPrijs, которое описывает цену товара на данный момент времени. Она может быть изменена пользователем.
В таблицах WerkBonDetail и FactuurDetai есть поле VerkoopPris, которое содержит цену на товар в момент выписки WerkBon или Factuur. Оно остается неизменным.
Т.е. всегда можно увидеть по какой цены ушел товар.

SergeBS, 
Цитата

Так для услуги я завожу таблицу истории изменения цен, и в результате всегда знаю, какая услуга когда сколько стоила.

А поподробнее можно?  smile 

DimW, 
А партий там в принципе нет. Есть только LeveringsBon, типа "товарная накладная" если по русски, бумажка о доставке(цены там нет по определению). А примерно раз в месяц или квартал, как договоришься, поставщик делает Factuur на все что он поставил в этот период. Тут уже есть цена. И это уже надо проплачивать. Отсюда в принципе береться кол-во товара для изменения данных стока(voorraad) в таблице Artikel(товар).


Сейчас думаю о том как завести историю цен и как организовать хранение данных о поставщиках для конкретного товара.
Товар один а поставщиков много. 
В таблице для каждого товара одна строка. В ней (пока) есть поле LeverancierID дает ссылку на одного поставщика. А как сделать что бы можно было указывать всех поставщиков? Создать промежуточную таблицу?


ЗЫ и не ругайтесь, что ERD на Фламанском. Просто не было времени переделывать на русский.  smile 

Это сообщение отредактировал(а) thomas - 14.9.2007, 13:26

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  DBvoorLuk.zip 92,99 Kb


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.