|
|
|
| Склад + торговля. Пример реализации.
По просьбе товарищей излагаю структуру своей базы данных.
База разделенная. Приспособлена для учета кол-ва продуктов на складе и торговли, но может быть приспособлена для похожих целей и по ходу работы дополняться новыми видами документов без необходимости реструктуризации базы.
Структура базы.
Таблицы построены по принципу ядра, модулей и справочных таблиц.
Есть две основные таблицы-регистры (ядро базы): 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), добавляя к записям текущую дату.
Основы изложил. На вопросы отвечу. | |
|
| |
|
|
|
| Идея на счет черновиков интересная. Только допустим на серверной части остаток товара А - 10 шт. В одном черновике один продавец готовит продажу 6 шт, (ему показывает наличие 10) в соседнем кабинете готовят продажу 7 шт (им тоже показывает наличие 10) Продают одновременно. Кто в пролете? | |
|
| |
|
|
|
| Хороший вопрос. Я это сразу не описал, чтобы не загромождать деталями. Для этого в таблице RegisterStorage есть поля QtyProcessing, WeightProcessing.
Например, если Qty=10 и QtyProcessing=0, то продавец может начать готовить на продажу 10 шт.
Допустим он взял 6 шт. Тогда прибавляем к полю QtyProcessing 6 шт.
Когда второй продавец посмотрит поле Qty, он увидит: 4 (10) - 4 доступно из 10 имеющихся на складе. И программа позволит ему взять не больше 4.
Когда оформляется документ, программа еще раз проверяет, что кол-во и вес свободных и имеющихся на складе продуктов не превышает указанных продавцом.
Да и кстати, в силу вышесказанного блокировки этой таблицы у меня просто отключены за ненадобностью. | |
|
| |
|
|
|
| >> Основы изложил. На вопросы отвечу.
а можно просто скриншот схемы БД увидеть?
--------------
при описании не включайте служебные поля - это незачем, только загромождает схему | |
|
| |
|
|
|
| Извини, я схемы баз данных не юзаю за ненадобностью. | |
|
| |
|
|
|
| Станислав, извини, но твои познания в части проектирования и разработки БД нуждаются в существенном пополнении...
вот ты пишешь:
В этом главный плюс такой структуры: таблицы-документы можно добавлять сколько угодно и когда угодно - структуру базы переделывать не придется.
|
и тут-же, следом:
Например, вздумалось руководству добавить новый тип товарооборота: Перепаковка - да запросто: добавляете в базу новую таблицу-документ Перепаковка, и пишете форму для нее.
|
что тогда, по твоему, "переделывать структуру базы"?
--------------
Если, как по сабжу топика, у тебя есть пример реализации - приложи, пожалуйста, к сообщению или брось ссылку на скачку.
пока, то что видно из твоего мессиджа, ни на 5% не соответствует задачам складского учета... | |
|
| |
|
|
|
| ну и концептуальная ошибка - в классическом случае в задачи склада не входит реализация (продажа) товара.
на складе может создаваться дополнительная стоимость, за счет выполнения работ по оказанию основных и дополнительных услуг. таких как, например:
комплектация, выбраковка, временное хранение, инвентаризация, переупаковка, пересортировка и т.п. и склад может продавать эти услуги, но не товары.
реализацией товара занимается не склад, а отдел продаж или подобная профильная структура - это другой модуль учета. | |
|
| |
|
|
|
| Не извиняю. Такой высокомерный тон мне не нравится, но я поясню.
Переделывать - значит начинать все заново. Ситуация, когда из-за неправильного проектирования и реализации приходится вносить коренные изменения в существующую структуру, поскольку она неспособна удовлетворить вновь возникшие требования лишь путем добавления конструктивных элементов.
Я в данном топике ставил целью не перечислить все задачи, выполняемые складом и вообще его концепцию, а изложить принцип регистров и документов. И привел 2 документа, в достаточной мере отражающие этот принцип. Этот принцип придумал не я. Я достаточно долго искал его в интернете, прежде чем приступить к реализации склад+торговля. Остальные принципы представлялись ущербными. | |
|
| |
|
|
|
| ну не знаю, не знаю :)
я считаю, что идеальная модель, которую мне удалось реализовать вместе с товарищами - это именно та, которую мне удалось реализовать вместе с товарищами.
а все, что пишут другие - ущербное. | |
|
| |
|
|
|
| Т. Е. связей таблиц с таблицами как таковых нет. Все происходит кодом. Так ведь добавлять новых таблиц можно сколько угодно, а так называемые связи будут выполнять запросы на обновление, добавление и т.д., действующие по какому-то определенному алгоритму. Так что ли?
Рисунок схемы все бы прояснил. | |
|
| |
|
|
|
| Ну как же нет связей. Есть. Например, в таблице Sale есть поле ContactID, так вот при создании этой таблицы в источнике данных этого поля я прописал:
SELECT Contact.ContactID, Contact.ContactName FROM Contact ORDER BY Contact.ContactName
Это и есть связь. И так для всех связанных таблиц. А схема - она же ни на что не влияет, она чисто визуальная надстройка.
Завтра постараюсь распределить основные таблицы по схеме и сделать скрин. | |
|
| |
|
|
|
| >>> А схема - она же ни на что не влияет, она чисто визуальная надстройка
Станислав, вы ошибаетесь,даже если сочтете мое мнение высокомерным
1 используя схему данных вы формируете систему поддержки целостности данных БД
2 применение полей подстановки в таблицах далеко не самое бесспорное решение
вы можете оставаться при своем мнении,я его оспариваю только потому, что вы предлагаете очень незрелое решение на уважаемом публичном ресурсе...
ничего личного, как говорится | |
|
| |
|
|
|
|
применение полей подстановки в таблицах далеко не самое бесспорное решение
|
Да-да-да.
| |
|
| |
|
|
|
| та да
мне, защитившему диплом Магистра по этой теме, вообще прискорбно читать, как человек отстаивает свое незрелое решение, только лишь потому, что ему, переписывать не хочется
куда катится мир? | |
|
| |
|
|
|
| Самое смешное,
что наиболее востребованной моей поделкой оказалась та
на которую я сейчас без содрогания и тошноты смотреть не могу.
Но переделывать лееень.
| |
|
| |
|
|
|
|
| >>> Но переделывать лееень.
я склонен предположить, что решения Станислава не существует в виде реализованного проекта или проекта проекта.
утверждать этого не могу и не стану, но выглядит все как общие рассуждения "на тему склад+продажи"
у него тут и переделывать нечего, а уж по поводу "хоть до бесконечности" количество добавляемых "по потребности" таблиц и форм - просто грущу... | |
|
| |
|
|
|
| Согласен, есть настораживающие моменты.
Впрочем, в этой кухне я далеко не "Магистр". :) | |
|
| |
|
|
|
| Странно, но у меня тоже сложилось такое впечатление из-за отсутствия схемы. Но даже не не-до магистрик. | |
|
| |
|
|
|
| Да. Хотел поделиться идеей, а получил наезды от местной инквизиции. Не ожидал такого.
Ладно вот скрины:
http://letitbit.net/download/69419.69faa852e50ccda67bea9aa7ca75/Screen.rar.html
пароль: Explorer
Если щас пойдет речь, что программы нет в реале и скрины сп.енные, то на этом разговор и закончим. Мне тут что-то доказывать нет резона. Программа сейчас в опытной эксплуатации, доделываю отчеты и пожелания, возникающие в процессе. | |
|
| |
|
39 Кб. |
|
| ==>>> | |
|
| |
|
|
|
| OMG, куда ты этот пароль всталяешь? Просто скачивай файл: скачать на низкой скорости - потом кнопка "спасибо не надо" - скачать медленно. Скрины зажаты в архив, пароль к которому Explorer.
Ну или скажи куда выложить. | |
|
| |
|
|
|
| не качает
а скрины можно выложить прямо сюда - примерно так, как выложил я в предыдущем сообщении.
еще раз, Станислав, я не собираюсь оспаривать твой выбор способа решения задач складского учета, этот способ очевидно слаб и не допускает обсуждений.
для нагладности хотелось получить общее представление.
впрочем я его уже получил и без скриншотов схемы БД | |
|
| |
|
87 Кб. |
|
| 1 | |
|
| |
|
94 Кб. |
|
| 3 | |
|
| |
|
114 Кб. |
|
| схема | |
|
| |
|
|
|
|
| Я так и думал. Может это и респект какой, но по крайней мере становится понятно, почему создаем хренову тучу новых таблиц и это никак не отразится на схеме. Схемы по сути нет. Все через запросы переобновляется и удаляется. Так? | |
|
| |
|
|
|
|
| Я не против конструктивных споров и не считаю, что в моей структуре нет слабых мест или возможностей к улучшению и готов выслушать замечания и признать ошибки. Просто ты за тоном своим следи. Может ты и офигеть какой технический спец, но это не повод так неучтиво разговаривать с незнакомыми людьми. Не разобравшись в ситуации, делать необоснованные предположения о том что человек лжец и невежда. | |
|
| |
|
|
|
| Станислав, не нужно меня троллить. это пустое и бесперспективное занятие. | |
|
| |
|
|
|
| Станислав, просто назовите ваше приложение
Товарный баланс торгово-закупочной деятельности предприятия
и вычерните слово склад вообще | |
|
| |
|
|
|
|
| С этим согласен. Слово склад затесалось на этапе ТЗ, когда предполагалось лишь контролировать состояние складов. Потом все это переросло в торговлю. Но в принципе структуру регистры-документы можно использовать под склад. | |
|
| |
|
97 Кб. |
|
| 2 | |
|
| |
|
|
|
| А я вот такую себе сделал: http://file.qip.ru/file/BnP3aOw9/Sclad.html
Позволяет цеплять к товарам фотки jpg, файлы любые (описания например); к документам файлы любые (сканы счетов например) (двойной клик по коду документа в форме); подгонять сумму документа :) ; учетные цены; карточка товара, резерв ну и т.д. и т.п. Делал для себя - меня устраивает - так что сильно не пинать :) | |
|
| |