Как настроить автоматический обмен данными между ЗУП 3.1 и УПП 1.3 с помощью обработки УниверсальныйОбменДаннымиXML

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

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

Проблема использования модулей форм в серверных заданиях

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

Для решения этой проблемы мы должны работать напрямую с объектом обработки, создавая его программно в серверном модуле или в модуле менеджера внешней обработки. Выясним причину, почему это важно: только программное создание объекта позволяет передать все необходимые параметры (пути к файлам, узлы, правила) напрямую в свойства обработки.

Программная реализация выгрузки данных

Рассмотрим пример кода, который позволяет инициализировать обработку УниверсальныйОбменДаннымиXML, загрузить в нее правила и выполнить выгрузку по определенному узлу плана обмена. Этот код идеально подходит для размещения в процедуре, вызываемой регламентным заданием.


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

// Устанавливаем режим работы
УОД.РежимОбмена = "Выгрузка";

// Указываем пути к файлам. 
// ВАЖНО: используйте только сетевые UNC-пути, доступные серверу 1С
УОД.ИмяФайлаОбмена = "\\SERVER-STORAGE\Exchange\Export_ZUP_to_UPP.xml";
УОД.ИмяФайлаПравилОбмена = "\\SERVER-STORAGE\Exchange\Rules_ZUP_UPP.xml";

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

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

// Определяем узел плана обмена, по которому будет идти выгрузка
// Например, получаем его из заранее подготовленной настройки
УзелОбмена = ПланыОбмена.УдалитьОбменЗарплатаУправлениеПерсоналом25УправлениеПроизводственнымПредприятием13.НайтиПоКоду("УПП");

// Проходим по таблице правил выгрузки и привязываем наш узел
// Это необходимо, чтобы обработка понимала, по каким зарегистрированным изменениям работать
ТаблицаПравил = УОД.ТаблицаПравилВыгрузки;
Для каждого СтрокаРаздела Из ТаблицаПравил.Строки Цикл
    Для каждого СтрокаПравила Из СтрокаРаздела.Строки Цикл
        СтрокаПравила.СсылкаНаУзелОбмена = УзелОбмена;
    КонецЦикла; 
КонецЦикла;

// Отключаем информационные сообщения для фонового режима
УОД.НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина;

// Запускаем процесс
Попытка
    УОД.ВыполнитьВыгрузку();
    ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Информация, , , "Выгрузка успешно завершена");
Исключение
    ТекстОшибки = ОписаниеОшибки();
    ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка выгрузки: " + ТекстОшибки);
КонецПопытки;

Особенности загрузки данных и работа со счетчиками сообщений

Проанализируем ситуацию, когда необходимо не только выгрузить, но и загрузить данные. Основная сложность при использовании УниверсальныйОбменДаннымиXML для загрузки заключается в том, что она является «низкоуровневым» инструментом. Она загружает объекты, но автоматически не обновляет НомерПринятогоСообщения в узле плана обмена.

Разберем по шагам, как правильно организовать загрузку в фоновом задании:

  1. Создание объекта: Аналогично выгрузке, создаем объект обработки и устанавливаем РежимОбмена = "Загрузка".
  2. Отключение диалогов: Обязательно устанавливаем флаг НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина.
  3. Чтение заголовка файла: Чтобы обновить номер сообщения в плане обмена, нам нужно сначала прочитать его из XML-файла. Это делается стандартным объектом ЧтениеXML перед тем, как отдать файл обработке.
  4. Выполнение загрузки: Вызываем метод ВыполнитьЗагрузку().
  5. Фиксация номера сообщения: Если загрузка прошла успешно, программно находим узел плана обмена и устанавливаем ему НомерПринятого, полученный на шаге 3.

Посмотрим на пример реализации загрузки:


ОбработкаЗагрузки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаЗагрузки.РежимОбмена = "Загрузка";
ОбработкаЗагрузки.ИмяФайлаОбмена = "\\SERVER-STORAGE\Exchange\Export_UPP_to_ZUP.xml";
ОбработкаЗагрузки.НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина;

Попытка
    ОбработкаЗагрузки.ВыполнитьЗагрузку();
    // Дополнительный код по обновлению номера сообщения в узле плана обмена
    // должен располагаться здесь
Исключение
    // Обработка критических ошибок загрузки
КонецПопытки;

Критически важные настройки для серверного обмена

Для стабильной работы «на автомате» необходимо учитывать специфику работы серверного кластера 1С:

Права доступа. Фоновое задание выполняется от имени пользователя операционной системы, под которым запущен сервер 1С (обычно это USR1CV8). Убедитесь, что у этой учетной записи есть права на чтение и запись в папку с файлами обмена. Помните, что сервер 1С «не видит» ваши личные сетевые диски (например, диск Z:), поэтому всегда используйте прямые пути формата \\ИмяСервера\Папка\Файл.xml.

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

Параметры правил обмена. Если ваши правила, созданные в «Конвертации данных», используют параметры (например, ОрганизацияДляФильтрации или ДатаНачала), их необходимо заполнить программно перед вызовом ВыполнитьВыгрузку(). Параметры хранятся в свойстве Параметры объекта обработки, которое представляет собой структуру или таблицу значений.

Альтернативный подход: Использование БСП

Рассмотрим совет опытных разработчиков: если вы работаете в современных версиях ЗУП 3.1, стоит рассмотреть переход на стандартный механизм Синхронизации данных, построенный на базе Библиотеки Стандартных Подсистем (БСП). Стандартный механизм «из коробки» умеет:

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

← На главную