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

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

При организации взаимодействия между крупными информационными системами, такими как 1С:ERP Управление предприятием и 1С:Документооборот (ДО), разработчики часто выбирают прямое COM-соединение как наиболее простое в реализации. Однако на практике такая схема часто приводит к существенному снижению производительности. Пользователи начинают жаловаться на «фризы» интерфейса, долгое открытие карточек справочников (от 7 до 20 секунд) и общую нестабильность системы.

В этой статье мы подробно разберем, почему COM-соединение может тормозить работу, и пошагово рассмотрим процесс перехода на обмен через общую папку (файловый обмен) или современные HTTP-сервисы.

Выясним причину: почему COM-соединение замедляет ERP?

Прежде чем приступать к перенастройке, проанализируем ситуацию. Когда база 1С:Документооборот инициирует обмен через V83.COMConnector, она создает сеанс внутри базы 1С:ERP. Если базы находятся на разных физических серверах, возникают следующие проблемы:

  1. Сетевые задержки (RPC-вызовы): Каждый вызов метода, обращение к свойству объекта или получение метаданных через COM-границу сопровождается сетевым запросом. В циклах (например, при инициализации менеджеров в КонвертацияДанных) таких запросов могут быть тысячи, что превращает миллисекунды в десятки секунд ожидания.
  2. Длительные транзакции: Пока COM-соединение передает данные, транзакция в целевой базе остается открытой. Это приводит к блокировкам таблиц. Обычные пользователи, пытаясь открыть справочники Контрагенты или Договоры, попадают в очередь ожидания.
  3. Затраты на сериализацию: Система тратит огромные ресурсы на упаковку объектов на одной стороне и их распаковку на другой.

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

Рассмотрим процесс перехода на обмен через папку

Если в ваших базах настроена типовая синхронизация данных, переход с COM на файл выполняется достаточно просто, так как правила конвертации и состав отправляемых данных уже определены. Разберем шаги настройки:

Шаг 1. Подготовка сетевого ресурса

Для начала необходимо создать папку, к которой будут иметь доступ оба сервера. Здесь кроется важный технический нюанс: права доступа. Помните, что обмен выполняет не ваш пользователь Windows, а служба сервера 1С. Обычно это учетная запись USR1CV8.

  1. Создайте папку на одном из серверов (например, \\Server1\1C_Exchange\).
  2. В настройках безопасности папки предоставьте полные права (чтение/запись) учетным записям, под которыми запущены службы Агент сервера 1С:Предприятия на обоих серверах.
  3. Если серверы находятся в разных доменах, рассмотрите использование FTP-сервера. В 1С настройка обмена через FTP аналогична папке, но избавляет от проблем с правами Windows.

Шаг 2. Изменение настроек в базе-источнике (ДО)

Перейдем в настройки синхронизации данных. Вместо варианта «Прямое подключение» выберем «Синхронизация через общий ресурс». Укажем путь к нашей папке. Система предложит выгрузить файл настроек (обычно ExchangeSettings.xml). Этот файл понадобится нам для настройки второй базы, чтобы они «узнали» друг друга по уникальным кодам узлов.

Шаг 3. Изменение настроек в базе-приемнике (ERP)

В 1С:ERP заходим в НСИ и администрирование — Синхронизация данных. Выбираем нашу настройку и меняем параметры подключения на файловый обмен, указывая ту же самую папку. Теперь при запуске синхронизации база ДО будет класть файл выгрузки (сообщения обмена) в папку, а ERP будет его оттуда забирать.

Автоматизация процесса: регламентные задания

Чтобы обмен происходил без участия пользователя, проанализируем работу РегламентныеЗадания. В обеих базах необходимо настроить расписание:

  1. В 1С:Документооборот создаем расписание для выгрузки (например, каждые 15 минут).
  2. В 1С:ERP создаем расписание для загрузки и обратной выгрузки подтверждений.

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

Альтернативный вариант: HTTP-сервисы

Если вам требуется максимально оперативный обмен («почти онлайн»), рассмотрим вариант с HTTP-сервисами, о котором упоминали эксперты в обсуждении. Это более современный подход, чем использование папок.

Проанализируем пример логики работы через HTTP-запрос:


// Пример функции для отправки данных через HTTP
Функция ОтправитьДанныеВERP(ТекстXML)
    Соединение = Новый HTTPСоединение("erp-server", , "Пользователь", "Пароль");
    Запрос = Новый HTTPЗапрос("/ERP_Base/hs/Exchange/v1/ReceiveData");
    Запрос.УстановитьТелоИзСтроки(ТекстXML, КодировкаТекста.UTF8);
    
    Попытка
        Ответ = Соединение.ОтправитьДляОбъекта(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Возврат Истина;
        КонецЕсли;
    Исключение
        ЗаписатьЛогОшибки(ОписаниеОшибки());
    КонецПопытки;
КонецФункции

При использовании HTTP-сервисов данные передаются в теле запроса (обычно в формате XML или JSON). Преимущества очевидны: не нужны общие папки, обмен происходит мгновенно, а нагрузка на ERP распределяется более эффективно за счет фоновых процессов веб-сервера.

Переход на формат Enterprise Data

Разберем ситуацию, когда обмен все равно кажется медленным даже после отказа от COM. В современных конфигурациях (ERP 2 и ДО) используется технология Enterprise Data (ED). Если ваш обмен построен на старых правилах КонвертацияДанных 2.0, система вынуждена каждый раз инициализировать тяжелые менеджеры объектов.

При использовании Enterprise Data (КД 3.0) структура данных стандартизирована. Посмотрим на плюсы этого подхода:

Подведем итоги: что в результате?

Замена COM-соединения на обмен через папку позволит вам:

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

← На главную