Перечислим основные триггеры базе выходных данных:
n BI_ZKDATE вносит в поле даты формирования заказа текущую дату;
n триггеры, позволяющие удалив атрибуты заказа в таблице ZAKAZATR удалить содержимое всего заказа и его разнарядок.
Входными данными для решения задачи нахождения оптимального заказа являются заявки заказчиков на необходимые им партии товаров и прайс-листы фирм, предлагающих товары. Входные данные могут поставляться в виде файлов таких форматов, как *.xls (Excel), *.doc, *.rtf (Word), *.html, *.dbf (dBase) и txt, а также на бумажных бланках. Информация, имеющаяся на бумажных бланках, должна быть занесена в базу входных данных вручную. Информация, имеющаяся в виде файлов, обрабатывается автоматизированно и заносится в базу входных данных автоматически. Автоматизированная обработка состоит в том, что файлы преобразовываются в текстовый формат (txt) и приводятся к единой структуре с использованием конвертора файлов. А затем информация из полученных файлов заносится в базу входных данных автоматически. За нехваткой времени данная подсистема осталась недоработанной.
Основными, несущими наибольшую смысловую нагрузку и решающими основную задачу СППР для формирования заказа на торгово-закупочном предприятии, модулями являются модули, представленные на рис. 2.5 в п. 2.3.2 :
" Формирование заказа простыми методами " и " Формирование заказа с помощью Генетического алгоритма ".
Рассмотрим функционирование модуля "Формирование заказа простыми методами ".
Сначала пользователь указывает дату прайс-листов или то, что прайс-листы должны быть выбраны по отметке, ранее произведенной пользователем. Аналогичная операция осуществляется и для листов заказа.
После нажатия кнопки <Выбрать> в модуле обрабатывается событие нажатия кнопки. Обработка события состоит в следующем: осуществляется выборка данных из базы данных прайс-листов и базы данных листов заказа.
К данным, выбираемым из прайс-листов относятся:
n номер прайс-листа;
n номер поставщика;
n номер условия поставки;
n система скидок;
n содержимое прайс-листа, к которому относятся номера лекарственных средств и соответствующие им номера международных наименований, цены и сроки годности.
Данными, выбираемыми из листов заказа являются:
n номер лекарственного средства;
n номера заказчиков по каждому лекарственному средству и заказываемое ими количество.
На основе выбранных данных из листов заказа рассчитывается итоговое количество упаковок по каждому лекарственному средству, которое надо закупить.
Далее функционирование модуля " Формирование заказа простыми методами " рассмотрим в рамках подсистемы: на рисунке 2.9 представлена блок-схема функционирования подсистемы формирования заказов на товары. Выборку информации в блок-схему решено не вносить, так как она производится для увеличения быстродействия программы – считывание при работе алгоритма формирования заказа информации из базы данных сильно замедляет работу алгоритма.
После окончания выборки входной информации пользователь настраивает систему: отмечает, надо ли при формировании заказа учитывать территорию поставщиков, их условия поставки, производителей лекарственных средств, товары на складе.
Далее пользователь вводит наименование и код заказа, который надо сформировать. А затем уже выбирает один из методов формирования заказа:
1) по минимальным ценам;
2) на одно предприятие;
3) по максимальным ценам;
4) генетический алгоритм по минимальной стоимости.
Первые три из указанных методов выполняются в этом же модуле, откуда он и получил свое название: "Формирование заказа простыми методами ".
На рисунке 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.
Рассмотрим теперь функционирование модуля "Формирование заказа с помощью генетического алгоритма ".
После выбора в окне модуля "Формирование заказа простыми методами " метода формирования заказа "Генетический алгоритм по минимальной стоимости" и нажатия кнопки <Сформировать> появляется окно модуля "Формирование заказа с помощью генетического алгоритма ", которое показано на рисунке 2.11.
|
В этом окне пользователь должен настроить генетический алгоритм:
n ввести количество особей в популяции;
n выбрать операторы, которые должны выполняться над особями популяции, и задать вероятность выполнения там, где это необходимо;
n ввести количество выводимых наилучших решений в базу данных заказов.
После нажатия кнопки <Старт ГА> генетический алгоритм начинает свою работу в соответствии с выбранными установками.