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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2015, 15:33   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Red face Проблемы с COM::getObject('Excel.Application')
Добрый день.

Столкнулся с такой проблемой:

Если открыт excel и в документе начать редактировать ячейку(провалиться в него).

То в AXAPTA метод COM::getObject('Excel.Application') срабатывает не корректно.
При вызови любого метода на COM (Excel.visible(false)) сразу падает в ошибку.

Метод "visible" не поддерживается интерфейсом Automation COM-объекта класса "<неизвестно>".

Кто сталкивался с такой проблемой? Как ее можно решить?

AXAPTA 2009, офис 2007
Старый 23.03.2015, 16:26   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Вывод через COM всегда был крайне не стабилен. Обычно тяжелые отчеты, использующие COM, надо запустить и не дышать. В прямом смысле, даже мышкой дергать не надо и это к сожалению не шутки И даже это не гарантирует отсутствия неадекватных ошибок. А вы хотите в открытую Excel сессию вклиниться.

Есть всякие воркэраунды, типа
• переписывания логики работы с офисом на .Net (Взаимодействие с Excel через .NET (семейство классов SysExcel))
• или в отдельные потоки (Ошибка времени выполнения в ComExcelDocument_RU.findRange() )
• или вызов функций через COMDispFunction (Ошибка при вызове COM-метода ) См. так же Win2008 и вызов методов COM-объектов

выбор того или иного метода зависит от задачи, сроков, бюджета и т.д.
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 23.03.2015 в 16:39.
За это сообщение автора поблагодарили: demianimp (1).
Старый 23.03.2015, 17:42   #3  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
не используйте COM
используйте .NET
Microsoft уже давно говорит, что COM - deprecated
За это сообщение автора поблагодарили: demianimp (0).
Старый 23.03.2015, 23:51   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Дело не в том, что COM - deprecated, а в том, что зачем-то в интеграцию через COM из интерфейсного потока клиента встроили таймауты для вызовов; .NET-обертки точно так же вызывают Excel через COM.
За это сообщение автора поблагодарили: demianimp (1).
Старый 25.03.2015, 13:22   #5  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Всем спасибо.
Реализовал у себя такую заглушку, может кому пригодится.

X++:
//AX100765_fixCOMExcel_yada 24.03.2015
static COM getObject(str _className = 'Excel.Application')
{
    COM             excel;

    DialogButton    returnButton;
    ;
    //Пытаемся получить COM объект
    excel = COM::getObject(_className);

    //Если COM объект получили и он заблокирован
    if(excel && excel.toString() == '')
    {
        //Выводим на экран диалоговое окно
        returnButton = box::okCancel('Ошибка при обращении к Excel.\n'                                                                +
                                     'В данный момент происходит редактирование документа Excel и AXAPTA не может получить доступ.\n' +
                                     'Прекратите редактирование документа и нажмите кнопку "ОК".', DialogButton::Cancel, 'Ошибка при обращении к Excel');

        //Если пользователь нажал кнопку "OK"
        if(returnButton == DialogButton::Ok)
        {
            //Снова пытаемся получить доступ к COM объекту
            excel = ComExcel::getObject(_className);
        }
        else
        {
            //Возвращаем COM объект
            throw error('Операция отменена пользователем');
        }
    }

    return excel;
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
amer-ax: It was a great day! Blog bot DAX Blogs 3 29.12.2012 01:02
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
emeadaxsupport: How to copy a budget to a new budget in AX 2012 using Excel Add-in Blog bot DAX Blogs 0 27.11.2012 15:11
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13
kamalblogs: Quick Excel report – Dynamics Ax 2009 Blog bot DAX Blogs 0 10.05.2011 03:21
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:07.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.