Имя: Пароль:
1C
1C 7.7
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
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)...

Все.