Описание различных способов полученияотчетов MS Excel в
"ПАРУС - Предприятие 8"
Миндияров Илья
Главный специалист
Центра информационных технологий и консалтинга ПАРУС
Комплексная система управления.
Вопросы рассматриваемые в презентации
• Использование пользовательских приложений. Способы ускорения вывода данных в пользовательские приложения.
• Способы формирования отчета в формате XML на стороне сервера (отчет с типом "Двоичные данные").
• Способ ускорения формирования уже существующих отчетов MS Excel.
Комплексная система управления.
Использование пользовательских приложений.
Использования переменных vararray
Плюсы – минимальные переделки.
Минусы – незначительное ускорение работы
Комплексная система управления.
Использование пользовательских приложений.
Метод дает хорошие результаты при выводе большого кол-ва столбцов
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
Минусы – сложно писать, сложно сопровождать
Плюсы – очень быстро работает, не нужно полностью перерабатывать пользовательское приложение.
Пишем процедуру на PL/SQL следующим образом – большие статичные блоки кода на VB описываем функциями, которые возвращают clob
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
Затем такие функции будем добавлять в программу следующим образом.
Где С,С1,С2 - clob
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
Пишем программу так, чтобы все данные из запроса попали в текст программы VB
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
ВАЖНО! Размер одной процедуры на VBA не может превышать 64 Кб.
Я разбивал процедуры по 500 записей
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
Запишем все Clob’ы в один.
Преобразуем Clob в Blob
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
Преобразование Clob в Blob нужно если у вас кодировка БД отлична от CP-1251.
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
В пользовательском приложении пишем следующий код.
Комплексная система управления.
Использование пользовательских приложений.
Написание программы на Visual Basic использую PL/SQL
Чтобы такой код работал необходимо разрешение
“Доверять доступ к объектной модели проектов VBA”
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Первый способ – формирование книги MS Excel на основе SQL запроса с последующим форматированием на стороне клиента
Плюсы – быстро работает
Минусы – сложно описывать форматирование
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Первый способ – формирование книги MS Excel на основе SQL запроса с последующим форматированием на стороне клиента
Форматирование можно описать либо в тексте процедуры отчета, либо загрузить и обработать любой clob/blob из штатного раздела (шаблоны документов, пользовательские приложения)
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Первый способ – формирование книги MS Excel на основе SQL запроса с последующим форматированием на стороне клиента
Значение ‘NULL’ для поля RUN_CMD означает, что файл необходимо сохранить в каталоге %TEMP%, но НЕ вызывать никакую команду ОС
Данная возможность появилась в релизе 8.5.6.1 от 25.06.2013.
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Первый способ – формирование книги MS Excel на основе SQL запроса с последующим форматированием на стороне клиента
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Второй способ – на PL/SQL сгенерировать HTML, а затем HTML открыть в MS Excel.
Плюсы – просто и быстро
Минусы – нет формул, отформатированные числа являются строками, сложно сделать отчет на несколько листов.
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Второй способ – на PL/SQL сгенерировать HTML, а затем HTML открыть в MS Excel.
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Второй способ – на PL/SQL сгенерировать HTML, а затем HTML открыть в MS Excel.
Данная возможность появилась в релизе 8.5.6.1 от 25.06.2013.
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
Плюсы – быстрее невозможно
Минусы – очень трудно исправлять печатную форму отчета
1 шаг
Подготовить книгу Excel.
Важно сразу хорошо подготовить все стили – затем это будет сложно исправить
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
2 шаг
Сохранить книгу в формате XML.
Открыть книгу в XML-редакторе
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
3 шаг
Скопировать всю книгу в функцию, которая возвращает Clob
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
4 шаг
Удаляем атрибуты ss:ExpandedColumnCount ss:ExpandedRowCount в тэге Table
Заменяем значение 2013-01-01 на переменную
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
4 шаг
Результат
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
5 шаг
Вырезаем в текстовый редактор тэг Row с данными
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
6 шаг
Вырезаем в новую функцию весь xml, который идет после тэга Row, где описан заголовок таблицы
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
7 шаг
Проверим работу отчета
следующим образом
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
7 шаг
Результатом должна быть таблица без данных
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
7 шаг
Если что-то сделали не так, то появится подобное окно. Внимательно прочитайте указанный файл отчета, для исправления ошибки. Или выполните действия заново начиная с шага 2.
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
8 шаг
Проверим, что корректно формируется таблица
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
8 шаг
Результат
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
9 шаг
Подставляем поля курсора
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
Результат
Комплексная система управления.
Отчеты с типом “Двоичные данные”
Третий способ – на PL/SQL напрямую сгенерировать MS Excel.
Сложности: Если в тэге Row с данными (либо в строках после отчета) встречается атрибут ss:Index, то необходимо в пустых строках добавить пробелы в любую ячейку, чтобы избавиться от ss:Index.
<Table ss:ExpandedColumnCount=“1" ss:ExpandedRowCount="12" x:FullColumns="1"
x:FullRows="1">
<Row ss:Index="12">
<Cell><Data ss:Type="String">text</Data></Cell>
</Row>
</Table>
Комплексная система управления.
Ускорение существующих отчетов MS Excel
Силами ЦИТК Парус разработан пакет PL/SQL, который по данным, сгенерированным штатным пакетом PRSG_EXCEL, создает XML формата OfficeML на сервере.
Ограничения пакета:• Никогда не будет реализован PRSG_EXCEL.EXECUTE_MACROS.Пока ТОЛЬКО реализованы методы
PRSG_EXCEL.LINE_APPENDPRSG_EXCEL.LINE_CONTINUEPRSG_EXCEL.LINE_DELETEPRSG_EXCEL.CELL_VALUE_WRITE.
Пока не умеет работать с шаблонами в которых встречается тэг Row с атрибутом ss:Index.
Комплексная система управления.
Ускорение существующих отчетов MS Excel
Пример использования
Создать процедуру для двоичного отчета в которой вызвать процедуру существующего отчета MS Excel
Комплексная система управления.
Ускорение существующих отчетов MS Excel
Пример использования
Вызвать UDO_PKG_MSEXEL.PROCESS
Входной параметр – шаблон существующего отчета сохраненный в формате XML
Выходной параметр – готовый отчет MS Excel.
Комплексная система управления.
Ускорение существующих отчетов MS Excel
Пример использования
Результат
Комплексная система управления.
Ускорение существующих отчетов MS Excel
Сложность:
Когда сохраните шаблон в XML в текстовом редакторе необходимо проверить, что нет текста Row ss:Index. Если такой текст встретился добавьте в пустые строки пробелы в первую ячейку.
Комплексная система управления.
Ускорение существующих отчетов MS Excel
На существующих отчетахприрост производительности
увеличивался в 9-10 раз.
Комплексная система управления.
Ускорение существующих отчетов MS Excel
Вопрос•Нужно ли дорабатывать UDO_PKG_MSEXEL
до полного соответствия с методами PRSG_EXCEL?