|
![]() |
#1 |
Участник
|
Владимир Максимов
ИМХО, но Ваш пример не имеет ничего общего с ее вопросом. Ваш пример просто использует этот файл - не обнуляя COM. По коду видно, что Джоб логинится к файлу, освобождается COM библиотеку вызывающий. Эксель не закрывается. Поэтому повторно прилогиниться к нему не дает - приводит к ошибке. vikuss2006 Поддерживаю этот вариант: Цитата:
Теперь сделайте такую проверку с Excel. Запустите Excel, в нем запустите Com-объект. Затем закройте все экземпляры Excel и дождитесь, пока процесс Com-объекта будет выгружен из памяти. После этого повторно запустите Excel. Ошибка возникнет?
|
|
![]() |
#2 |
Участник
|
Я конечно попробую с Эксель, но когда был запущен job, то никаких экселей не было запущено, только Аксапта.
|
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от terraByteG
![]() Владимир Максимов
ИМХО, но Ваш пример не имеет ничего общего с ее вопросом. Ваш пример просто использует этот файл - не обнуляя COM. По коду видно, что Джоб логинится к файлу, освобождается COM библиотеку вызывающий. Эксель не закрывается. Поэтому повторно прилогиниться к нему не дает - приводит к ошибке. В данном случае, предположительно, происходит не корректная выгрузка объекта из памяти. Какие-то следы остаются. Причем ошибка не Axapta, а именно самого объекта. Вот это и надо проверить перезапустив Excel с этим Com-объектом.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#4 |
Участник
|
Результат опыта с Эксель
1) запустила только один экземпляр файла, использующего ком библиотеку. В procexp вижу pid = 2180. Данные получены. Закрываю эксель, в procexp вижу , что библиотека выгрузилась после закрытия файла. 2) запустила опять только один экземпляр файла эксель. Вprocexp вижу pid = 6916. Данные получены, жду и не закрываю файл, библа не выгружается, она выгружается только с закрытием экселя. 3) когда запускаю job в аксапте, то pid процесса всегда одинаковый, независимо от числа запусков job, будто job запускаются в отдельных потоках процесса Аксапты, но это лишь предположение. |
|
![]() |
#5 |
Участник
|
Цитата:
PS: Кстати, на какой команде в Axapta обращения к COM возникает ошибка?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#6 |
Участник
|
вот скрипт
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 |
|
![]() |
#7 |
Участник
|
Цитата:
![]() *добавлено: Как отработает вот такой скрипт? 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 Все это оставляет ощущения быдлоразработчиков (отмахнулись, мол скрипт наш работает, а остальное Ваши проблемы)... Последний раз редактировалось terraByteG; 16.03.2016 в 10:10. |
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
Цитата:
Поддерживаю. Самое забавное, что в библиотеке отсутствует метод завершения всего этого действа (или нет, например, Close()?). Хотя бы handle возвращал, можно было бы аварийно excel бахать. |
|
![]() |
#10 |
Участник
|
Никакого закрытия в библиотеке нет, только Login и получение данных, к сожалению
Последний раз редактировалось vikuss2006; 14.03.2016 в 15:55. |
|
Теги |
com connector, com-объект, thread |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|