Последний этап в работе с отчетами, это необходимость создания кнопки «Печать» на форме справочника, для вызова отчета. Свяжем форму «s_org» и созданный нами отчет «rep_org»
Выполним следующие операции:
1. Запустим Forms Builder и откроем форму «s_org»;
2. Откроем главный объект «Canvas» справочника, выберем элемент для создания кнопки и расположим кнопку возле кнопок «Сохранить» и «Закрыть». Двойным щелчком вызовем свойства кнопки и введем в свойство «Label» подпись кнопки «Печать». Убедитесь в том, что созданная нами кнопка находится в блоке данных «S_ORG_TAIL».
3. Теперь нужно создать процедуру запуска отчета на выполнение из формы. Для этого перейдите в раздел «Программы» в «Object Navigator» и нажмите «+». В появившемяся окне выберите «Тип» - «Процедуры», в поле «Имя» введите «GO_PRINT» и нажмите «ОК»
В появившемся окне PL/SQL Editor введем следующий текст:
PROCEDURE GO_PRINT (srv_host VARCHAR2, srv_port VARCHAR2, srv_name VARCHAR2, rep VARCHAR2, params VARCHAR2) IS repid REPORT_OBJECT; v_rep VARCHAR2(100); rep_status VARCHAR2(20); other VARCHAR2(1024); printer_name VARCHAR2(80); BEGIN repid:= find_report_object(rep); -- Устанавливаем свойства отчета SET_REPORT_OBJECT_PROPERTY(repid, REPORT_EXECUTION_MODE,BATCH); SET_REPORT_OBJECT_PROPERTY(repid, REPORT_COMM_MODE,SYNCHRONOUS); SET_REPORT_OBJECT_PROPERTY(repid, REPORT_DESTYPE,CACHE); SET_REPORT_OBJECT_PROPERTY(repid, REPORT_DESFORMAT,'pdf'); SET_REPORT_OBJECT_PROPERTY(repid, REPORT_SERVER,srv_name); -- Передаем отчету дополнительную строку параметров SET_REPORT_OBJECT_PROPERTY(repid, REPORT_OTHER, params); v_rep:= RUN_REPORT_OBJECT(repid); rep_status:= REPORT_OBJECT_STATUS(v_rep); -- Ожидаем выполнение и формирование отчета WHILE rep_status in ('RUNNING','OPENING_REPORT','ENQUEUED') LOOP rep_status:= Report_Object_Status(v_rep); END LOOP; -- Если отчет сформировался, показываем его в браузере IF rep_status = 'FINISHED' THEN WEB.SHOW_DOCUMENT('http://'|| srv_host ||':'|| srv_port|| '/reports/rwservlet/getjobid'|| substr(v_rep,instr(v_rep,'_',-1)+1)|| '?'||'server=' || srv_name,'_blank'); ELSE message('Ошибка вывода на печать!!!'); END IF; END; |
|
|
Опишем параметры, которые принимает процедура:
- «srv_host» - входящий текстовый параметр, определяет имя хоста или IP-адрес, где установлен сервер отчетов. В нашем случаи, так как сервер отчетов устанавливается локально, в качестве значения этого параметра можут быть «localhost» или IP-адрес – 127.0.0.1;
- «srv_port» - входящий текстовый параметр, определяет порт хоста, по умолчанию для Oracle Developer Suite – 8889, для Oracle Application Server – 80;
- «srv_name» - входящий текстовый параметр, определяет имя сервера отчетов;
- «rep» - входящий текстовый параметр, определяет имя объекта «Reports» созданного в Forms Builder;
- «params» - входящий текстовый параметр, определяет дополнительную строку параметров, которые будут переданы отчету перед его выполнением.
Нажмем первую кнопку на панели инструментов PL/SQL Editor «Compile PL/SQL» для компиляции и закроем это окно.
Теперь добавим сам отчет, перейдите на пункт «Reports» в «Object Navigator» и нажмите кнопку «+», в результате появится следующее окно (рис. 75).
|
|
Рисунок 75 - Окно выбора отчета для добавления его в форму
Выберете «Use Existing Report File» и нажмите кнопку «Browse…», после чего в появившемся окне найдите файл отчета «rep_org.rdf» и нажмите «OK», в результате в окне появится путь к файлу отчетов. Так как ранее мы настроили сервер отчетов, указав ему, возможные места нахождения отчетов, поэтому в поле «Filename» оставьте только имя файла с расширением. Затем нажмите кнопу «OK». В «Object Navigator» в пункте «Reports» появится отчет, теперь нам нужно переименовать его в «rep_org», путем одно щелчка мыши по имени и ввода нового. После проделанных нами операций мы увидим (рис. 76).
Рисунок 76 - Прикрепленный отчет «REP_ORG» в форме «S_ORG»
Теперь для кнопки «Печать» необходимо добавить триггер «WHEN-BUTTON-PRESSED», в котором будет происходить вызов отчета. Для этого нужно проделпть следующие операции:
1. Откройте объект «Canvas», на котором расположена кнопка «Печать»;
2. Щелкните по кнопке «Печать», затем вызовите контекстное меню, в котором выберите «Smart Triggers» -> «WHEN-BUTTON-PRESSED»;
3. В открывшемся окне PL/SQL Editor введите текст вызова процедуры «GO_PRINT»
Общий синтаксис вызова:
GO_PRINT(‘имя_хоста’,’порт_хоста’,’имя_сервера_отчетов’,’имя_отчета’,’допол_парам’); |
Пример вызова отчета «rep_org»:
GO_PRINT(‘localhost’,’8889’,’rep_206-1’,’REP_ORG’,’’); |
4. Нажмем первую кнопку на панели инструментов PL/SQL Editor «Compile PL/SQL» для компиляции и закройте окно.
Откомпилируйте и сохраните файл формы, запустите его.