Презентация

Download Report

Transcript Презентация

Slide 1

«Парус-Предприятие 8»

Отчеты с типом «Двоичные данные»

Материалы вебинара можно скачать по ссылке:
https://cloud.mail.ru/public/443709673ea0/parus_webinar220514.zip


Slide 2

Назначение

Отчеты с типом “Двоичные данные” применяются если:

1. Нужно оперативно выгрузить данные из системы
2. Нужно сформировать отчет с типом данных отличных от стандартных типов отчетов
ПП Парус 8, например, PDF, HTML, RTF, MS Word
(презентация http://www.parus.com/docs/09_mindijarov_13122012.pps);
3. Нужно, частично или полностью, формировать отчет НЕ на клиенте ПП Парус 8
(презентация http://www.parus.com/docs/imindiyarov_20130725.ppsx);
4. Предоставить пользователю произвольные файлы из других информационных
систем.


Slide 3

Особенности написания отчета

Отчеты с типом “Двоичные данные” всегда:

1.Основываются на процедуре PL/SQL.
2.Имеют входной числовой параметр с типом привязки “Идентификатор процесса”.
3.Данные, передаваемые «клиенту» будут записаны в таблицу FILE_BUFFER.

4. С «клиента» будет вызвано приложение ОС, которое определяется
непосредственно в процедуре отчета


Slide 4

Особенности написания отчета
Особенности заполнения таблицы FILE_BUFFER
•В поле IDENT необходимо записывать “идентификатор процесса”;

•Если имя файла начинается с “.”, то на клиенте будет создано случайное имя файла;
•В поле DATA записываются данные с типом CLOB, либо в поле BDATA записываются
данные с типом BLOB;

•Если в параметр RUN_CMD:

• записать NULL, то это будет запущено приложение, которое
ассоциировано с расширением имени файла;

• записать ‘NULL’ (как строковую константу), то файл будет создан, но
никакой команды на запуск выполнено не будет;

• Записать имя исполняемого файла и символы ‘%1’, например,
‘some_program.exe /q -x %1’, то будет запущена указанная программа,
символы %1 будут заменены на имя файла, который будет создан из
полей BDATA или DATA.


Slide 5

Особенности написания отчета



Файлы создаются во временной папке пользователя (заданной в переменной
окружения TEMP);



Файлы не удаляются;



Файлы создаются и выполняются по порядку, в зависимости от значения поля RN
таблицы FILE_BUFFER;


Slide 6

Установка примера
Рассмотрим пример отчета с типом двоичные данные, который выгружает данные
из раздела «Хозяйственные операции» в MS Excel используя формат HTML.
Под пользователем PARUS компилируем процедуру UDO_P_ECONOPRS_BREPORT (
выложена в архиве в папке BINARY
В разделе «Отчеты» – «Пользовательские отчеты» создаем новую запись

Заполняем произвольно
мнемокод и наименование.
Указываем тип: Двоичные
данные

Указываем хранимую
процедуру:
UDO_P_ECONOPRS_BREPORT


Slide 7

Установка примера
Добавляем 3 параметра отчета:
NPROCESS – привязка к идентификатору процесса

NCOMPANY – привязка к организации

NIDENT – привязка к идентификатор помеченных записей


Slide 8

Установка примера
Добавляем связь с разделом «Хозяйственные операции»

Заходим в раздел «Хозяйственные операции» отмечаем необходимые нам записи и из
контекстного меню выбираем «Расширения» – «Пользовательские отчеты»


Slide 9

Установка примера
Из списка отчетов выбираем «Выгрузка ХО в HTML (двоичные данные)»

И получаем выгрузку данных в MS Excel

Так же при минимальных модификациях в процедуре этот отчет можно открыть в
любом браузере.


Slide 10

Отчет с типом двоичные данные - HTML

Данный способ показал значительный прирост в скорости выгрузки данных
по сравнению со стандартной функцией «Перенос в MS Excel», а так же по
сравнению с пользовательским отчетом использующим PRSG_EXCEL
В режиме теста, на примере 20 000 записей Хозяйственных операций и
проводок, время выгрузки составляет 57 сек.


Slide 11

Разбор процедуры создания отчета
Обязательные параметры
NIDENT и NPROCESS

create or replace procedure UDO_P_ECONOPRS_BREPORT(
NCOMPANY in number –организация
,NIDENT
in number --идентификатор отмеченных записей
,NPROCESS in number --идентификатор процесса
)

Объявляем процедуру записи строки в CLOB
procedure PUT_LINE(S in varchar2) as
begin
DBMS_LOB.WRITEAPPEND(C, LENGTH(S || CR), S || CR);
end;

и процедуру наполнения BLOB из CLOB
procedure SAVE_MODULE(DATA in out nocopy clob, RES in out nocopy blob) as
-L_DEST_OFFSET
integer;
L_SOURCE_OFFSET integer;
L_LANG_CONTEXT integer;
L_WARNING
integer;
L_BLOB_CSID
integer;
-begin
L_BLOB_CSID
:= NLS_CHARSET_ID('CL8MSWIN1251');
L_DEST_OFFSET
:= 1;
L_SOURCE_OFFSET := 1;
L_LANG_CONTEXT := DBMS_LOB.DEFAULT_LANG_CTX;
L_WARNING
:= DBMS_LOB.WARN_INCONVERTIBLE_CHAR;
DBMS_LOB.CONVERTTOBLOB(DEST_LOB
=> RES, SRC_CLOB
=> DATA,
AMOUNT
=> DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET
=> L_SOURCE_OFFSET,
BLOB_CSID
=> L_BLOB_CSID,
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING
=> L_WARNING);
end;


Slide 12

Разбор процедуры создания отчета
Создаем временный CLOB
DBMS_LOB.CREATETEMPORARY(C, true);

Добавляем основную разметку отчета HTML тэгами процедурой PUT_LINE
PUT_LINE('' || '' || 'Отчет' || -- заголовок отчета
'' || --описание
css стилей
'' ||
'' || '');

Добавляем разметку основной таблицы
PUT_LINE('');

Начинаем строку заголовков
PUT_LINE('');

Описываем каждый столбец заголовка
PUT_LINE('' ||
'' ||
. . .
'');
PUT_LINE(''); -- конец строки заголовка


Slide 13

Разбор процедуры создания отчета
Начинаем выборку данных
for CURS in (select trim(E.OPERATION_PREF) || '-' ||
trim(E.OPERATION_NUMB) as OPER_NUMB
,E.OPERATION_DATE as OPER_DATE
. . .

,O.NOMEN_CODE || ', ' || O.NOMEN_NAME || ', ' ||
O.NOMEN_MEAS as NOMEN
,O.NOMEN_PARTNO as NOMEN_PARTNO
from V_ECONOPRS E, V_OPRSPECS O, SELECTLIST S
where S.IDENT = NIDENT
and E.RN = S.DOCUMENT
and E.RN = O.PRN(+)
)
loop

Заполняем таблицу данными
PUT_LINE('
'); -- начало строки с данными
-- столбцы с данными
PUT_LINE('
');
PUT_LINE('
');
. . .

PUT_LINE('
');
PUT_LINE('
'); -- конец строки с данными
PUT_LINE('
Номер операцииДата учетаНомер партии
' || CURS.OPER_NUMB || '' ||
TO_CHAR(CURS.OPER_DATE, 'dd.mm.yyyy') || '
' || CURS.NOMEN_PARTNO || '
'); -- конец разметки основной таблицы
PUT_LINE(''); -- конец отчета


Slide 14

Разбор процедуры создания отчета
Создаем временный BLOB
DBMS_LOB.CREATETEMPORARY(B, true);

Заполняем BLOB из CLOB
SAVE_MODULE(C, B);

Очищаем CLOB
DBMS_LOB.FREETEMPORARY(C);

Заполняем FILEBUFFER данными из BLOB
insert into FILE_BUFFER
(IDENT, FILENAME, BDATA, RUN_CMD)
values
(NPROCESS, '.htm', B, 'excel.exe /e %1');

Здесь мы формируем html файл и открываем его в MS Excel.
Вместо Excel можно использовать любой браузер например Google Chrome для этого вместо excel.exe
необходимо написать chrome.exe
Очищаем BLOB
DBMS_LOB.FREETEMPORARY(B);
end;