Автор Тема: 1С Внешнее соединение (COMConnector)  (Прочитано 10786 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 4dmax

  • Авторитет
  • Пол: Мужской
1С Внешнее соединение (COMConnector)
« : 11 Июля 2014, 18:31:54 »
Есть задача коннектится в 1С через COM технологию из Java используя внешнее соединение COMConnector (comcntr.dll).

Используя компоненту JACOB создаю зареганный в системе OLE объект:
ActiveXComponent o1C = new ActiveXComponent("V82.COMConnector");
Все создается. Вызываю метод Connect со строкой коннекта, чтобы приконнектится к БД:
Dispatch conn = Dispatch.call(o1C, "Connect", "Srvr=MyServer;Ref=MyBase;Usr=MyUser;Pwd=MyPass;").toDispatch();Долго висит(около 2-х минут), но коннектится.

А дальше, при попытке получить любой объект 1С, например "Справочники.Номенклатура":
Dispatch lists = Dispatch.call(conn, "Справочники.Номенклатура").toDispatch();возникает ошибка: Can't map names to dispid:Справочники.Номенклатура

Обрыл пол инета, инфы на первый взгляд много, но почти все работают с полноценным клиентом(V82.Application) и там вроде как все работает.

Оффлайн DoReMi

  • Админы
  • *****
  • Пол: Мужской
    • БЛОГОДОРЕМИЕ
Re: 1С Внешнее соединение (COMConnector)
« Ответ #1 : 11 Июля 2014, 21:13:17 »
Обрыл пол инета, инфы на первый взгляд много, но почти все работают с полноценным клиентом(V82.Application) и там вроде как все работает.
Так и есть.
Я даже пятиметровой палкой V82.COMConnector не трогал. )

Долго висит(около 2-х минут), но коннектится.
Попробуй для сравнения чем-то ещё соединиться, с другой 1с, VBA из офиса...

Dispatch lists = Dispatch.call(conn, "Справочники.Номенклатура").toDispatch();

Нынаю как у вас в Java, но такой метод получения данных мне кажется мудреным.
Вы держитесь здесь,  вам всего доброго, хорошего настроения, здоровья. ©

Оффлайн 4dmax

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #2 : 16 Июля 2014, 11:11:34 »
Попробуй для сравнения чем-то ещё соединиться, с другой 1с, VBA из офиса...
Пробовал экселем цеплятся, тоже долго висит и периодически вываливает сообщение:
"Microsoft Excel ожидает, пока другое приложение завершит действие OLE."

В итоге вроде подцепляется, но при вызове методов тоже самое. Буду дальше ковырять.

Нынаю как у вас в Java, но такой метод получения данных мне кажется мудреным.
Там можно и по другому, но вообще это ведь универсальный компонент для работы с COM, поэтому и вызов такой мудреный (нет обертки для конкретных объектов и методов). Через этот компонент я без проблем работаю с объектной моделью офиса (word, excel).

Наверное есть какие-то компоненты заточенные под работу непосредственно с 1С, но они скорее всего платные да и не помогут мне в вызове "своих" методов 1С.

Оффлайн Bliz

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #3 : 16 Июля 2014, 14:57:54 »
Могу лишь добавить, что из одной базы 1с подключаясь к другой базе 1с через V82.COMConnector (или V83.COMConnector в зависимости от платформы). Выборки данных, выполнение запросов и пр. все отрабатывает нормально. Не знаю поможет тебе это или нет  :)
Меньше слов больше дела

Оффлайн 4dmax

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #4 : 16 Июля 2014, 18:29:03 »
Могу лишь добавить, что из одной базы 1с подключаясь к другой базе 1с через V82.COMConnector (или V83.COMConnector в зависимости от платформы). Выборки данных, выполнение запросов и пр. все отрабатывает нормально. Не знаю поможет тебе это или нет  :)
А где создаешь подключение? на клиенте или на сервере? Выборки делаешь просто через новый объект Построитель запросов(дабавили в 8-ке) или же еще обращаешся к глобальным константам и методам 1С?
Я думаю, у меня проблема в том, что нет локально установленной 1С. Есть только зареганные в реестре библиотеки с сетевого ресурса.

Оффлайн Bliz

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #5 : 16 Июля 2014, 23:08:18 »
Могу лишь добавить, что из одной базы 1с подключаясь к другой базе 1с через V82.COMConnector (или V83.COMConnector в зависимости от платформы). Выборки данных, выполнение запросов и пр. все отрабатывает нормально. Не знаю поможет тебе это или нет  :)
А где создаешь подключение? на клиенте или на сервере? Выборки делаешь просто через новый объект Построитель запросов(дабавили в 8-ке) или же еще обращаешся к глобальным константам и методам 1С?
Я думаю, у меня проблема в том, что нет локально установленной 1С. Есть только зареганные в реестре библиотеки с сетевого ресурса.
Подключение делал и на клиенте и на сервере все отрабатывало нормально и там и там. Выборки делал и с помощью стандартных объектов (справочник.номенклатура.выбрать()) и через объект запрос и пр. А ты библиотеку эту регистрировал comcntr.dll? Что за ось с которой запускаешь?
Меньше слов больше дела

