-
Привет всем! Заранее извеняюсь за ошибки и грамматики. Я не совсем четко знаю русский язык и грамматику. Помогите спроектировать маленькую базу для учета медикаментов.. СУБД выбрал Firebird 2.1.3.. Спроектировал так. есть таблица справочник медикаментов..
Таблица справочник медикаментов
tbl_ss_med
ИД,
Наименование,
ЕдИзмер,
Сумма,
Таблица приход медикаментов
tbl_comin_med
ИД,
ИД_Медикаментов
количество
дата срок годности
дата поступление
Таблица расход медикаментов
tbl_out_med
ИД,
ИД_Медикаментов
количество
дата расхода
Как правильно хранить остатки и как правильно показать пользователю. Дело в том что когда пользователь делает приход допустим на дату 01,03,2010 с одинаковым ИД_Медикаментов и с разной датой срок годности..
Пример
id id_med name kolichestvo date_exp date_comin
1 1 вакцина пб1 10 20.03.2010 01.03.2010
2 1 вакцина пб1 20 15.03.2010 01.03.2010
Вопрос При расходе я должен показать все поступление? или справочник медикаментов? Чтобы пользователю было видно когда делает расход. В складе имеется
id id_med name kolichestvo испол-но ОСТ-к date_exp date_comin срокгодзаконерез
1 1 вакцина пб1 10 0 0 20.03.2010 01.03.2010 19 дней
2 1 вакцина пб1 20 0 10 15.03.2010 01.03.2010 14 дней
Пользователь смотрит с начало который из них должен использовать конечно он выберит вторую запись и ставить в таблицу Расход
id id_med name kolichestvo date_exp date_comin срок год закон через
1 1 вакцина пб1 10 15.03.2010 01.03.2010 14 дней
После этого в складе имеется
id id_med name kolichestvo испол-но ОСТ-к date_exp date_comin срокгодзакон через
1 1 вакцина пб1 10 0 0 20.03.2010 01.03.2010 19 дней
2 1 вакцина пб1 20 10 10 15.03.2010 01.03.2010 14 дней
Все это как правильно реализовать помогите заранее благодарен.
-
> [0] Ulugbek (28.02.10 20:44)
> Таблица приход медикаментов > Таблица расход медикаментов Нужна 1 таблица - движение товара Соответственно нужен справочник операций движения (приход, расход, списание и т.д.) Нужна таблица документов на движение товара - типа приходно-расходные накладные.
Нужны наверное поставщики. Надо учитывать цены, сроки годности. Да дофига еще чего.
> Как правильно хранить остатки Количественно можно хранить и в вправочнике материалов - актуальность поддерживать тригерами. Но по стоимости так наверное нормально не получится
> Спроектировал так
Пока ты еще ничего практически не спроектировал.
-
а учет партионный? или как?
-
Спасибо за отклик Накладные не надо. Это программа для клиники там только внутренний учет. Тоест пришел медикамент-- из них использовали то есть расход но не надо накладной типа расход
-
> [3] Ulugbek (01.03.10 11:47) > Накладные не надо. Это программа для клиники там только внутренний учет.
Их необязательно печатать и расписываться в них. Это стандартное проектирование документооборота. Есть документ (шапочная его часть собственно) и его табличная часть. Делать изначально левую поделку не советую - потом сам замаешься переделывать. Аппетит приходит во время еды - потом твоя клиника захочет иметь цены в разрезе поставщиков и т.д. и т.п.
-
> Ulugbek (01.03.2010 11:47:03) [3]
Потом потребуется выписать накладную, вот и пригодится.
-
> Как правильно хранить остатки Количественно можно хранить и в вправочнике материалов - актуальность поддерживать тригерами. Но по стоимости так наверное нормально не получится
Подробности можно стоимость не надо учитивать просто остаток.. Остатки храниться в таблице справочник медикаментов? Добавить поля остаток А как срок годом?
-
> [6] Ulugbek (01.03.10 12:51) > А как срок годом?
В твоем случае видимо надо убедить заказчика, что срок годности, как и цена, не нужен. 8-)
-
В экселе самое то
-
Сейчас учет ведется на Excel.. То есть в первом листе приход втором листе расход третем листе Заказы в экселе вводить много ошибок не правильно написано медикаментов и дата срок и т д По этому делаются это мини програма Чтобы пользователю было удобно вести учет ... раз запустил программу в первом вкладке спр Медикаментов в втором вкладке Приход в втором вкладке Расход в третем вкладке Заказы на медикаментов Проблема с остатками млин срок годом
-
> [9] Ulugbek (01.03.10 13:52) > Проблема с остатками млин срок годом
Проблема не с остатками, а в твоем желании с кондачка написать МИНИ прогу. Так чтоб сделать мало, а получить что хочется. Учетные программы не смотря на кажущуюся простоту тоже требуют правильного подхода и знания методологии. А ты пытаешься просто скопировать эксель. Но ты не круче майкрософта.
-
Как вести в таком случае?
-
> [11] Ulugbek (01.03.10 14:23) > Как вести в таком случае?
Желательно правильно. 8-)
Погугли на тему учет алгоритмы, партионный учет, остатки, проектирование складского учета и т.д. и т.п. Кроме того про нормальные формы в БД, мастер-детальные отношения и связанные темы. Нарисуй на бумажке струкруру. При этом ежлательно думать и соображать на каждом этапе. При появлении КОНКРЕТНЫХ вопросов по реализации - спрашивай. Готовую программу тут тебе не напишут. Кстати в сети можно найти и готовые бесплатные программы.
-
ИМХО
ТМедикамент id название денормальное поле текущий остаток
ТОперация id название
Тдокумент id idОперация
Тжурнал id idдокумент idмедикамент
и можно Тизмерений (id наименование (таблетки/ампулы/ тп ), тогда в товаре еще idотсюда Тпоставщиков (тогда в документе еще id отсюда)
ну и всякие Тпрайсы Таттрибут документа
много, вообщем, еще сего можно
-
Спасибо Остатки буду хранить в ТМедикамент? И контролировать с помощью триггера? Я правильно понял.. Тогда как остатками срок годом.. Пример вашего струкуры..
ТМедикамент
id название денормальное поле текущий остаток
1 вакцина1 0
ТОперация
id название
-1 Приход
0 Расход
Тдокумент
id Операция ДатаОперация
1 Приход 01,01,2010
Тжурнал
id idдокумент idмедикамент срок год
1 1 1 10,07,2010
2 1 1 20,12,2010
Здесь при инсерте или апдейте обновлю таблицу
ТМедикамент поле остаток то есть если приход то плюсую если расход то минисую так ?
Теперь как с этим срок годом..
Тдокумент
id Операция ДатаОперация
2 Расход 10,06,2010
При расходе на текущий дату мне надо проверит и показать юзеру допустим на дату 10,06,2010 когда он делает выбор с таблицы ТМедикамент
Я должен показать
что медикамент в складе из них истечение срок ближе через 30 дн ч-з 190
вакцина1 2 1 1
Он должен выбрать который первый выходит на просрочку.
Вот здесь торможуу
Допустим выбрал медикамент и сразу вышло окошка или список
все приходы с этим медикаментом в этом случае
Тжурнал
id idдокумент idмедикамент срок год
1 2 1 10,07,2010
2 1 1 20,12,2010
Он выбрал первую
И вставил на
Тжурнал
id idдокумент idмедикамент срок год
3 2 1 10,07,2010
Когда он еще раз выберить эту справочник
Получается так
что медикамент в складе из них истечение срок ближе через 30 дн ч-з 190
вакцина1 1 1 1
Но он первую использовал же как мне быть в таком случае?
-
> [14] Ulugbek (02.03.10 08:22) > ТОперация > id название > -1 Приход > 0 Расход Логичнее сделать так ТОперация
id oper название
1 1 Приход
2 -1 Расход
3 -1 Списание операций может быть больше чем две, а умножая количество на OPER легко подсчитывать суммы. Если нужно все таки учитывать срок годности, то ты по любому должен вести партионный учет. Т.е. списывать не просто с общего количества, а с конкретной партии прихода. Это прилично усложняет программу. В расходе могут фигурировать несколько записей с одинаковым товаром, но с разных партий. Списание устаревших товаров можно осуществлять джобом. Не знаю появились ли они в ФБ2, но несложно и маленькую программку написать и запускать ее по расписанию.
-
> Ulugbek (02.03.10 08:22) [14]
тут предлагается подумать.
у документа может быть поле id reffer doc так у меня привязываются возвраты к поставкам. У тебя могут быть продажи по поставкам. Стоит некая процедура/триггер, которая может анализировать факт продажи и количества продажи от этой поставки. И не давать продать больше чем поставили И разрешать продавать от этой поставки, если всего продаж было меньше. т.е., если от этой поставки еще не все потрачено
-
Есть идея но правильно ли это незнаю.. Добавлю полю state если 1 то использован если 2 просрочен Тжурнал id idдокумент idмедикамент state Когда юзер делает расход Тдокумент id Операция ДатаОперация 2 Расход 10,06,2010 Показываю медикаменты что медикамент в складе из них истечение срок ближе через 30 дн ч-з 190 вакцина1 2 1 1
Он выбирает
вакцина1 и выходит список
id idдокумент idмедикамент срок год
1 2 1 10,07,2010
2 1 1 20,12,2010
Выбрал первую и вставил в расход после инсерта обновлю эту строку поля state значением 1 когда еще раз хочет расход сделать то теперь показываю что медикамент в складе из них истечение срок ближе через 30 дн ч-з 190 вакцина1 1 0 1
id idдокумент idмедикамент срок год
2 1 1 20,12,2010
-
> [17] Ulugbek (02.03.10 13:03) > Добавлю полю state если 1 то использован если 2 просрочен
Это типа ты просроченный выдал? 8-)
Какой то странный у тебя Тжурнал. Ты количественно как будешь учитывать? Про количество я что-то нигде не найду.
-
Количество храниться то есть остаток TМедикаментов
-
если честно, не понимаю немного :) вообщем, тут самая интересная работа сейчас, имхо потом просто кодинг оставь самое вкусное себе :)
-
> [19] Ulugbek (02.03.10 16:35)
Хранится 100500. Сколько из них просрочено? Сколько поставлено в прошлом году? Сколько списала вчера тетя Маша? Количество должно быть в каждой операции движения. А в справочнике оно только СПРАВОЧНОЕ, что бы не считать каждый раз. В принципе можно его и не хранить. Теоретически это даже правильнее, т.к. избыточность появляется.
-
Да правильно говоришь Еще полю должен добавит Тжурнал Количество
Отчеты наверно селектну на эту таблицу
-
база маленькая, работа большая...
а учет у тебя будет какой? в закупочной, розничной, средневзвешенной? (это вроде еще не упоминали)
-
> [23] sniknik © (02.03.10 21:42) > это вроде еще не упоминали
Просто боялись всякими FIFO/LIFO пугать. Тут до этого еще далеко. 8-)
-
Хмм Эти медикаменты дают государство цены тут не важен сколько стоит Важен сколько из них использовано и сколько из них просрочен
-
> [25] Ulugbek (03.03.10 11:56) > Эти медикаменты дают государство цены тут не важен сколько стоит
Глубокая мысль! 8-)
|