Конвертация данных из хранилища значения

1. DimaP 64 28.03.14 12:33 Сейчас в теме
Добрый день, коллеги!
Есть КД.
Есть две базы данных с похожей структурой, по крайней мере мне нужно перенести абсолютно одинаковые объекты, но в каждой базе они имеют свои УИДы, названия конфигураций не важны.

Есть справочник,в этом справочнике есть реквизит с типом ХранилищеЗначения, в нём содержится другой тип - Отбор; конечно, в этом отборе есть другие ссылочные типы (Валюты, Организации и тп). Таким образом возникает проблема с переносом этого реквизита.
Я понимаю, что нужно сделать выгрузку через виртуальную таблицу значений, но как это реализовать - хз.
картинка

sggolovnya; aleshka_777; +2 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. adva 45 28.03.14 13:45 Сейчас в теме
Скорее всего как-то так:
1) Реквизит хранилища знаения не передавать;
2) отбор из хранилища значения преобразовать в структуру где объекты будут заменены примитивынми реквизитами поиска (строка, булево и т.п.);
3) из структуры получить внутреннюю строку (ЗначениеВСтрокуВнутр) и передать данную строку в реквизит-параметр приемника
4) используя, ВыгрузитьПоПравилу () выгрузить значения ссылок;
5) при загрузке выполнить преобразование параметра-строки (осуществить поиск и т.д), и заполнить хранилище.

Я лично делал примерно по такому сценарию. Вроде проблем не было
3. DimaP 64 28.03.14 14:06 Сейчас в теме
(2) adva,
1. Я его не передаю - смысла нет.
2. Проблема заключается в том, что отбор содержит различные вариации: равно, в иерархии, в списке - и вот последнее вызывает проблему.
3. Можешь подробнее рассказать про эту операцию?
4. -
5. Тоже, плиз, подробнее, если можно, то пример какой-нибудь.
Спасибо.
4. adva 45 28.03.14 14:22 Сейчас в теме
Примитивынй пример (возможно реквизиты поиска надо усложнить, названия объектов 1с по памяти, может ошибусь где):

Дано:
Отбор.Использование = Истина;
Отбор.ВидСравнения = ... Равно;
Отбор.ЛевоеЗначение = СсылкаНаСправочник1;

В правилах для какого нибудь реквизита (не важно для какого) указываешь флаг "Передавать в параметр" (может быть можно и без указания реквизита источника, я уже давно делал, не помню). И в обработчике этого ПКС указываешь примерно такой код:

Структура = Новый Структура;
Структура.Вставить("Использование", Истина);
Если Отбор.ВидСравнения = ... Равно Тогда
Структура.Вставить("ВидСравнения", "Равно"); // строка
ИначеЕсли ...

КонецЕсли;

СтруктураСсылки = Новый Структура ("ТипОбъекта, ВидОбъекта, РеквизитыПоиска");
СтруктураСсылки.ТипОбъекта = "Справочник" // (в зависиомости от объекта)
СтруктураСсылки.ВидОбъета = "Справочник1" // (имя метаданных)
СтруктураСсылки.РеквизитыПоиска = СсылкаНаСправочник1.Код

ВыгрузитьПоПравилу (СсылкаНаСправочник1, , , , "ИмяПКОдляСправочника1"); // это наверное надо сделать еще раньше, тоже не очень помню)

Струткура.Вставить("ЛевоеЗначение", СтруктураСсылки);

СтрокаДляПередачи = ЗначениеВСТрокуВнутр (Структура);


Значение = СтрокаДляПередачи;


Соответственно при загрузке надо обратно преобразовать
5. adva 45 28.03.14 14:28 Сейчас в теме
Для списка значений используй массив для СтруктураСсылки
6. adva 45 28.03.14 14:33 Сейчас в теме
При загрузке получаешь структуру отбора

СтруктураОтбора = ЗначениеИзСтрокиВнутр();
Если ТипЗнч(СтруктураОтбора) = Тип("структура") Тогда

// тут ее обрабатываешь для объекта есть его тип и вид, а также реквизиты поиска, думаю сложностей возникнуть не должно

КонецЕсли;
Оставьте свое сообщение

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