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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.03.2016, 15:06   #1  
terraByteG is offline
terraByteG
Участник
 
15 / 17 (1) ++
Регистрация: 10.03.2016
Владимир Максимов
ИМХО, но Ваш пример не имеет ничего общего с ее вопросом. Ваш пример просто использует этот файл - не обнуляя COM.
По коду видно, что Джоб логинится к файлу, освобождается COM библиотеку вызывающий. Эксель не закрывается. Поэтому повторно прилогиниться к нему не дает - приводит к ошибке.

vikuss2006
Поддерживаю этот вариант:
Цитата:
Теперь сделайте такую проверку с Excel. Запустите Excel, в нем запустите Com-объект. Затем закройте все экземпляры Excel и дождитесь, пока процесс Com-объекта будет выгружен из памяти. После этого повторно запустите Excel. Ошибка возникнет?
Думаю - сработает (выше написал почему).
Старый 11.03.2016, 16:09   #2  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Я конечно попробую с Эксель, но когда был запущен job, то никаких экселей не было запущено, только Аксапта.
Старый 11.03.2016, 16:15   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,718 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от terraByteG Посмотреть сообщение
Владимир Максимов
ИМХО, но Ваш пример не имеет ничего общего с ее вопросом. Ваш пример просто использует этот файл - не обнуляя COM.
По коду видно, что Джоб логинится к файлу, освобождается COM библиотеку вызывающий. Эксель не закрывается. Поэтому повторно прилогиниться к нему не дает - приводит к ошибке.
Я не в курсе, но разве после того, как макрос Excel завершил свою работу, созданные в этом макросе переменные не освобождаются? Или как организована работа с этим Com-объектом в Excel?

В данном случае, предположительно, происходит не корректная выгрузка объекта из памяти. Какие-то следы остаются. Причем ошибка не Axapta, а именно самого объекта. Вот это и надо проверить перезапустив Excel с этим Com-объектом.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 11.03.2016, 23:18   #4  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Результат опыта с Эксель
1) запустила только один экземпляр файла, использующего ком библиотеку. В procexp вижу pid = 2180. Данные получены. Закрываю эксель, в procexp вижу , что библиотека выгрузилась после закрытия файла.
2) запустила опять только один экземпляр файла эксель. Вprocexp вижу pid = 6916. Данные получены, жду и не закрываю файл, библа не выгружается, она выгружается только с закрытием экселя.
3) когда запускаю job в аксапте, то pid процесса всегда одинаковый, независимо от числа запусков job, будто job запускаются в отдельных потоках процесса Аксапты, но это лишь предположение.
Старый 14.03.2016, 17:30   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,718 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от vikuss2006 Посмотреть сообщение
Результат опыта с Эксель
1) запустила только один экземпляр файла, использующего ком библиотеку.
А как именно происходит использование Com в Excel? Это макрос? Можете привести здесь его код?

PS: Кстати, на какой команде в Axapta обращения к COM возникает ошибка?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 15.03.2016, 12:27   #6  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
вот скрипт
Sub test()
' Поправьте эти значения, указав логин, пароль, пароль к секретному ключу и путь к секретному ключу пользователя
Login = Range("Login").Value '"ALGOL1"
pwd1 = Range("Pwd_1").Value '"900"
pwd2 = Range("Pwd_2").Value '"900"
pathToKey = Range("Path").Value '"c:\Keys\ALGOL1_"

Dim o As iFOBSDocIntegrator.DocOperation
Set o = New iFOBSDocIntegrator.DocOperation
If (o Is Nothing) Then
MsgBox "Ошибка! iFOBSDocIntegrator.dll не зарегистрирована в системе."
GoTo Exit1
End If
MsgBox "Проверка параметров Login."
s = o.Login(Login, pwd1, pwd2, pathToKey)
If s <> "" Then
MsgBox "Ошибка! Неправильно определены данные"
GoTo Exit1
End If
MsgBox "Получение списка архивных документов за период"
Call testGetDocInfoList(o)
MsgBox "Получение списка документов, ожидающих первой подписи"
Call testGetDocList(o, DOC_WAIT_SIGN1)
MsgBox "Получение списка документов, ожидающих второй подписи"
Call testGetDocList(o, DOC_WAIT_SIGN2)
MsgBox "Получение списка документов, ожидающих третьей подписи"
Call testGetDocList(o, DOC_WAIT_AUTH)
MsgBox "Получение списка всех введенных документов за период"
Call testGetDocList(o, DOC_ALL_DOCUMENTS)
Exit1:
Set o = Nothing
End Sub

Аксапта вылетает при получении списка через опеределенное время, при очередном запуске job
Старый 16.03.2016, 09:45   #7  
terraByteG is offline
terraByteG
Участник
 
15 / 17 (1) ++
Регистрация: 10.03.2016
Цитата:
Сообщение от vikuss2006 Посмотреть сообщение
вот скрипт
Sub test()
' Поправьте эти значения, указав логин, пароль, пароль к секретному ключу и путь к секретному ключу пользователя
X++:
bla-bla-bla
Dim o As iFOBSDocIntegrator.DocOperation
bla-bla-bla
s = o.Login(Login, pwd1, pwd2, pathToKey)
--
Это скрипт от разработчиков? Теперь понятно, почему в библиотеке не предусмотрен метод завершения.

*добавлено:
Как отработает вот такой скрипт?
X++:
Sub test()
' Поправьте эти значения, указав логин, пароль, пароль к секретному ключу и путь к секретному ключу пользователя
Login = Range("Login").Value '"ALGOL1"
pwd1 = Range("Pwd_1").Value '"900"
pwd2 = Range("Pwd_2").Value '"900"
pathToKey = Range("Path").Value '"c:\Keys\ALGOL1_"

Dim o As iFOBSDocIntegrator.DocOperation
Set o = New iFOBSDocIntegrator.DocOperation
If (o Is Nothing) Then
MsgBox "Ошибка! iFOBSDocIntegrator.dll не зарегистрирована в системе."
GoTo Exit1
End If
MsgBox "Проверка параметров Login."
s = o.Login(Login, pwd1, pwd2, pathToKey)
If s <> "" Then
MsgBox "Ошибка! Неправильно определены данные"
GoTo Exit1
End If
MsgBox "Получение списка архивных документов за период"
Call testGetDocInfoList(o)
Exit1:
Set o = Nothing
End Sub
И меня одного смущает тот момент, что разработчики проверяют работоспособность скриптом, когда им говорят о COM вызове? Что включено в метод getDocInfoList и куда уходят параметры при вызове метода ТС?
Все это оставляет ощущения быдлоразработчиков (отмахнулись, мол скрипт наш работает, а остальное Ваши проблемы)...

Последний раз редактировалось terraByteG; 16.03.2016 в 10:10.
Старый 16.03.2016, 09:59   #8  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Цитата:
Сообщение от terraByteG Посмотреть сообщение
Это скрипт от разработчиков? Теперь понятно, почему в библиотеке не предусмотрен метод завершения.
Мне не понятно, можете пожалуйста объяснить
Старый 14.03.2016, 08:33   #9  
terraByteG is offline
terraByteG
Участник
 
15 / 17 (1) ++
Регистрация: 10.03.2016
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Я не в курсе, но разве после того, как макрос Excel завершил свою работу, созданные в этом макросе переменные не освобождаются? Или как организована работа с этим Com-объектом в Excel?
Как там внутри устроено - науке не известно. Как я понял, авторы заверяют - что у них все отрабатывает на 100%, а значит проблемы индейцев шерифа не волнуют.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
В данном случае, предположительно, происходит не корректная выгрузка объекта из памяти. Какие-то следы остаются. Причем ошибка не Axapta, а именно самого объекта. Вот это и надо проверить перезапустив Excel с этим Com-объектом.
Поддерживаю. Самое забавное, что в библиотеке отсутствует метод завершения всего этого действа (или нет, например, Close()?). Хотя бы handle возвращал, можно было бы аварийно excel бахать.
Старый 14.03.2016, 15:39   #10  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Никакого закрытия в библиотеке нет, только Login и получение данных, к сожалению

Последний раз редактировалось vikuss2006; 14.03.2016 в 15:55.
Теги
com connector, com-объект, thread

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axmfg: Lean manufacturing: Picking activities and kanban line events Blog bot DAX Blogs 0 26.08.2014 21:13
atinkerersnotebook: Using Vendor Requests to Manage On-boarding New Vendors Blog bot DAX Blogs 1 22.10.2013 02:24
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
atinkerersnotebook: Configuring Lean Manufacturing in Dynamics AX 2012 Blog bot DAX Blogs 1 12.08.2013 00:15
dynamicsaxtraining: Vendor returns Blog bot DAX Blogs 0 11.10.2012 00:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:43.