Диплом: Разработка подсистемы управления заказами корпоративной информационной системы (на примере ООО "Макс-фарма")

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
63
Добавлено в визуальную таблицу новое поле ДатаВыдачи, которое, будет
отображаться при выполнении приложения.
Теперь, работая с набором данных VHOD на экранной форме
«Применимость», пользователь сможет видеть не только КодЦены, к которым
применимо выбранное описание, но и дата выдачи заказа. (Рисунок 3.20).
Рис. 3.20 Экранная форма «Применимость»
Для реализации поиска по наборам данных была использована отдельная
форма.
Для вызова (отображения) формы поиска и ряда других возможностей
используется выпадающее меню на главной форме, т.е. компонент MainMenu
(класс TMainMenu). Разместив его на форме, в контекстном меню выбрав
команду «Menu Designer» и в редакторе создано расположение пунктов и
подпунктов главного меню (Рис. 3.21).
Рис. 3.21 Создание подпунктов главного меню
64
На новой форме были размещены необходимые компоненты (Рис. 3.22).
Рис. 3.22 Компоненты модуля
На модуле данных были размещены невизуальные компоненты:
набор данных FIND (класс TADOQuery);
источник данных DSFIND (класс TDataSource).
Далее:
Был связан набор данных с базой данных через свойство Connection;
в свойство SQL занесен многотабличный запрос;
временно активирован набор данных. Эти два пункта были
необходимы для запроса полей в визуальную таблицу;
Был связан источник данных DSFIND с соответствующим набором
данных FIND;
Была связана визуальная таблица на форме с источником данных;
Был деактивирован набор данных
Для организации поиска записей была создана процедура-обработчик
события OnClick у кнопки Button1 «Начать поиск», которая сработает после
нажатия на кнопку, и в нее записан следующий программный код для создания
65
и отправки динамического запроса к БД с целью формирования набора данных
FIND.
Текст данного динамического запроса на языке T-SQL строится с учетом
данных, введенных на экранной форме.
procedure TForm4.Hachatbnouck(Sender: TObject);
begin
Label1.Visible:=false;
with DM do begin
if CheckBox1.Checked or CheckBox2.Checked then begin
FIND.SQL.Clear;
FIND.SQL.Add('select * from zakaz, cena, Yclyga');
FIND.SQL.Add('where (zakaz.kodzakaz=cena.kodzakaz) and
(cena.koducluga=Yclyga.koducluga)');
end
else FIND.Close;
if CheckBox1.Checked then
if CheckBox3.Checked then
FIND.SQL.Add('and nazvanueUclugi like '+#39+'%'+Edit1.Text+'%'+#39)
else
DM.FIND.SQL.Add('and nazvanueUclugi='+#39+Edit1.Text+#39);
if CheckBox2.Checked then
if CheckBox3.Checked then
FIND.SQL.Add('and datavudachu like '+#39+'%'+Edit2.Text+'%'+#39)
else
FIND.SQL.Add('and datavudachu='+#39+Edit2.Text+#39);
if CheckBox1.Checked or CheckBox2.Checked then begin
FIND.SQL.Add('order by zakaz.datavudachu, Yclyga.nazvanueUclugi');
FIND.Open;
if FIND.IsEmpty then Label1.Visible:=true;
end;
66
end;
end;
Результат работы приведенного запроса выглядеть следующим образом
(Рис. 32.23)
Рис. 3.23 Результатная форма запроса
-В соответствии с найденной записью в таблице поиска необходимо
реализовать переход на соответствующую запись в другой таблице другого
набора данных.
Для такого поиска записи по полям служат методы набора данных Locate
и Lookup.
Функция
Locate (const KeyFields : String;
const KeyValues : Variant;
Options : TLocateOptions) : Boolean;
Она ищет запись с заданными значениями полей. Если удовлетворяющие
условиям поиска записи существуют в наборе данных, то указатель текущей
записи устанавливается на первую из них. Если запись найдена, то функция
Locate возвращает значение True, в противном случае – значение False.
67
Для поиска в наборе данных также используется метод Lookup, который
работает аналогично методу Locate.
Функция
Lookup ( const KeyFields : String;
const KeyValues : Variant;
сonst ResultFields : String) : Variant;
Она осуществляет поиск записи, удовлетворяющей определенным
условиям, но, в отличие от метода Locate, не перемещает указатель текущей
записи на найденную запись, а считывает информацию из полей записи. Еще
одно различие между двумя методами заключается в том, что метод Lookup
осуществляет поиск на точное соответствие значений для поиска и значений в
полях записей с учетом регистра букв.
В курсовом проекте в соответствии с найденной записью в таблице
поиска необходимо реализовать переход на соответствующую запись в другой
таблице другого набора данных методом Locate.
Для этого была создана процедуру-обработчик события OnClick у кнопки
BitBtn2 «Переход на запись в таблице Заказ» (Рис.3.24) (класс TBitBtn) и в нее
записан следующий программный код:
DM.zakaz.Locate('kodzakaz',DM.FIND.FieldByName('kodzakaz').AsVariant,[]);
Form1.SetFocus;
Необходимо осуществить несколько обращений к данному методу,
поскольку не всегда одновременно отображаются именно все записи набора
данных Услуги, его записи формируются согласно динамическому запросу, и,
следовательно, будет невозможно осуществить поиск сразу.
Надо переместить указатель текущей записи сначала в наборе данных
Заказ, а уже потом осуществить поиск записи в наборе данных Услуги (Рис.
3.25)
Для этого в процедуру-обработчик события OnClick у кнопки BitBtn3
«Переход на запись в таблице Услуги» записан следующий программный код:
68
DM.zakaz.Locate('kodzakaz',DM.FIND.FieldByName('kodzakaz').AsVariant,[]);
DM.Uclugi.Locate(‘koducluga’,DM.FIND.FieldByName(‘koducluga’).AsVariant,[]);
Form1.SetFocus;
Для изучения вопроса, связанного с вычисляемыми полями были
добавлены в таблицу Услуги базы данных обязательные поля Цена (цена
услуги) и Kolvo (количество услуг в заказе) в таблицу Цена.
Далее, в приложение было добавлено вычисляемое поле Summa, которое
не будет храниться в БД, а будет вычислять общую стоимость цветков на
основе имеющихся данных, перемножая значения полей Cena и Kolvo.
Создана процедура-обработчик события OnCalcFields у набора данных
Цена, которое срабатывает при формировании каждой записи набора данных и
позволяет сформировать значение вычисляемого поля. В созданную процедуру-
обработчик записан следующий программный код:
Cena.FieldByName('SUMMA').AsFloat :=
Cena.FieldByName('Cenaaa').AsFloat *
cena.FieldByName('Kolichectvo').AsInteger;
Результат работы процедуры-обработчика выглядит следующим образом
(рисунок 3.24).
Рис. 3.24 Результат работы процедуры-обработчика
Далее, в КП в Delphi-приложении необходимо реализовать запрос,
69
содержащий один из операторов манипулирования данными языка SQL (Insert,
Delete, Update). В данном курсовом проекте в запросе был использован
оператор UPDATE для иденсикации стоимости услуги
Был создан пункт главного меню «Индексация» и подпункт «Повышение
стоимости на 10%», который и будет выполнять запрос, содержащий оператор
Update. Для реализации был размещен на Модуле данных (DM) компонент IND
(класс TADOQuery), связываем его с БД через свойство Connection и в свойство
SQL вписываем следующий запрос изменения данных в БД
Update YCLYGA
Set cena=cena+cena*0.1
В данном случае запрос формируется статически
Для выполнения запроса создана процедуру-обработчик события OnСlick
у подпункта меню N101 «Повышение стоимости на 10%», в которую записан
программный код, а именно – обращение к методу ExecSQL компонента IND
Для того, чтобы данные в визуальной таблице обновились, необходимо
обновить набор данных Цена и Услуги, а попросту – закрыть и открыть набор
данных.
Для этого было использовано два способа :
применение закладок (маркеров) в наборах данных для таблицы
Услуги. Логика их работы следующая: Устанавливаем закладку, закрываем НД,
открываем набор данных, переходим на закладку
обновлять набор данных методом Refresh для таблицы Цена procedure
TForm1.N101Click(Sender: TObject);
begin
with DM do begin
IND.ExecSQL;
Zakladka:=uclugi.GetBookmark;
uclugi.Close;
uclugi.Open;
cena.refresh;
70
if uclugi.BookmarkValid(Zakladka) then begin
uclugi.GotoBookmark(Zakladka);
uclugi.FreeBookmark(Zakladka);
end;
end;
end;
Для простого отчета с закладки Rave был размещен на Модуле данных
универсальный компонент ConnectTozakaz (класс TRvDataSetConnection),
являющийся посредником для взаимодействия отчета с набором данных Заказ.
Каждый публикуемый в отчете НД должен снабжаться соответствующим
посредником
Связываем компонент ConnectToT1 с набором данных Т1, заполнив его
свойство DataSet
Дальнейшая работа осуществляется под управлением утилиты Rave
Reports Designer исунок 3.25)
Рис. 3.25 Утилиты Rave Reports Designer
Был создан новый проект отчетов.
С помощью команды меню File -> New Data Object создан в проекте
отчетов объект данных Direct Data View
Вызываем мастер создания отчета (командой Tools -> Simple Table), с его
71
помощью были выбраны нужные отображаемые поля
В результате работы мастера был создан отчет, содержащий
единственную страницу (компонент MainPage), содержащую область
просмотра данных DataView1Region с тремя полосами:
DataView1TitleBand;
DataView1Band;
DataView1DataBand.
Был размещен в Delphi-приложении на модуле данных компонент
MyProject (класс TrvProject) с закладки Rave и указываем ссылку на созданный
проект отчетов Reports.rav в свойстве ProjectFile (Рис. 3.26)
В результате был создан простой отчет содержащий только данные с
таблицы Заказ (КодЗаказчика, Кодзаказ)
Группирующими называются отчеты, в которых вся информация
разделяется на группы данных, объединенных каким-то общим признаком.
Например, описания (характеристики), относящиеся к определенному цветку,
или на другом примере – список товаров, поставленных конкретным
поставщиком.
Рис. 3.26 Проект отчетов
Для создания группирующего отчета был размещен в приложении на
72
Модуле данных компонент GROUP (класса TADOQuery), подключенный к БД,
со следующим текстом запроса:
select * from cena, zakaz, yclyga
where zakaz.kodzakaz=cena.kodzakaz and
cena.koducluga=YCLYGA.koducluga
order by kodcena
С закладки Rave был размещен на Модуле данных компонент
ConnectToGroup (класс TRvDataSetConnection), являющийся посредником для
взаимодействия отчета с набором данных GROUP, и, заполнив свойство
DataSet, связываем его с набором данных. В утилите Rave Reports Designer в
уже разработанном проекте отчетов Reports.rav создан новый отчет (главное
меню File -> New Report)
С помощью команды меню File -> New Data Object был создан в проекте
отчетов - объект отображения данных типа Direct Data View, ссылающийся на
связной компонент ConnectToGroup в Delphi-приложении. Каждый компонент,
используемый для отображения данных из отдельных полей НД через свойство
DataView связываем с объектом отображения данных, а в его свойстве DataField
указываем отображаемое компонентом поле данных или выражение с участием
полей и системных переменных.
Создав отчет, был создан для предусмотренного ранее подпункта
главного меню N7 «Группирующий отчет» процедуру-обработчик события
OnClick, в которую записываем программный код по открытию
группирующего НД, запуску проекта отчетов и формированию разработанного
отчета MyGroupReport, и закрытию НД:
DM.GROUP.Open;
DM.MyProject.ExecuteReport('MyGroupReport');
DM.GROUP.Close;
В результате получен группирующий отчет, показывающий информацию
о заказчике

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран