powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / 1С 7.7 Jawin интеграция
16 сообщений из 16, страница 1 из 1
1С 7.7 Jawin интеграция
    #36490930
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Уважаемые!

В интернете есть примеры по организации COM-подключений извне к 1С 8.1.
Меня интересует организация COM-подключений извне к 1С 7.7 с помощью java-библиотеки Jawin.
Ведь все-таки они отличаются.

У меня такой код:

private DispatchPtr app;
private DispatchPtr oneSCOMConnection;

public void connect(String username, String password)
throws COMException
{
Ole32.CoInitialize();
app = new DispatchPtr("V77S.Application");
/*
на следующей строке получаю ошибку org.jawin.COMException: 80020005: ???????????? ?????.
на http://1c-pro.ru/lofiversion/index.php/t4726.html читаю, что это
-2147352571 (80020005) Несовпадение типов.
Каких таких типов - непонятно
*/
oneSCOMConnection = (DispatchPtr) app.invoke("Initialize","/D\"\\\\10.10.10.5\\1c$\\1c_sql_work\"/NПользователь /PПароль");
}

Начал сомневаться, что в строке oneSCOMConnection = (DispatchPtr) app.invoke("Initialize", "/D\"\\\\10.78.10.5\\1c$\\1c_sql_work\" /NПользователь /PПароль")
нужно Initialize, а не что-то другое.

Пытался с помощью OLE/COM Object Viewer выяснить, какие методы есть у объекта V77S. Кроме 1C.V7.Диаграмма ничего не нашел.

Для проверки соединения и учетных данных такой код на VBA работает:

Function ConnectTo1C() As Boolean
Dim path7 As String
On Error Resume Next
ConnectTo1C = False
path7 = "/D\\10.10.10.5\1c$\1c_sql_work\"
path7 = path7 & " /NПользователь
path7 = path7 & " /PПароль
Set v7 = CreateObject("V77.Application")
ConnectTo1C = v7.Initialize(v7.rmtrade, path7, "NO_SPLASH_SHOW")
End Function

1. Какой должна быть строка
oneSCOMConnection = (DispatchPtr) app.invoke("Initialize", "/D\"\\\\10.78.10.5\\1c$\\1c_sql_work\" /NПользователь /PПароль") ?
2. Как подключиться к 1с 77?
3. Как посмотреть какие методы есть у объекта V77S?

Спасибо!
_____________________________
Возможно все. Знать бы как...
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36490946
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откройте книжку по 1С. У вас ведь легальная копия, значит должна быть документация.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36491565
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mikkri,

не поверите, но в документации не нашел ни одного слова с COM. Про OLE написано, что как-то можно, но вот как, не говорится.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36491794
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю так:
Код: plaintext
1.
2.
        Ole32.CoInitialize();
        app =  new  DispatchPtr("V77S.COMConnector");
получаю: org.jawin.COMException: 800401f3: Недопустимая строка с указанием класса.

Делаю так
Код: plaintext
1.
2.
3.
4.
5.
 
        Ole32.CoInitialize();
        app =  new  DispatchPtr("V77S.Application");
        oneSCOMConnection = (DispatchPtr) app.invoke("Connect",
        "/D\"\\\\10.10.10.5\\1c$\\1c_sql_work\" /NПользователь /PПароль");
получаю: org.jawin.COMException: 80020006: Неизвестное имя.

Делаю так:
Код: plaintext
1.
2.
3.
4.
        Ole32.CoInitialize();
        app =  new  DispatchPtr("V77S.Application");
        oneSCOMConnection = (DispatchPtr) app.invoke("Initialize",
        "/D\"\\\\10.10.10.5\\1c$\\1c_sql_work\" /NПользователь /PПароль");
получаю: org.jawin.COMException: 80020005: Несовпадение типов.

Может у кого-нибудь есть пример подключения из Java к 1С v7.7?
Дайте пожалуйста.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36491865
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhos,

VBA:
ConnectTo1C = v7.Initialize(v7.rmtrade, path7, "NO_SPLASH_SHOW")
3 параметра, попробуй передавать все параметры:
oneSCOMConnection = (Integer) app.invoke("Initialize",v7.rmtrade(не знаю что это),"/D\"\\\\10.10.10.5\\1c$\\1c_sql_work\"/NПользователь /PПароль","NO_SPLASH_SHOW");
Судя по google, Initialize возвращает целое, так что приводи к Integer.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36492711
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FD
VBA:

код на VBA я приводил, чтоб показать, что из VBA соединение проходит. Но я хочу соединиться из Java.
0FD
VBA:
ConnectTo1C = v7.Initialize(v7.rmtrade, path7, "NO_SPLASH_SHOW")
3 параметра, попробуй передавать все параметры:
oneSCOMConnection = (Integer) app.invoke("Initialize",v7.rmtrade(не знаю что это),"/D\\"\\\\\\\\10.10.10.5\\\\1c$\\\\1c_sql_work\\"/NПользователь /PПароль","NO_SPLASH_SHOW");
Судя по google, Initialize возвращает целое, так что приводи к Integer.
Я пытаюсь по аналогии с интеграция с 1с 8.1 законнектиться к 1с 7.7 и пока не могу.
Мне тут нужен не Integer, а DispatchPtr (так пишут в приведенной мной ссылке).
Я вот и не знаю, что указывать. Connect и Initialize не получается. И как должна выглядеть строка соединения
Код: plaintext
\noneSCOMConnection = (Integer) app.invoke("Initialize",\n"/D\\"\\\\\\\\10.10.10.5\\\\1c$\\\\1c_sql_work\\"/NПользователь /PПароль");\n
тоже не знаю.
Пробовал перебирать параметры - не вышло.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36493049
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, если правильно понял интернет, к 1с 7.7 можно подключаться с помощью OLE, а Jawin, вроде, OLE не поддерживает.

С помощью этой полезной информации решил попробовать Jacob.

Получилось так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
 package  XI_Jacob;

 import  com.bea.core.repackaged.springframework.util.ResourceUtils;

 import  com.jacob.com.JacobObject;
 import  com.jacob.activeX.*;

 import  com.jacob.activeX.ActiveXComponent;
 import  com.jacob.com.*;
 import  com.jacob.com.Dispatch;
 import  com.jacob.com.Variant;

 public   class  Main //extends JacobObject 
{
     public   static  ActiveXComponent sC;
     public   static  Dispatch sControl =  null ;
     public   static  DispatchProxy sCon =  null ;
     private   static   final  String _1CUtilsV7_APPLICATION = "V77.Application";
     private   static   final  String _1CUtilsV7_RM_TRADE = "RMTrade";
     private   static   final  String _1CUtilsV7_INITIALIZE = "Initialize";
//-Djava.library.path=D:\Oracle\Middleware11112\jdk160_14_R27.6.5-32\lib
     public  Dispatch catalogs =  null ;
     public  Dispatch catalog =  null ;
     public  Dispatch part =  null ;
        
     public  Main() 
    {
         super ();
        
         try  
        {
            sC =  new  ActiveXComponent(_1CUtilsV7_APPLICATION);
            sControl = (Dispatch)sC.getObject();
        } 
         catch  (Exception e)
        {
            e.printStackTrace();
            //throw new _1CException(_1CException._1C_NOT_AVAILABLE) ;
        }

         int  rmTradeId =  0 ;
         try  
        {
            rmTradeId = Dispatch.getIDOfName(sC, _1CUtilsV7_RM_TRADE) ;
        } 
         catch  (Exception e) 
        {
            e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
            //throw new _1CException(_1CException.RM_TRADE_NOT_AVAILABLE);
        }
        Variant rmTradeVar = Dispatch.invoke(sControl, rmTradeId, Dispatch.Get,  new  Object[]{},  new   int []{rmTradeId});

         int  id = Dispatch.getIDOfName(sControl, _1CUtilsV7_INITIALIZE) ;

        Object[] args =  new  Object[ 3 ] ;

        args[ 0 ] = rmTradeVar.getInt() ;
        args[ 1 ] = "/D\"\\\\10.10.10.5\\1c$\\1c_sql_work\" /NПользователь /PПароль";
        args[ 2 ] =  new  Variant("NO_SPLASH_SHOW").getString() ;

        Variant result = Dispatch.invoke(sControl, _1CUtilsV7_INITIALIZE, Dispatch.Get, args,  new   int []{id}) ;

         if  (!result.getBoolean())
        {
            //throw new _1CException(_1CException.NOT_AUTHORISED);
        }
        
        result.safeRelease();
        sControl.safeRelease();
        sC.safeRelease();
    }

     public   static   void  main(String[] args) 
    {
        Main main =  new  Main();
    }
}

И оно даже работает.

Если кто-то подскажет, как с помощью Jacob писать/читать из 1c 7.7, буду очень благодарен.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36493869
xfaces
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhos,

пример работы c 1C7.7 через Jawin:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
      DispatchPtr app =  null ;
       try  {
         Ole32.CoInitialize();
         app =  new  DispatchPtr("V77.Application");
         Integer var = (Integer) app.get("RMTrade");
         app.invoke("Initialize", var, "/DD:\\Work\\1c\\testbase /NНовый /P1", "NO_SPLASH_SHOW");

         DispatchPtr ref = (DispatchPtr) app.invoke("CreateObject", "Справочник.Счета");
         ref.invoke("ВыбратьЭлементы");
          while  (( Double ) ref.invoke("ПолучитьЭлемент") ==  1 ) {
            DispatchPtr curIt = (DispatchPtr) ref.invoke("ТекущийЭлемент");
            System.out.println(curIt.get("Наименование"));
         }
         app.close();
         Ole32.CoUninitialize();
      }  catch  (Exception e) {
         e.printStackTrace();
      }
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36495078
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xfaces, премного благодарен!!! Целый день радовался.

мне бы еще маленькую консультацию по записи в 1С и вызову обработки

Делаю так (занимаюсь тупым перебором):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
             try  
            {
                Ole32.CoInitialize();
                app =  new  DispatchPtr("V77.Application");
                var = (Integer) app.get("RMTrade");
                app.invoke("Initialize", var, "/DD:\\Work\\1c\\testbase /NНовый /P1", "NO_SPLASH_SHOW");
                
                DispatchPtr refr = (DispatchPtr) app.invoke("CreateObject", "Справочник.Интеграция_АСУ");
/*1*/
                DispatchPtr el = (DispatchPtr) refr.invoke("New","СоздатьЭлемент");
                el.put("Код", "TEST");
//получаю java.lang.NullPointerException
/*1*/
/*2*/
                DispatchPtr el = (DispatchPtr) refr.invoke("СоздатьЭлемент");
                el.put("Код", "TEST");
//получаю org.jawin.COMException: 80020006: Неизвестное имя.
/*2*/
/*3*/
                DispatchPtr el = (DispatchPtr) refr.invoke("CreateObject","СоздатьЭлемент");
                el.put("Код", "TEST");
//получаю org.jawin.COMException: 80020006: Неизвестное имя.
/*3*/
/*4*/
                DispatchPtr el = (DispatchPtr) refr.invoke("Write","СоздатьЭлемент");
                el.put("Код", "TEST");
//получаю org.jawin.COMException: 80020009: Ошибка.
/*4*/
                el.invoke("Записать");
                app.close();
                Ole32.CoUninitialize();
            } 
             catch  (Exception e) 
            {
                e.printStackTrace();
            }
Пытаюсь запустить обработку. Т.к. не знаю, как запустить, делаю так:
Код: plaintext
1.
2.
DispatchPtr ref = (DispatchPtr) app.invoke("CreateObject", "ОткрытьФормуМодально(\"Обработка.ПодготовкаДанныхАСУ\")");
//получаю org.jawin.COMException: 80020009: Ошибка.

Помогите пожалуйста.

И еще, где бы черпнуть хотя бы немного этих глубоких знаний, по тому, какие параметры куда вставлять. То что надо знать еще язык 1С - это понятно. Но все же.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36496321
xfaces
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhos,
Большого опыта в связке Java-1c у меня нет, полгода назад стояла задача их сопряжения, я добился запуска тестового примера по чтению справочника чтобы посмотреть как это происходит, и на этом остановился. К счастью, выбрали другой путь решения задачи и этого геморроя удалось избежать.

Посмотрите Описание встроенного языка 1С 7.7. Там в конце есть глава посвященная OLE, по-моему даже были какие-то примеры по работе с 1С в качестве OLE Automation сервера.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36497131
xfaces
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще - насколько я помню в синтаксисе 1С у справочника нет метода СоздатьЭлемент().
Попробуйте метод Новый()
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36497580
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xfaces, огромное спасибо за помощь!

Писать в 1с можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
             try 
            {
                Ole32.CoInitialize();
                app =  new  DispatchPtr("V77.Application");
                var = (Integer) app.get("RMTrade");
                app.invoke("Initialize", var, "/DD:\\Work\\1c\\testbase /NНовый /P1", "NO_SPLASH_SHOW");
                
                DispatchPtr refr = (DispatchPtr) app.invoke("CreateObject", "Справочник.Интеграция_АСУ_ТОиР");
                refr.invoke("Новый");
                refr.put("PAR_NAME", "TEST");
                refr.invoke("Записать");
                refr.put("PAR_UOM", "ШТ");
                refr.invoke("Записать");

                app.close();
                Ole32.CoUninitialize();
            }
             catch  (Exception e) 
            {
                e.printStackTrace();
            }

Осталось научиться запускать обработки.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36498751
Arhos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, в "1С: предприятие 7.7 Описание встроенного языка" часть 2 есть полезная глава 40, в которой описано взаимодействие OLE.
В 1с7.7 есть англоязычные названия методов. Для использования методов 1с в Jawin нужно в качестве первого параметра функции invoke ставить англоязычные название метода 1с, например,
Код: plaintext
1.
DispatchPtr refr = (DispatchPtr) app.invoke("CreateObject", "Справочник.Интеграция_АСУ_ТОиР");
Названия методов можно взять в "1С: предприятие 7.7 Описание встроенного языка" тут .

Запустить обработку так не получилось:
Код: plaintext
1.
String refF = app.invoke("OpenFormModal", "Обработка.ПодготовкаДанныхДляТОиР").toString();
получал "Ошибка на сервере"

Список ошибок тут .

Зато получилось так:
Код: plaintext
1.
String refF = app.invoke("EvalExpr", "ОткрытьФормуМодально(\"Обработка.ПодготовкаДанныхДляТОиР\")").toString();

Что такое EvalExpr написано в главе 40.

Всем земной поклон!
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36687292
ildarin21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникла проблема с подключением к 1Cv8.1.
Вылетает ошибка "org.jawin.COMException: 800401f3: Недопустимая строка с указанием класса".
Что это значит?
Спасибо.
...
Рейтинг: 0 / 0
1С 7.7 Jawin интеграция
    #36724519
gildebrand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот есть API на Java к 7-ке j1c
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
1С 7.7 Jawin интеграция
    #37948276
olexande
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сайт j1c.ru уже лежит некоторое время ...
С проектом что-то случилось? Или временные проблемы?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / 1С 7.7 Jawin интеграция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]