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(''); -- конец отчета
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;
«Парус-Предприятие 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('
Номер операции | ' ||Дата учета | ' ||Номер партии | ');
' || 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;