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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.02.2012, 20:03   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,702 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от imir Посмотреть сообщение
Не, я таки настаиваю - оно прирастает, сделайте побольше сom-вызовов в вашем джобе (см скрин).
В Вашем случае количество циклов роли не играет. Вы же закомментировали закрытие документа

X++:
excel.closeDocument(false);
Естесственно, что чем больше документов открыто, тем больше ресурсов потребляется. Снимите комментарии с закрытия документа и повторите проверку.

PS: Кстати, для справки.

В версии Ax2009 в классе ComExcelDocument_RU создали в ClassDeclaration переменную comWorkSheets. Однако в методе closeDocument() эта переменная не обнуляется. Отсюда возникают глюки после первого закрытия документа, поскольку не срабатывает метод getWorkSheets(), где как раз-таки этой переменной и должны присвоить значение.

Для лечения "по быстрому" надо в методе ComExcelDocument_RU.closeDocument() после успешного закрытия документа добавить пару строчек

X++:
m_comDocument = null;
comWorkSheets = null;
А если делать по серьезному, то в методе closeDocument() надо много чего добавлять Например, этот метод вообще не предусматривает вариант, когда в одном экземляре Excel открыто несколько книг (несколько файлов Excel).

X++:
// Учет возможности работы с несколькими книгами в одном экземпляре Excel в классе ComExcelDocument_RU
public void closeDocument(boolean _save = false, int _workBook = 1)
{
    COM comWorkBooks;
    COM comWorkBook;
    // RTG, 19.12.2005, МВБ -->
    int     countWorkBooks;             // количество рабочих книг
    boolean isClosedSelectedWorkBooks;  // Закрывается ли текущая рабочая книга
    // RTG, 19.12.2005, МВБ <--

    try
    {
        if (m_comApplication)
        {
            m_comApplication.cutCopyMode(false); // 08.04.2004, Использование нескольких листов 

            comWorkBooks = m_comApplication.workBooks();

            // RTG, 19.12.2005, МВБ -->
            /*
            comWorkBook  = comWorkBooks.item(_workBook);
            comWorkBook.close(_save);
            */

            countWorkBooks  = comWorkBooks.Count();
            if (_workBook > 0 && _workBook <= countWorkBooks)
            {
                comWorkBook                 = comWorkBooks.item(_workBook);
                isClosedSelectedWorkBooks   = (comWorkBook.name() == m_comDocument.name());
                comWorkBook.close(_save);
            }
            if (isClosedSelectedWorkBooks)
            {
                countWorkBooks  = comWorkBooks.Count();
                if (countWorkBooks)
                {
                    m_comDocument = comWorkBooks.Item(countWorkBooks);
                }
                else
                {
                    m_comDocument = null;
                    comWorkSheets = null;
                }
            }
            // RTG, 19.12.2005, МВБ <--

            return;
        }
    }
    catch (Exception::Error)
    {
        exceptionTextFallThrough();
    }
    catch(Exception::Internal)
    {
        exceptionTextFallThrough();
    }

    error(this.getCOMErrorMsg());

    if (comWorkBook)
    {
        comWorkBook.detach();
    }

    if (comWorkBooks)
    {
        comWorkBooks.detach();
    }
    
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 03.02.2012 в 20:37.
За это сообщение автора поблагодарили: Maxim Gorbunov (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Масштабируемость AOS'а AX 2009 и принципы выполнения кода клиентских сессий на сервере gl00mie DAX: Администрирование 27 28.05.2013 17:40
Отображение места выполнения кода в отладчике kashperuk DAX: Программирование 5 16.08.2006 12:17
проблема с настройкой штрихового кода Nic DAX: Функционал 4 27.12.2004 09:04
Оптимизация кода X++ Владимир Максимов DAX: Программирование 8 19.01.2004 15:24
Имитация связи между таблицами из кода программы Андре DAX: Программирование 3 31.01.2002 11:00

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

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

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