Рассмотрим создание документа доверенности на основе сложной таблицы, сложная таблица будет, представляет собой объектную таблицу с вложенной в нее таблицей.
Для Oracle Reports Builder нет различий, на какой основе строится отчет: на реляционных таблицах, объектных или сложных, т.е. работа с этими типами таблиц сводится к тому, чтобы правильно представить данные с учетом особенностей типа таблицы в построители моделей данных.
Таким образом, для перестройки документа с реляционных таблиц, например на сложные объектные, достаточно поменять SQL – запросы с учетом особенностей таблицы.
Запустим Report Builder и создадим новый проект документа. Сохраним проект под именем «d_dover4», откроем «Report Editor», перейдем на вкладку построения моделей данных и нажмем кнопку для создания нового запроса (как проделать данные операции смотрите в работе «Создание документа на основе двух реляционно-связанных таблиц»).
Получим следующее изображение на экране (рис. 173).
Введем следующий SQL запрос:
SELECT ndoc, datav, data_deis, DEREF(ref_org2).naimen as naim_org, DEREF(ref_fiz_lic2).im as im, DEREF(ref_fiz_lic2).fam as fam, DEREF(ref_fiz_lic2).otch as otch, kod FROM d_dover4 WHERE kod=:P_KOD |
Рисунок 173 - Ввод запроса для отчета
При нажатии на кнопку «OK» Report Builder говорит о том нужно, он создаст автоматически входящий параметр «P_KOD». По умолчанию создаваемые параметры имеют тип данных «Char», а нам нужен «Number», так как поле «kod» в таблице «d_dover4» имеет тип «Number». Для того чтобы поменять тип данных параметра, нужно перейти в окно «Object Navigator», выбрать «User parameter» и двойным щелком мыши по «P_KOD» вызвать свойство параметра. В свойстве «Datatype» выбрать «Number».
В нашем запросе мы получаем фамилию, имя и отчество в отдельные поля, а нам необходимо их соединить, для этого мы будем использовать элемент «Formula Column». Щелкните мышью по кнопке , а затем по списку полей в запросе, в результате у нас появится новое поле «CF1». Двойным щелчком по данному полю вызовем свойства данного поля и установим: «Datatype» - «Character», «Width» - 100 и в свойстве «PL/SQL Formula» - нажмем кнопку «…». В результате чего у нас на экране появится следующее окно (рис. 174).
Рисунок 174 - Окно ввода PL/SQL кода для элемента «CF1»
Введем следующий текст между операторами «begin» и «end»:
return:fam||' '||:im||' '||:otch; -- конкатенация фам. имени и отчества |
Нажмем кнопку «Компиляция» и «Закрыть».
Теперь перейдем к созданию второго запроса для табличной части документа. Данные для табличной части мы будем брать из вложенной таблицы документа. Создадим новый SQL – запрос и введем следующий текст:
SELECT a.kod, DEREF(a.ref_s_naimen2).naimen as naimen, a.kol, a.ed_izm FROM TABLE(SELECT n1_naimen FROM d_dover4 WHERE kod=:P_KOD) a; |
Теперь создадим сразу во втором запросе поле «Summary Column» для нумерации строк в табличной части (как проделать данные операции смотрите в работе «создание документа на основе двух реляционно-связанных таблиц).
После создания обоих запросов на экране появится следующая картина (рис. 175)
Рисунок 175 - Созданные объекты запросов в Report Editor
Приступим к дизайну нашего документа, нажав кнопку . Создадим повторяющийся фрейм для «шапки» нашего документа, рамку фрейма установим в «Нет линии», в свойствах фрейма «Source» установим «G_NDOC1». Добавим поля данных в созданный нами фрейм:
- «Номер доверенности»: свойство «Source» - «ndoc1», рамка – «Нет линии»;
- «Дата выписки»: свойство «Source» - «datav», рамка – «Нет линии»;
- «Дата действия»: свойство «Source» - «data_deis», рамка – «Нет линии»;
- «Получатель»: свойство «Source» - «naim_org», рамка – «Нет линии»;
- «Доверенность выдана»: свойство «Source» - «CF1», рамка – «Нет линии».
Создадим подписи для каждого поля данных с помощью элемента «Текст» (как проделать данные операции смотрите в работе «создание документа на основе двух реляционно-связанных таблиц). Получим «шапку» документа как на рисунке.
Рисунок 176 - Документ «Доверенность» в режиме дизайна
Теперь создадим табличную часть документа, для этого создадим повторяющийся фрейм со следующими свойствами: «Source» -«G_KOD1», «Vertical Elasticity» - «Variable». Создадим 4 поля данных по горизонтали в созданном нами фрейме со свойствами:
- «Номер по порядку»: «Source» - «CS1», рамка - «Нет линии»;
- «Наименование»: «Source» - «Naimen», рамка - «Нет линии»;
- «Количество»: «Source» - «KOL», рамка - «Нет линии»;
- «Единица измерения»: «Source» - «ED_IZM», рамка - «Нет линии».
Создадим соответствующие подписи над полями данных. Затем произведем форматирование полей данных и подписей: выравнивание – центр.
Произведем разделение линиями всех столбцов во втором фрейме (рис. 177).
На последнем этапе создания документа нам необходимо создать надписи для подписей главного бухгалтера и руководителя предприятия, поочередно создадим элемент «текст» () и добавим в них текст «Главный бухгалтер», «Руководитель предприятия». Для отображения линии, где бухгалтер или руководитель будет расписываться, используйте инструмент «Линия».
Рисунок 177 - Документ «Доверенность» в режиме дизайна
Теперь можно посмотреть, что у нас получается в режиме просмотра, для этого нажмем кнопку , сразу появится окно для ввода параметров (рис. 178).
Рисунок 178 - Форма запроса параметоров отчетв
В данном окне мы должны ввести номер документа, который мы уже раннее создали (т.е. который уже есть в таблице d_dover4), после ввода номера документа, нажмем кнопку Enter и получим документ (рис. 179).
Рисунок 179 - Документ «Доверенность» в режиме просмотра
Нажмем кнопку для сохранения нашего документа.