Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Склад + торговля. Пример реализации.
 
 автор: Stanislav   (29.05.2011 в 09:17)   личное сообщение
 
 

Склад + торговля. Пример реализации.
По просьбе товарищей излагаю структуру своей базы данных.

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

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

Теперь подробнее о структуре таблиц.

Таблица RegisterStorage (текущие складские остатки)
Поля:
RegisterStorageID - автономер записи
Created - дата записи
ArrivalDetailID - уникальный номер продукта
StorageID - номер склада, где находится продукт
Qty - кол-во продукта
Weight - вес продукта
Lot - номер ячейки, где лежит продукт
RegisterStorageStatusID - статус продукта (нормальный, зарезервирован, в обработке и т.д.)
ProcessingDocumentTypeID - тип документа, по которому сейчас обрабатывается продукт
ProcessingDocumentID - номер документа, по которому сейчас обрабатывается продукт

Таблица RegisterTraffic (движение продуктов).
Поля:
RegisterTrafficID
Created
UserID
TrafficTypeID (приход, расход, внутренние складские операции)
ContactID - клиент - от кого получено или кому отпущено
DocumentTypeID - тип документа операции
DocumentStatusID - статус документа
StorageID - номер склада
DocumentID - номер документа
Qty - кол-во
Weight - вес
Price - цена
ArrivalDetailID - уникальный номер продукта

Теперь таблицы-документы:

Таблица-документ Arrival (поступление товара на склад)
ArrivalID
Created
UserID
StorageID
ShipperID (поставщик)

Таблица детализации поступления ArrivalDetail:
ArrivalID
ArrivalDetailID
ProductID
ProductPackageID (упаковка продукта)
ProductSizeID (размер)
ProductSortID (сорт)
Lot (№ ячейки на складе)
Qty
Weight
Notes (заметки)


Таблица-документ Sale (продажа)
SaleID
UserID
Created
DocumentStatusID (статус документа: в обработке, закрыт, отменен)
ContactID (покупатель)
RecipientName (имя компании-получателя)
RecipientCEOName (имя ответственного лица получателя)
RecipientPhone
RecipientFax
DeliveryServiceID
дальше идут адресные текстовые поля: индекс, страна, улица и т.д.
ProductCost (общая стоимость продуктов)
DeliveryCost (стоимость доставки)
OtherCosts (другие расходы)
OtherCostsDesc (пояснение других расходов)
Tax (налог - в денежном исчислении, а не в процентах!)

Таблица SaleDetail (детализация продажи)
SaleDetailID
SaleID
ArrivalDetailID (уникальный номер продукта - по нему можно определить св-ва продукта и номер партии поступления)
Qty
Weight
SalePrice (цена продукта)
ShipperPrice (цена поставщика)
StorageID
Lot

Остальные таблицы-документы (перемещение, растаможка и т.д.) строятся по аналогии таблиц Sale, SaleDetail. Общее во всех таблицах-документах одно: поле ArrivalDetailID (уникальный номер продукта), по которому всегда можно проследить продукт.

Все эти таблицы хранятся в серверной части.

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

Справочные таблицы: Pricelist, Product, User, Group и т.д.

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

Основы изложил. На вопросы отвечу.

  Ответить  
 
 автор: Гоблин   (29.05.2011 в 09:45)   личное сообщение
 
 

Идея на счет черновиков интересная. Только допустим на серверной части остаток товара А - 10 шт. В одном черновике один продавец готовит продажу 6 шт, (ему показывает наличие 10) в соседнем кабинете готовят продажу 7 шт (им тоже показывает наличие 10) Продают одновременно. Кто в пролете?

  Ответить  
 
 автор: Stanislav   (29.05.2011 в 13:09)   личное сообщение
 
 

Хороший вопрос. Я это сразу не описал, чтобы не загромождать деталями. Для этого в таблице RegisterStorage есть поля QtyProcessing, WeightProcessing.
Например, если Qty=10 и QtyProcessing=0, то продавец может начать готовить на продажу 10 шт.
Допустим он взял 6 шт. Тогда прибавляем к полю QtyProcessing 6 шт.
Когда второй продавец посмотрит поле Qty, он увидит: 4 (10) - 4 доступно из 10 имеющихся на складе. И программа позволит ему взять не больше 4.
Когда оформляется документ, программа еще раз проверяет, что кол-во и вес свободных и имеющихся на складе продуктов не превышает указанных продавцом.
Да и кстати, в силу вышесказанного блокировки этой таблицы у меня просто отключены за ненадобностью.

  Ответить  
 
 автор: Explorer   (29.05.2011 в 11:28)   личное сообщение
 
 

