Как подключиться к другой базе 1С через COM/OLE и работать с ее объектами?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Выбор COM-объекта: V83.COMConnector или V83.Application

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

  1. V83.COMConnector (рекомендуется): создает внутрипроцессный легковесный COM-коннектор. Он не инициализирует клиентский графический интерфейс, формы и глобальные обработчики интерфейсных событий. За счет этого соединение устанавливается быстрее и потребляет значительно меньше оперативной памяти.
  2. V83.Application: выполняет запуск полноценного экземпляра клиентского приложения 1С. Требуется только в редких случаях, когда необходимо интерактивно открыть пользователю интерфейс внешней базы или вызвать экспортные методы клиентских модулей.

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

Синтаксис строки подключения зависит от варианта развертывания целевой базы (файловая или клиент-серверная). Рассмотрим оба варианта.

Для файловой информационной базы используется параметр File:


СтрокаПодключения = "File=""C:\1c-star-baza""; Usr=""Фамилия Имя""; Pwd=""МойПароль"";";

Для клиент-серверной базы (SQL / кластер серверов 1С) вместо параметра File обязательно указываются параметры Srvr (адрес или имя сервера 1С) и Ref (имя базы в кластере):


СтрокаПодключения = "Srvr=""192.168.1.10""; Ref=""ИмяИнформационнойБазы""; Usr=""Фамилия Имя""; Pwd=""МойПароль"";";

Важное замечание по синтаксису: если имя пользователя (Usr) или пароль (Pwd) содержат пробелы, спецсимволы или кавычки, их необходимо обязательно оборачивать во внутренние двойные кавычки (""Имя Пользователя""), иначе платформа выдаст ошибку о неверных параметрах соединения.

Пример подключения и выборки документов

Разберем по шагам рабочий пример, в котором создается подключение к клиент-серверной базе с помощью V83.COMConnector и выполняется перебор документов РеализацияТоваровУслуг:


Попытка
    // Создаем COM-соединитель
    Соединитель = Новый COMОбъект("V83.COMConnector");
    
    // Формируем параметры подключения к серверной базе
    СтрокаПодключения = "Srvr=""192.168.1.10""; Ref=""БухгалтерияПредприятия""; Usr=""Администратор""; Pwd=""Secret123"";";
    
    // Устанавливаем соединение
    ВнешняяБаза = Соединитель.Connect(СтрокаПодключения);
    
    // Получаем менеджер документов внешней базы
    МенеджерРеализаций = ВнешняяБаза.Документы.РеализацияТоваровУслуг;
    
    // Выбираем документы за период
    ДатаНачала = '20230101';
    ДатаОкончания = '20231231235959';
    Выборка = МенеджерРеализаций.Выбрать(ДатаНачала, ДатаОкончания);
    
    Пока Выборка.Следующий() Цикл
        // Считываем реквизиты примитивных типов
        НомерДокумента = Выборка.Номер;
        ДатаДокумента  = Выборка.Дата;
        СуммаДокумента = Выборка.СуммаДокумента;
    КонецЦикла;
    
Исключение
    Сообщить("Ошибка при работе с COM-соединением: " + ОписаниеОшибки());
КонецПопытки;

// Обязательно освобождаем COM-объекты для закрытия сеанса на сервере
ВнешняяБаза = Неопределено;
Соединитель = Неопределено;

Типичные ошибки и способы их устранения

  1. Ошибка «Неверные или отсутствующие параметры соединения с информационной базой»: возникает при попытке указать путь к файлу для серверной базы, либо из-за отсутствия кавычек вокруг логина с пробелами. Проверьте правильность параметров Srvr и Ref.
  2. Ошибка «Значение не является значением объектного типа (Документы)»: возникает, если обращение происходит к неправильной переменной (например, к экземпляру соединителя вместо возвращенного метода Connect() объекта базы) или если соединение не было успешно установлено.
  3. Ошибка «Класс не зарегистрирован» (Class not registered): возникает из-за несовпадения разрядности 32-bit и 64-bit между клиентом/сервером 1С и зарегистрированной библиотекой comcntr.dll. Для решения регистрируют соответствующую разрядность через regsvr32 либо настраивают приложение в COM+ (Службы компонентов Windows).
  4. Зависание сеансов и утечка лицензий: каждый активный COM-сеанс занимает клиентскую лицензию 1С. После завершения алгоритма всегда явно присваивайте переменным соединения значение Неопределено.

Рекомендации по оптимизации обмена

Перебор через Выбрать() порождает множество сетевых обращений между процессами на каждый читаемый реквизит. Для ускорения работы рекомендуется выполнять запрос в контексте внешней базы через ВнешняяБаза.NewObject("Запрос") и передавать готовые результаты пакетом в виде примитивных типов данных или структурированных строк JSON/XML.

Если требуется регулярный обмен между современными конфигурациями, также стоит рассмотреть альтернативные технологии без использования COM: HTTP-сервисы, Web-сервисы (SOAP/REST) или стандартный интерфейс OData, которые работают на любых операционных системах (включая Linux) и не зависят от разрядности платформы.

← На главную