Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_Тюнин / poyasnitelnaya_zapiska_1.doc
Скачиваний:
28
Добавлен:
20.03.2016
Размер:
1.99 Mб
Скачать

2.4 Создание структуры базы данных

Для создания структуры базы данных использовалсяOracleDesigner. После построения серверной модели, представленной на рис. 4, необходимо выбрать пункт меню Generate - Generate Database from Server Model (рис. 5).

Рис. 5 – Генерация базы данных из серверной модели

В результате генерации физически были созданы таблицы D_AKT1, D_AKT2, D_AKT3, S_PODS, S_ORGS, S_PREDMETS.

2.5 Разработка форм ввода и вывода информации

После открытия программы Oracle Forms Developer необходимо сохранить новую форму, выбрав меню File->Save и указав имя файла формы D_AKT.fmb по имени документа «Акт на списание малоценных и быстроизнашивающихся предметов», для которого создается данная форма.

В окне Object Navigator необходимо установить курсор на узел Data Blocks и нажать кнопку Create на правой панели инструментов. В открывшемся диалоге нужно выбрать Use the Data Block Wizard для использования мастера создания блоков данных.

В открывшемся мастере необходимо нажать кнопку Далее и выбрать тип блока данных Table or View. На следующем шаге мастера, нужно указать по какой таблице будет строиться блок данных. Выбор таблицы осуществляется нажатием кнопки Browse, после чего следует ввести данные соединения с БД.

В окне Tables осуществляется выбор таблиц. Чтобы таблицы текущей схемы были видны, следует выбрать пункты Current User, Tables и Views. В предложенном списке таблиц выбирается D_AKT1. Чтобы отображать в блоке данных все колонки выбранной таблицы необходимо названия всех колонок переместить из поля Available Columns в поле Database Items.

На следующем шаге в поле Data Block Name вводится имя блока данных: D_AKT1. После чего завершаем работу мастера нажатием на кнопку Готово. Для планирования расположения полей на форме только что созданного блока данных сразу после мастера Data Block Wizard запускается мастер Layout Wizard. На двух первых его шагах следует просто нажать кнопку Далее. На третьем шаге, будет предложено выбрать, какие поля следует отображать на форме. В рассматриваемой задаче будут отображаться все поля, поэтому их все и нужно переместить в поле Displayed Items.

Следующий шаг, где предлагается установить размеры полей, остается без изменения.

На следующем шаге выбирается тип отображения формы как Form и завершается работа мастера нажатием кнопки Готово.

Для создания закладок на панели инструментов следует выбрать инструмент Tab Canvas. Для установки имен вкладок необходимо в контекстном меню вкладки выбрать пункт Property Palette и установить там следующие свойства

для первой вкладки:

  • Name: AKT1;

  • Label: Организация;

для второй вкладки:

  • Name: AKT2;

  • Label: Предметы;

для третьей вкладки:

  • Name: AKT3;

  • Label: Утиль(лом).

Вкладки были созданы поверх уже имеющихся на форме элементов управления. Для переноса этих элементов на вкладку «Организация» в окне Object Navigator нужно выделить все элементы блока данных D_AKT2, и выбрать пункт меню Tools-> Property Palette, чтобы установить идентичные свойства сразу для группы элементов.

Требуется установить следующие свойства:

  • Canvas: CANVAS6

  • Tab Page: AKT2

Где CANVAS6 имя канвы, на которой находятся страницы закладок, a AKT2-имя вкладки, на которую следует поместить, выбранные элементы блока данных. Аналогичным образом элементы блока D_AKT3 помещаются на вкладку AKT3.

Создание блоков данных D_AKT2 и D_AKT3 во многом аналогично созданию первого блока, поэтому ниже приведены только отличающиеся шаги.

Создание производиться также с помощью мастера Data Block Wizard. На третьем шаге мастера, где предлагается выбрать таблицу в качестве источника данных, следует выбрать соответствующую таблицу, S_PODS, S_PREDS.

На четвертом шаге требуется создать связь между двумя блоками данных. После нажатия на кнопку Create Relationship в открывшемся окне выбирается строка с указанием наименования связи, созданной при разработке структуры базы данных. Далее в качестве Detail Item выбирается поле KOD_D_AKT1, а и качестве Master Item – KOD1. Таким образом, будет осуществляться связь между блоками данных по первичному ключу в таблице D_AKT2 и по внешнему ключу в таблице S_PODS, S_PREDS.

На следующем шаге вводим имя нового блока данных: D_AKT2. Далее на втором шаге мастера Layout Wizard требуется выбрать канву и закладку, на которой новый блок данных будет отображаться, т.е. установить следующие значения:

  • Canvas: CANVAS6;

  • Tab Page: AKT2

Все следующие шаги мастера вплоть до 5-го аналогичны пройденным при создании первого блока данных.

На пятом шаге осуществляется выбор вида формы – Tabular.

