При разработке обмена данными между конфигурациями 1С часто возникает ситуация, когда правила, созданные в Конвертации данных 2.1 (КД 2.1), отлично работают в ручном режиме через обработку УниверсальныйОбменДаннымиXML, но вызывают сложности при попытке автоматизировать процесс. Особенно это актуально для 1С:Управление нашей фирмой (УНФ), где пользователи могут работать на разных компьютерах, а обмен должен выполняться стабильно по расписанию на сервере без необходимости указывать путь к файлу правил на каждом рабочем месте.
В данной статье мы подробно разберем, как интегрировать готовые правила обмена непосредственно в конфигурацию или использовать штатные механизмы БСП, чтобы сделать обмен «бесшовным» и автоматическим. В дополнение к настройке обмена полезно автоматически сравнить бухгалтерские и налоговые проводки для контроля корректности данных в обеих базах.
Поскольку 1С:УНФ построена на базе Библиотеки стандартных подсистем (БСП), нам доступен мощный функционал синхронизации данных. Рассморим, как загрузить внешние правила так, чтобы система хранила их в базе данных, а не в отдельном XML-файле на диске. Для типовых задач перехода из других конфигураций предусмотрен раздел с решениями для переноса данных в 1С:УНФ.
Проанализируем работу с регистром сведений ПравилаДляОбменаДанными. Этот регистр предназначен для хранения правил конвертации и правил регистрации. Чтобы воспользоваться этим методом, выполним следующие действия:
Важный момент: если вы создали полностью уникальный обмен, которого нет в списке типовых, вам все равно придется создать объект ПланОбмена в конфигураторе, чтобы БСП могла привязать к нему правила в этом регистре.
Если нам необходимо жестко «зашить» правила в систему, чтобы они обновлялись только вместе с конфигурацией, воспользуемся методом хранения в макетах. Рассмотрим этот процесс по шагам:
ПланОбмена. Назовем его, например, ОбменУНФ_БухгалтерияCustom.ПравилаКонвертации.Теперь правила находятся внутри базы. Чтобы программно обратиться к ним из регламентного задания, мы можем использовать следующий подход в коде:
Функция ПолучитьПравилаИзМакета() Экспорт
Макет = ПланыОбмена.ОбменУНФ_БухгалтерияCustom.ПолучитьМакет("ПравилаКонвертации");
Возврат Макет.ПолучитьТекст();
КонецФункции
Выясним, как заставить обмен работать автоматически на стороне сервера. Для этого нам понадобится создать РегламентноеЗадание. Основная проблема автора темы заключалась в том, что файлы правил не были доступны на всех компьютерах. Интеграция в макет или регистр решает эту проблему, так как сервер берет данные прямо из информационной базы.
Рассмотрим пример программного вызова выгрузки данных с использованием встроенной обработки УниверсальныйОбменДаннымиXML:
Процедура ВыполнитьОбменПоРасписанию() Экспорт
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
// Получаем правила из макета, который мы создали ранее
ТекстПравил = ПланыОбмена.ОбменУНФ_БухгалтерияCustom.ПолучитьМакет("ПравилаКонвертации").ПолучитьТекст();
// Записываем во временный файл, так как обработка работает с файлами
ИмяФайлаПравил = ПолучитьИмяВременногоФайла("xml");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(ТекстПравил);
ТекстовыйДокумент.Записать(ИмяФайлаПравил);
// Настраиваем параметры обработки
ОбработкаОбмена.ИмяФайлаПравилОбмена = ИмяФайлаПравил;
ОбработкаОбмена.ИмяФайлаВыгрузки = "C:\Exchange\data_out.xml"; // Путь, доступный серверу 1С
ОбработкаОбмена.РежимОбмена = "Выгрузка";
// Загружаем правила в обработку
ОбработкаОбмена.ЗагрузитьПравилаОбмена();
// Выполняем выгрузку
ОбработкаОбмена.ВыполнитьВыгрузку();
// Удаляем временный файл
УдалитьФайлы(ИмяФайлаПравил);
КонецПроцедуры
Обратите внимание: При работе в клиент-серверном варианте путь к файлу выгрузки должен быть доступен пользователю, под которым запущен агент службы 1С:Предприятие.
Для того чтобы система понимала, какие именно объекты нужно выгружать (только измененные), необходимо использовать Правила регистрации данных. В КД 2.1 это настраивается на отдельной вкладке.
Разберем, как это работает вместе с планом обмена:
Если используется самописный механизм, то в коде перед выгрузкой необходимо проанализировать таблицу регистрации изменений плана обмена:
ПланыОбмена.ВыбратьИзменения(УзелСсылка, НомерСообщения);
В начале обсуждения упоминалась проблема с добавлением описания конфигурации источника. Напомним, что для корректной работы в КД 2.1 нам всегда нужно актуальное описание метаданных. Посмотрим, как правильно его получить:
MD82.epf.Config.xml.Проанализировав ситуацию, мы видим, что наиболее современным и правильным подходом для 1С:УНФ является использование подсистемы синхронизации БСП. Она позволяет хранить правила внутри информационной базы, автоматически управляет регистрацией изменений и предоставляет удобный интерфейс для настройки расписания регламентных заданий. Если же требуется максимально индивидуальный подход, макеты в плане обмена в сочетании с программным вызовом УниверсальныйОбменДаннымиXML решают задачу централизованного хранения правил на всех рабочих местах.