Цитата:
Сообщение от
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();
}
}