Как настроить синхронизацию данных в 1С:ERP 2.4 через планы обмена?

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

При переходе с устаревших конфигураций 1С на современные системы, такие как 1С:ERP Управление предприятием 2.4, многие разработчики сталкиваются с тем, что привычные механизмы обмена данными "спрятаны" глубоко внутри Библиотеки стандартных подсистем (БСП). В старых редакциях достаточно было создать план обмена в дереве метаданных, прописать правила в Конвертации данных 2.0 и запустить обмен. В ERP процесс интеграции нового обмена требует соблюдения определенных стандартов БСП. Рассмотрим подробно, как правильно организовать синхронизацию между двумя базами ERP или ERP и другими конфигурациями.

Архитектура обмена данными в современных конфигурациях

Прежде всего, проанализируем ситуацию: почему в ERP нельзя просто создать план обмена и сразу увидеть его в пользовательском интерфейсе? В современных конфигурациях подсистема "Обмен данными" берет на себя управление всеми процессами: от настройки транспорта (FTP, COM, почта) до регистрации изменений и контроля коллизий. Чтобы ваш план обмена заработал, он должен быть интегрирован в эту подсистему.

Выясним причину, по которой стандартный подход "через правила" кажется сложным. В ERP 2.4 по умолчанию предлагается использовать Универсальный формат (EnterpriseData). Однако, если задача стоит в синхронизации идентичных или очень похожих структур (например, две базы ERP), разработчики часто выбирают проверенную Конвертацию данных 2.0 (КД 2.0) или даже прямую сериализацию объектов.

Вариант 1: Интеграция собственного плана обмена в подсистему синхронизации

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

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

После внесения изменений в конфигураторе, в режиме "1С:Предприятие" необходимо перейти в раздел Администрирование — Настройки синхронизации данных. Установим флаг "Синхронизация данных" и укажем префикс информационной базы. Далее, через помощник создания новой синхронизации, можно будет выбрать ваш план обмена или настроить обмен через "Универсальный формат".

Вариант 2: Использование правил Конвертации данных 2.0

Разберем ситуацию, когда нам нужно использовать классические правила XML. Несмотря на развитие КД 3.0, ERP поддерживает работу с правилами, созданными в КД 2.0. Для этого при настройке обмена нужно выбрать пункт "Обмен по правилам обмена".

Проанализируем алгоритм действий:

Важно помнить, что в ERP 2.4 механизмы регистрации объектов работают через подсистему "Регистрация объектов". Это позволяет гибко настраивать условия, при которых объект должен попасть в очередь на выгрузку, не прибегая к сложному кодингу внутри модулей.

Вариант 3: Программный перенос данных через JSON (Сериализация)

Иногда создание полноценного плана обмена избыточно — например, когда нужно разово или периодически переносить специфические документы с движениями между практически идентичными базами. В этом случае эффективно использовать СериализаторXDTO и формат JSON.

Рассмотрим пример кода для выгрузки документа и его движений в файл:


&НаСервере
Функция ВыгрузитьДокументВJSON(ДокументСсылка, ПутьКФайлу)
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ОткрытьФайл(ПутьКФайлу, Новый ПараметрыЗаписиJSON(, Символы.Таб));
    
    // Сериализуем объект целиком
    СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ДокументСсылка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
    
    ЗаписьJSON.Закрыть();
    Возврат Истина;
    
КонецФункции

Для переноса движений по регистрам проанализируем более сложный подход, когда мы собираем наборы записей в соответствие и сохраняем их:


&НаСервере
Функция ДвиженияДокументаВТекстJSON(ДокОбъект)
    
    НаборыЗаписей = Новый Соответствие();
    Для Каждого Движение из ДокОбъект.Движения Цикл
        Движение.Прочитать();
        Если Движение.Количество() > 0 Тогда
            НаборыЗаписей.Вставить(Движение.Метаданные().Имя, Движение.Выгрузить());
        КонецЕсли;
    КонецЦикла;

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
    СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, НаборыЗаписей, НазначениеТипаXML.Явное);
    
    Возврат ЗаписьJSON.Закрыть();
    
КонецФункции

При загрузке в приемнике важно установить свойство ОбменДанными.Загрузка = Истина. Это позволит обойти прикладные проверки модуля объекта и записать данные "как есть". Посмотрим на пример загрузки:


// Чтение объекта из JSON
ОбъектИзФайла = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);
ОбъектИзФайла.ОбменДанными.Загрузка = Истина;
ОбъектИзФайла.Записать();

// Восстановление движений
Для Каждого НаборДвижений Из НаборыДвижений Цикл
    // Создаем набор записей по имени регистра из ключа соответствия
    НаборЗаписей = РегистрыНакопления[НаборДвижений.Ключ].СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Значение = ОбъектИзФайла.Ссылка;
    
    Для Каждого СтрокаТЗ из НаборДвижений.Значение Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрокаТЗ);
    КонецЦикла;
    
    НаборЗаписей.ОбменДанными.Загрузка = Истина;
    НаборЗаписей.Записать();
КонецЦикла;

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

Если ваша задача — синхронизация Плана счетов между ERP, Бухгалтерией предприятия (БП) и ЗУП, будьте осторожны. Прямая перекачка через КД 2.0 может привести к рассогласованию субконто, так как типы субконто в этих конфигурациях различаются. Проанализируем рекомендации экспертов:

Отладка и мониторинг

Посмотрим, как контролировать процесс обмена. В ERP предусмотрен мощный инструмент "Журнал регистрации", но для обмена данными лучше использовать специализированную форму "Результаты синхронизации данных". Там отображаются:

  1. Конфликты: Когда один и тот же объект был изменен в обеих базах. Можно выбрать, какую версию оставить.
  2. Непринятые данные: Объекты, которые не загрузились из-за нарушения логики (например, не заполнено обязательное поле, которого нет в источнике).
  3. Статистика: Сколько объектов выгружено, загружено и сколько осталось в очереди.

Для детальной отладки правил КД 2.0 используйте внешнюю обработку РегистрацияИзмененийДляОбменаДанными. Она позволяет вручную регистрировать объекты на узлах, просматривать очередь и имитировать выгрузку в файл, что существенно ускоряет поиск ошибок в правилах конвертации.

Таким образом, работа с обменами в 1С:ERP 2.4 требует понимания механизмов БСП. Выбирайте EnterpriseData для стандартных интеграций и КД 2.0 с ручной регистрацией плана обмена в определяемых типах для сложных кастомных задач. Использование прямого программного переноса через сериализацию допустимо только для сервисных задач или разовых миграций данных.

← На главную