Изучение и анализ рынка товаров, закупаемых и реализуемых торгово-закупочным предприятием (на примере Белгородского территориального фонда обязательного медицинского страхования) )
В базе входных для облегчения
пользователю ввода содержимого прайс-листов и листов заказа используется
двухуровневый справочник "Списки часто используемых товаров" (см.
рисунок 2.7). Родительская таблица LISTNAME (1) содержит наименования списков, а дочерняя таблица LIST (1.1) – их содержимое.
При вводе одного из списков часто
используемых товаров в прайс-лист или лист заказа получается лист, содержащий
ссылки на лекарственные средства (справочник DRUG), а все остальные поля – пустые.
Описание полей таблицы LISTNAME смотрите в таблице 2.14.
Таблица
2.14 Описание полей таблицы LISTNAME
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(35)
|
наименование списка часто
используемых товаров
|
значащее поле
|
Описание полей таблицы LIST смотрите в таблице 2.15.
Таблица
2.15 Описание полей таблицы LIST
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
LNNumb
|
Integer
|
номер наименования
списка часто
используемых товаров
|
вторичный ключ
|
DrnNumb
|
Integer
|
номер лек. средства
|
вторичный ключ
|
На рисунке 2.7 справочники
указываются потому, что основное их использование осуществляется базами входных
данных (прайс-листов и листов заказа). В базах выходных данных справочники практически
не используются, потому что для анализа эффективности предыдущих заказов и
сравнения их с текущими заказами эти базы должны храниться. А так как входная
информация, представляющая из себя содержимое прайс-листов и листов заказа
предыдущих формирований заказов, пользователя не интересует, то базы входных
данных удаляются.
Во всех справочниках, кроме
справочников SUPPLIER (поставщики) и LPU (лечебно-профилактические учреждения
(заказчики)), могут удаляться записи. В справочниках SUPPLIER и LPU записи, где указаны поставщики и
заказчики, которые включены в сохраняемые базы выходных данных, не могут быть
удалены из-за нарушения, в случае удаления, целостности информации базы
выходных данных.
Справочник SUPPLIER представляет
информацию о поставщиках: содержит поля: наименование поставщика, ссылку на
справочник территорий REGION, адрес,
телефон и т.д. Описание полей справочника SUPPLIER смотрите в таблице 2.16.
Таблица
2.16 Описание полей справочника SUPPLIER
Наимен. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(60)
|
наименование поставщика
|
значащее поле
|
RegionCod
|
Char(10)
|
код территории (региона)
|
вторичный ключ
|
Address
|
Char(70)
|
адрес
|
значащее поле
|
Phone
|
Char(30)
|
телефон
|
значащее поле
|
Справочник LPU содержит информацию о заказчиках
(ЛПУ), аналогичную информации о поставщиках. Описание полей справочника LPU смотрите в таблице 2.17.
Таблица
2.17 Описание полей справочника LPU
Наимен. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Code
|
Char(30)
|
код заказчика (ЛПУ)
|
первичный ключ
|
Name
|
Char(60)
|
наименование заказчика
(ЛПУ)
|
значащее поле
|
RegionCod
|
Char(10)
|
код территории (региона)
|
вторичный ключ
|
Address
|
Char(70)
|
адрес
|
значащее поле
|
Phone
|
Char(30)
|
телефон
|
значащее поле
|
Справочник REGION – это справочник территорий (регионов).
В нем указаны наименования и коды регионов, где могут располагаться поставщики
или заказчики. Описание полей справочника REGION смотрите в таблице 2.18.
Таблица
2.18 Описание полей справочника REGION
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Code
|
Char(10)
|
код территории (региона)
|
первичный ключ
|
Name
|
Char(40)
|
наименование территории
|
значащее поле
|
Parent
|
Char(10)
|
код территории верхнего
уровня
|
поле для поддержания
иерархии
|
Child
|
Smallint
|
количество дочерних
территорий
|
поле для поддержания иерархии
|
Справочник CONDITION – справочник условий поставки
поставщиков. Значащим в нем является одно поле – наименование условия поставки.
Описание полей справочника CONDITION
смотрите в таблице 2.19.
Таблица
2.19 Описание полей справочника CONDITION
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(35)
|
условие поставки
|
значащее поле
|
Справочник DRUG представляет из себя справочник
лекарственных средств, в котором указаны торговое наименование лекарственного
средства, зависящее от его производителя, код (штрих-код) лекарственного
средства и ссылки на справочники международного наименования лекарственных
средств, групп, производителей. Международное наименование лекарственного
средства – это наименование всех лекарственных средств, идентичных по своему
составу – не зависит от производителя. Но в зависимости от того, в каких
пропорциях в лекарстве находятся его структурные элементы, лекарство
приобретает свои специфические свойства, поэтому качество лекарства зависит от
его производителя.
Для того, чтобы различать лекарства
различных производителей, введено торговое наименование и штрих-код
лекарственного средства.
Заказчики могут указывать в своих
заявках торговые наименования медикаментов, указывая тем самым его
производителя. И, если в установках программы поставить учет производителей, то
при формировании заказа медикаменты, имеющие различные торговые наименования
будут считаться различными и поиск их в прайс-листах будет вестись по торговому
наименованию.
Если же установка учета
производителей не указана перед началом формирования заказа, то заказ будет
формироваться по международным наименованиям лекарственных средств, то есть
медикаменты, указанные в листах заказа с различными торговыми наименованиями,
но одним международным будут считаться одним и тем же лекарственным средством,
и его поиск в прайс-листах будет вестись по международному наименованию.
Описание полей справочника DRUG
смотрите в таблице 2.20.
Таблица
2.20 Описание полей справочника DRUG
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(80)
|
наименование лекарственного
средства
|
значащее поле
|
LastChange
|
Date
|
дата последнего
изменения записи
|
значащее поле
|
Code
|
Integer
|
код лекарственного
средства
|
значащее поле
|
IntCode
|
Integer
|
номер международного
наименования
|
вторичный ключ
|
GrNumb
|
Integer
|
код группы
|
вторичный ключ
|
PrNumb
|
Integer
|
номер производителя
|
вторичный ключ
|
Справочник INTERNAT – справочник
международных наименований лекарственных средств. О том, зачем необходимо
международное наименование, смотрите описание справочника DRUG. Описание полей справочника INTERNAT смотрите в таблице 2.21.
Таблица
2.21 Описание полей справочника INTERNAT
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Code
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(40)
|
международное
наименование
|
значащее поле
|
Справочник DGROUP – это справочник групп лекарственных
средств. Лекарство может относиться к той, или иной группе в зависимости от
того, от какого недуга оно применяется. Описание полей справочника DGROUP смотрите в таблице 2.22.
Таблица
2.22 Описание полей справочника DGROUP
Наимен. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Code
|
Integer
|
код группы
|
первичный ключ
|
Name
|
Char(200)
|
наименование группы
лекарственного средства
|
значащее поле
|
Parent
|
Integer
|
код группы верхнего уровня
|
поле для поддержания
иерархии
|
Child
|
Smallint
|
количество дочерних
групп
|
поле для поддержания
иерархии
|
Справочник PROD – справочник производителей
лекарственных средств, в котором, помимо наименования и ссылки на справочник
стран производителей COUMTRY,
указан вес производителя. Это поле используется при формировании заказа с
помощью генетического алгоритма, когда поставлена установка на то, чтобы, если
установлен учет производителей, использовать производителя лекарственных
средств как критерий (см. п. 2.3.5). Лекарственные средства производителя,
имеющего больший вес, являются качественнее лекарственных средств
производителя с меньшим весом.
Описание полей справочника PROD смотрите в таблице 2.23.
Таблица
2.23 Описание полей справочника PROD
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(60)
|
наименование
производителя
лекарственного средства
|
значащее поле
|
Weight
|
Double Precision
|
вес производителя
|
значащее поле
|
CntNumb
|
Integer
|
номер страны
производителя
|
вторичный ключ
|
Справочник COUMTRY (на рисунке не указан) – справочник
стран производителей – значащее поле – наименование страны производителя.
Описание полей справочника COUMTRY смотрите в таблице 2.24.
Таблица
2.24 Описание полей справочника COUMTRY
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Name
|
Char(20)
|
наименование страны
|
значащее поле
|
Триггеры в базах данных выполняют
действия, которые обеспечивают корректное заполнение баз данных, каскадные
обновления и многие другие удобства при работе с базами данных. Триггеры действуют
тогда, когда запись вставляется, изменяется или удаляется.
В базе входных данных имеются
следующие основные триггеры:
n BD_PRICEATR, который позволяет удалить прайс-лист полностью (атрибуты и
содержимое) удаляя запись в таблице атрибутов прайс-листа;
n BD_ZAKSHATR – позволяет удалить лист заказа полностью (атрибуты и содержимое)
удаляя запись в таблице атрибутов листа заказа;
n триггеры, удаляющие в вводимых значениях
строковых полей ведущие и последние пробелы;
n триггеры, вводящие текущую дату в
поле даты атрибутов вводимого прайс-листа, листа заказа, в поле даты
последнего изменения записи справочника DRUG;
n BD_LISTNAME, позволяющий удалить список часто встречающихся товаров
удалив его название в таблице LISTNAME;
n BD_CONDITION запрещает удалять условие поставки в справочнике CONDITION, если оно занесено в атрибуты хотя
бы одного прайс-листа;
n BD_SUPPLIER запрещает удалять наименование поставщика в справочнике SUPPLIER, если этот поставщик занесен хотя бы
в один сформированный заказ;
n BD_LPU запрещает удалять наименование заказчика (ЛПУ) в справочнике LPU, если этот заказчик занесен хотя бы
в одну разнарядку сформированного заказа;
n триггеры, обеспечивающие корректную
работу со справочником территорий REGION;
n BD_REGION
запрещает удалять наименование территории в справочнике территорий
REGION, если она встречается хотя
бы у одного поставщика или заказчика в справочниках SUPPLIER и LPU;
n триггеры, обеспечивающие корректную
работу со справочником групп лекарственных средств DGROUP;
n BD_GROUP запрещает удалять группу в справочнике групп лекарственных средств DGROUP, если она указана хотя бы для одного
лекарственного средства в справочнике лекарственных средств DRUG;
n BD_PROD запрещает удалять производителя в справочнике производителей лекарственных
средств PROD, если он указан хотя бы для
одного лекарственного средства в справочнике лекарственных средств DRUG;
n BD_INTERNAT запрещает удалять международное наименование лекарственного
средства в справочнике международных наименований INTERNAT, если оно указано хотя бы для одного
лекарственного средства в справочнике лекарственных средств DRUG;
n BD_COUNTRY
запрещает удалять страну в справочнике стран производителей COUNTRY, если она указана хотя бы для одного
производителя в справочнике производителей лекарственных средств PROD.
2.3.3.3 База
выходных данных.
Структура базы выходных данных,
используемые ею таблицы и справочники представлены на рисунке 2.8.
База
выходных данных разделяется на две подбазы: база данных заказов и база данных
разнарядок. Информация в базу выходных данных заносится программно – это
информация о сформированных системой заказах и разнарядках. Пользователь может
просматривать, корректировать базу выходных данных и выводить на печать ее
содержимое в виде отчетов. В базе выходных данных используется поля входной
базы данных и справочники лекарственных средств DRUG, поставщиков SUPPLIER и заказчиков LPU.
При удалении из базы входных данных и
справочников всех значений, на которые имеются ссылки в заказе, кроме
поставщиков и заказчиков, целостность информации в базе выходных данных не нарушится,
так как в нее введены поля, содержащие все значения, которые могут быть удалены
(см. п. 2.3.3.2).
Таблица ZAKAZATR – таблица атрибутов
сформированных заказов – является родительской таблицей базы данных заказов.
Основные ее поля: код заказа (код, присваиваемый заказу пользователем по его
усмотрению), наименование заказа, дата формирования, итоговая сумма заказа с
учетом всех скидок и итоговая скидка. Описание полей таблицы ZAKAZATR смотрите в таблице
2.25.
Таблица
2.25 Описание полей таблицы ZAKAZATR
Наимен. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
Code
|
Double Precision
|
код заказа
|
значащее поле
|
Name
|
Char(28)
|
наименование заказа
|
значащее поле
|
Date_
|
Date
|
дата формирования заказа
|
значащее поле
|
TotSum
|
Double Precision
|
итоговая сумма с учетом
скидок
|
значащее поле
|
TotDisc
|
Double Precision
|
итоговая скидка
|
значащее поле
|
DelTag
|
Char(1)
|
поле отметки заказа на удаление
(отметка: '>')
|
логическое поле
|
Таблица ZAKAZ представляет содержимое
сформированного заказа. Основными ее полями являются: ссылка на лекарственное
средство справочника лекарственных средств DRUG, ссылка на поставщика справочника SUPPLIER, цена указанного лекарственного
средства у данного поставщика, количество упаковок, стоимость всех упаковок
лекарственного средства у данного поставщика.
Кроме основных полей в таблице ZAKAZ имеются поля для сохранения целостности
информации. К ним относятся: наименование лекарственного средства, его код,
международное наименование, наименование группы и наименование производителя.
Описание полей таблицы ZAKAZ смотрите в таблице
2.26.
Таблица
2.26 Описание полей таблицы ZAKAZ
Наимен. поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
ZKNumb
|
Integer
|
номер атрибутов заказа
|
вторичный ключ
|
ZSuNumb
|
Integer
|
номер поставщика заказа
в таблице ZAKSUPPL (поставщики заказов)
|
вторичный ключ
|
SuNumb
|
Integer
|
номер поставщика
|
вторичный ключ
|
DrnNumb
|
Integer
|
номер лекарственного
средства
|
вторичный ключ
|
DrnName
|
Char(80)
|
наименование
лекарственного средства
|
значащее поле
|
DrnCode
|
Integer
|
код
лекарственного средства
|
значащее поле
|
IntName
|
Char(40)
|
международное
наименование
|
значащее поле
|
GrName
|
Char(200)
|
наименование группы
|
значащее поле
|
ProdName
|
Char(60)
|
наименование
производителя
|
значащее поле
|
Price
|
Double Precision
|
цена
|
значащее поле
|
Quant
|
Double Precision
|
количество упаковок
|
значащее поле
|
Cost
|
Double Precision
|
стоимость всех упаковок
|
значащее поле
|
Таблица ZAKSUPPL (поставщики заказов) представляет
информацию по суммам закупки у каждого поставщика, прайс-лист которого входит в
сформированный заказ. Основными полями таблицы являются: ссылка на поставщика
справочника SUPPLIER, сумма закупки у этого
поставщика с учетом скидки, скидка в рублях. Поля, обеспечивающие сохранность
информации: условие поставки поставщика, дополнительная информация. Описание
полей таблицы ZAKSUPPL смотрите в таблице
2.27.
Таблица
2.27 Описание полей таблицы ZAKSUPPL
Наимен. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
ZKNumb
|
Integer
|
номер атрибутов заказа
|
вторичный ключ
|
SuNumb
|
Integer
|
номер поставщика
|
вторичный ключ
|
PANumb
|
Integer
|
номер атрибутов
прайс-листа
|
вторичный ключ
|
CoName
|
Char(35)
|
условие поставки
|
значащее поле
|
Inform
|
Char(65)
|
дополнительная
информация
|
значащее поле
|
DiscTotSum
|
Double Precision
|
сумма закупки у поставщика
с учетом скидки
|
значащее поле
|
Discount
|
Double Precision
|
скидка
|
значащее поле
|
База данных разнарядок состоит из
двух таблиц: родительской таблицы RAZNARATR (атрибуты разнарядок) и дочерней таблицы RAZNARYAD (содержимое разнарядок). В эти
таблицы заносится информация из сформированных заказов, распределенная по
потребностям заказчиков (ЛПУ). По этой информации программно составляются
отчеты, которые представляют из себя разнарядки на поставку поставщиками и
разнарядки на получение ЛПУ лекарственных средств.
Поле "дополнительная
информация" в RAZNARATR – поле, относящееся к полям
для обеспечения целостности информации.
Описание полей таблицы RAZNARATR смотрите в таблице 2.28.
Таблица
2.28 Описание полей таблицы RAZNARATR
Наимен. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
ZSuNumb
|
Integer
|
номер поставщика заказа
|
вторичный ключ
|
ZSANumb
|
Integer
|
номер атрибутов листа
заказа заказчика
|
вторичный ключ
|
LPUCode
|
Char(30)
|
код заказчика (ЛПУ)
|
вторичный ключ
|
Inform
|
Char(65)
|
дополнительная
информация
|
значащее поле
|
Sum
|
Double Precision
|
сумма закупки всех необходимых
заказчику
лекарственных средств
|
значащее поле
|
Описание полей таблицы RAZNARYAD смотрите в таблице 2.29.
Таблица
2.29 Описание полей таблицы RAZNARYAD
Наим. Поля
|
Тип
|
Логический смысл
|
Физический смысл
|
Numb
|
Integer
|
идентификационный
номер
|
первичный ключ
|
PANumb
|
Integer
|
номер атрибутов прайс-листа
|
вторичный ключ
|
ZakNumb
|
Integer
|
номер позиции в таблице сформированного заказа ZAKAZ
содержимого
|
вторичный ключ
|
Quant
|
Double Precision
|
количество упаковок
|
значащее поле
|
Cost
|
Double Precision
|
стоимость закупки без учета скидки всех упаковок
лек. средства из позиции ZakNumb у поставщика с прайс-листом PANumb
|
значащее поле
|
Перечислим основные триггеры базе
выходных данных:
n BI_ZKDATE вносит в поле даты формирования заказа текущую дату;
n триггеры, позволяющие удалив атрибуты
заказа в таблице ZAKAZATR удалить содержимое всего
заказа и его разнарядок.
2.3.4 Подсистема конвертирования и
наполнения базы входных
данных
Входными данными для решения задачи
нахождения оптимального заказа являются заявки заказчиков на необходимые им
партии товаров и прайс-листы фирм, предлагающих товары. Входные данные могут
поставляться в виде файлов таких форматов, как *.xls (Excel), *.doc, *.rtf (Word), *.html, *.dbf (dBase) и txt, а также на бумажных бланках.
Информация, имеющаяся на бумажных бланках, должна быть занесена в базу входных
данных вручную. Информация, имеющаяся в виде файлов, обрабатывается автоматизированно
и заносится в базу входных данных автоматически. Автоматизированная обработка состоит
в том, что файлы преобразовываются в текстовый формат (txt) и приводятся к единой структуре с использованием
конвертора файлов. А затем информация из полученных файлов заносится в базу
входных данных автоматически. За нехваткой времени данная подсистема осталась
недоработанной.
2.3.5 Подсистема формирования
заказов на товары
Основными, несущими наибольшую
смысловую нагрузку и решающими основную задачу СППР для формирования заказа на
торгово-закупочном предприятии, модулями являются модули, представленные на
рис. 2.5 в п. 2.3.2 :
" Формирование заказа простыми методами " и
" Формирование заказа с помощью Генетического алгоритма ".
Рассмотрим функционирование модуля
"Формирование заказа простыми методами ".
Сначала пользователь указывает дату
прайс-листов или то, что прайс-листы должны быть выбраны по отметке, ранее
произведенной пользователем. Аналогичная операция осуществляется и для листов
заказа.
После нажатия кнопки <Выбрать>
в модуле обрабатывается событие нажатия кнопки. Обработка события состоит в
следующем: осуществляется выборка данных из базы данных прайс-листов и базы
данных листов заказа.
К данным, выбираемым из прайс-листов
относятся:
n номер прайс-листа;
n номер поставщика;
n номер условия поставки;
n система скидок;
n содержимое прайс-листа, к которому
относятся номера лекарственных средств и соответствующие им номера
международных наименований, цены и сроки годности.
Данными, выбираемыми из листов заказа
являются:
n номер лекарственного средства;
n номера заказчиков по каждому
лекарственному средству и заказываемое ими количество.
На основе выбранных данных из листов заказа
рассчитывается итоговое количество упаковок по каждому лекарственному средству,
которое надо закупить.
Далее функционирование модуля "
Формирование заказа простыми методами " рассмотрим в рамках подсистемы: на
рисунке 2.9 представлена блок-схема функционирования подсистемы формирования
заказов на товары. Выборку информации в блок-схему решено не вносить, так как
она производится для увеличения быстродействия программы – считывание при
работе алгоритма формирования заказа информации из базы данных сильно замедляет
работу алгоритма.
После окончания выборки входной
информации пользователь настраивает систему: отмечает, надо ли при формировании
заказа учитывать территорию поставщиков, их условия поставки, производителей
лекарственных средств, товары на складе.
Далее пользователь вводит
наименование и код заказа, который надо сформировать. А затем уже выбирает один
из методов формирования заказа:
1) по минимальным ценам;
2) на одно предприятие;
3) по максимальным ценам;
4) генетический алгоритм по
минимальной стоимости.
Первые три из указанных методов
выполняются в этом же модуле, откуда он и получил свое название:
"Формирование заказа простыми методами ".
На рисунке 2.10 показано окно модуля
"Формирование заказа простыми методами ".
|
|
Рис. 2.10 Окно модуля "Формирование заказа
простыми методами "
|
|
Приведем список основных подпрограмм модуля.
В секции private класса TForm1 находятся следующие методы:
Процедура BringToArrs – занесение
данных прайс-листов в динамические массивы.
Процедура SetSellMatr – заполнение
матрицы SellMatr. В матрице элемент равен 0, если в i-ом прайс-листе не
предлагается товар j, и 1, если в i-ом прайс-листе товар j предлагается.
Функция SupplSell – проверка,
предлагает ли указанный поставщик (соответствующий ему прас-лист) указанный
товар. Если да, то функция возвращает true, иначе – false.
Процедура Calc_BringToDB – вычисляет
сумму закупки по всему заказу с учетом скидок и общую скидку на эту сумму, а
также другие необходимые значения и заносит все результаты в базу выходных
данных.
Процедура SolverForOne – формирование
заказа на закупку товаров для одного указанного поставщика.
В секции public класса TForm1 находятся следующие методы
Функция SuDiscountCost – возвращает
стоимость закупки с учетом скидки у поставщика, которому соответствует
указанный прайс-лист.
Процедура MinMaxSolver(min:boolean .
. .) -- формирование заказа на закупку товаров по минимальной цене, если
min=true, или по максимальной цене, если min=false.
Страницы: 1, 2, 3, 4, 5
|