Профессия — 1С » Обмен данными между базами 1С через COM соединение

Профессия — 1С

Рукопашный бой Карташ

Категории

-->

Обмен данными между базами 1С через COM соединение

рубрики: COM | Дата: 2 апреля, 2014

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

Можно создать два вида COM объектов для приложения 1С. Это V82.Application и V82.COMConnector. В случае с V82.Application запускается практически полноценный экземпляр приложения 1С. в случае использования V82.COMConnector запускается небольшая серверная часть.
Скорость работы в этом случае выше, но некоторые функции могут быть недоступны. В частности работа с формами и с общими модулями для которых не установлено свойство работы с внешними соединениями. Преимущественно надо использовать V82.COMConnector и только в случае нехватки функционала V82.Application. Особенно сильно разница в скорости работы может быть заметна на базах большого объема.

Итак, приступим

  1. Создадим COM объект

    • для V82.Application

      
      
      Соединение = Новый COMОбъект("V82.Application");
      

    • для V82.COMConnector

      
      
      Соединение = Новый COMОбъект("V82.COMConnector");
      
  2. Сформируем строку подключения

    • для серверного варианта базы

      
      
      СтрокаСоединения = "Srvr = ""ИмяСервера"";Ref = ""ИмяБазы""; Usr = ИмяПользователя; Pwd = Пароль";
      
    • для файлового варианта базы

      
      
      СтрокаСоединения = "File = ""ПутьКБазе""; Usr = ИмяПользователя; Pwd = Пароль";
      
  3. Выполняем подключение к базе

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

    
    
    Соединение = Неопределено;
    

    Для объекта 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».

4 комментария на «“Обмен данными между базами 1С через COM соединение”»

  1. Владимир:

    Прям то что нужно, ничего лишнего, огромное спасибо!!!

  2. Константин:

    Хочу добавить один момент, касательно запроса, хотя он может встретиться и в других местах. Мне необходимо было передать массив в качестве параметра. Обычная конструкция
    Массив = Новый Массив не сработала, так как массив создавался на моей стороне и при попытке передать в запрос появлялась ошибка «Неверный параметр». Необходимо определять запрос на стороне удаленного приложения, там его пытаться заполнить и только так передавать его в запрос.
    То же самое и для других объектов, которые создаются при помощи конструктора Новый.

  3. Петр:

    Полезно пишете

    • Owner:

      Спасибо. Правда нынче COM уже не так актуально. Веб-сервисы больше в почете)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

   

2014 - 2023г. Профессия — 1С. Обмен опытом по программированию в 1С