Шестой шаг – завершающий шаг установки. Необходимо установить:

  • Records Displayed: 10;

  • Отметить флажок Display ScrollBar.

На этом работа мастера завершена и нажимается кнопка Готово.

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

Для того чтобы при создании новой записи в каждом из блоков данных поле первичного ключа (KOD1) принимало автоматически следующее по порядку значение необходимо в каждом блоке объявить триггер PRE-INSERT. Сделать это можно следующим образом:

  1. В окне Object Navigator выбрать блок данных D_AKT1 и в нем выбрать узел Triggers;

  2. Затем вызвать контекстное меню и выбрать пункт Smart Triggers -> Others ->PRE-INSERT.

3. В появившемся окне ввести следующий код триггера:

SELECT kod_d_akt1.nextval INTO :D_AKT1.kod1 FROM dual; Аналогичный триггер нужно создать и в блоках D_AKT2, D_AKT3 со следующим кодом

SELECT kod_d_akt2.nextval INTO :D_AKT2.kod2 FROM dual

SELECT kod_d_akt2.nextval INTO :D_AKT2.kod2 FROM dual

Чтобы у пользователя не было доступа к кодовым полям в блоках данных, эти поля необходимо скрыть. Это можно сделать следующим образом, в Property Palette для элемента KOD блока данных D_AKT1 установить свойство Canvas этого элемента в Null значение, после этого поле KOD должно исчезнет в окне Layout Editor. Таким же образом устанавливается свойство Canvas для соответствующих элементов блоков данных D_AKT2 и D_AKT3.

Для отображения записей выбранных из справочников необходимо создать дополнительные поля для их отображения.

В блоке D_AKT1 в Items создать новое поле Item с помощью нажатия кнопки «+». Но новое поле установить следующие свойства:

  • Name: NAIM_ORG

  • Data Type: Char

  • Maximum Length: 50

  • Database Item: NO

  • CANVAS: CANVAS6

  • Tab Page: AKT1

Аналогичным образом создаются поля NAIM_PODR - D_AKT1, NAIM_PRED, NOM_N, INV_NOM,IZM_KOD,IZM_NAIM – D_AKT2, STR_POD-D_AKT3.

Также необходимо создать списки значений, которые применяются для наглядного выбора данных из таблиц справочников в поля блоков данных.

Для создания списка значений нужно в Object Navigator выделить узел LOVs и в меню выбрать пункт Edit-> Create. В появившемся диалоге выбрать Use the LOV Wizard.

На втором шаге мастера, где требуется указать запрос для заполнения списка значений данными, в поле SQL Query Statement ввести следующий запрос:

SELECT KOD, NAIM, OKPO FROM S_ORGS

На третьем шаге переместите все поля из области Record Group Columns в область LOV Columns для отображения в списке значений всех полей запроса. На четвертом шаге, необходимо указать в какие поля формы будут вставляться выбранные в списке значения. В колонке Column указывается имя поля в списке значений, в колонке Title - заголовок столбца и списке значений, Width - ширина колонки. Return Value - адрес элемента формы, в который следует записать выбранные пользователем значения.

  1. NAIM - D_AKT1.NAIM_ORG

  2. KOD - D_AKT1.S_ORG_KOD

  3. OKPO - D_AKT1.OKPO

где первое значение - колонка Column, а второе - Return Value.

Пятый шаг мастера - это указание заголовка окна списка значений и его физических размеров. На этом работу мастера можно завершить нажатием кнопки Готово. Теперь в Object Navigator в узле LOVs появился новый список значений, который переименован в ORG_LOV.

Аналогичным образом были созданы списки значений:

  1. PODR_LOV – для выбора подразделений в блоке D_AKT2

  2. PODR2_LOV– для выбора подразделений в блоке D_AKT3

  3. PRED_LOV– для выбора предметов в блоке D_AKT2

Создание кнопок вызова списков

Рядом с полем NAIM_ORG в блоке D_AKT1 создается кнопка для вызова Списка значений выбора организации с следующими свойствами:

  • Name: ORG_BUTTON

  • Label: …

Код кнопки:

DECLARE

res BOOLEAN;

BEGIN

res := Show_LOV('ORG_LOV');

END;

Чтобы можно было корректно сохранить изменения данных либо не сохранять их, в форме предусмотрены две кнопки «ОК» и «Отмена». По кнопке «ОК» осуществляется вызов процедуры, которая записывает все изменения в БД и закрывает форму. По кнопке «Отмена» производится выход из формы без сохранения обновлений.

Для создания процедуры в окне Object Navigator выбирается узел Программы и в меню выбирается Edit->Create.

Теперь в окне Новая Программа вводится имя новой процедуры: SAVE_FORM. Код процедуры сохранения:

PROCEDURE SAVE FORM IS BEGIN Post;

END;