>> Основы изложил. На вопросы отвечу.

а можно просто скриншот схемы БД увидеть?

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

  Ответить  
 
 автор: Stanislav   (29.05.2011 в 13:11)   личное сообщение
 
 

Извини, я схемы баз данных не юзаю за ненадобностью.

  Ответить  
 
 автор: Explorer   (29.05.2011 в 13:28)   личное сообщение
 
 

Станислав, извини, но твои познания в части проектирования и разработки БД нуждаются в существенном пополнении...

вот ты пишешь:


В этом главный плюс такой структуры: таблицы-документы можно добавлять сколько угодно и когда угодно - структуру базы переделывать не придется.


и тут-же, следом:


Например, вздумалось руководству добавить новый тип товарооборота: Перепаковка - да запросто: добавляете в базу новую таблицу-документ Перепаковка, и пишете форму для нее.



что тогда, по твоему, "переделывать структуру базы"?

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

  Ответить  
 
 автор: Explorer   (29.05.2011 в 13:49)   личное сообщение
 
 

ну и концептуальная ошибка - в классическом случае в задачи склада не входит реализация (продажа) товара.

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

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

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

  Ответить  
 
 автор: Stanislav   (29.05.2011 в 19:53)   личное сообщение
 
 

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

Я в данном топике ставил целью не перечислить все задачи, выполняемые складом и вообще его концепцию, а изложить принцип регистров и документов. И привел 2 документа, в достаточной мере отражающие этот принцип. Этот принцип придумал не я. Я достаточно долго искал его в интернете, прежде чем приступить к реализации склад+торговля. Остальные принципы представлялись ущербными.

  Ответить  
 
 автор: Силblч   (29.05.2011 в 20:38)   личное сообщение
 
 

ну не знаю, не знаю :)
я считаю, что идеальная модель, которую мне удалось реализовать вместе с товарищами - это именно та, которую мне удалось реализовать вместе с товарищами.

а все, что пишут другие - ущербное.

  Ответить  
 
 автор: Гоблин   (29.05.2011 в 16:00)   личное сообщение
 
 

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

  Ответить  
 
 автор: Stanislav   (29.05.2011 в 19:59)   личное сообщение
 
 

Ну как же нет связей. Есть. Например, в таблице Sale есть поле ContactID, так вот при создании этой таблицы в источнике данных этого поля я прописал:
SELECT Contact.ContactID, Contact.ContactName FROM Contact ORDER BY Contact.ContactName
Это и есть связь. И так для всех связанных таблиц. А схема - она же ни на что не влияет, она чисто визуальная надстройка.
Завтра постараюсь распределить основные таблицы по схеме и сделать скрин.

  Ответить  
 
 автор: Explorer   (29.05.2011 в 20:06)   личное сообщение
 
 

>>> А схема - она же ни на что не влияет, она чисто визуальная надстройка

Станислав, вы ошибаетесь,даже если сочтете мое мнение высокомерным

1 используя схему данных вы формируете систему поддержки целостности данных БД
2 применение полей подстановки в таблицах далеко не самое бесспорное решение

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

ничего личного, как говорится

  Ответить  
 
 автор: Lukas   (29.05.2011 в 20:36)   личное сообщение
 
 


применение полей подстановки в таблицах далеко не самое бесспорное решение


Да-да-да.

  Ответить  
 
 автор: Силblч   (29.05.2011 в 20:40)   личное сообщение
 
 

та да
мне, защитившему диплом Магистра по этой теме, вообще прискорбно читать, как человек отстаивает свое незрелое решение, только лишь потому, что ему, переписывать не хочется

куда катится мир?

  Ответить  
 
 автор: Lukas   (29.05.2011 в 20:55)   личное сообщение
 
 

Самое смешное,
что наиболее востребованной моей поделкой оказалась та
на которую я сейчас без содрогания и тошноты смотреть не могу.
Но переделывать лееень.

  Ответить  
 
 автор: час   (29.05.2011 в 21:07)   личное сообщение
 
 

  Ответить  
 
 автор: Explorer   (29.05.2011 в 21:11)   личное сообщение
 
 

>>> Но переделывать лееень.

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

