Конференция "Базы" » Помогите спроектировать маленькую базу для учета медикаментов. [Firebird 2.1.3]
 
  • Ulugbek (28.02.10 20:44) [0]
    Привет всем!
    Заранее извеняюсь за ошибки и грамматики. Я не совсем четко знаю русский язык и грамматику.
    Помогите спроектировать маленькую базу для учета медикаментов.. СУБД выбрал 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 дней


    Все это как правильно реализовать помогите заранее благодарен.
  • Sergey13 © (01.03.10 10:57) [1]
    > [0] Ulugbek   (28.02.10 20:44)

    > Таблица приход медикаментов
    > Таблица расход медикаментов
    Нужна 1 таблица - движение товара
    Соответственно нужен справочник операций движения (приход, расход, списание и т.д.)
    Нужна таблица документов на движение товара - типа приходно-расходные накладные.

    Нужны наверное поставщики. Надо учитывать цены, сроки годности. Да дофига еще чего.

    > Как правильно хранить остатки
    Количественно можно хранить и в вправочнике материалов - актуальность поддерживать тригерами. Но по стоимости так наверное нормально не получится

    > Спроектировал так

    Пока ты еще ничего практически не спроектировал.
  • Mike Kouzmine (01.03.10 11:00) [2]
    а учет партионный? или как?
  • Ulugbek (01.03.10 11:47) [3]
    Спасибо за отклик
    Накладные не надо. Это программа для клиники там только внутренний учет.
    Тоест пришел медикамент-- из них использовали то есть расход но не надо накладной типа расход
  • Sergey13 © (01.03.10 11:59) [4]
    > [3] Ulugbek   (01.03.10 11:47)
    > Накладные не надо. Это программа для клиники там только внутренний учет.

    Их необязательно печатать и расписываться в них.
    Это стандартное проектирование документооборота. Есть документ (шапочная его часть собственно) и его табличная часть.
    Делать изначально левую поделку не советую - потом сам замаешься переделывать. Аппетит приходит во время еды - потом твоя клиника захочет иметь цены в разрезе поставщиков и т.д. и т.п.
  • Anatoly Podgoretsky © (01.03.10 12:09) [5]
    > Ulugbek  (01.03.2010 11:47:03)  [3]

    Потом потребуется выписать накладную, вот и пригодится.
  • Ulugbek (01.03.10 12:51) [6]
    > Как правильно хранить остатки
    Количественно можно хранить и в вправочнике материалов - актуальность поддерживать тригерами. Но по стоимости так наверное нормально не получится

    Подробности можно стоимость не надо учитивать просто остаток..
    Остатки храниться в таблице справочник медикаментов? Добавить поля остаток
    А как срок годом?
  • Sergey13 © (01.03.10 13:28) [7]
    > [6] Ulugbek   (01.03.10 12:51)
    > А как срок годом?

    В твоем случае видимо надо убедить заказчика, что срок годности, как и цена, не нужен. 8-)
  • Mike Kouzmine (01.03.10 13:35) [8]
    В экселе самое то
  • Ulugbek (01.03.10 13:52) [9]
    Сейчас учет ведется на Excel..
    То есть в первом листе приход
    втором листе расход
    третем листе Заказы
    в экселе вводить много ошибок не правильно написано медикаментов и дата срок и т д
    По этому делаются это мини програма
    Чтобы пользователю было удобно вести учет ...
    раз запустил программу
    в первом вкладке спр Медикаментов
    в втором вкладке Приход
    в втором вкладке Расход
    в третем вкладке Заказы на медикаментов
    Проблема с остатками млин срок годом
  • Sergey13 © (01.03.10 13:57) [10]
    > [9] Ulugbek   (01.03.10 13:52)
    > Проблема с остатками млин срок годом

    Проблема не с остатками, а в твоем желании с кондачка написать МИНИ прогу. Так чтоб сделать мало, а получить что хочется.
    Учетные программы не смотря на кажущуюся простоту тоже требуют правильного подхода и знания методологии.
    А ты пытаешься просто скопировать эксель. Но ты не круче майкрософта.
  • Ulugbek (01.03.10 14:23) [11]
    Как вести в таком случае?
  • Sergey13 © (01.03.10 14:33) [12]
    > [11] Ulugbek   (01.03.10 14:23)
    > Как вести в таком случае?

    Желательно правильно. 8-)

    Погугли на тему учет алгоритмы, партионный учет, остатки, проектирование складского учета и т.д. и т.п.
    Кроме того про нормальные формы в БД, мастер-детальные отношения и связанные темы.
    Нарисуй на бумажке струкруру.
    При этом ежлательно думать и соображать на каждом этапе.
    При появлении КОНКРЕТНЫХ вопросов по реализации - спрашивай.
    Готовую программу тут тебе не напишут.
    Кстати в сети можно найти и готовые бесплатные программы.
  • 12 © (01.03.10 16:56) [13]
    ИМХО

    ТМедикамент
    id
    название
    денормальное поле текущий остаток

    ТОперация
    id
    название

    Тдокумент
    id
    idОперация

    Тжурнал
    id
    idдокумент
    idмедикамент

    и можно
    Тизмерений (id наименование (таблетки/ампулы/ тп ), тогда в товаре еще idотсюда
    Тпоставщиков (тогда в документе еще id отсюда)

    ну и всякие
    Тпрайсы
    Таттрибут документа

    много, вообщем, еще сего можно
  • Ulugbek (02.03.10 08:22) [14]
    Спасибо
    Остатки буду хранить в ТМедикамент? И контролировать с помощью триггера?
    Я правильно понял.. Тогда как остатками срок годом..
    Пример вашего струкуры..

    ТМедикамент
    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

    Но он первую использовал же как мне быть в таком случае?

     


  • Sergey13 © (02.03.10 09:02) [15]
    > [14] Ulugbek   (02.03.10 08:22)
    > ТОперация
    > id      название
    > -1      Приход
    > 0        Расход    

    Логичнее сделать так
    ТОперация
    id   oper   название
    1    1      Приход
    2    -1     Расход    
    3    -1     Списание



    операций может быть больше чем две, а умножая количество на OPER легко подсчитывать суммы.

    Если нужно все таки учитывать срок годности, то ты по любому должен вести партионный учет. Т.е. списывать не просто с общего количества, а с конкретной партии прихода. Это прилично усложняет программу. В расходе могут фигурировать несколько записей с одинаковым товаром, но с разных партий.
    Списание устаревших товаров можно осуществлять джобом. Не знаю появились ли они в ФБ2, но несложно и маленькую программку написать и запускать ее по расписанию.
  • 12 © (02.03.10 10:21) [16]

    > Ulugbek   (02.03.10 08:22) [14]

    тут предлагается подумать.

    у документа может быть поле id reffer doc
    так у меня привязываются возвраты к поставкам. У тебя могут быть продажи по поставкам. Стоит некая процедура/триггер, которая может анализировать факт продажи и количества продажи от этой поставки.
    И не давать продать больше чем поставили
    И разрешать продавать от этой поставки, если всего продаж было меньше. т.е., если от этой поставки еще не все потрачено
  • Ulugbek (02.03.10 13:03) [17]
    Есть идея но правильно ли это незнаю.. Добавлю полю 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

  • Sergey13 © (02.03.10 15:15) [18]
    > [17] Ulugbek   (02.03.10 13:03)
    > Добавлю полю state если 1 то использован если 2 просрочен

    Это типа ты просроченный выдал? 8-)

    Какой то странный у тебя Тжурнал. Ты количественно как будешь учитывать? Про количество я что-то нигде не найду.
  • Ulugbek (02.03.10 16:35) [19]
    Количество храниться то есть остаток
    TМедикаментов
  • 12 © (02.03.10 16:49) [20]
    если честно, не понимаю немного :)
    вообщем, тут самая интересная работа сейчас, имхо
    потом просто кодинг
    оставь самое вкусное себе :)
  • Sergey13 © (02.03.10 16:52) [21]
    > [19] Ulugbek   (02.03.10 16:35)

    Хранится 100500. Сколько из них просрочено? Сколько поставлено в прошлом году? Сколько списала вчера тетя Маша?
    Количество должно быть в каждой операции движения.
    А в справочнике оно только СПРАВОЧНОЕ, что бы не считать каждый раз. В принципе можно его и не хранить. Теоретически это даже правильнее, т.к. избыточность появляется.
  • Ulugbek (02.03.10 17:21) [22]
    Да правильно говоришь
    Еще полю должен добавит
    Тжурнал
    Количество

    Отчеты наверно селектну на эту таблицу
  • sniknik © (02.03.10 21:42) [23]
    база маленькая, работа большая...

    а учет у тебя будет какой? в закупочной, розничной, средневзвешенной? (это вроде еще не упоминали)
  • Sergey13 © (03.03.10 10:05) [24]
    > [23] sniknik ©   (02.03.10 21:42)
    > это вроде еще не упоминали

    Просто боялись всякими FIFO/LIFO пугать. Тут до этого еще далеко. 8-)
  • Ulugbek (03.03.10 11:56) [25]
    Хмм
    Эти медикаменты дают государство цены тут не важен сколько стоит
    Важен сколько из них использовано и сколько из них просрочен
  • Sergey13 © (03.03.10 12:17) [26]
    > [25] Ulugbek   (03.03.10 11:56)
    > Эти медикаменты дают государство цены тут не важен сколько стоит

    Глубокая мысль! 8-)
 
Конференция "Базы" » Помогите спроектировать маленькую базу для учета медикаментов. [Firebird 2.1.3]
Есть новые Нет новых   [134434   +28][b:0.001][p:0.01]