рубрики: COM | Дата: 2 апреля, 2014
Один из вариантов обмена данными между базами 1С это обмен через COM соединение.
С помощью COM соединения можно из одной базы 1С подключиться к другой и прочитать или записать данные. Пользоваться этим методом можно как в клиент-серверных вариантах баз, так и в файловых базах. В этой статье и разберем примеры такого рода соединений. В примерах используется платформа 8.2.
Можно создать два вида COM объектов для приложения 1С. Это V82.Application и V82.COMConnector. В случае с V82.Application запускается практически полноценный экземпляр приложения 1С. в случае использования V82.COMConnector запускается небольшая серверная часть.
Скорость работы в этом случае выше, но некоторые функции могут быть недоступны. В частности работа с формами и с общими модулями для которых не установлено свойство работы с внешними соединениями. Преимущественно надо использовать V82.COMConnector и только в случае нехватки функционала V82.Application. Особенно сильно разница в скорости работы может быть заметна на базах большого объема.
Итак, приступим
Соединение = Новый COMОбъект("V82.Application");
Соединение = Новый COMОбъект("V82.COMConnector");
СтрокаСоединения = "Srvr = ""ИмяСервера"";Ref = ""ИмяБазы""; Usr = ИмяПользователя; Pwd = Пароль";
СтрокаСоединения = "File = ""ПутьКБазе""; Usr = ИмяПользователя; Pwd = Пароль";
Попытка
Подключение = Соединение.Connect(СтрокаСоединения);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось подключиться к базе" + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Соединение = Неопределено;
Для объекта V82.Application выполнять разрыв соединения обязательно, в противном случае останется висеть незавершенный сеанс, который потом придется удалять вручную. В случае с V82.COMConnector соединение разрывается автоматически при завершении процедуры в которой выполнялось подключение.И есть еще один маленький момент.
Для пользователя под которым выполняется подключение должен быть отключен флажок «Запрашивать подтверждение при закрытии программы» в его настройках.
А теперь соберем весь код в кучу
Соединение = Новый COMОбъект("V82.Application");
//Соединение = Новый COMОбъект("V82.COMConnector");
СтрокаСоединения = "Srvr = ""Server1C"";Ref = ""MyBase""; Usr = Петя; Pwd = 123";
//СтрокаСоединения = "File = ""С:\MyBase""; Usr = Петя; Pwd = 123";
Попытка
Подключение = Соединение.Connect(СтрокаСоединения);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось подключиться к базе" + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Соединение = Неопределено;
Далее можно например воспользоваться методом NewObject(), чтобы создать запрос, и с его помощью прочитать данные из базы к которой подключались.
Для вида подключения V82.Application метод применяется для COM объекта, который создавался изначально, а для V82.COMConnector метод применяется к подключению. далее работа с запросом идет стандартными средствами 1С. в коде это выглядит так:
Запрос = Подключение.NewObject("Запрос"); // для V82.COMConnector
Запрос = Соединение.NewObject("Запрос"); // для V82.Application
Запрос.Текст =
"ВЫБРАТЬ
| ДолжностиОрганизаций.Код,
| ДолжностиОрганизаций.Наименование
|ИЗ
| Справочник.ДолжностиОрганизаций КАК ДолжностиОрганизаций";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;
Для версии 1С:Предприятие 8.3 все остается без изменений за исключением того, что при создании COMОбъектов надо использовать «V83.COMConnector» или «V83.Application».
Прям то что нужно, ничего лишнего, огромное спасибо!!!
Хочу добавить один момент, касательно запроса, хотя он может встретиться и в других местах. Мне необходимо было передать массив в качестве параметра. Обычная конструкция
Массив = Новый Массив не сработала, так как массив создавался на моей стороне и при попытке передать в запрос появлялась ошибка «Неверный параметр». Необходимо определять запрос на стороне удаленного приложения, там его пытаться заполнить и только так передавать его в запрос.
То же самое и для других объектов, которые создаются при помощи конструктора Новый.
Полезно пишете
Спасибо. Правда нынче COM уже не так актуально. Веб-сервисы больше в почете)