Как организовать обмен данными по COM-соединению между базами 1С разных версий на разных виртуальных машинах?

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

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

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

Метод 1: Использование Веб-сервисов

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

Почему Веб-сервисы?

  1. Независимость от версий платформы: Ключевое преимущество в нашей ситуации. Веб-сервисы взаимодействуют по стандартным протоколам (HTTP/HTTPS) и не зависят от внутренней логики и версий COM-объектов 1С.
  2. Кросс-платформенность: Могут использоваться для интеграции с любой системой, способной работать с HTTP-запросами и XML/JSON-структурами.
  3. Работа через брандмауэры и интернет: Веб-сервисы легко проходят через сетевые барьеры, что делает их идеальными для обмена между удаленными серверами и виртуальными машинами.
  4. Стандартизация: Используют общепринятые стандарты (SOAP, REST), что упрощает разработку и поддержку.

Как реализовать обмен через Веб-сервисы в 1С?

Реализация обмена через веб-сервисы включает в себя два основных этапа: публикацию веб-сервиса в одной из баз 1С и его потребление в другой базе.

Шаг 1: Публикация Веб-сервиса (на "отдающей" или "принимающей" стороне)

Для публикации веб-сервиса необходимо создать в конфигурации 1С объект "Веб-сервис" (или "HTTP-сервис", если вы предпочитаете REST-подобный подход). В нем мы описываем методы, которые будут доступны для внешнего вызова, и их параметры.

  1. Создание Веб-сервиса: В конфигураторе добавьте новый объект "Веб-сервис". Определите его операции (методы), которые будут выполнять нужные действия, например, получать данные, записывать документы, выполнять определенные обработки.
  2. Написание кода: Для каждой операции веб-сервиса напишите код на встроенном языке 1С, который будет выполнять необходимую логику. Например, если метод предназначен для получения списка товаров, его код будет формировать и возвращать этот список.
  3. Публикация базы на веб-сервере: После создания веб-сервиса необходимо опубликовать информационную базу 1С на внешнем веб-сервере (например, Apache или IIS). Это делается из конфигуратора через меню "Администрирование" -> "Публикация на веб-сервере". В процессе публикации указываются параметры веб-сервисов, которые мы хотим сделать доступными.
  4. Проверка доступности: После публикации можно проверить доступность веб-сервиса, обратившись к его WSDL-описанию по адресу, указанному при публикации (например, http://ваш_сервер/ваша_база/ws/ВашВебСервис.1cws?wsdl).
Шаг 2: Потребление Веб-сервиса (на "принимающей" или "отдающей" стороне)

После того как веб-сервис опубликован и доступен, другая база 1С может к нему подключаться и вызывать его методы.

  1. Получение WSDL-описания: Для подключения к веб-сервису нам понадобится его WSDL-описание. Это XML-файл, который содержит информацию обо всех доступных методах, их параметрах и типах данных.
  2. Создание Прокси-объекта: В коде 1С мы используем объекты платформы для работы с веб-сервисами. Сначала создаем объект WSОпределения, передавая ему адрес WSDL.
    
    WSDL = "http://ваш_сервер/ваша_база/ws/ВашВебСервис.1cws?wsdl";
    WSОпределения = Новый WSОпределения(WSDL);
    
  3. Создание Прокси-сервиса: Затем на основе WSDL-определения создаем прокси-объект, который позволяет вызывать методы веб-сервиса как обычные функции 1С.
    
    WSПрокси = Новый WSПрокси(WSОпределения, "http://www.пример.com/", "ВашВебСервис", "ВашВебСервисSoap");
    // Параметры "http://www.пример.com/", "ВашВебСервис", "ВашВебСервисSoap" берутся из WSDL
    
  4. Вызов методов: Теперь мы можем вызывать методы удаленного веб-сервиса через созданный прокси-объект.
    
    Попытка
        Результат = WSПрокси.МетодВебСервиса(Параметр1, Параметр2);
        // Обрабатываем полученный результат
    Исключение
        Сообщить("Ошибка вызова веб-сервиса: " + ОписаниеОшибки());
    КонецПопытки;
    

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

Метод 2: Применение DCOM (Distributed Component Object Model)

DCOM (Distributed Component Object Model) — это расширение технологии COM, которое позволяет компонентам взаимодействовать не только на одном компьютере, но и между различными компьютерами в сети. Это позволяет обойти ограничение на идентичность версий, если правильно настроить окружение. Давайте разберем, как DCOM может помочь в нашей ситуации.

Как работает DCOM для 1С?

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

Настройка DCOM для 1С — пошаговое руководство

Настройка DCOM является более сложной задачей, требующей внимательной работы с системными настройками Windows на обеих виртуальных машинах.

Шаг 1: Установка и регистрация платформы 1С на целевой ВМ

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

  1. Установка платформы: Установите на целевой ВМ клиентскую часть 1С:Предприятия той версии, которая используется целевой базой.
  2. Регистрация COM-сервера: Обычно COM-сервер 1С регистрируется автоматически при установке платформы. Однако, если возникают проблемы, можно выполнить ручную регистрацию из командной строки с правами администратора:
    
    cd "C:\Program Files\1cv8\X.X.X.X\bin" // Замените X.X.X.X на номер вашей версии платформы
    regsvr32 comcntr.dll
    

    Эта команда регистрирует библиотеку comcntr.dll, которая содержит COM-объект V83.Application (или V82.Application и т.д.).

Шаг 2: Настройка DCOM на целевой ВМ (где запущена 1С)

Этот шаг требует настройки службы DCOM через утилиту dcomcnfg.

  1. Запуск dcomcnfg: Нажмите Win + R, введите dcomcnfg и нажмите Enter. Откроется "Службы компонентов".
  2. Навигация к настройкам 1С: Разверните "Службы компонентов" -> "Компьютеры" -> "Мой компьютер" -> "Настройка DCOM".
  3. Поиск COM-приложения 1С: Найдите в списке приложение V83.Application (или соответствующую версию, например, V82.Application).
  4. Настройка свойств: Щелкните правой кнопкой мыши по V83.Application и выберите "Свойства".
  5. Вкладка "Общие": Убедитесь, что "Уровень проверки подлинности по умолчанию" или "Уровень проверки подлинности" установлен в "Подключить" или "Нет". Рекомендуется начать с "Нет" для тестирования, затем повысить.
  6. Вкладка "Размещение": Выберите "Запустить приложение на этом компьютере". Убедитесь, что другие опции (кроме "Запустить приложение на этом компьютере") не выбраны, если вы хотите, чтобы COM-сервер 1С запускался именно на текущей ВМ.
  7. Вкладка "Безопасность":
    • Разрешения на запуск и активацию: В разделе "Разрешения на запуск и активацию" выберите "Настроить" и добавьте пользователя или группу, от имени которого будет производиться подключение (например, пользователь, под которым запускается скрипт на первой ВМ). Дайте им права "Локальный запуск", "Удаленный запуск", "Локальная активация", "Удаленная активация".
    • Разрешения на доступ: Аналогично, в разделе "Разрешения на доступ" добавьте пользователя и дайте ему права "Локальный доступ", "Удаленный доступ".
  8. Вкладка "Удостоверение": В разделе "Запускающий пользователь" выберите "Указанный пользователь" и укажите учетные данные пользователя Windows, от имени которого будет запускаться процесс 1С на целевой ВМ. Этот пользователь должен иметь права на запуск 1С и доступ к целевой информационной базе. Это критически важный шаг для корректной работы DCOM.
Шаг 3: Настройка DCOM на ВМ-инициаторе (откуда подключаемся)

На ВМ, с которой вы будете инициировать COM-соединение, необходимо выполнить аналогичные настройки для V83.Application, но с учетом удаленного доступа.

  1. Запуск dcomcnfg: На ВМ-инициаторе также запустите dcomcnfg.
  2. Навигация и поиск 1С: Найдите V83.Application.
  3. Вкладка "Размещение": Здесь необходимо выбрать "Запустить приложение на другом компьютере" и указать имя или IP-адрес целевой виртуальной машины.
  4. Вкладка "Безопасность": Убедитесь, что настройки безопасности соответствуют настройкам на целевой ВМ, чтобы обеспечить беспрепятственный доступ.
Шаг 4: Написание кода для подключения

В коде 1С на ВМ-инициаторе подключение к удаленной базе будет выглядеть почти так же, как и к локальной, благодаря настройкам DCOM:


Попытка
    // Создаем COM-объект, который благодаря DCOM будет запущен на удаленной ВМ
    // Указывать явно удаленный сервер в конструкторе COMОбъект не нужно,
    // это настраивается через dcomcnfg
    V8_COM = Новый COMОбъект("V83.Application"); 
    
    // Параметры для подключения к информационной базе на удаленной ВМ
    ПараметрыПодключения = "Srvr='ИмяСервера1СЦелевойВМ';Ref='ИмяБазыНаСервере';Usr='ПользовательБазы1С';Pwd='ПарольПользователя1С';";
    
    // Подключаемся к информационной базе
    Соединение = V8_COM.Connect(ПараметрыПодключения);
    
    Если Соединение <> Неопределено Тогда
        Сообщить("Успешное подключение к базе данных через DCOM!");
        // Далее работаем с Соединение, как с обычной COM-сессией 1С
        // Например:
        // СправочникНоменклатура = Соединение.Справочники.Номенклатура;
        // Элемент = СправочникНоменклатура.НайтиПоКоду("00001");
    Иначе
        Сообщить("Не удалось подключиться к базе данных через DCOM.");
    КонецЕсли;
Исключение
    Сообщить("Ошибка при создании или подключении через COM-объект: " + ОписаниеОшибки());
КонецПопытки;

Важно отметить, что DCOM требует тщательной настройки сетевых разрешений и прав пользователей Windows. Любая неточность в этих настройках может привести к ошибкам "Отказано в доступе" или "Невозможно запустить COM-сервер".

Метод 3: Обмен через файлы (Выгрузка/Загрузка данных)

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

Принцип работы файлового обмена

Суть метода заключается в том, что данные из одной базы выгружаются в файл определенного формата, затем этот файл передается в другую базу и загружается. Для автоматизации процесса используются регламентные задания.

Как реализовать файловый обмен в 1С?

Шаг 1: Определение формата обмена

Мы можем использовать различные форматы для файлов обмена:

  1. XML: Наиболее распространенный и гибкий формат. 1С имеет встроенные объекты для работы с XML (ЗаписьXML, ЧтениеXML, ЗаписьДокументаXML, ЧтениеДокументаXML).
  2. JSON: Современный и легкий формат, также поддерживается 1С (ЗаписьJSON, ЧтениеJSON).
  3. CSV/Текстовые файлы: Простые форматы для табличных данных, хорошо подходят для простых обменов, но менее гибки для сложных структур.

Выбор формата зависит от сложности передаваемых данных и требований к гибкости.

Шаг 2: Выгрузка данных из первой базы

В базе-источнике мы пишем код, который будет формировать нужные данные и выгружать их в файл.

  1. Формирование выборки данных: Используем запросы или обходы объектов для сбора необходимых данных (например, новые документы, измененные справочники).
  2. Сериализация данных: Используем объекты для записи в выбранный формат. Например, для XML:
    
    ИмяФайла = "C:\Обмен\ДанныеДляОбмена.xml";
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьФайл(ИмяФайла);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("ДанныеОбмена");
            
    // Пример выгрузки данных справочника
    ВыборкаНоменклатура = Справочники.Номенклатура.Выбрать();
    Пока ВыборкаНоменклатура.Следующий() Цикл
        ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
        ЗаписьXML.ЗаписатьАтрибут("Код", ВыборкаНоменклатура.Код);
        ЗаписьXML.ЗаписатьАтрибут("Наименование", ВыборкаНоменклатура.Наименование);
        // ... другие реквизиты
        ЗаписьXML.ЗаписатьКонецЭлемента(); // Номенклатура
    КонецЦикла;
            
    ЗаписьXML.ЗаписатьКонецЭлемента(); // ДанныеОбмена
    ЗаписьXML.Закрыть();
    
Шаг 3: Передача файла

После выгрузки файл необходимо передать на другую ВМ. Это можно сделать различными способами:

  1. Общий сетевой ресурс: Самый простой способ, если ВМ находятся в одной сети. Просто сохраняем файл на сетевой диск, доступный для обеих машин.
  2. FTP/SFTP: Для более защищенной или удаленной передачи.
  3. Облачное хранилище: Google Drive, OneDrive, Яндекс.Диск и т.п., если настроена синхронизация или API.
Шаг 4: Загрузка данных во вторую базу

Во второй базе мы пишем код, который будет считывать данные из файла и записывать их в информационную базу.

  1. Чтение файла: Используем соответствующие объекты для чтения файла. Например, для XML:
    
    ИмяФайла = "C:\Обмен\ДанныеДляОбмена.xml";
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьФайл(ИмяФайла);
            
    // Переходим к нужному элементу
    ЧтениеXML.Прочитать(); // Пропускаем объявление
    ЧтениеXML.Прочитать(); // Переходим к ДанныеОбмена
            
    Пока ЧтениеXML.Прочитать() Цикл
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Номенклатура" Тогда
            Код = ЧтениеXML.ПолучитьАтрибут("Код");
            Наименование = ЧтениеXML.ПолучитьАтрибут("Наименование");
                    
            // Ищем или создаем элемент справочника
            СсылкаНоменклатура = Справочники.Номенклатура.НайтиПоКоду(Код);
            Если СсылкаНоменклатура = Неопределено Тогда
                НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
                НовыйЭлемент.Код = Код;
                НовыйЭлемент.Наименование = Наименование;
                // ... другие реквизиты
                НовыйЭлемент.Записать();
            Иначе
                // Обновляем существующий элемент, если нужно
                ОбъектНоменклатура = СсылкаНоменклатура.ПолучитьОбъект();
                ОбъектНоменклатура.Наименование = Наименование;
                ОбъектНоменклатура.Записать();
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    ЧтениеXML.Закрыть();
    
Шаг 5: Автоматизация обмена

Для регулярного обмена можно использовать РегламентныеЗадания в 1С. Создаем регламентное задание, которое будет запускать обработку выгрузки в первой базе и обработку загрузки во второй базе с заданным расписанием.

Хотя файловый обмен менее интерактивен, он очень надежен и универсален, особенно когда требуется высокая отказоустойчивость или нет возможности настроить прямое сетевое взаимодействие.

Дополнительные рекомендации и общие моменты

Таким образом, хотя прямое COM-соединение между разными версиями 1С на разных виртуальных машинах невозможно без дополнительных шагов, веб-сервисы и DCOM предоставляют эффективные и проверенные решения. Файловый обмен остается универсальным запасным вариантом, который всегда сработает, независимо от сложности инфраструктуры.

← На главную