Баксараев Андрей

 

Oracle Forms 6i

Практические занятия

 

Урок 5. Создание Мастер - Детальной формы ведения сотрудников.

               Улучшение вешнего вида формы, применение видеоатрибутов текущей записи блока.

 

Форма ведения сотрудников полученная в результате Урока 4 удобна для перевода сотрудника из отдела в отдел , для этого достаточно лишь изменить поле Отдел у конкретного сотрудника.  Но для заведения нового сотрудника была бы удобна форма , где по выбранному отделу отображался список его сотрудников…

 

Создадим новый модуль формы.

 

Создадим новый базовый блок OTD на канве Canvas1 с количеством строк 5

 

Исключите из канвы Canvas1 поле otd_id

 

Отредактируйте внешний вид канвы Canvas1

 

Откройте форму Lesson4 

*   скопируйте из него триггер Pre-Form и Pre-Insert на блок OTD в нашу форму.

*   cкопируйте группу записей RG2 и объект LOV2

 

Сохраните модуль формы под именем Lesson5, используя меню File / Save.

 

Создадим новый базовый блок SOTR на канве Canvas1 с количеством строк 10 и определим его как детальный для блока OTD. Для этого на закладке Master/Detail выберите мастер блок - OTD  и опишите условия соединения :

 

Sotr.Otd_Otd_Id = Otd.Otd_Id

 

Нажмите кнопку OK

 

 

 


Обратите внимание на изменение в дереве объектов формы Lesson5:

*   Помимо блока SOTR появился новый триггер ON-CLEAR-DETAILS

*   В узле Programm Units появилось три новых процедуры

*   В узле блока OTD - Relations  появилась новая связь OTD_SOTR

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

их содержание…

 

 

В блоке Sotr определим принадлежность полей SOTR_ID , OTD_OTD_ID, DOL_DOL_ID  -  Null канве (Свойство  Canvas  этих  полей)

 

Из модуля Lesson4 скопируйте:

*   триггер Post-Change на поле DOL_DOL_ID

*   поля DSP_NAME_D и DSP_OKLAD;

      Определите их принадлежность канве CANVAS1

 

В блоке SOTR создайте уже известный Вам триггер Pre-Insert , но в несколько модифицированном виде :

 

declare

a number;

begin

 select sotr_seq.nextval into a from dual;

 :sotr.sotr_id:=a;

 :sotr.otd_otd_id:=:otd.otd_id;

end;

 

При добавлении записи в блок SOTR у нас уже будет выбран отдел в блоке OTD поэтому значение внешнего ключа sotr.otd_otd_id заполняется из otd.otd_id .


Отредактируйте внешний вид канвы CANVAS1, измените размер окна Window0 согласно размерам канвы Canvas1

 

Запустите форму на выполнение

Выполните запрос  (F8) в блоке Отделов

Подвигайте курсором по названиям отделов, обратите внимание на изменения состава блока сотрудников…

Попробуйте добавить нового сотрудника в один из отделов.

Попробуйте добавить новый отдел и ввести в него новых сотрудников…

 


Улучшим внешний вид формы - согласитесь, что при вводе нового сотрудника не видно в какой же именно отдел мы его заносим. Желательно бы выделить текущую запись блоков каким то цветом.

 

Для этого: закроем форму и установим курсор навигатора на узел Visual Attributes. Создайте новый видеоатрибут VISUAL_ATTRIBUTE1 и определите его свойство

Background Color как GRAY , то есть серый цвет…

 

 

 

Определите свойство блоков  OTD и SOTR  

                                                    Current Record Attribute,  как  VISUAL_ATTRIBUTE1

 

Запустите форму на выполнение.

 

Что изменилось?

 

Сохраните форму, используя кнопку навигатора Save или меню File / Save.