Типовые современные конфигурации, такие как 1С:Бухгалтерия предприятия 3.0 и 1С:Управление нашей фирмой, по умолчанию используют механизм синхронизации через универсальный формат (EnterpriseData) на базе Конвертации данных 3.0. Однако часто возникают ситуации, когда уже есть готовые и отлаженные правила на Конвертации данных 2.0, а переписывать их под новый формат трудозатратно. В этой статье мы разберем, как уйти от ручного запуска обработки «Универсальный обмен данными XML» и настроить автоматический обмен, не внося критических изменений в типовую конфигурацию.
Для автоматизации процесса нам необходимо научиться запускать механизм выгрузки программно. Основным инструментом здесь выступает встроенная во все типовые решения обработка УниверсальныйОбменДаннымиXML. Вместо того чтобы открывать ее интерактивно, мы можем создать ее объект в коде, заполнить параметры и выполнить выгрузку. Рассмотрим пример кода, который можно поместить в регламентное задание или обработчик кнопки:
// Создаем объект обработки
ОбъектОБработки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
// Указываем путь к файлу правил (он должен быть доступен серверу 1С)
ОбъектОБработки.ИмяФайлаПравилОбмена = "\\srv\Exchange\Rules_BP_UNF.xml";
// Загружаем правила в память
ОбъектОБработки.ЗагрузитьПравилаОбмена();
// Указываем путь, куда будет выгружен файл данных
ОбъектОБработки.ИмяФайлаОбмена = "\\srv\Exchange\Message_BP_UNF.xml";
// Если мы используем план обмена для регистрации изменений,
// указываем узел, по которому нужно произвести выгрузку
// Параметр ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1
// означает, что после успешной выгрузки регистрация будет очищена.
ОбъектОБработки.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1;
// Метод для фильтрации объектов по узлу плана обмена (вспомогательный)
УстановитьУзелОбменаУСтрокДерева(ОбъектОБработки.ТаблицаПравилВыгрузки.Строки, СсылкаНаУзел);
// Запуск выгрузки
ОбъектОБработки.ВыполнитьВыгрузку();
Проанализируем этот код. Важным моментом является то, что при работе на сервере (в регламентном задании) пути к файлам должны быть указаны в формате UNC (например, \\server\share\file.xml), а у пользователя, под которым запущен агент службы 1С, должны быть права на чтение и запись в эти папки.
Чтобы не выгружать всю базу целиком каждый раз, нам нужен механизм регистрации изменений. Рассмотрим несколько вариантов решения этой задачи, если стандартный план обмена использовать не получается.
ПланыОбмена непосредственно в расширение. Это идеальный вариант, так как он не затрагивает основную конфигурацию и позволяет настроить автоматическую регистрацию объектов через стандартные механизмы.РегистрСведений (например, «ОчередьОбмена»). С помощью Подписки на событие (также в расширении) при записи документов мы будем добавлять ссылку на объект в этот регистр. При выгрузке наша обработка прочитает записи из регистра, выгрузит соответствующие объекты и очистит регистр.Рассмотрим способы доставки данных из БП в УНФ. Выбор зависит от сетевой инфраструктуры и объема данных.
Файловый обмен через общую папку: Самый простой и надежный способ. Одна база выгружает файл, другая по расписанию его загружает. Проанализируем преимущество: базы полностью независимы друг от друга в момент работы. Если одна база недоступна, обмен просто подождет. Для реализации загрузки в УНФ используем тот же объект УниверсальныйОбменДаннымиXML, но вызываем метод ВыполнитьЗагрузку().
COM-соединение: Позволяет выгружать данные напрямую в приемник без промежуточных файлов. Рассмотрим код настройки такого подключения:
ОбъектОБработки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбъектОБработки.РежимОбмена = "Connection"; // Указываем режим прямого подключения
ОбъектОБработки.ВариантПодключенияДляВторойБазы = 0; // 0 - COM, 1 - WS
ОбъектОБработки.ИмяСервераИнформационнойБазы = "ServerName";
ОбъектОБработки.ИмяИнформационнойБазы = "UNF_Base";
ОбъектОБработки.ПользовательИнформационнойБазы = "Admin";
ОбъектОБработки.ПарольИнформационнойБазы = "Password";
// ... загрузка правил и выполнение выгрузки
ОбъектОБработки.ВыполнитьВыгрузку();
Важно помнить, что COM-соединение требует наличия установленных и идентичных версий платформы (и разрядности) на сервере и клиенте, что часто вызывает сложности при обновлениях. Рекомендуется использовать файловый обмен или HTTP-сервисы для большей стабильности.
Если требуется, чтобы документ попадал из БП в УНФ мгновенно после нажатия кнопки «Провести», можно рассмотреть современный подход с HTTPСервисы. Разберем этот алгоритм по шагам:
POST.HTTPЗапрос в базу УНФ.ВыполнитьЗагрузку() локальной обработки УниверсальныйОбменДаннымиXML.Этот метод работает быстрее COM-соединения и не требует настройки общих сетевых папок, работая через стандартный веб-порт (80 или 443).
Выясним, как заставить этот механизм работать без участия пользователя. Рассмотрим создание Дополнительной обработки, которую можно подключить через раздел «Администрирование» — «Печатные формы, отчеты и обработки».
Создав внешнюю обработку и прописав в ее модуле логику выгрузки в процедуре ВыполнитьКоманду, мы сможем настроить расписание ее запуска прямо в пользовательском интерфейсе 1С. Это позволит:
Резюмируем: Для автоматизации обмена на КД 2.0 в БП 3.0 лучше всего использовать внешнюю обработку, запускаемую по расписанию, которая программно вызывает УниверсальныйОбменДаннымиXML, используя либо существующий план обмена, либо регистрацию через расширение.