Минимальный набор таблиц для создания
Торговой системы.
В данной статье Автор хотел бы обобщить
многолетний опыт создания торговых систем и
предложить универсальную структуру данных
подходящую для любой торговой организации от
маленького магазинчика до огромного холдинга
состоящего из произвольного количества
юридических лиц и складов.
Терминология.
Для начала определимся с терминами.
| Торговая система - программное обеспечение
предназначенное для осуществления торговых
операций. |
| Вид Документа (торговая операция) - прием товара
на склад, отпуск товара со склада, пересылка
товара между складами. |
| Документ - хранящаяся в базе данных информация
связанная с определенной торговой операцией. |
| Печатная форма - выдаваемый программой печатный
документ. Например -накладная, счет-фактура и т.д. |
Список таблиц.
| Справочник организаций. |
| Справочник товаров. |
| Справочник расположения товаров по складам. |
| Справочник видов документов. |
| Заголовки документов. |
| Детали документов. |
| Необязательные справочники.
| Справочник курсов валюты. |
| Справочник менеджеров |
| Справочник прав менеджеров. |
| Справочник групп товаров. |
| Справочник стран. |
| Справочник производителей. |
| История себистоимости товара. |
| Справочник отделов. |
| Справочник видов организаций Дилер, оптовик и
т.д. |
| Справочник регионов городов и т.д. |
| Справочник видов оплат. |
| История платежей. |
|
Специальные поля.
Для чего они нужны понятно из таблицы.
Поле |
Описание |
CREATEUSER |
Пользователь создавший запись |
CREATEDATE |
Дата создания записи |
LASTCHANGEUSER |
Пользователь последний
менявший запись |
LASTCHANGEDATE |
Дата последнего изменения
записи |
Справочник Организаций.
Под ОРГАНИЗАЦИЯМИ подразумевается
следующее:
| Клиенты. |
| Склады. |
| Поставщики. |
| Контракторы - ЮРИДИЧЕСКИЕ ЛИЦА осуществляющие
торговые операции. |
Структура справочника.
Поле |
Описание |
ID_ORG |
Код организации (первичный
ключ) |
ID_ORGTYPE |
Код вида организации |
ID_CITY |
Код города |
ID_MANAGER |
Код менеджера
ответственного за организацию |
OLD_ID_ORG |
Старый код организации в
случае если организация поменяла свое название. |
ORG |
Короткое название |
ORGFULLNAME1 |
Полное название например ЗАО
"Иванов и К" |
ORGFULLNAME2 |
Международное Название |
ZIPCODE |
Реквезиты Адреса и тд. |
ADRESSLAW |
|
ADRESSFACT |
|
BOSSNAME |
|
PHONE |
|
FAX |
|
CONTACTMEN |
|
DAYOFREPAYMENT |
|
OKPO |
|
INN |
|
OKONX |
|
BANK |
|
BIC |
|
RC |
|
KC |
|
URL |
|
EMAIL |
|
RATING |
|
DEFAULTDISCOUNT |
|
FIRSTCONTACTDATE |
|
LASTCONTACTDATE |
|
FIRSTSALESDOCUMENTDATE |
|
LASTSALESDOCUMENTDATE |
|
CUSTOMER |
Признак клиента. |
CONTRACTOR |
Признак Юридического лица
заключаещего сделки |
WAREHOUSE |
Признак склада |
SUPPLIER |
Признак поставщика |
ISPROTECTED |
Признак защиты от изменений |
OCREATEUSER |
|
OCREATEDATE |
|
OLASTCHANGEDATE |
|
OLASTCHANGEUSER |
|
REMARK |
Примечание |
CONTRACT |
Контракт |
Справочник товаров.
Товары - это не только физические товары но и
услуги (например транспортные),
по которым не ведется количественный учет.
Структура справочника:
Поле |
Описание |
ID_ARTICLE |
Код товара (Первичный ключ) |
ID_COUNTRY |
Код страны |
ID_PRODUCER |
Код производителя |
ID_ARTICLETYPE |
Код вида товара |
ID_ARTICLEGROUP |
Код группы товара |
MEASUREUNIT |
Еденица измерения |
ANALOG_ID_ARTICLE |
Код аналога товара |
ID_ARTICLEIMAGE |
Код картинки |
ARTICLECODE |
Код товара (штрих-код) |
NAMESMALL |
Короткое название |
NAMEFULL1 |
Полное название |
NAMEFULL2 |
Международное название |
VAT |
НДС |
OKDP |
|
MINSTOCK |
Минимальный запас |
SALESPRICE1 |
Цены в рублях |
SALESPRICE2 |
|
SALESPRICE3 |
|
SALESPRICE4 |
|
SALESPRICECURRENCY1 |
Цены в валюте |
SALESPRICECURRENCY2 |
|
SALESPRICECURRENCY3 |
|
SALESPRICECURRENCY4 |
|
LASTPURCHASEPRICE |
Последние цены покупки |
LASTPURCHASEPRICECURRENCY |
|
AVGPURCHASEPRICE |
Текущие Средние цены покупки |
AVGPURCHASEPRICECURRENCY |
|
PURCHASEPRICE |
Цены покупки |
PURCHASEPRICECURRENCY |
|
PRICELISTCODE |
Код для прайс-листа |
SERIALNUMBER |
Серийный номер |
ALC |
|
CAPACITY |
|
CANDISCOUNT |
Возможна скидка |
RETAIL |
Включать в розничный прас-лист |
WHOLESALE |
Включать в оптовый прас-лист |
SHOP |
Включать в магазинный
прас-лист |
RISK |
|
CUSTOMSNUMBER |
Номер ГТД |
CREATEDATE |
|
CREATEUSER |
|
LASTCHANGEDATE |
|
LASTCHANGEUSER |
|
REMARK |
Примечание |
Справочник расположения товаров по складам.
Структура справочника:
Поле |
Описание |
ID_ARTICLE |
Код товара |
ID_ORG |
Код организации склада |
QUANTITYPHISICAL |
Количество На складе |
QUANTITYINPUT |
Количесво ожидаемое в ближайшем приходе |
QUANTITYOUTPUT |
Количество зарезевированное в
документах на отпуск |
Виды документов и их подвиды.
| Прием товара.
| Закупка товара. |
| Прием по бартеру. |
| Прием обнаружено после ревизии. |
| Прием пересортица. |
| Возврат товара клиетом. |
|
| Отпуск товара
| Продажа товара. |
| Списание товара. |
| Брак. |
| Возврат поставщику. |
| Отпуск после ревизии. |
| Отпуск пересортица. |
| Отпуск товара на нужды фирмы. |
| Подарки клиентам и сотрудникам. |
|
| Пересылка товара между складами.
| Пересылка товара между складами одного
юридического лица. |
| Пересылка товара между складами разных
юридических лиц одного холдинга. |
|
| Временный документ. |
Структура справочника:
Поле |
Описание |
ID_DOCUMENTTYPE |
Код Типа документа
(первичный ключ) |
DOCUMENTTYPE1 |
Название типа
документа |
DOCUMENTTYPE2 |
Международное
название типа документа |
NAMESMALL1 |
Поле описания
поставщика для печатных форм |
NAMESMALL2 |
Поле описания
получателя для печатных форм |
STOCK |
Код подсчета запаса |
SALES |
Код подсчета продаж |
ZNAK |
Доп код |
ZNAK2 |
Доп код |
NEXTDOCUMENTNUMBER |
Номер документа - У
каждого вида документа может быть своя
нумерация. |
SORTCOLUMN |
Поле для сортировки. Я
всегда использую это поле в справочниках, для тех
отчетов, где нужна не стандартная сортировка. |
REMARK |
Примечание. |
Типичный пример заполнения справочника:
ID_DOCUMENTTYPE |
DOCUMENTTYPE1 |
DOCUMENTTYPE2 |
NAMESMALL1 |
NAMESMALL2 |
STOCK |
SALES |
1 |
ОТПУСК ТОВАРА |
ОТПУСК ТОВАРА |
От кого |
Кому |
-1 |
1 |
2 |
ПРИЕМ ТОВАРА |
ПРИЕМ ТОВАРА |
Кому |
От кого |
1 |
0 |
3 |
ВОЗВРАТ ОТ КЛИЕНТА |
ВОЗВРАТ ОТ КЛИЕНТА |
Кому |
От кого |
1 |
-1 |
4 |
ОТПУСК ПО БАРТЕРУ |
ОТПУСК ПО БАРТЕРУ |
От кого |
Кому |
-1 |
0 |
5 |
ПРИЕМ ПО БАРТЕРУ |
ПРИЕМ ПО БАРТЕРУ |
Кому |
От кого |
1 |
0 |
6 |
ВОЗВРАТ ПОСТАВЩИКУ |
ВОЗВРАТ ПОСТАВЩИКУ |
От кого |
Клиент |
-1 |
0 |
7 |
НУЖДЫ ОФИСА |
НУЖДЫ ОФИСА |
От кого |
Кому |
-1 |
0 |
8 |
ПРИЕМ ПОСЛЕ РЕВИЗИИ |
ПРИЕМ ПОСЛЕ РЕВИЗИИ |
Кому |
От кого |
1 |
0 |
9 |
ОТПУСК ПОСЛЕ РЕВИЗИИ |
ОТПУСК ПОСЛЕ РЕВИЗИИ |
От кого |
Кому |
-1 |
0 |
10 |
ПРИЕМ ПЕРЕСОРТИЦА |
ПРИЕМ ПЕРЕСОРТИЦА |
Кому |
От кого |
1 |
0 |
11 |
ОТПУСК ПЕРЕСОРТИЦА |
ОТПУСК ПЕРЕСОРТИЦА |
От кого |
Кому |
-1 |
0 |
12 |
БРАК |
БРАК |
От кого |
Кому |
-1 |
0 |
13 |
ВРЕМЕННАЯ ОПЕРАЦИЯ |
ВРЕМЕННАЯ ОПЕРАЦИЯ |
NoInformation |
NoInformation |
0 |
0 |
15 |
НЕДОСТАЧА |
НЕДОСТАЧА |
От кого |
Кому |
-1 |
0 |
16 |
ИЗЛИШКИ |
ИЗЛИШКИ |
Кому |
От Кого |
1 |
0 |
Особое внимание необходимо обратить на
заполнения полей STOCK и SALES.
STOCK - код подсчета запаса.
| 1 - приход товара. |
| -1 - отпуск товара. |
| 2 - пересылка товара между складами. |
| 0 нет подсчета |
SALES - код подсчета продаж.
| 1 - продажа товара |
| -1 - возврат товара клиентом |
| 0 - нет подсчета. |
Совершенно очевидно что например вид документа
"Брак" не является операцией продажи и его
не стоит включать в отчет по продажам, но в
зависимости от учетной политики фирмы, меняя
коды подсчета мы можем легко настроить учет под
определенные требования.
Документы.
Каждый торговый документ можно разбить на две
части.
| Заголовок документа. |
| Детали документа (строки) |
Заголовок документа содержит информацию о
клиенте поставщике и тд.
Структура таблицы Заголовки документов.
Поле |
Описание |
ID_DOCUMENT_HEADER |
Код - документа (Первичный ключ) |
ID_ORG |
Код организации |
ID_ORG2 |
Код организации 2 |
ID_ORG_CONTRACTOR |
Код организации совершившей сделку |
ID_MANAGER |
Код менеджера ответственного за
документ |
ID_PAYMENTTYPE |
Код вида оплаты |
ID_DOCUMENTTYPE |
Вид документа |
DOCUMENTNUMBER |
Номер документа |
ACCOUNT_NUMMER_DOC |
Номер документа в Бухгалтерии |
DOCUMENTDATE |
Дата докомента |
PAYMENTDATE |
Срок оплаты |
PRINT |
Отпечатано копий |
ISCLOSED |
Операция совершена |
CLOSEDATE |
Дата совершения операции. |
ISPROTECTED |
Защита от изменения |
ISREGISTERED |
Зарегестрировано |
REGISTRATIONDATE |
Дата регистрации |
RATE |
Курс валюты |
SUMTOTAL |
Сумма |
SUMDISCOUNT |
Сумма скидки |
SUMVAT |
Сумма НДС |
SUMTOTALCURRENCY |
Сумма в валюте |
DHCREATEDATE |
|
DHCREATEUSER |
|
DHLASTCHANGEDATE |
|
DHLASTCHANGEUSER |
|
REMARK1 |
Примечание печатное |
REMARK2 |
Непечатное примечание |
BLOBOLE |
|
Соответствие Вида документа и Кодов
организаций в Документе
Вид документа |
ID_ORG |
ID_ORG2 |
ID_CONTRACTOR |
Отпуск товара |
Клиент |
Склад-поставщик |
Код организации совершившей сделку |
Прием товара |
Поставщик |
Склад-получатель |
Код организации совершившей сделку |
Пересылка товара |
Склад-поставщик |
Склад-получатель |
Код организации совершившей сделку |
ISCLOSED - признак совешения сделки.
Поле ISCLOSED влияет на расчет количества на
складе.
Если ISCLOSED =1 (сделка совершена) - товар
списывается (принимается) со склада и
результируещее значение заносится в поле QUANTITYPHISICAL таблицы STOCK.
Если ISCLOSED =0 (сделка совершена) - количество
заносится в поля QUANTITYOUTPUT и QUANTITYIN таблицы
STOCK в зависимости от того приходная это операция
или расходная.
Структура таблицы детали документов.
Поле |
Описание |
ID_DOCUMENT_DETAILED |
Первичный Ключ |
ID_DOCUMENT_HEADER |
Код Заголовка Документа |
ID_ARTICLE |
Код Товара |
MEASUREUNIT |
Еденица измерения |
QUANTITY |
Количество |
DISCOUNT |
Скидка |
VAT |
НДС |
PRICE |
Цена |
PRICECURRENCY |
Цена в валюте |
RATE |
Курс |
DDCREATEDATE |
|
DDCREATEUSER |
|
DDLASTCHANGEDATE |
|
DDLASTCHANGEUSER |
|
Внимательный читатель наверно заметил что эти
две таблицы не очень нормализованы.
Например суммы в заголовке документа можно
подсчитать на основании данных из деталей
документа.
На самом деле это компенсируется удобством
написания клиентской части и отчетов.
Теория -теорией а практика - практикой.
Права пользователей.
Права пользователей делятся на две части:
| Непосредсвенные права на таблицы и
представления в соответствии с должностными
обязаностями сотруников. |
| Бизнес правила реализованные в триггерах базы
данных. |
С точки зрения прав на таблицы пользователей
можно разбить на следующее группы:
| Администраторы |
| Менеджеры товара - заведение новых товаров
изменение цен и т.д. |
| Обычные менеджеры - оформление документов,
изменение реквезитов клиетов и т.д. |
| Только для чтения. |
Для реализации и настройки бизнес правил
используются следующие две справочные таблицы.
Справочник менеджеров
Поле |
Описание |
ID_MANAGER |
Код менеджера. |
ID_DEPARTMENT |
Код отдела. |
MANAGER1 |
ФИО. |
MANAGER2 |
ФИО. |
NOWORK |
Не работает. |
CANMINUS |
Может продавать товар
отсутствующий на складе. |
CANALWAYSCHANGEORG |
Может всегда менять реквезиты
организаций. |
CANCHANGEDOCUMEMTTYPE |
Может менять вид документа. |
VEUSERNAME |
Имя пользователя в базе данных. |
SORTCOLUMN |
|
REMARK |
|
PHOTO |
|
Справочник прав по видам документов:
Поле |
Описание |
ID_DOCUMENTTYPE |
Код вида документа. |
ID_MANAGER |
Код Менеджера. |
CANALWAYSCHANGEDOCUMENT |
Может всегда менять документ |
CANALWAYSPRINTDOC |
Может всегда печатать документ. |
CANGIVEANYRATE |
Может ставить любой курс. |
CANMAKEDOCUMENT |
Может создавать, изменять,
удалять этот тип документа |
CANCLOSEDOCUMENT |
Может закрывать документ. |
CANGIVEANYDISCOUNT |
Может ставить любую скидку. |
CANGIVEANYPRICE |
Может ставить любую цену. |
Примеры применения.
Интернет - магазин по доставке пиццы, свое
производство.
Так как фирма не занимается перепродажей
товара то нужен всего один вид документа
заказ товара.
Учет товара на складе тоже не нужен - что
произвели то продали.
Небольшой магазин с несколькими отделами и
складом.
Имеет смысл выделить отделы в отдельные склады,
тогда можно будет всегда знать реальную картину
по запасу.
Виды документов приход, расход, пересылка,
возврат товара и тд.
Большой холдинг с несколькими магазинами и
складами.
Для каждого юридического лица в составе
холдинга указать что он является Контрактором и
занести для каждого Контактора необходимые ему
виды документов.
Разбить пользователей на группы в соотвествии
с их должностными обязанностями и местом работы.
Создать view по ЗАГОЛОВКАМ ДОКУМЕНТАМ для
каждого КОНТРАКТОРА.
Большой интернет магазин который
перепродает товар.
Такие организации довольно часто продают товар
отсутсвующий на складе.
. Т.Е. имеется следуюцая цепочка событий.
- Клиент размещает заказ.
- Формируется заявка на закупку у поставщика.
- Товар закупается.
- Товар доставляется клиенту
Данные необходимо разделить на две части:
- информация доступная клиенту.
- внутренняя информация фирмы.
Для разделения данных можно использовать view c
соответсвующими правами доступа.
Так-же необходимо создать процедуры копирования
заказов и формирования заявок на закупку товара.
Пример ERD диаграммы. (лучше ее
загрузить в WORD и напечатать)
Продолжение следует...
P.S. Данное решение не претендует на идеал но тем
не менее оно работает, например в этой
программе VEStock.
|