Конвертация данных 2. Структура в ХранилищеЗначения.

1. naa1c 82 27.04.20 10:18 Сейчас в теме
Ситуация:
КД 2.
У объекта метаданных есть реквизит типа ХранилищеЗначения.
В ХЗ лежит структура.
В значениях структуры - ссылки на элементы разных справочников.
Источник и приемник - конфигурации одинаковые.

Задача:
Передать реквизит из источника в приемник таким образом, чтобы
- в приёмнике в реквизите была ХЗ со структурой с теми же свойствами
- ссылки в значениях свойств были сконвертированы по ПКО для соответствующих справочников

Как такое сделать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Drivingblind 236 30.04.20 18:11 Сейчас в теме
Первый вариант, можно попробовать следующее: сериализовать данные ссылочных типов с помощью сериализатора XDTO, выгрузить всё в параметр, а при загрузке уже описывать логику поиска, замены для каждого поля и элемента из параметра. Такое будет работать, если полей немного, но если их более 10, то будет очень проблематично.

Второй вариант (более подходит для логики КД):
Создать ПКО с типом данных ХранилищеЗначений, с его помощью выгружать данные по команде ВыгрузитьПоПравилу()
Получать все его поля из входящих данных и выгружать в параметр, указывая ИмяПКО, по которому они будут конвертироваться, а в событиях при загрузке прописывать логику загрузки в какой-либо объект. См. рисунок.
Прикрепленные файлы:
3. Drivingblind 236 30.04.20 18:18 Сейчас в теме
Нашел в сети ещё такой вариант:
Используется ПКО (правило конвертации объекта) самого справочника и два обработчика событий: "ПередВыгрузкой" и "ПослеЗагрузки". В обработчике "ПередВыгрузкой" в параметры записывается структура с использованием функции "ЗначениеВСтрокуВнутр", предварительно просматриваются все значения в структуре, и если какое то из них имеет сложный тип (не строка, или число и т.д.), то вызывается функция "ВыгрузитьПоПравилу", куда и передается это значение.
В обработчике "ПослеЗагрузки" из параметра достается структура путем вызова "ЗначениеИзСтрокиВнутр", и записывается в реквизит, используся создание нового хранилища значений.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот