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

В интернете есть примеры по организации 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
26.02.2010, 18:49:08
    #36490946
mikkri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
Откройте книжку по 1С. У вас ведь легальная копия, значит должна быть документация.
...
Рейтинг: 0 / 0
27.02.2010, 09:35:02
    #36491565
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
mikkri,

не поверите, но в документации не нашел ни одного слова с COM. Про OLE написано, что как-то можно, но вот как, не говорится.
...
Рейтинг: 0 / 0
27.02.2010, 11:44:09
    #36491794
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
Делаю так:
Код: 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
27.02.2010, 12:20:11
    #36491865
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
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
27.02.2010, 19:32:28
    #36492711
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
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
28.02.2010, 09:45:03
    #36493049
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
В общем, если правильно понял интернет, к 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
01.03.2010, 09:13:22
    #36493869
xfaces
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
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
01.03.2010, 15:40:21
    #36495078
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
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
02.03.2010, 10:44:26
    #36496321
xfaces
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
Arhos,
Большого опыта в связке Java-1c у меня нет, полгода назад стояла задача их сопряжения, я добился запуска тестового примера по чтению справочника чтобы посмотреть как это происходит, и на этом остановился. К счастью, выбрали другой путь решения задачи и этого геморроя удалось избежать.

Посмотрите Описание встроенного языка 1С 7.7. Там в конце есть глава посвященная OLE, по-моему даже были какие-то примеры по работе с 1С в качестве OLE Automation сервера.
...
Рейтинг: 0 / 0
02.03.2010, 14:25:31
    #36497131
xfaces
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
И еще - насколько я помню в синтаксисе 1С у справочника нет метода СоздатьЭлемент().
Попробуйте метод Новый()
...
Рейтинг: 0 / 0
02.03.2010, 16:00:39
    #36497580
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
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
03.03.2010, 08:02:00
    #36498751
Arhos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
В общем, в "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
15.06.2010, 12:03:41
    #36687292
ildarin21
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
Возникла проблема с подключением к 1Cv8.1.
Вылетает ошибка "org.jawin.COMException: 800401f3: Недопустимая строка с указанием класса".
Что это значит?
Спасибо.
...
Рейтинг: 0 / 0
06.07.2010, 00:54:10
    #36724519
gildebrand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
Вот есть API на Java к 7-ке j1c
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.09.2012, 14:14:30
    #37948276
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С 7.7 Jawin интеграция
Сайт j1c.ru уже лежит некоторое время ...
С проектом что-то случилось? Или временные проблемы?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / 1С 7.7 Jawin интеграция / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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