Оффлайн Bliz

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #6 : 16 Июля 2014, 23:22:20 »
Dispatch lists = Dispatch.call(conn, "Справочники.Номенклатура.Выбрать()").toDispatch();Так пробовал?
Меньше слов больше дела

Оффлайн 4dmax

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #7 : 21 Июля 2014, 16:34:13 »
dll зарегистрировна и на V82 и на V83(накатывается групповой политикой на все машины). Попробовал дергать метод "Выбрать()" - тоже самое.

Ось Win 7 x64 подключаюсь к 1C x32 проблему разрядности победил, создав в "Службе компонентов" COM компоненту, смотрящую на comcntr.dll (вся работа с dll ведется в рамках х32 процесса)

Сейчас допилил версию из Eхсel - все работает. из Java - нет.
Вот листинг VBA:
Sub Excel_to_1c()

Dim v8con As V82.COMConnector
Dim v8 As Object
Dim Справочник As Object
Dim Элемент

Application.DisplayAlerts = False

Set v8con = CreateObject("V82.COMConnector") 'Создать OLE
'Соединиться с БД
Set v8 = v8con.Connect("Srvr=server;Ref=base;Usr=;Pwd=;")
'Получить Справочники
Set Справочник = v8.Справочники.Номенклатура
'Получить элемент
Элемент = Справочник.НайтиПоКоду("00000200931").Артикул
MsgBox (Элемент)

End Sub

Коннект работает так же долго, но я так понимаю, если на стороне сервера поднять пул готовых коннектов, то все будет быстрее?

В случае с Java подозреваю, что проблема в русскоязычных именах объектов 1С. Как мне узнать английские аналоги данных методов?(в 1С - нуб)
« Последнее редактирование: 21 Июля 2014, 16:37:43 от 4dmax »

Оффлайн eXanDr

  • Волшебник
  • Пол: Мужской
    • itvdonsk
Re: 1С Внешнее соединение (COMConnector)
« Ответ #8 : 21 Июля 2014, 16:47:02 »
В случае с Java подозреваю, что проблема в русскоязычных именах объектов 1С. Как мне узнать английские аналоги данных методов?(в 1С - нуб)
В синтаксис-помощнике
Крутизна программера — не в синтаксисе исходников, а в толщине его кошелька
Telegram Group

Оффлайн 4dmax

  • Авторитет
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #9 : 21 Июля 2014, 17:01:38 »
В случае с Java подозреваю, что проблема в русскоязычных именах объектов 1С. Как мне узнать английские аналоги данных методов?(в 1С - нуб)
В синтаксис-помощнике
Есть web версия этого "синтаксис-помощника"? гугл говорит только как его найти и запустить в конфигураторе 1С, но у меня нет доступа к самой 1С.

Оффлайн eXanDr

  • Волшебник
  • Пол: Мужской
    • itvdonsk
Re: 1С Внешнее соединение (COMConnector)
« Ответ #10 : 21 Июля 2014, 17:31:11 »
В случае с Java подозреваю, что проблема в русскоязычных именах объектов 1С. Как мне узнать английские аналоги данных методов?(в 1С - нуб)
В синтаксис-помощнике
Есть web версия этого "синтаксис-помощника"? гугл говорит только как его найти и запустить в конфигураторе 1С, но у меня нет доступа к самой 1С.
Только в "таком виде" https://yadi.sk/d/knYVblywX2sQJ
Крутизна программера — не в синтаксисе исходников, а в толщине его кошелька
Telegram Group

Оффлайн android

  • Авторитет
Re: 1С Внешнее соединение (COMConnector)
« Ответ #11 : 21 Июля 2014, 17:35:48 »
Вот справка 1C:Enterprise. Developer Guide может сойдет.  :-\

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Захожу сюда редко.

Оффлайн android

  • Авторитет
Re: 1С Внешнее соединение (COMConnector)
« Ответ #13 : 21 Июля 2014, 23:55:44 »
Вот справка 1C:Enterprise. Developer Guide может сойдет.  :-\

Есть и на русском (пиратская разумеется) http://narod.yandex.ru/disk/7640083001/8.2%20%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0.rar.html
Я тоже хотел скинуть ссылку, но подумал, что владельца форума засудят и меня подтянут!  :-\
1С одна из самых строгих к пиратству контор.  :D

Оффлайн Film

  • Постоянный читатель
  • Пол: Мужской
Re: 1С Внешнее соединение (COMConnector)
« Ответ #14 : 22 Июля 2014, 00:14:31 »
Вот справка 1C:Enterprise. Developer Guide может сойдет.  :-\

Есть и на русском (пиратская разумеется) http://narod.yandex.ru/disk/7640083001/8.2%20%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0.rar.html
Я тоже хотел скинуть ссылку, но подумал, что владельца форума засудят и меня подтянут!  :-\
1С одна из самых строгих к пиратству контор.  :D

Название нельзя публиковать. А ссылку я нашел еще неделю назад через гугл. Поэтому, пускай яндекс засудят, у Усманова много денег ))))
Захожу сюда редко.