Привет всем
Есть мини молочный цех . У них стоит 1С производства но они почему то не хотят его использовать хотя на нем все функционал есть..
По этому заказали программу мини учет их продуктов.. Основное главный материал у них молока
Пример
Покупает молоко у разных частных фермеров допустим в день 1000 литр в день. Потом из молока делает Твороги,Брынзы,Сметана,Кефир итд.. Асортимент где то 30 наименование
Продукты разные
Творог (весовый) 10 кг
Творой штучный 300 гр
Кефир 1 литр 1 шт
Сметана 200гр 1 шт
Что бы получить 20 кг творога понадобиться 100 литр молока...
Что бы получить Сметана 200гр понадобиться 0,200 литр молока...
Учет идет так как они мне сказали
Поступает молока для каждого продукта указывает сколько уходит молока итд
Готовый продукция оприходует склад (Название фирмы)
Потом готовую продукцию продает Откуда (Из фирмы) куда (Покупатель) итд
Иногда покупатели делают возврат товара (причина брак или просрочен если за реализацию брали)
при возврате я добавил состояние товар нормал,брак,просрочен если нормалний плюсую склад..
Посоветуйте правильно ли создал структуру
Создал для теста 4 таблицу пока без справочника контрагентов
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
--DROP TABLE DOC;
CREATE TABLE DOC (
DOCID INTEGER NOT NULL,
FROMID INTEGER,
TOID INTEGER,
DOCDATE DATE,
DOCNUM VARCHAR(20),
DOCTYPE SMALLINT,
/* Keys */
PRIMARY KEY (DOCID)
);
CREATE INDEX DOC_INDEX01
ON DOC
(DOCDATE, DOCID);
COMMENT ON COLUMN DOC.DOCID
IS 'ИД документ';
COMMENT ON COLUMN DOC.FROMID
IS 'Откуда';
COMMENT ON COLUMN DOC.TOID
IS 'Куда';
COMMENT ON COLUMN DOC.DOCDATE
IS 'Дата документа';
COMMENT ON COLUMN DOC.DOCNUM
IS 'Док номер';
COMMENT ON COLUMN DOC.DOCTYPE
IS '1 - Постуление (молоко)
2 - Продажа (Готовых продуктов. и молока тоже)
3 - Возврат от покупателей ( Если не испорченный то в склад если испорченный то склад не добавим )
4 - Поступление готовых продуктов из производства ( то есть прибавляем склад )';
--Table: DOCITEMS
--DROP TABLE DOCITEMS;
CREATE TABLE DOCITEMS (
DOCID INTEGER NOT NULL,
GOODSID INTEGER,
GOODSQTY INTEGER,
GOODSPRICE VARCHAR(20),
GOODSSTATE SMALLINT,
GOODSMSRMNT INTEGER
);
CREATE UNIQUE INDEX DOCITEMS_INDEX01
ON DOCITEMS
(DOCID, GOODSID);
COMMENT ON COLUMN DOCITEMS.DOCID
IS 'Мастер ИД';
COMMENT ON COLUMN DOCITEMS.GOODSID
IS 'Ид товара';
COMMENT ON COLUMN DOCITEMS.GOODSQTY
IS 'Количество';
COMMENT ON COLUMN DOCITEMS.GOODSPRICE
IS 'Цена продажи';
COMMENT ON COLUMN DOCITEMS.GOODSSTATE
IS 'Состояние товара';
COMMENT ON COLUMN DOCITEMS.GOODSMSRMNT
IS 'Ед изм';
--Table: GOODS
--DROP TABLE GOODS;
CREATE TABLE GOODS (
GOODSID INTEGER NOT NULL,
GOODSNAME VARCHAR(20),
GOODSPRICE DECIMAL,
GOODS_COST DECIMAL,
GOODSMSRMNT INTEGER NOT NULL,
GOODSTYPE SMALLINT,
GOODS_GOODSID INTEGER NOT NULL,
GOODS_OUT DECIMAL,
GOODS_IN DECIMAL(9,3),
/* Keys */
PRIMARY KEY (GOODSID)
);
COMMENT ON COLUMN GOODS.GOODSID
IS 'Ид Товара';
COMMENT ON COLUMN GOODS.GOODSNAME
IS 'Название товара
';
COMMENT ON COLUMN GOODS.GOODSPRICE
IS 'Цена продажи по умолчание';
COMMENT ON COLUMN GOODS.GOODS_COST
IS 'Себестоимость товара';
COMMENT ON COLUMN GOODS.GOODSMSRMNT
IS 'Ед измерение';
COMMENT ON COLUMN GOODS.GOODSTYPE
IS '1- 0 Продукт или товар для продукта';
COMMENT ON COLUMN GOODS.GOODS_GOODSID
IS 'ИД товара для продукта пример (молока)';
COMMENT ON COLUMN GOODS.GOODS_IN
IS 'Сколько товар уходит на один продукт';
--Table: MSTMNT
--DROP TABLE MSTMNT;
CREATE TABLE MSTMNT (
ID INTEGER,
NAME VARCHAR(20) CHARACTER SET NONE
);
Для получение остатков создал
2 представление
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
--View: PRODUCTSHISTORY
--DROP VIEW PRODUCTSHISTORY;
CREATE VIEW PRODUCTSHISTORY
(
DOCTYPE,
DOCDATE,
GOODSID,
GOODSQTY
)
AS
select doc.DOCTYPE,doc.DOCDATE,docitems.GOODSID,docitems.GOODSQTY from docitems
join doc on docitems.DOCID = doc.DOCID
and doc.DOCTYPE=1
join goods on docitems.GOODSID = goods.GOODSID
and goods.GOODSTYPE = 0
union
select doc.DOCTYPE,doc.DOCDATE,docitems.GOODSID,-docitems.GOODSQTY from docitems
join doc on docitems.DOCID = doc.DOCID
and doc.DOCTYPE=2
join goods on docitems.GOODSID = goods.GOODSID
union
select doc.DOCTYPE,doc.DOCDATE,docitems.GOODSID,docitems.GOODSQTY from docitems
join doc on docitems.DOCID = doc.DOCID
and doc.DOCTYPE=3
and docitems.GOODSSTATE=0
join goods on docitems.GOODSID = goods.GOODSID
union
select doc.DOCTYPE,doc.DOCDATE,docitems.GOODSID,docitems.GOODSQTY from docitems
join doc on docitems.DOCID = doc.DOCID
and doc.DOCTYPE=4
join goods on docitems.GOODSID = goods.GOODSID
and goods.GOODSTYPE = 1
union
select doc.DOCTYPE,doc.DOCDATE,goods.GOODS_GOODSID as GOODSID,-(docitems.GOODSQTY*goods.GOODS_OUT*goods.GOODS_IN) as GOODSQTY from docitems
join doc on docitems.DOCID = doc.DOCID
and doc.DOCTYPE=4
join goods on docitems.GOODSID = goods.GOODSID
and goods.GOODSTYPE = 1;
--View: WAREHOUSE
--DROP VIEW WAREHOUSE;
CREATE VIEW WAREHOUSE
(
GOODSID,
GOODSQTY
)
AS
SELECT GOODSID, SUM(GOODSQTY) GOODSQTY FROM ProductsHistory GROUP