OCTitbit вызывает JIAutomationException: [0x80020009]

classic Classic list List threaded Threaded
14 messages Options
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

OCTitbit вызывает JIAutomationException: [0x80020009]

Пробую пример:

PropertiesReader pr = new PropertiesReader(new File("C:\\JAVA\\eclipseProj\\OCTitbitTest\\oce.properties"));
Properties configuration = pr.getPropertiesForInstance("inst01");
       
System.out.println( (String) configuration.get( PropertiesReader.OCE_CFG_DRIVER ) );
       
ApplicationDriver driver = ApplicationDriver.loadDriver( (String) configuration.get( PropertiesReader.OCE_CFG_DRIVER ) );
       
        OCApp app = OCApp.getNewInstance();
        app.setApplicationDriver(driver);
       
        try{
            app.connect(configuration);
            System.out.println("Computer name: "+app.getComputerName());
        }catch(Exception e){
        e.printStackTrace();
        }finally{
            try {
                    app.exit();
            } catch (JIException e) {
            e.printStackTrace();
            }
        }

и получаю:

V81Driver
org.jinterop.dcom.impls.automation.JIAutomationException: Exception occurred.  [0x80020009]

при вызове app.connect(configuration);

Файл oce.properties содержит:
# inst01 configuration
oce.inst01.driver = V81Driver
oce.inst01.host = localhost
oce.inst01.host.user = LocalAdmin
oce.inst01.host.password = LocalAdmin
oce.inst01.1c.dbpath = C:\\1C_Bases\\Empty
oce.inst01.1c.user = COMclient
oce.inst01.1c.password = 123

COM-сервер 1С работает, "голая" j-Interop его видит и успешно подключается к нему с указанной учётной записью. Вход пользователя 1С с именем "COMclient" в 1С проверен и работает. Этот пользователь в 1С имеет все права.

В чём дело ? Где моя ошибка ?
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

А можно полный stackTrace? Попробуйте вместо localhost ввести IP адрес
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

Попробовал указывать IP: и 127.0.0.1 и реальный - всё равно:

org.jinterop.dcom.impls.automation.JIAutomationException: Exception occurred.  [0x80020009]
        at org.jinterop.dcom.impls.automation.JIDispatchImpl.invoke(JIDispatchImpl.java:333)
        at org.jinterop.dcom.impls.automation.JIDispatchImpl.callMethodA(JIDispatchImpl.java:520)
        at org.jinterop.dcom.impls.automation.JIDispatchImpl.callMethodA(JIDispatchImpl.java:526)
        at org.jinterop.dcom.impls.automation.JIDispatchImpl.callMethodA(JIDispatchImpl.java:477)
        at com.ipc.msa.ComObject.callMethodA(ComObject.java:33)
        at com.ipc.oce.OCObject.callMethodA(OCObject.java:72)
        at com.ipc.oce.OCApp.connect2Filebased(OCApp.java:1113)
        at com.ipc.oce.OCApp.connect(OCApp.java:1216)
        at Test.main(Test.java:22)
Caused by: org.jinterop.dcom.common.JIRuntimeException: Exception occurred.  [0x80020009]
        at org.jinterop.dcom.core.JICallBuilder.readResult(JICallBuilder.java:1079)
        at org.jinterop.dcom.core.JICallBuilder.read(JICallBuilder.java:957)
        at ndr.NdrObject.decode(NdrObject.java:36)
        at rpc.ConnectionOrientedEndpoint.call(ConnectionOrientedEndpoint.java:137)
        at rpc.Stub.call(Stub.java:113)
        at org.jinterop.dcom.core.JIComServer.call(JIComServer.java:901)
        at org.jinterop.dcom.core.JIComServer.call(JIComServer.java:856)
        at org.jinterop.dcom.core.JIComObjectImpl.call(JIComObjectImpl.java:266)
        at org.jinterop.dcom.core.JIComObjectImpl.call(JIComObjectImpl.java:153)
        at org.jinterop.dcom.impls.automation.JIDispatchImpl.invoke(JIDispatchImpl.java:315)
        ... 8 more

