500 likes | 1.09k Views
Описание различных способов получения отчетов MS Excel в "ПАРУС - Предприятие 8". Миндияров Илья Главный специалист Центра информационных технологий и консалтинга ПАРУС mindiyarov@parus.ru. Вопросы рассматриваемые в презентации.
E N D
Описание различных способов полученияотчетов MS Excel в "ПАРУС - Предприятие 8" Миндияров Илья Главный специалист Центра информационных технологий и консалтинга ПАРУС mindiyarov@parus.ru
Вопросы рассматриваемые в презентации • Использование пользовательских приложений. Способы ускорения вывода данных в пользовательские приложения. • Способы формирования отчета в формате 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?