утверждать этого не могу и не стану, но выглядит все как общие рассуждения "на тему склад+продажи"

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

  Ответить  
 
 автор: Lukas   (29.05.2011 в 21:17)   личное сообщение
 
 

Согласен, есть настораживающие моменты.
Впрочем, в этой кухне я далеко не "Магистр". :)

  Ответить  
 
 автор: Гоблин   (30.05.2011 в 00:11)   личное сообщение
 
 

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

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 04:38)   личное сообщение
 
 

Да. Хотел поделиться идеей, а получил наезды от местной инквизиции. Не ожидал такого.
Ладно вот скрины:
http://letitbit.net/download/69419.69faa852e50ccda67bea9aa7ca75/Screen.rar.html
пароль: Explorer

Если щас пойдет речь, что программы нет в реале и скрины сп.енные, то на этом разговор и закончим. Мне тут что-то доказывать нет резона. Программа сейчас в опытной эксплуатации, доделываю отчеты и пожелания, возникающие в процессе.

  Ответить  
 
 автор: Explorer   (30.05.2011 в 05:05)   личное сообщение
39 Кб.
 
 

==>>>

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 05:11)   личное сообщение
 
 

OMG, куда ты этот пароль всталяешь? Просто скачивай файл: скачать на низкой скорости - потом кнопка "спасибо не надо" - скачать медленно. Скрины зажаты в архив, пароль к которому Explorer.
Ну или скажи куда выложить.

  Ответить  
 
 автор: Explorer   (30.05.2011 в 05:17)   личное сообщение
 
 

не качает

а скрины можно выложить прямо сюда - примерно так, как выложил я в предыдущем сообщении.

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

для нагладности хотелось получить общее представление.

впрочем я его уже получил и без скриншотов схемы БД

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 05:22)   личное сообщение
87 Кб.
 
 

1

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 05:23)   личное сообщение
94 Кб.
 
 

3

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 05:24)   личное сообщение
114 Кб.
 
 

схема

  Ответить  
 
 автор: Explorer   (30.05.2011 в 05:27)   личное сообщение
 
 

спасибо

  Ответить  
 
 автор: Гоблин   (30.05.2011 в 18:47)   личное сообщение
 
 

Я так и думал. Может это и респект какой, но по крайней мере становится понятно, почему создаем хренову тучу новых таблиц и это никак не отразится на схеме. Схемы по сути нет. Все через запросы переобновляется и удаляется. Так?

  Ответить  
 
 автор: Stanislav   (31.05.2011 в 01:05)   личное сообщение
 
 

Да.

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 05:38)   личное сообщение
 
 

Я не против конструктивных споров и не считаю, что в моей структуре нет слабых мест или возможностей к улучшению и готов выслушать замечания и признать ошибки. Просто ты за тоном своим следи. Может ты и офигеть какой технический спец, но это не повод так неучтиво разговаривать с незнакомыми людьми. Не разобравшись в ситуации, делать необоснованные предположения о том что человек лжец и невежда.

  Ответить  
 
 автор: Explorer   (30.05.2011 в 05:44)   личное сообщение
 
 

Станислав, не нужно меня троллить. это пустое и бесперспективное занятие.

  Ответить  
 
 автор: Explorer   (30.05.2011 в 07:11)   личное сообщение
 
 

Станислав, просто назовите ваше приложение

Товарный баланс торгово-закупочной деятельности предприятия

и вычерните слово склад вообще

  Ответить  
 
 автор: Силblч   (30.05.2011 в 12:45)   личное сообщение
 
 

да уж :)

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 12:48)   личное сообщение
 
 

С этим согласен. Слово склад затесалось на этапе ТЗ, когда предполагалось лишь контролировать состояние складов. Потом все это переросло в торговлю. Но в принципе структуру регистры-документы можно использовать под склад.

  Ответить  
 
 автор: Stanislav   (30.05.2011 в 05:23)   личное сообщение
97 Кб.
 
 

2

  Ответить  
 
 автор: Alex   (19.05.2012 в 15:19)   личное сообщение
 
 

А я вот такую себе сделал: http://file.qip.ru/file/BnP3aOw9/Sclad.html
Позволяет цеплять к товарам фотки jpg, файлы любые (описания например); к документам файлы любые (сканы счетов например) (двойной клик по коду документа в форме); подгонять сумму документа :) ; учетные цены; карточка товара, резерв ну и т.д. и т.п. Делал для себя - меня устраивает - так что сильно не пинать :)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList