gifts2017

Обращение к 1С из JAVA по COM

Опубликовал sbv2005 (sbv2005) в раздел Обмен - Обмен с другими системами

Обращение к 1С из JAVA по COM, используя библиотеку JAWIN.
Теперь можно создавать решения на JAVA, интегрируя ее с 1С по COM. Файл InfoStart.zip содержит запакованный проект на JAVA, который можно использовать в качестве примера. Файл jawin-2.0-alpha1.zip содержит необходимые библиотеки. Я использую бесплатный редактор JAVA Eclipse (http://www.eclipse.org/downloads/). Просто перенесите этот проект в папку проектов вашего Eclipse

Порядок работы
  1. При установке 1С платформы должен быть выбран COM
  2. jawind.dll скопировать в System32
  3. jawin.jar и jawin-stubs.jar из архива скопировать в "C:\Program Files\Java\jre7\lib" (в папку своей java машины)
  4. Зарегистрировать dll: в командной строке введите: "Regsvr32 jawind.dll"

Пример java кода (к проекту должны быть подключены файлы библиотек jawin.jar и jawin-stubs.jar из архива )

import org.jawin.COMException;
import org.jawin.DispatchPtr;
import org.jawin.Variant;
import org.jawin.win32.Ole32;

public class Test {

    public static void main(String[] arg) throws COMException {

        String str1CServer = "";
       
String str1CDB = "";

        try
{

            Ole32.CoInitialize();
           
DispatchPtr app = new DispatchPtr("V82.COMConnector");

           
str1CServer = "1CServer";
           
str1CDB = "1CDB ";
           
DispatchPtr ref = (DispatchPtr) app.invoke("Connect", "Srvr=\"" + str1CServer + "\";Ref=\"" + str1CDB + "\"");

           
// Чтение справочников
           
DispatchPtr listOfGlossary = (DispatchPtr) ref.get("Справочники");
           
DispatchPtr glossary = (DispatchPtr) listOfGlossary.get("Контрагенты");
           
DispatchPtr chooser = (DispatchPtr) glossary.invoke("Выбрать");

            while ((
Boolean) chooser.invoke("Следующий")) {
                String NameKontr = (String) chooser.get("Наименование");
               
System.out.println(ref.invoke("String", NameKontr));
           
}

            // Обращение к функции общего модуля с параметрами ПервыйПараметр, ВторойПараметр и т.д, (в моем случае возвращается значение типа Строка)
           
DispatchPtr obModul = (DispatchPtr) ref.get("ИмяОбщегоМодуля");
           
String Otvet = (String) obModul.invoke("ИмяФункции", "ПервыйПараметр", "ВторойПараметр");

           
Ole32.CoUninitialize();

       
} catch (COMException comex) { // Перехват исключений
           
System.out.println(comex); // Ошибка в работе COM соединения 1С
       
}

    } // End main
} // End class

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Jawin
.zip 3,37Mb
21.12.12
24
.zip 3,37Mb 24 Скачать
Проект на JAVA
.zip 3,59Kb
29.12.12
10
.zip 3,59Kb 10 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Карташев (Elisy) 04.01.13 09:29
Как альтернатива - к опубликованной через веб 1С из Java можно подключаться без COM. А то COM и Java не особо сочетаются как-то.
http://infostart.ru/public/153679/

Код доступа примерно такой:
import net.elisy.businessconnector.*;
import net.elisy.businessconnector.types.*;
import net.elisy.businessconnector.vm.*;

  	Connection connection = new Connection(connectionString);
    	connection.open();
    	connection.login();
    	connection.getLicenseManager().activate(serialNumber, companyName, activationKey);
    	GlobalContext globalContext = new GlobalContext(connection);

        StructureType s = new StructureType(globalContext);
        s.put("null", new NullType());
        s.put("undefined", new UndefinedType());
        
        StringType st = new StringType();
        st.setValue("String1");
        s.put("string", st);
        NumberType nt = new NumberType();
        nt.setValue(12345.678);
        s.put("number", nt);
        DateType dt = new DateType();
        dt.setValue(new Date());
        s.put("date", dt);
        BooleanType bt = new BooleanType();
        bt.setValue(true);
        s.put("boolean", bt);

        StringBuilder script = new StringBuilder();
        script.append("result = new Structure();\n");
        script.append("result.insert(\"null\", parameters.null);\n");
        script.append("result.insert(\"undefined\", parameters.undefined);\n");
        script.append("result.insert(\"string\", parameters.string);\n");
        script.append("result.insert(\"number\", parameters.number);\n");
        script.append("result.insert(\"date\", parameters.date);\n");
        script.append("result.insert(\"boolean\", parameters.boolean);\n");
        StructureType result = (StructureType)globalContext.getServerModule("ElisyBusinessConnector").invoke("Invoke", new Object[] { script.toString(), s });
...Показать Скрыть
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа