Как автоматизировать обмен данными по правилам КД 2.0 между БП 3.0 и УНФ без использования КД 3.0

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

Типовые современные конфигурации, такие как 1С:Бухгалтерия предприятия 3.0 и 1С:Управление нашей фирмой, по умолчанию используют механизм синхронизации через универсальный формат (EnterpriseData) на базе Конвертации данных 3.0. Однако часто возникают ситуации, когда уже есть готовые и отлаженные правила на Конвертации данных 2.0, а переписывать их под новый формат трудозатратно. В этой статье мы разберем, как уйти от ручного запуска обработки «Универсальный обмен данными XML» и настроить автоматический обмен, не внося критических изменений в типовую конфигурацию.

Программный вызов обработки «Универсальный обмен данными XML»

Для автоматизации процесса нам необходимо научиться запускать механизм выгрузки программно. Основным инструментом здесь выступает встроенная во все типовые решения обработка УниверсальныйОбменДаннымиXML. Вместо того чтобы открывать ее интерактивно, мы можем создать ее объект в коде, заполнить параметры и выполнить выгрузку. Рассмотрим пример кода, который можно поместить в регламентное задание или обработчик кнопки:


// Создаем объект обработки
ОбъектОБработки = Обработки.УниверсальныйОбменДаннымиXML.Создать();

// Указываем путь к файлу правил (он должен быть доступен серверу 1С)
ОбъектОБработки.ИмяФайлаПравилОбмена = "\\srv\Exchange\Rules_BP_UNF.xml";

// Загружаем правила в память
ОбъектОБработки.ЗагрузитьПравилаОбмена();

// Указываем путь, куда будет выгружен файл данных
ОбъектОБработки.ИмяФайлаОбмена = "\\srv\Exchange\Message_BP_UNF.xml";

// Если мы используем план обмена для регистрации изменений, 
// указываем узел, по которому нужно произвести выгрузку
// Параметр ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1 
// означает, что после успешной выгрузки регистрация будет очищена.
ОбъектОБработки.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1;

// Метод для фильтрации объектов по узлу плана обмена (вспомогательный)
УстановитьУзелОбменаУСтрокДерева(ОбъектОБработки.ТаблицаПравилВыгрузки.Строки, СсылкаНаУзел);

// Запуск выгрузки
ОбъектОБработки.ВыполнитьВыгрузку();

Проанализируем этот код. Важным моментом является то, что при работе на сервере (в регламентном задании) пути к файлам должны быть указаны в формате UNC (например, \\server\share\file.xml), а у пользователя, под которым запущен агент службы 1С, должны быть права на чтение и запись в эти папки.

Регистрация изменений: как понять, что именно выгружать?

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

  1. Использование существующего плана обмена: Даже если типовой план обмена «Синхронизация данных через универсальный формат» настроен на работу с КД 3.0, это не мешает нам использовать его только как «хранилище» измененных ссылок. Мы можем создать в нем свой узел (не включая его в типовые настройки синхронизации) и регистрировать в нем нужные документы. Выгрузку же будем производить своим кодом через КД 2.0.
  2. План обмена в расширении: В современных версиях платформы 8.3 появилась возможность добавлять свои ПланыОбмена непосредственно в расширение. Это идеальный вариант, так как он не затрагивает основную конфигурацию и позволяет настроить автоматическую регистрацию объектов через стандартные механизмы.
  3. Регистрация через Регистр сведений: Если по каким-то причинам создание плана обмена невозможно, мы можем создать в расширении РегистрСведений (например, «ОчередьОбмена»). С помощью Подписки на событие (также в расширении) при записи документов мы будем добавлять ссылку на объект в этот регистр. При выгрузке наша обработка прочитает записи из регистра, выгрузит соответствующие объекты и очистит регистр.

Выбор транспорта: COM-соединение или Файловый обмен

Рассмотрим способы доставки данных из БП в УНФ. Выбор зависит от сетевой инфраструктуры и объема данных.

Файловый обмен через общую папку: Самый простой и надежный способ. Одна база выгружает файл, другая по расписанию его загружает. Проанализируем преимущество: базы полностью независимы друг от друга в момент работы. Если одна база недоступна, обмен просто подождет. Для реализации загрузки в УНФ используем тот же объект УниверсальныйОбменДаннымиXML, но вызываем метод ВыполнитьЗагрузку().

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


ОбъектОБработки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбъектОБработки.РежимОбмена = "Connection"; // Указываем режим прямого подключения
ОбъектОБработки.ВариантПодключенияДляВторойБазы = 0; // 0 - COM, 1 - WS
ОбъектОБработки.ИмяСервераИнформационнойБазы = "ServerName";
ОбъектОБработки.ИмяИнформационнойБазы = "UNF_Base";
ОбъектОБработки.ПользовательИнформационнойБазы = "Admin";
ОбъектОБработки.ПарольИнформационнойБазы = "Password";
// ... загрузка правил и выполнение выгрузки
ОбъектОБработки.ВыполнитьВыгрузку();

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

Использование HTTP-сервисов для мгновенного обмена

Если требуется, чтобы документ попадал из БП в УНФ мгновенно после нажатия кнопки «Провести», можно рассмотреть современный подход с HTTPСервисы. Разберем этот алгоритм по шагам:

  1. В базе УНФ создаем HTTP-сервис с методом POST.
  2. В базе БП при записи документа программно вызываем обработку КД 2.0, но вместо записи в файл выгружаем данные в строку (в память).
  3. Отправляем эту строку через HTTPЗапрос в базу УНФ.
  4. В обработчике HTTP-сервиса в УНФ принимаем строку и передаем ее в метод ВыполнитьЗагрузку() локальной обработки УниверсальныйОбменДаннымиXML.

Этот метод работает быстрее COM-соединения и не требует настройки общих сетевых папок, работая через стандартный веб-порт (80 или 443).

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

Выясним, как заставить этот механизм работать без участия пользователя. Рассмотрим создание Дополнительной обработки, которую можно подключить через раздел «Администрирование» — «Печатные формы, отчеты и обработки».

Создав внешнюю обработку и прописав в ее модуле логику выгрузки в процедуре ВыполнитьКоманду, мы сможем настроить расписание ее запуска прямо в пользовательском интерфейсе 1С. Это позволит:

Резюмируем: Для автоматизации обмена на КД 2.0 в БП 3.0 лучше всего использовать внешнюю обработку, запускаемую по расписанию, которая программно вызывает УниверсальныйОбменДаннымиXML, используя либо существующий план обмена, либо регистрацию через расширение.

← На главную