Найти в Дзене

Памятка по работе с COM-соединенениями в 1С:Предприятии 8

Это статья-памятка по обмену между двумя информационными базами 1С:Предприятия через COM-соединения. 1. Запускаем командную сроку "cmd" с правами администратора. 2. Для регистрации com-компонеты (comcntr.dll) 1C используем утилиту "regsvr32". Для этого нужно выполнить команду: regsvr32 "C:\Program Files (x86)\1cv8\8.3.27.1719\bin\comcntr.dll" Важно помнить: ИмяСоединения = "V83.ComConnector"; АдресСервера = "localhost"; ИмяБазы = "ib"; Пользователь = "Пользователь"; Пароль = "Пароль"; НоваяБаза = Новый ComОбъект(ИмяСоединения); ПараметрыСоединения = "Srvr=""" + СокрЛП(АдресСервера) + """; Ref=""" + СокрЛП(ИмяБазы) + """"; ПараметрыСоединения = ПараметрыСоединения + "; Usr=""" + СокрЛП(Пользователь) + """; Pwd=""" + СокрЛП(Пароль) + """;";
Попытка ИБ = НоваяБаза.Connect(ПараметрыСоединения); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Значение примитивных типов — Строка, Число, Дата, Булево, Неопределенно передается "как есть". Значения других объектов передаются, как
Оглавление

Это статья-памятка по обмену между двумя информационными базами 1С:Предприятия через COM-соединения.

Регистрация COM-компоненты для обмена

1. Запускаем командную сроку "cmd" с правами администратора.

-2

2. Для регистрации com-компонеты (comcntr.dll) 1C используем утилиту "regsvr32". Для этого нужно выполнить команду:

regsvr32 "C:\Program Files (x86)\1cv8\8.3.27.1719\bin\comcntr.dll"
-3

Важно помнить:

  • Про разрядность платформы. Нужно регистрировать компоненту для нужно платформы;
  • В случае работы 1С через сервер 1С:Предприятия, про пользователя от имени которого работает служба Агента сервера 1С. Нужно регистрировать компоненту от имени этого пользователя;
  • Контекст подключения (Клиент, сервер). Нужно регистрировать компоненту не только на сервере, но и на клиентской машине;

Соединение с другой базой по COM

ИмяСоединения = "V83.ComConnector";
АдресСервера = "localhost";
ИмяБазы = "ib";
Пользователь = "Пользователь";
Пароль = "Пароль";
НоваяБаза = Новый ComОбъект(ИмяСоединения);
ПараметрыСоединения = "Srvr=""" + СокрЛП(АдресСервера) + """; Ref=""" + СокрЛП(ИмяБазы) + """";
ПараметрыСоединения = ПараметрыСоединения + "; Usr=""" + СокрЛП(Пользователь) + """; Pwd=""" + СокрЛП(Пароль) + """;";

Попытка
ИБ = НоваяБаза.Connect(ПараметрыСоединения);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

Общее описание

Значение примитивных типов — Строка, Число, Дата, Булево, Неопределенно передается "как есть". Значения других объектов передаются, как COM-Объект. Работа с COM-Объектами происходит относительно ИБ базы источника.

Запрос к другой базе по COM

Запрос = ИБ.NewObject("Запрос");
Запрос.Выполнить().Выбрать(ИБ.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Преобразование в тип строка

// Результат — COM-Объект результата запроса из внешней базы
Строка = ИБ.String(Результат.УИД);

Уникальный идентификатор объекта из внешней базы по COM

// Ссылка — COM-Объект из внешней базы
ИБ.XMLСтрока(Ссылка);

Получить значение перечисления по COM

// Контрагент — COM-Объект из внешней базы
Попытка
ИндексЭлемента = ИБ.Перечисления.ЮрФизЛицо.Индекс(Контрагент.ЮрФизЛицо);
Исключение
ИндексЭлемента = -1;
КонецПопытки;

Если ИндексЭлемента = ИБ.Перечисления.ЮрФизЛицо.Индекс(ИБ.Перечисления.ЮрФизЛицо.ФизЛицо) Тогда

ИначеЕсли ИндексЭлемента = ИБ.Перечисления.ЮрФизЛицо.Индекс(ИБ.Перечисления.ЮрФизЛицо.ЮрЛицо) Тогда

Иначе

КонецЕсли;

Получить тип значения по COM

// ДокументОснования — COM-Объект из внешней базы
Если ДокументОснования <> Неопределено Тогда
Если ДокументОснования.Метаданные().ПолноеИмя() = "Документ.ЗаказПокупателя" Тогда

ИначеЕсли ДокументОснования.Метаданные().ПолноеИмя() = "Документ.РеализацияТоваровУслуг" Тогда

КонецЕсли;
КонецЕсли;

Передача таблицы значения по COM

ЗначениеВнешнейБазы = ИБ.ValueToStringInternal(ТаблицаЗначенияВнешнейБазы);
ЗначениеПриемника = ЗначениеИзСтрокиВнутр(ЗначениеВнешнейБазы);

Найти реквизит объекта по COM

// Сотрудник — COM-Объект из внешней базы
Сотрудник.Metadata().Attributes.Find("ИдентификаторПользователяИБ")

Остались вопросы, пишите нам в Телеграм.

------------------