При переходе с устаревших конфигураций 1С на современные системы, такие как 1С:ERP Управление предприятием 2.4, многие разработчики сталкиваются с тем, что привычные механизмы обмена данными "спрятаны" глубоко внутри Библиотеки стандартных подсистем (БСП). В старых редакциях достаточно было создать план обмена в дереве метаданных, прописать правила в Конвертации данных 2.0 и запустить обмен. В ERP процесс интеграции нового обмена требует соблюдения определенных стандартов БСП. Рассмотрим подробно, как правильно организовать синхронизацию между двумя базами ERP или ERP и другими конфигурациями.
Прежде всего, проанализируем ситуацию: почему в ERP нельзя просто создать план обмена и сразу увидеть его в пользовательском интерфейсе? В современных конфигурациях подсистема "Обмен данными" берет на себя управление всеми процессами: от настройки транспорта (FTP, COM, почта) до регистрации изменений и контроля коллизий. Чтобы ваш план обмена заработал, он должен быть интегрирован в эту подсистему.
Выясним причину, по которой стандартный подход "через правила" кажется сложным. В ERP 2.4 по умолчанию предлагается использовать Универсальный формат (EnterpriseData). Однако, если задача стоит в синхронизации идентичных или очень похожих структур (например, две базы ERP), разработчики часто выбирают проверенную Конвертацию данных 2.0 (КД 2.0) или даже прямую сериализацию объектов.
Рассмотрим по шагам процесс добавления нового обмена, если вы решили идти по пути создания собственного плана обмена в конфигураторе:
ПланОбменаПоддерживающийДанныеОбъектов. Это позволит БСП "увидеть" ваш план в общих списках.После внесения изменений в конфигураторе, в режиме "1С:Предприятие" необходимо перейти в раздел Администрирование — Настройки синхронизации данных. Установим флаг "Синхронизация данных" и укажем префикс информационной базы. Далее, через помощник создания новой синхронизации, можно будет выбрать ваш план обмена или настроить обмен через "Универсальный формат".
Разберем ситуацию, когда нам нужно использовать классические правила XML. Несмотря на развитие КД 3.0, ERP поддерживает работу с правилами, созданными в КД 2.0. Для этого при настройке обмена нужно выбрать пункт "Обмен по правилам обмена".
Проанализируем алгоритм действий:
ExchangeRules.xml в базе "Конвертация данных 2.0".RegistrationRules.xml.Важно помнить, что в ERP 2.4 механизмы регистрации объектов работают через подсистему "Регистрация объектов". Это позволяет гибко настраивать условия, при которых объект должен попасть в очередь на выгрузку, не прибегая к сложному кодингу внутри модулей.
Иногда создание полноценного плана обмена избыточно — например, когда нужно разово или периодически переносить специфические документы с движениями между практически идентичными базами. В этом случае эффективно использовать Сериализатор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 предусмотрен мощный инструмент "Журнал регистрации", но для обмена данными лучше использовать специализированную форму "Результаты синхронизации данных". Там отображаются:
Для детальной отладки правил КД 2.0 используйте внешнюю обработку РегистрацияИзмененийДляОбменаДанными. Она позволяет вручную регистрировать объекты на узлах, просматривать очередь и имитировать выгрузку в файл, что существенно ускоряет поиск ошибок в правилах конвертации.
Таким образом, работа с обменами в 1С:ERP 2.4 требует понимания механизмов БСП. Выбирайте EnterpriseData для стандартных интеграций и КД 2.0 с ручной регистрацией плана обмена в определяемых типах для сложных кастомных задач. Использование прямого программного переноса через сериализацию допустимо только для сервисных задач или разовых миграций данных.