Подключение к другой базе 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("Запрос");
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
КонецЦикла;