Отправляет email-рассылки с помощью сервиса Sendsay

Navision - советы и секреты

  Все выпуски  

Работа с Excel из Navision: стиль Ultra.


Navision: Excel в стиле Ultra

Эксель - самое популярное средство подготовки отчетов, печатных форм, сверок с клиентами и поставщиками. За все время работы с ним накопилось достаточно тонкостей, которые в разы (иногда в десятки раз) увеличивают скорость работы. Итак:

1) самый медленный способ выкинуть что-то в эксель - это использовать стандартный функционал Excel Buffer :-) Самый быстрый - получить (или сформировать самостоятельно) ADODB.Recordset, и затем использовать метод objRange.CopyFromRecordset. Для некоторых версий приходится сначала присвоить рекордсет переменной типа Variant. Я делаю это всегда:

GetQuery(txtQuery, adoResult);

vntResult := adoResult;

xlRange := xlSheet.Range('$A$1');
xlRange.CopyFromRecordset(vntResult);

Результаты превзойдут все ваши смелые ожидания. Только помните, что эксель не принимает больше (attention!) 65000 строк.

Небольшая ремарка - после того, как в одном из предыдущих выпусков была описана венгерская нотация для Navision, думаю, больше нет нужды в коде указывать типы переменных :-)

2) обработка идет быстрее, если приложения не видно на экране. Т.е. xlApplication.Visible := FALSE. Видеть эксель на экране стоит лишь во время написания и отладки кода, в рабочей версии свойство Visible лучше устанавливать в TRUE в последнюю очередь.
Кстати, с этим связана одна проблема, полного решения которой получить до сих пор не удалось. При возникновении ошибки этот невидимый эксель остается висеть в памяти, и удалить его можно только через диспетчер задач. Если у вас есть решение - пишите на likeart@mail.ru - опубликуем!

3) обработка идет быстрее, если в шаблоне указан Вид - "Обычный". Ни в коем случае не указывайте "Разметка страницы" - рискуете не дождать сформированного документа. Бывали случаи, когда терпеливый юзер ждал формирования документа из 300 строк около часа. Когда нормой для такого количества является несколько секунд. Почему так приосходит? В режиме "Разметка страницы" эксель постоянно рассчитывает область печати и делит документ на страницы. Результат - тормоза. Из этого, кстати, следует следующий пункт :-)

4) когда вы формируете многостраничный документ с форматированием, не вставляйте разрывы страниц по мере формирования документа. Лучше записывайте номера строк, где это надо сделать, во временную таблицу, и УЖЕ ПОСЛЕ ФОРМИРОВАНИЯ документа запускайте отдельную функцию, которая расставит разрывы в нужных местах. Экономия времени коллоссальная.

5) то же самое касается и всего остального форматирования. По мере возможности выносите его отдельно, укрупняйте, старайтесь форматировать документ крупными блоками, вместо того, чтобы прорисовывать границы у каждой ячейки.

6) с опаской используйте метод Columns.Autofit. На большом диапазоне он может подвесить эксель. Лучше заранее выставьте ширину столбцов так, как требуется в большинстве случаев. Здесь еще может помочь свойство ячейки - «Отображение» - «Автоподбор Ширины». Для печати бумажных документов это просто незаменимая вещь.

Кстати, столь любимая мной конструкция WITH ... END не работает с Automation-серверами. Не знаю, почему, но в самый неподходящий момент вы можете получить сообщение об ошибке на ровном месте :-(

Вот такой краткий экскурс. Это не все :-) Ждите продолжения в следующих выпусках.
Надеюсь, этот выпуск будет полезен всем, кто работает с экселем через Navision. Лично у меня в свое время применение этих методов сократило время менеджеров на подготовку отчетов минимум в 10 раз.


P.S. Хотите поделиться своими знаниями? Всегда Welcome! Любые статьи, Q & A, FAQ, советы - все опубликуем, обязательно укажем автора и дадим линк на сайт :-)

С наилучшими пожеланиями,
Андрей Стрельников.

Группа «Technologies like Art».
Разработки в сфере Navision. Скоростные и суперскоростные оптимизации, системная интеграция.
e-mail: likeart@mail.ru.

Технологии как искусство.
----
Что такое главное?


В избранное