|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Цитата:
С какой базой работать - не принципиально. Хоть dBase. Тут вопрос в правильном дизайне БД. Основная идея - у тебя нет таблицы, которая содержит состояние склада. У тебя есть документы прихода/расхода, по которм все и вычисляется. Фактически, тебе нужны следующие таблицы: 1. Справочник товаров (их описание). Обычно деревообразный (таблица ссылается сама на себя). 2. Документы. Для общности вводится либо тип документа, либо признак того, что документ приходно/расходный по тому или другому признаку. 3. Позиции документа. Собственно описание товаров, отпущенных/принятых по документу. |
#17
|
||||
|
||||
Спасибо. Но в данном случае у меня проблемма только с составными товарами. Как поместить товар в
Цитата:
|
#18
|
|||
|
|||
Цитата:
У тебя должно быть 2 разных документа. Один - заказ сборного товара, Второй - отпуск комплектующих для сборки. Второй можно создавать автоматически по спец. справочнику (если есть желание это сделать. в принципе, это не сложно). Лучше всего будет эти документы связать между собой, что бы в дальнейшем при необходимости их легко можно было найти один по дургому. |
#19
|
||||
|
||||
Вот еще одни грабли - есть таблица "ТипыДокументов" (id, typ), "Документ" (Id, idtypa, nomer, data, summa), "ДокументСостав" (id, iddoc, tovar,kolvo,cena,summa).
Есть типы: -1 Расход, 0 Списание, 1 Приход. Как подсчитать остаток по приходным и расходным? Как я понимаю надо ДокументСостав.kolvo умножать на Документ.idtypa... Но никак не получается создать правильный запрос Может кто подскажет? Последний раз редактировалось deltas, 30.11.2010 в 22:05. |
#20
|
||||
|
||||
И вообще, стоит ли работать с mdb? Может лучше перейти на Firebird, SQL server...
|
#21
|
|||
|
|||
Надо, надо. Давно бы перешел. Если не хочется все переделывать, то переходи на MS SQL Server (тот же ADO) или есть такая штука как MSDE (SQL Server с некоторыми ограничениями). только они все довольно тяжелые. так что я бы все-таки подумал в сторону FireBird.
Теперь по предыдущему вопросу. Нам надо в итог вывести с плюсом все приходы (кстати, кроме списания у и отпуска/отгрузки у тебя еще должен быть обратный документ - возврат) и с минусов все расходы. я бы в тип документы добавил бы доп. поле, например, WH_MUL, куда бы для приходных на склад документов поставил бы 1, а для расходных -1. Для всех остальных 0. Тогда: Код:
SELECT G.Name, SUM(T.WH_MUL * I.Quantity) FROM DocItems I LEFT JOIN Docs D ON I.DocID = D.ID LEFT JOIN DocTypes T ON D.TypeID = T.ID LEFT JOIN Goods D ON I.GoodID = G.ID GROUP BY G.NAME DocTypes - таблица типов документов; Docs - таблица документов; DocItems - таблица позиций документов; Goods - справочник товаров. Да, если ты сдела инвентаризационный документ, то тогда можно суммировать не все, а только те документы, которые идут после этого документа. Тогда надо будет еще дописать условие, а в типах документов поставить для этого документа множитель 1 (приходный). ЗЫ. И что за манера называть таблицы русскими буквами. Хочешь потом иметь кучу проблем? |
#22
|
||||
|
||||
Спасибо большое за совет... Буду пробовать...
Цитата:
|
#23
|
||||
|
||||
Блин, запрос никак не проходит, "ошибка синтаксиса (пропущен оператор) в выражении запроса '(I.DocID = D.ID LEFT JOIN
DocTypes T ON D.TypeID = T.ID LEFT JOIN Goods D ON I.GoodID = G.ID)' " Последний раз редактировалось deltas, 30.11.2010 в 23:51. |
#24
|
||||
|
||||
Все, разобрался... Во всех базах синтаксис разный... Для Access -
Код:
SELECT G.Name, SUM(T.WH_MUL * I.Quantity) FROM ((DocItems I LEFT JOIN Docs D ON I.DocID = D.ID) LEFT JOIN DocTypes T ON D.TypeID = T.ID) LEFT JOIN Goods D ON I.GoodID = G.ID GROUP BY G.NAME |
#25
|
||||
|
||||
И опять возник вопрос Готовую продукцию и составляющие хранить в одной таблице? Если нет то как в приходе/расходе связывать по tovar_id две таблицы?
|
#26
|
||||
|
||||
Надеюсь на Вашу помощь...
|
#27
|
|||
|
|||
Ну, лучше всего в одной. Точнее, у тебя есть всего 2 таблицы, по которым и идет все вычисление:
- DocItems (собственно указание кол-ва товара в приходе/расходе) - Goods (справочник товаров, не важно каких). просто для того, что бы их различать можешь ввести флажок в таблице Goods, где и лежит описание товаров. |
#28
|
||||
|
||||
В данный момент у меня все так и реализовано, но никак не могу понять - как добавлять в составные товары запчасти из той же таблицы?
|
#29
|
|||
|
|||
??? Зачем их добавлять??? Куда???
Если как организовать справочник, то тебе нужна доп. таблица, например: Код:
-- таблица справочник товаров create table Goods ( ID INTEGER PRIMARY KEY, PARENT_ID INTEGER REFERENCES Goods(ID), IS_ASSEMBLY INTEGER DEFAULT 0 CHECK IS_ASSEMBLY IN (0,1), ... ); -- таблица "сборок" - из каких частей состоит тот или иной товар create table GoodItems ( ID INTEGER PRIMARY KEY, GOODS_ID INTEGER REFERENCES Goods(ID), ITEM_ID INTEGER REFERENCES Goods(ID) ); Т.е. в табл. GoodItems тебе надо просто забить ссылки на нужные запчасти. При этом запчасть тоже может быть сборной. |
#30
|
||||
|
||||
Код:
( ID INTEGER PRIMARY KEY, PARENT_ID INTEGER REFERENCES Goods(ID), Извините, не совсем понял... Здесь таблица ссылается сама на себя? и Код:
( ID INTEGER PRIMARY KEY, GOODS_ID INTEGER REFERENCES Goods(ID), ITEM_ID INTEGER REFERENCES Goods(ID) ); |