14.01.2015, 12:02 | #41 |
Участник
|
Если данный код запустить в клиентском режиме - работает, как только переключаю класс в серверный - аксапта вылетает. Причем если вместо array вставлять обычную строку все нормально работает X++: SysExcelApplication_NET sysExcelApplication; SysExcelWorksheet_NET sysExcelWorksheet; SysExcelRange_NET range; System.Array array; System.Type type; ; new InteropPermission( InteropKind::ClrInterop ).assert(); // BP deviation documented sysExcelApplication = SysExcelApplication_NET::construct(); sysExcelApplication.visible(true); sysExcelApplication.workbooks().add(""); sysExcelWorksheet = sysExcelApplication.worksheets().itemFromNum(1); type = System.Type::GetType('System.String'); array = System.Array::CreateInstance(type, 2); array.SetValue(CLRInterop::getObjectForAnyType("AAA"), 0); array.SetValue(CLRInterop::getObjectForAnyType("БББ"), 1); range = sysExcelWorksheet.range("A1:B1"); range.value2(array); // !!!! здесь вылетает Axapta |
|
14.01.2015, 13:33 | #42 |
Участник
|
С какой ошибкой вылетает ? AifUtil::getClrErrorMessage() что говорит ?
Я кстати CLRInterop::getObjectForAnyType("AAA") не использую, вставляю значение (строковое, числовое и т.д.) без конвертирования. Работает и в пакетном и в обычном режиме.
__________________
Дмитрий Последний раз редактировалось Damn; 14.01.2015 в 13:37. |
|
14.01.2015, 14:28 | #43 |
Участник
|
Вылетает с стандартной критической ошибкой (Приложение выполнело недопустимую операцию и будет закрыто, отправить отчет в microsoft или запустить дебагер и т.д.), до catch не доходит. В Событиях операционки ничего не говорящее сообщение
Faulting application name: Ax32.exe, version: 5.0.1600.2596, time stamp: 0x53171f5d Faulting module name: Ax32.exe, version: 5.0.1600.2596, time stamp: 0x53171f5d Exception code: 0xc0000005 Fault offset: 0x001dbf2f Faulting process id: 0x1b78 Faulting application start time: 0x01d02fec081571f8 Faulting application path: C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Ax32.exe Faulting module path: C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Ax32.exe Report Id: 8818c4b7-9bdf-11e4-80ea-0050569a5ddc Faulting package full name: Faulting package-relative application ID: CLRInterop::getObjectForAnyType - убрал, но ситуацию не спасает (( Procmon.exe - тоже толком ничего не выдает, отказ на доступ к файлам/папкам не заметил. Office 2013. Интересно у кого-нибудь данный код не вышибает Аксапту? Последний раз редактировалось ex3em; 14.01.2015 в 14:36. |
|
14.01.2015, 14:57 | #44 |
Участник
|
Я понял, у вас ошибка возникает в клиентской части аксапты и именно в том случае когда у класса стоит RunOn = Server.
У меня у класса стоит RunOn = CalledFrom и я отправляю его в пакетный режим. На сервере ошибка не возникает. Выставлять RunOn = Server я не пробовал, в моём случае нет такой необходимости.
__________________
Дмитрий |
|
14.01.2015, 15:09 | #45 |
Участник
|
Без конвертирования где, в 2009-й? В 2012-й попробуйте так сделать с датами в пакетном режиме
|
|
14.01.2015, 15:27 | #46 |
Участник
|
Да, в Ax2009. Конвертирую в строку я только два типа - utcDateTime и enum, остальное всё идёт без конвертации. В Ax2012 пока не успел попробовать.
__________________
Дмитрий |
|
14.01.2015, 15:39 | #47 |
Участник
|
Ax2009
Последний раз редактировалось ex3em; 14.01.2015 в 15:41. |
|
05.05.2015, 17:49 | #48 |
Участник
|
А есть факты, свидетельствующие что из приведенного в начале поста проекта метод
\Classes\SysExcelWorksheet_NET\pasteSpecial() может работать на сервере ? Мне вот как то не удалось заставить
__________________
любитель портвейна и снов с прокисшей капустой в усах |
|
05.05.2015, 19:51 | #49 |
Участник
|
pasteSpecial - не пробовали.
А зачем ? Когда можно в range явно массив за раз вставить. А в буфер обмена вы данные чем положили ? Случайно не TextBuffer классом ? Если не ошибаюсь на сервер он не должен работать - в ядре заглушка стоит. |
|
12.01.2016, 11:41 | #50 |
MCITP
|
Цитата:
Сообщение от gl00mie
Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню.
Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у классов SysExcel*, потому что по умолчанию они все выполняются на клиенте.
__________________
Zhirenkov Vitaly |
|
12.01.2016, 11:47 | #51 |
MCITP
|
В частности интересует реализация SysExcelValidation_NET.add()
__________________
Zhirenkov Vitaly |
|
12.01.2016, 17:57 | #52 |
MCITP
|
Цитата:
Причём есть необходимость именно в шаблонах 2007. Кто-нибудь это обходил?
__________________
Zhirenkov Vitaly |
|
13.01.2016, 08:59 | #53 |
Участник
|
Если вы о версии 2012, то если я ничего не путаю, там надо использовать не шаблон Excel в качестве файла шаблона, а просто файл Excel. тогда такой ошибки не будет
|
|
13.01.2016, 11:46 | #54 |
MCITP
|
У нас и есть обычный файл, в 2007м формате, .xlsx.
__________________
Zhirenkov Vitaly |
|
25.01.2016, 19:39 | #55 |
Участник
|
а какие версии драйвера доступа к данным установлены на клиенте и сервере? должны быть 32bit для клиента и 64 -- для сервера.
__________________
Felix nihil admirari |
|
26.01.2016, 15:53 | #56 |
Иван Захаров
|
>При открытии шаблона через workBooks_net у меня возникает сообщение, что файл был восстановлен. С чем это может быть связано?
Удалите свойства файла как описано здесь ... https://support.office.com/en-us/art...2-686cc64b6949 |
|
|
За это сообщение автора поблагодарили: gl00mie (2), IvanS (1). |
27.01.2016, 18:53 | #57 |
MCITP
|
это всё не о том...
ларчик на самом деле был зарыт в том, что надо открывать xlsx файлы методом workbooks.OpenXML(), а не просто open().
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
29.09.2016, 21:35 | #58 |
Участник
|
В качестве апа.
Есть проблема открытия файла Excel в пакетнике. АХ2009, Office 2013, в пакетном режиме в момент отработки кода открытия книги просто падает обработки. При чем никаких уведомлений не выдается как в АХ, так и Windows. try catch Exception::CLRError тоже ничего не перехватывает. А еще самое интересное в аналогичной тестовой среде все работает отлично и без ошибок, а вот на рабочей как назло падает. Поэтому вопрос как минимум понять, что за ошибка мешает корректной работе в рабочей среде? А от неё уже смотреть дальше |
|
29.09.2016, 21:39 | #59 |
Участник
|
Цитата:
Сообщение от IvanS
В качестве апа.
Есть проблема открытия файла Excel в пакетнике. АХ2009, Office 2013, в пакетном режиме в момент отработки кода открытия книги просто падает обработки. При чем никаких уведомлений не выдается как в АХ, так и Windows. try catch Exception::CLRError тоже ничего не перехватывает. А еще самое интересное в аналогичной тестовой среде все работает отлично и без ошибок, а вот на рабочей как назло падает. Поэтому вопрос как минимум понять, что за ошибка мешает корректной работе в рабочей среде? А от неё уже смотреть дальше установить рядом 64-разрядную сестру можно только в "тихом" режиме Excel version To work well with Excel we need to have ODBC Excel 64 bit driver installed on the server http://www.microsoft.com/en-us/downl....aspx?id=13255 cmd (as administrator) AccessDatabaseEngine_x64 /passive
__________________
Felix nihil admirari |
|
29.09.2016, 21:57 | #60 |
Участник
|
Цитата:
Сообщение от wojzeh
пакетник всегда крутится на сервере, соответственно должна стоять правильная компонента доступа - 64-разрядная. если аос крутится на той же машине, что и клиент, то скорее всего на ней уже установлена 32-разрядная версия.
установить рядом 64-разрядную сестру можно только в "тихом" режиме Excel version To work well with Excel we need to have ODBC Excel 64 bit driver installed on the server http://www.microsoft.com/en-us/downl....aspx?id=13255 cmd (as administrator) AccessDatabaseEngine_x64 /passive |
|
Теги |
.net, ax2009, excel, законченный пример, полезное |
|
|