Я так понимаю, что это "происки" j-Interop. Наверное, зря я на этот "продукт" надеялся - не работает он в среде Windows Vista | Windows 7 %(
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

1C вас выбрасывает. Метод Connect COMConnector-а вызывается, но возвращает ошибку. Посмотрите EventLog самой 1С. Проверьте параметры, путь к базе и т.д.
Да, можно назвать и прокси.
На Windows 7 проверено, все работает. На Vista 64 не пробовали.
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

А какая конфигурация 1С используется?
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

This post was updated on .
А вот конфигурация 1С - "голая" платформа 1С:Предприятие 8.1 (8.1.15.14) с пустой БД, в которой задана только роль "Администратор" с полными правами и определён единственный пользователь "COMclient" с ролью "Администратор".
И, кстати, сама j-Interop успешно входит в эту БД следующим образом:

JISession session = JISession.createSession("localhost","LocalAdmin","LocalAdmin");
JIComServer comServer = new JIComServer(JIProgId.valueOf("V81.COMConnector"),"127.0.0.1",session);
IJIComObject comObject = comServer.createInstance();
System.out.println("comObject="+comObject.toString());
IJIDispatch dispatch = (IJIDispatch)JIObjectFactory.narrowObject((IJIComObject)comObject.queryInterface(IJIDispatch.IID));
dispatch.callMethod("Connect",new Object[]{
        new JIString("File=C:\\1C_Bases\\Empty;Usr=COMclient;Pwd=327")
});
comObject.release();
JISession.destroySession(session);

Так что зря я на j-Interop "наехал", признаю. Дело, видимо, в OCTitbit'овском присоединении к 1С, или где ?
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

Походу баг где-то в OCTitbit-овском соединении. Это возможно.

Давайте тогда чуть дальше пойдем. По трейсу, который Вы отписали выше, ошибок действительно не должно быть. Вот смотрите:

dispatch.callMethod("Connect",new Object[]{
        new JIString("File=C:\\1C_Bases\\Empty;Usr=COMclient;Pwd=327") ;

Соединение устанавливается. Ок. Метод "Connect" возвращает IJIDispatch в нулевом параметре. Т.е. вызовите callMethodA и получите массив выходных параметров JIVariant[...]. В JIVariant[0] будет IJIDispatch на собственно глобальный контекст 1С. По трейсу я так понял что вываливается как раз получение этого IJIDispatch.

JIVariant[] var = dispatch.callMethodA("Connect",new Object[]{
        new JIString("File=C:\\1C_Bases\\Empty;Usr=COMclient;Pwd=327") ;

IJIComObject preContext = var[0].getObjectAsComObject();

IJIDispatch context = (IJIDispatch) JIObjectFactory.narrowObject((IJIComObject) preContext .queryInterface(IJIDispatch.IID));

----------------
Да, еще отличается такой момент что в OCTitbit:
1) используется не ProgID, а ClsID, чтобы избавиться от дополнительного поиска GUID по имени.
2) Строка подключения с кавычками. String connectionStr = "File=\"" + aDBFile + "\";Usr=\"" + aOCUser + "\";Pwd=\"" + aOCPassword + "\"";
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

This post was updated on .
И дальше всё работает, наример, получаю значение Константы.ПрефиксНумерации

JIVariant variant[] = dispatch.callMethodA("Connect",new Object[]{
                                new JIString("File=C:\\1C_Bases\\Empty;Usr=COMclient;Pwd=327")
});
IJIComObject base1cObj = (variant[0]).getObjectAsComObject();
IJIDispatch База = (IJIDispatch)JIObjectFactory.narrowObject((IJIComObject)base1cObj.queryInterface(IJIDispatch.IID));
JIVariant outVal = База.get("Константы");
IJIComObject const_mng_Obj = outVal.getObjectAsComObject();
IJIDispatch КонстантыМенеджер = (IJIDispatch)JIObjectFactory.narrowObject((IJIComObject)const_mng_Obj.queryInterface(IJIDispatch.IID));
outVal = КонстантыМенеджер.get("ПрефиксНумерации");
IJIComObject const1_Obj = outVal.getObjectAsComObject();
IJIDispatch ПрефиксНумерации = (IJIDispatch)JIObjectFactory.narrowObject((IJIComObject)const1_Obj.queryInterface(IJIDispatch.IID));
outVal = ПрефиксНумерации.callMethodA("Получить");
System.out.println("Константы.ПрефиксНумерации="+outVal.getObjectAsString2());

Так что в OCTitbit что-то неправильно... Может быть для скачивания выложена неправильная версия ?
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

А кстати: зачем строка подключения в OCTitbit с внутренними кавычками ?
Может в этом ошибка ?

И, по-моему, исключение 0x80020009 означает, что 1С выдала "Отказано в доступе".
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

Забавно. Ошибка есть, это факт.
Пока я так понимаю, что отличается подключение в пунктах AppID и ClsID. И кавычки для подключения.
Сами же кавычки нужны на случай пробелов. 1С понимает и так, и так. 0x80020009 - это ошибка так сказать "вообще". У нее нет какого-то конкретного описания кроме слова "Ошибка".
1) Сейчас попробую в себя создать пустую базу в 8.1.15.14
2) Могу выслать исходники
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

На случай пробелов в именах директорий или файлов в строке подключения 1С сама разберётся, так как параметры она читает до точки с запятой. ИМХО: кавычки внутри строки подключения не нужны ваще.

А исходники с удовольствием приму на почту manДвеТыщщи<собака>rambler.ru - трэйсинг будет лучше разбирать в случае ошибок. Да и поучиться программировать на чужих исходниках ниразу не плохо ;-)
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

На счет пользы или вреда кавычек, вопрос пока открытый. А bug нужно найти )) см. почту.
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

In reply to this post by man2000
Попробовал создать пустую конфигурацию в 1С:Предприятие 8.1 (8.1.15.14), Windows 7 Pro 32. Одна роль, один пользователь, одна константа. Все прошло на ура, ошибок нет. Странно...

конфиг такой:

# empty configuration
oce.empty.driver = V81Driver
oce.empty.host = 192.168.10.142
oce.empty.host.user = PCUser1
oce.empty.host.password = *****
oce.empty.1c.dbpath = C:\\Developer\\Temp\\Empty
oce.empty.1c.user = one
oce.empty.1c.password = one
OCTitbit developer.
man2000 man2000
Reply | Threaded
Open this post in threaded view
|

Re: OCTitbit вызывает JIAutomationException: [0x80020009]

Всё решено, проблем нет. Дело было в моей невнимательности, а именно - редактировал один файл oce.properties, а программа читала его совсем из другой папки.

Итог: ВНИМАТЕЛЬНО смотрим на файл oce.properties в который вносим изменения.