Баксараев Андрей
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.