AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2005, 16:20   #1  
tumev is offline
tumev
Участник
 
30 / 10 (1) +
Регистрация: 12.09.2005
Word документ в 3-х звенке
Формирование Word документа на удаленном клиенте происходит долго, около 5 минут. Шаблон документа сначала находился на сервере, теперь на машине клиента, по-моему на скорость это никак не влияет.
Для сравнения, клиент в локальной сети формирует этот же документ за минуту.

Можно ли как-нибудь ускорить процесс?
или это фантастика?

Заранее всем спасибо
Старый 04.10.2005, 16:22   #2  
tumev is offline
tumev
Участник
 
30 / 10 (1) +
Регистрация: 12.09.2005
Разумеется следовало оптимизировать некоторые select-ы
Но (!) самое интересное было в определении версии Word
<экземпляр Com класса>.version()

Метод FindField класса ComWordDocument_RU
содержит следующий кусок кода:
...................
if (substr(m_comApplication.version(), 1, 1) >= '9') // Word 2000 and later
{
field = fields.item(_bookMark);
}
else
{
for (i=1 ; i<= fields.count() ; i+=1)
{
fieldTmp = fields.item(i);
......................

substr(m_comApplication.version(), 1, 1) возвращает 1, если Word 2003.
Код исправлен следующим образом:
...........
sbuf =substr(m_comApplication.version(), 1, 1);
if (sbuf >= '9' || sbuf == '1') // Word 2000 and later
{
field = fields.item(_bookMark);
}
else
{
for (i=1 ; i<= fields.count() ; i+=1)
{
fieldTmp = fields.item(i);
..................

Работает кратно быстрее

Известна ли версия Word, которая начинается на 1 и раньше 2003?
Старый 04.10.2005, 16:39   #3  
tumev is offline
tumev
Участник
 
30 / 10 (1) +
Регистрация: 12.09.2005
Думаю так будет лучше
...........
sbuf = str2num(m_comApplication.version());
if (sbuf >= 9) // Word 2000 and later
{
field = fields.item(_bookMark);
}
else
{
for (i=1 ; i<= fields.count() ; i+=1)
{
...........
Старый 05.10.2005, 13:46   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Следует помнить, что в X++ вычисление граничных условий цикла происходит при каждой итерации цикла. Это значит, что вычисление значения fields.count() происходит при каждом шаге цикла. Для ускорения этого процесса следует вычислить это значение один раз ДО выполнения цикла.

PHP код:
int fieldsCount;
;
...
fieldsCount fields.count()
for (
i=1i<=fieldsCounti++)
{
...

Согласен, выигрыш в скорости незначительный. Но если количество полей достаточно велико и из кода достаточно много обращений к этому методу, то в сумме это может дать некоторый выигрыш в скорости.
Старый 06.10.2005, 08:07   #5  
tumev is offline
tumev
Участник
 
30 / 10 (1) +
Регистрация: 12.09.2005
Выигрыш действительно несущественный.
Помнится мудрость "с миру по нитке - бедному рубаха". :-)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибки Word 2003 при работе в терминальном режиме Владимир Максимов DAX: Программирование 17 03.07.2017 13:42
Документ Word в отчет gudzon DAX: Программирование 0 17.06.2005 18:04
Создание нескольких экземпляров Word на основе шаблона axaLearner DAX: Программирование 5 03.01.2005 16:12
Как сохранить документ Word(ComWordDocument_RU) listener DAX: Программирование 4 14.08.2003 12:02
Как импортировать из Word chuf DAX: Программирование 4 21.06.2003 15:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:33.