Подключение к другой базе V8

Подключение к 1C 8.3 и 8.2 по COM

Подключение к другой базе 1С 8 по COM-соединению очень полезная вещь. В основном, эта функция необходимо для обмена данными между конфигурациями.

Но по каким то причинам у новичком часто возникает затруднения с этим не сложным процессом. Ниже я расскажу пример решения этой проблемы на примере простой задачки.

Файловая

Процедура ВыполнитьПодключениеЧерезCOM()

// Формируем строку подключения

СтрокаПодключения =

"file='C:\Infobases\MyBase'; usr='admin'; pwd='password';";

ComConnector = ПолучитьCOMОбъектПоВерсииПлатформы();

СообщениеПользователю = Новый СообщениеПользователю;

Попытка

ComConnection = COMConnector.Connect(СтрокаПодключения);

Исключение

СообщениеПользователю.Текст = "Ошибка подключения: " + ОписаниеОшибки();

СообщениеПользователю.Сообщить();

Возврат;

КонецПопытки;

// Получаем список справочников подключенной базы

Для Каждого спр Из ComConnection.Метаданные.Справочники Цикл

СообщениеПользователю.Текст = "- " + спр.Имя;

СообщениеПользователю.Сообщить();

КонецЦикла;

КонецПроцедуры

Функция ПолучитьCOMОбъектПоВерсииПлатформы() Экспорт

// Определяем имя COM-объекта по версии платформы

ИмяComОбъекта = "";

Инфо = Новый СистемнаяИнформация;

Если СтрНайти(Инфо.ВерсияПриложения, "8.3") > 0 Тогда

ИмяComОбъекта = "V83.COMConnector";

ИначеЕсли СтрНайти(Инфо.ВерсияПриложения, "8.2") > 0 Тогда

ИмяComОбъекта = "V82.COMConnector";

Иначе

ВызватьИсключение "Не удалось определить версию платформы";

КонецЕсли;

// Инициализируем COM-объект и соединение

COMConnector = Новый COMОбъект(ИмяComОбъекта);

Возврат COMConnector;

КонецФункции

Серверная

Процедура ВыполнитьПодключениеЧерезCOM()

// Формируем строку подключения

СтрокаПодключения =

"srvr='localhost'; ref='infobase'; usr='admin'; pwd='password';";

ComConnector = ПолучитьCOMОбъектПоВерсииПлатформы();

СообщениеПользователю = Новый СообщениеПользователю;

Попытка

ComConnection = COMConnector.Connect(СтрокаПодключения);

Исключение

СообщениеПользователю.Текст = "Ошибка подключения: " + ОписаниеОшибки();

СообщениеПользователю.Сообщить();

Возврат;

КонецПопытки;

// Получаем список справочников подключенной базы

Для Каждого спр Из ComConnection.Метаданные.Справочники Цикл

СообщениеПользователю.Текст = "- " + спр.Имя;

СообщениеПользователю.Сообщить();

КонецЦикла;

КонецПроцедуры

Функция ПолучитьCOMОбъектПоВерсииПлатформы() Экспорт

// Определяем имя COM-объекта по версии платформы

ИмяComОбъекта = "";

Инфо = Новый СистемнаяИнформация;

Если СтрНайти(Инфо.ВерсияПриложения, "8.3") > 0 Тогда

ИмяComОбъекта = "V83.COMConnector";

ИначеЕсли СтрНайти(Инфо.ВерсияПриложения, "8.2") > 0 Тогда

ИмяComОбъекта = "V82.COMConnector";

Иначе

ВызватьИсключение "Не удалось определить версию платформы";

КонецЕсли;

// Инициализируем COM-объект и соединение

COMConnector = Новый COMОбъект(ИмяComОбъекта);

Возврат COMConnector;

КонецФункции

Обмен 1С 8.3 по COM

Поставлена задача:

Из конфигурации «Документооборот«, необходимо подключится к базе УПП:

    • найти документ по заранее известном коду, допустим «123»

    • получить статус документа

    • если статус изменился — то поменять и в соответствующем документе «документооборота

Реализация задачи:

Создание подключения к базе 1C по COM

Первым делом необходимо создать подключение к базе 1С 8.3, рассмотрим функцию, которая вернет подключение по ком-объекту к другой базе для файлового режима 1С:

Функция ПолучитьПодключениеКФайловойБД()

Параметры = "File=""C:\1CBase""";Usr=""login"";Pwd=""password"";";

V82COMConnector= Новый COMОбъект("V82.COMConnector");

Попытка

Возврат V82COMConnector.Connect(Параметры);

Исключение

Предупреждение ("Ошибка подключения!");

Возврат Неопределено;

КонецПопытки;

КонецФункции;

Функция вернет СОМ объект, с помощью которого можно производить действия с другой базой данных 1С 8.2.

Для клиент серверного режима, строка подключения будет немного отличаться:

Функция ПолучитьПодключениеКСервернойБД()

Параметры = "Srvr=""server"";Ref=""BaseName"";Usr=""login"";Pwd=""password"";";

V82COMConnector= Новый COMОбъект("V82.COMConnector");

Попытка

Base1С = V82COMConnector.Connect(Параметры);

Исключение

Предупреждение ("Ошибка подключения!");

КонецПопытки;

КонецФункции;

Если вы подключаетесь к базе на платформе 1C 8.1 — то вам необходимо использовать не «V82.COMConnector», а «V81.COMConnector».

Найти документ 1С по COM

Для примера, пусть номер нужного документа будет «1234», а наш Документ-объект — «ДокументОбъект»:

Соединение = ПолучитьПодключениеКСервернойБД();

СсылкаНаОбъект = Соединение.Документы.РеализацияТоваровУслуг.НайтиПоКоду("1234");

Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда

Сообщить("Не найден документ!");

Возврат;

КонецЕсли;

СтатусДокумента = СсылкаНаОбъект.Статус;

Если ДокументОбъект.Статус <> СтатусДокумента Тогда

ДокументОбъект.Статус = СтатусДокумента;

ДокументОбъект.Записать();

КонецЕсли;

Вот и все: мы подключились по COM, получили нужный документ прочитали его статус и если он отличается — установили статус нашему документу.

Обработать Запрос

// Подключим ВДГО

Попытка

Состояние("Идет процесс соединения ...");

V8 = Новый COMОбъект("V82.ComConnector");

СтрокаСоединения_ = "Srvr=""b4:1641"";Ref=""VDGO82"";Usr=""admin"";Pwd=""Fyu@h18"";";

БД = V8.Connect(СтрокаСоединения_);

Сообщить("Соединение установлено");

Исключение

СтрокаСообщенияОбОшибке = "При попытке соедиения с COM-сервером произошла следующая ошибка:" + Символы.ПС + ОписаниеОшибки();

Сообщить(СтрокаСообщенияОбОшибке, СтатусСообщения.Важное);

Состояние("Соединение установить не удалось");

Состояние();

Возврат;

КонецПопытки;

//Вытащим обороты по услугам

Запрос = БД.NewObject("Запрос");

Запрос.УстановитьПараметр("НачПериода", НачПериода);

Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));

Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл

КонецЦикла;