![]() |
![]() |
![]() |
|
v7: Подключение к 1С 7.7 по OLE. Initialize возвращает false | ☑ | ||
---|---|---|---|---|
0
nesterov
08.07.19
✎
13:00
|
1C сетевая версия. Подключение из java, библиотека jawin. К двум базам удаётся подключиться, к третьей - нет. В интерактивном режиме добавил профиль базы, в ней создал пользователя под которым подключаюсь, ему назначил права Viewer, в них включил "Использовать в качестве OLE Automation сервера".
Код подключения: Ole32.CoInitialize(); DispatchPtr app = new DispatchPtr("V77.Application"); Integer var = (Integer) app.get("RMTrade"); String conn = "/D\"" + basepath + "\" /N" + login + " /P" + pwd; System.out.println("Connection string: " + conn); Object res = app.invoke("Initialize", var, conn, "NO_SPLASH_SHOW"); System.out.println("res="+res); Полученный вывод: [2019-07-08T12:26:44.316+0300] [Payara 5.183] [INFO] [] [] [tid: _ThreadID=163 _ThreadName=Thread-33] [timeMillis: 1562578004316] [levelValue: 800] [[Connection string: /D"D:/data/1C/db/Test_Registrator/" /Nglassfish /PComp17Tut]] [2019-07-08T12:26:37.495+0300] [Payara 5.183] [INFO] [] [] [tid: _ThreadID=162 _ThreadName=Thread-32] [timeMillis: 1562577997495] [levelValue: 800] [[res=false]] Подскажите, в чём причина и как подключиться? |
|||
1
Ёпрст
гуру
08.07.19
✎
13:23
|
(0) 15 пост
Прописать v77.Application в реестре |
|||
2
nesterov
08.07.19
✎
13:29
|
Это уже сделано, компонент прописан.
|
|||
3
Ёпрст
гуру
08.07.19
✎
13:30
|
Ну, тогда права, пути, пользователи.
|
|||
4
Ёпрст
гуру
08.07.19
✎
13:30
|
можно еще базу, открываемую по оле посмотреть через show1c.exe
|
|||
5
Ёпрст
гуру
08.07.19
✎
13:30
|
че тама происходит
|
|||
6
nesterov
08.07.19
✎
13:33
|
Пути корректные, пользователи тоже, так как я могу в интерактивном режиме зайти в базу. Насчёт прав поподробнее можно?
|
|||
7
Ёпрст
гуру
08.07.19
✎
13:37
|
из пустой базы, по оле, заходит в эту базу ?
|
|||
8
Ёпрст
гуру
08.07.19
✎
13:37
|
пересоздай базу в окошке выбора баз, чтоб ветка реестра обновилась
|
|||
9
Ёпрст
гуру
08.07.19
✎
13:38
|
база дбф/скуль ? Если первое, то нет ли запроса на реиндекс ?
|
|||
10
Ёпрст
гуру
08.07.19
✎
13:39
|
так то, оле зло..Проще прямым запросом взять что надо.
|
|||
11
nesterov
08.07.19
✎
13:40
|
Если в интерактивном режиме в окне подключения нет информационной базы, то при подключении открывается окно для добавления записи. Пересоздавал, в реестре записи обновились.
База DBF, был запрос на реиндексацию при первом подключении, выполнил. Сейчас почитаю про show1c.exe. |
|||
12
nesterov
08.07.19
✎
13:41
|
У меня задача создавать объекта
|
|||
13
nesterov
08.07.19
✎
13:42
|
объекты
|
|||
14
nesterov
08.07.19
✎
13:44
|
Права на локальной машине одинаковы для баз, к которым удалось/не удалось подключиться, в 1С настроил по аналогии с пользователем в базе, к которой подключиться получается(описано в шапке)
|
|||
15
Ёпрст
гуру
08.07.19
✎
14:14
|
(11) оно просто делает процесс запущенный по 1с видимым на экране
|
|||
16
nesterov
08.07.19
✎
14:21
|
Поделитесь, пожалуйста, файлом/ссылкой на скачивание.
|
|||
17
Ёпрст
гуру
08.07.19
✎
14:32
|
||||
18
nesterov
08.07.19
✎
14:33
|
спасибо
|
|||
19
Ёпрст
гуру
08.07.19
✎
14:49
|
Следующий кусок кода позволить сделать "видимой" открытую через OLE 1С:
в77=СоздатьОбъект("V77.Application"); // это собственно в77.Initialize(в77.RMTrade,"/D",""); // вызов 1С через OLE КомандаСистемы(КаталогИБ()+"ExtForms\bin\Show1c.exe"); // а это мы запускаем утилитку "борьбы с невидимками", // естественно, путь к утилитке у вас может // быть собственный 2. Как это реализовано? Алгоритм этой утилитки достаточно прост: при помощи EnumWndProc находим все окна со строкой "Предприятие" в названии, получаем для каждого окна процесс (GetWindowThreadProcessId, потом OpenProcess). При помощи GetProcessTimes получаем для каждого время прошедшее с момента запуска. Выбираем процесс с наименьшим временем жизни (вроде как только что запущенный), говорим ему ShowWindow(hWnd,SW_MAXIMIZE)... Все. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |