Цитата:
Сообщение от
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);
.....
....
Думаю, так импорт не получится прервать передвиганием мыши или переключением окон, так как импорт проходит в отдельном потоке. И ошибок не будет.
Какое никакое, но все же решение.
Только теперь ряд других проблем имеется, например перехват ошибок и вывод их на экран - не тривиальная задача. Но решаемая.