|
26.07.2018, 09:16 | #1 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Вы бы сделали хотя бы поиск по данному форуму по ключевому слову "ComDispFunction". Есть масса примеров его использования.
В данном конкретном случае решение будет выглядеть так: Сначала коллекция листов (рабочая книга. Файл Excel) X++: // Метод getWorkSheets() private COM getWorkSheets() { ComVariant varRet; ComDispFunction funcGet; ; if (!comWorkSheets && m_comDocument) { try { /* comWorkSheets = m_comDocument.worksheets(); */ funcGet = new ComDispFunction(m_comDocument, "worksheets", COMDispContext::PropertyGet); varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH); funcGet.call(varRet); comWorkSheets = COM::createFromInterface(varRet.iDispatch()); } catch (Exception::Error) { throw error("@GEE6043"); } } return comWorkSheets; } X++: private COM getWorkSheet(anytype _workSheetID) { COM comRet; ComVariant varRet; ComDispFunction funcGet; COMVariant varArgStr; COMVariant varArgInt; ; if (m_comDocument) { try { this.getWorkSheets(); /* comRet = comWorkSheets.item(_workSheetID); */ funcGet = new ComDispFunction(comWorkSheets, "item", COMDispContext::PropertyGet); varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH); switch (typeOf(_workSheetID)) { case types::String : varArgStr = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR); varArgStr.bStr(_workSheetID); funcGet.call(varArgStr, varRet); break; case types::Integer : varArgInt = new COMVariant(COMVariantInOut::In, COMVariantType::VT_INT); varArgInt.int(_workSheetID); funcGet.call(varArgInt, varRet); break; default : throw error('Не корректный тип параметра'); break; } // switch (typeOf(_workSheetID)) comRet = COM::createFromInterface(varRet.iDispatch()); } catch (Exception::Error) { throw error("@GEE6043"); } } return comRet; } Коллеги, данный изменение методов решило проблему timeout при работе отчетов модуля "Генератор Российских отчетов". см мою ссылку по теме Axapta 2009. str2IntOk Есть два вопроса: 1. На сколько это решение является универсальным? Какие могут быть исключения? 2. Почему данный подход не реализован в стандартном функционале? |
|
Теги |
com-объект, comdispfunction, excel, excel com формат, законченный пример, полезное |
|
|