Создание торговой системы

Up Next

Минимальный набор таблиц для создания Торговой системы.

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

Терминология.

Для начала определимся с терминами.

Торговая система - программное обеспечение предназначенное для осуществления торговых операций.
Вид Документа (торговая операция) - прием товара на склад, отпуск товара со склада,  пересылка товара между складами.
Документ - хранящаяся в базе данных информация связанная с определенной торговой  операцией.
Печатная форма - выдаваемый программой печатный документ. Например -накладная, счет-фактура и т.д.

Список таблиц.

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

Специальные поля.

Для чего они нужны понятно из таблицы.

Поле Описание
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 по ЗАГОЛОВКАМ ДОКУМЕНТАМ для каждого КОНТРАКТОРА.

Большой интернет магазин который перепродает товар.

Такие организации довольно часто продают товар отсутсвующий на складе.

. Т.Е. имеется следуюцая цепочка событий.

  1. Клиент размещает заказ.
  2. Формируется заявка на закупку у поставщика.
  3. Товар закупается.
  4. Товар доставляется клиенту

Данные необходимо разделить на две части:

  1. информация доступная клиенту.
  2. внутренняя информация фирмы.

Для разделения данных можно использовать view c соответсвующими правами доступа.
Так-же необходимо создать процедуры копирования заказов и формирования заявок на закупку товара.

Пример ERD диаграммы. (лучше ее загрузить в WORD и напечатать)

Продолжение следует...

P.S. Данное решение не претендует на идеал но тем не менее оно работает, например в  этой программе VEStock.

 

Автор открыт для сотрудничесва и готов принять участия в интересных проэктах.
Автор имеет несколько готовых решений на базе Oracle и Interbase и готов доработать их под ваши требования.
Questions or problems regarding this web site should be directed to [vladimir_ch@chat.ru].
Copyright c 2000 [Chumak Vladimir]. All rights reserved.
Last modified: пятница Март 03, 2000.