При настройке типовых обменов данными на базе «Конвертации данных 2.0» (КД 2.0) и Библиотеки стандартных подсистем (БСП) разработчики часто сталкиваются с вопросом: зачем загружать файл правил конвертации не только в базу-источник, но и в базу-приемник? Рассмотрим архитектурные особенности механизма обмена, соображения безопасности и принципы исполнения программного кода обработчиков событий.
Проанализируем, как устроен типовой процесс передачи данных в формате КД 2.0:
ПередВыгрузкой, ПриВыгрузке, ПослеВыгрузки). Затем данные сериализуются в XML-сообщение обмена.ПередЗагрузкой, ПриЗагрузке, ПослеЗагрузки) берется не из полученного транспортного файла, а из набора правил, предварительно загруженного непосредственно в базу-приемник.Таким образом, правила направления «Источник-Приемник» являются единым логическим комплектом, но исполняются раздельно: выгрузка работает по правилам источника, а логика создания, заполнения и проведения объектов в целевой базе управляется правилами, хранящимися в самом приемнике.
Главная причина, по которой конфигурация-приемник игнорирует исполняемый код из входящего XML-пакета, — это информационная безопасность. В ранних версиях подсистем обмена существовала возможность передачи правил внутри транспортного контейнера. Это создавало уязвимость: при передаче файла обмена через незащищенные каналы (FTP, общие сетевые папки, внешнюю почту) злоумышленник мог внедрить произвольный код на встроенном языке 1С в текст обработчика загрузки, который затем выполнился бы на сервере целевой базы.
В современных конфигурациях БСП обработка входящих данных выполняется с соблюдением жестких ограничений:
ПравилаДляОбменаДанными).БезопасныйРежим = Истина, что блокирует небезопасные системные вызовы, работу с внешними компонентами и прямой доступ к файловой системе сервера без явных разрешений.Посмотрим на наглядный эксперимент, подтверждающий этот механизм. Предположим, для правила конвертации объекта (ПКО) в обработчик ПослеЗагрузки мы помещаем управление переменной Отказ.
Рассмотрим два сценария:
// Обработчик "После загрузки" в Источнике
Отказ = Истина;
// Обработчик "После загрузки" в Приемнике
Отказ = Ложь;
Отказ = Ложь, а в правилах приемника задаем Отказ = Истина.
Разберем, как правила конвертации хранятся в типовых конфигурациях и на что следует обратить внимание при их обновлении:
ПравилаДляОбменаДанными.Выполнить(), точки останова для событий загрузки сработают исключительно в сеансе базы-приемника при подключении отладчика к серверному процессу фонового задания обмена.В более современной концепции обмена через универсальный формат EnterpriseData (КД 3.0) концепция передачи файлов правил отсутствует вовсе. Вся логика сопоставления вынесена в специализированные общие модули каждой базы (модули менеджеров обмена). База-источник только сериализует свои данные в формат XDTO, а база-приемник самостоятельно читает XDTO-пакет и трансформирует его в объекты своих метаданных по внутренним строго зафиксированным алгоритмам.