На следующем шаге создается служебный блок данных, в котором будут располагаются кнопки «ОК» и «Отмена». Блок необходимо создать с выбором опции Build a new data block manually. Новому блоку данных присваивается имя TAIL и в Property Palette устанавливается свойство Database Data Block в значение NO, отметив тем самым, что данный блок не связан с БД.

Данные кнопки помещаются на канве CANVAS4 в блоке TAIL со следующими свойствами:

кнопка OK:

  • Name: OK_BUTTON

  • Label: OK

кнопка Отмена

  • Name: CANCEL_BUTTON

  • Label: Отмена

Чтобы по нажатию кнопок выполнялись нужные действия, следует для каждой из кнопок создать триггер WHEN-BUTTTON-PRESSED, который вызывается при нажатии кнопки. Для кнопки ОК триггер будет следующим:

Save_Form;

Exit_Form(NO_VALIDATE);

Для кнопки Отмена:

Exit_Form(NO_VALIDATE);

Триггер, который вызывается при открытии формы-WHEN-NEW-FORM-INSTANCE для блока D_AKT будет выглядеть следующим образом:

:System.Message_Level := '5';

Go_Block('D_akt1');

Execute_Query;

Go_Block('d_akt2');

Execute_Query;

Go_Block('d_akt3');

Execute_Query;

Go_Block('d_akt1');

Триггеры POST_QUERY для блоков данных:

  • D_AKT1:

IF :d_akt1.s_org_kod IS NOT NULL THEN

SELECT naim,okpo INTO :d_akt1.naim_org,:d_akt1.okpo FROM s_orgs WHERE kod = :d_akt1.s_org_kod;

END IF;

IF :d_akt1.s_pod_kod_p IS NOT NULL THEN

SELECT naim_p INTO :d_akt1.naim_podr from s_pods where kod_p=:d_akt1.s_pod_kod_p;

END IF;

EXCEPTION WHEN NO_DATA_FOUND THEN

NULL;

  • D_AKT2:

IF :d_akt2.s_predmet_kod_pr IS NOT NULL THEN

SELECT naim_pr, nom_n, inv_n, kod_ed, naim_ed INTO :d_akt2.naim_pred, :d_akt2.nom_n, :d_akt2.inv_nom,:d_akt2.izm_kod,:d_akt2.izm_naim FROM s_predmets

WHERE kod_pr = :D_akt2.s_predmet_kod_pr;

END IF;

EXCEPTION WHEN NO_DATA_FOUND THEN

NULL;

  • D_AKT3:

IF :d_akt3.s_pod_kod_p IS NOT NULL THEN

SELECT naim_p INTO :d_akt3.str_pod from s_pods where kod_p=:d_akt3.s_pod_kod_p;

END IF;

EXCEPTION WHEN NO_DATA_FOUND THEN

NULL;

При закрытии окна формы срабатывает триггер WHEN-WINDOW-CLOSED. Если в форме есть несохраненные данные, то нужно предложить пользователю их сохранить. Для этих целей необходимо использовать сообщение Alert. Чтобы создать Alert, необходимо в окне Object Navigator выделить узел Alerts и выбрать пункт меню Edit->Create.

Для нового сообщения Alert устанавливаются следующие свойства:

  • Name: SAVE_ALERT

  • Title: Сообщение

  • Message: Вы хотите сохранить сделанные Вами изменения?

  • Button 1 Label: Да

  • Button 2 Label: Нет

  • Button 3 Label: Отмена

  • Default Alert Button: Button 3

Код триггера WHEN-WINDOW-CLOSED:

DECLARE

but NUMBER;

stat VARCHAR2(14);

BEGIN

Go_Block('D_akt1');

stat := :System.Block_Status;

Go_Block('D_akt2');

stat := stat || :System.Block_Status;

Go_Block('D_akt3');

stat := stat || :System.Block_Status;

if stat <> 'QUERYQUERY' THEN

but := Show_Alert('SAVE_ALERT');

if but = ALERT_BUTTON3 then -- Нажали "Отмена"

return;

end if;

if but = ALERT_BUTTON1 then -- Нажали "Да"

Save_Form;

end if;

end if;

Exit_Form(NO_VALIDATE);

END;

Для того, чтобы установить заголовок формы в Object Navigator в узле Windows в Property Palette установить свойства:

Title: Акт на списание

Primary Canvas: CANVAS4

После выполнения вышеперечисленных шагов в результате получаются нижеприведенные формы (рис.6 -рис.12)

Рис. 6 - Форма вывода данных «Журнал актов на списание малоценных и быстроизнашивающихся предметов»

Рис. 7 - Вкладка «Организация» формы ввода данных

Рис. 8 - Вкладка «Предметы» формы ввода данных

Рис. 9 - Вкладка «Утиль (лом)» формы ввода данных

Рис. 10 – Форма «Справочник организаций»

Рис. 11 – Форма «Справочник подразделений»

Рис. 12 – Форма «Справочник предметов»

Соседние файлы в папке Курсовая_Тюнин