Показать сообщение отдельно
Старый 02.03.2011, 14:12   #20  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от AndreyStar Посмотреть сообщение
Тоже столкнулись с этой проблемой, идея сделать как в российском функционале, с макросами на try catch очень не понравилась, да и объем переписывания немалый

Проблема возникала только на системах с Win7, XP + Office 2010 + dax 2009 работало без проблем

Когда искал причину, увидел что в других языках обращения к COM компилируются с атрибутом [STAThread] - однопоточное исполнение, ну и появилась мысль что многопоточность Win7 мешает жить. Попытка запустить dax2009 в режиме совместимости чуть улучшила ситуацию, но проблему не решила и тогда пришла идея запустить класс экспорта в отдельном потоке, и все заработало

Сейчас все протестировано в разных связках, в том числе и в 64-битной системе, все работает, и переписывать нужно только способ запуска класса
Кажется понял как это работает.

Запускаем импорт из екселя, например, так
X++:
thread    thread = new thread();

     thread.setInputParm(["Т000081968", "c:\text.xlsx"]); // какие то параметры

     thread.run(classnum(TetImportClass), identifierstr(importFromExcel));
А сам метод импорта в классе TetImportClass
X++:
static client void importFromExcel(thread _thread)

ComExcelDocument_RU        document = new ComExcelDocument_RU();
str path;
str parm;
;
[parm, path] = _thread.getInputParm();

    document.open(path, false);

    .....
     ....
Думаю, так импорт не получится прервать передвиганием мыши или переключением окон, так как импорт проходит в отдельном потоке. И ошибок не будет.
Какое никакое, но все же решение.
Только теперь ряд других проблем имеется, например перехват ошибок и вывод их на экран - не тривиальная задача. Но решаемая.
За это сообщение автора поблагодарили: Logger (3), Ace of Database (5).