Переход на технологию обмена через универсальный формат (EnterpriseData) и использование «Конвертации данных 3.0» (КД 3.0) часто вызывает вопросы у разработчиков, привыкших к классической КД 2.0. Основные сложности возникают на этапе сопряжения версий формата и «легализации» программного кода правил внутри конфигурации. В этой статье мы подробно разберем, как преодолеть эти препятствия, внедрим кастомный план обмена и выясним, что делать с ошибками нехватки памяти при настройке синхронизации.
Рассмотрим ситуацию, когда в одной базе (например, Управление торговлей 11.2) доступен пакет EnterpriseData_1_3_4, а в другой (Бухгалтерия предприятия 3.0) — EnterpriseData_1_3_20. На первый взгляд кажется, что обмен невозможен без приведения конфигураций к единому знаменателю. Однако технология EnterpriseData спроектирована с учетом обратной совместимости.
Разберем, как системы взаимодействуют в этом случае. При установке соединения информационные базы обмениваются списком поддерживаемых версий. Синхронизация будет происходить по наивысшей версии формата, которую поддерживают обе конфигурации. Если одна база умеет работать только с 1.3, а вторая с 1.3–1.6, то обмен автоматически «спустится» на версию 1.3.
Проанализируем действия в КД 3.0:
УТ загрузим в конфигурацию КД 3.0 XDTO-пакет именно той версии, которая является целевой для обмена (например, 1.3).Когда правила (модуль менеджера обмена) получены из КД 3.0, их нужно внедрить в конфигурацию. Просто скопировать код в МенеджерОбменаЧерезУниверсальныйФормат недостаточно, если мы хотим создать изолированный, не зависящий от типовых обновлений обмен. Выясним, как правильно зарегистрировать свой план обмена, используя механизмы БСП.
Рассмотрим пошаговый алгоритм действий:
СинхронизацияДанныхЧерезУниверсальныйОбмен, и назовем его по-своему (например, _МояСинхронизацияДанных).МодулеМенеджера и МодулеОбъекта нового плана обмена необходимо заменить все вхождения имени старого плана обмена на _МояСинхронизацияДанных.ОбменДаннымиПереопределяемый. В процедуре ПолучитьПланыОбмена добавим строку:
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена._МояСинхронизацияДанных);
КонецПроцедуры
_МенеджерОбменаСБухгалтерией). Установим свойства: Сервер, Внешнее соединение, Вызов сервера. В этот модуль вставим код, сгенерированный в Конвертации данных 3.0.МодулеМенеджера нашего нового плана обмена _МояСинхронизацияДанных:
// В процедуре ПриПолученииНастроек указываем соответствие версий
Процедура ПриПолученииНастроек(Настройки) Экспорт
Настройки.ВерсииФормата.Вставить("1.3", "_МенеджерОбменаСБухгалтерией");
КонецПроцедуры
Таким образом, мы создали независимую ветку обмена, которая не затирается при обновлении типовых правил 1С, но при этом использует всю мощь стандартной библиотеки БСП.
Часто при попытке изменить дату начала выгрузки или выполнить сопряжение данных в УТ 11.2 возникает ошибка: «Недостаточно свободной памяти для выполнения операции». Проанализируем ситуацию: это происходит из-за того, что 32-битный клиент 1С (особенно в файловом режиме или при слабом сервере) не может выделить адресное пространство для обработки огромной таблицы регистрации изменений.
Для решения этой проблемы выполним следующие действия:
Регистрация изменений для обмена.1cv8.exe поможет обойти лимит в 2-4 ГБ памяти.В отличие от КД 2.0, где логика была скрыта в XML-файле правил и требовала выгрузки в модуль для отладки, в КД 3.0 всё прозрачно. Поскольку все правила — это обычный код на языке 1С в общем модуле, мы можем:
ПКО_ПередВыгрузкой_... нашего модуля.XDTODataObject.Это делает КД 3.0 гораздо более удобным инструментом для сложных внедрений, несмотря на более высокий порог вхождения и необходимость понимания структуры EnterpriseData.