Имя: Пароль:
1C
1С v8
Обмен данными. Идентифицировать объект.
0 Lled
 
11.08.14
21:13
Здравствуйте. Изучаю обмен данными между двумя различными конфигурациями. Назовем базы "Источник" и "Приемник". Обмен односторонний. Из справочника Источника выгружаются данные в XML для загрузки в Приемник.

Вопрос: как сопоставлять элементы справочников Источника и Приемника?

По "Ссылке" не получится, т.к. в Приемнике для элементов справочника Ссылку не отредактировать.

По "Наименованию" еще можно, но встает проблема с удаленными объектами (совсем удаленными). Ведь при выгрузке в XML от этих объектов остались только название справочника и ссылка, и в Приемнике их так не найти.

Еще есть извращенный вариант. В Приемнике в справочнике создать поле для ссылки из справочника Источника. Но это мне кажется совсем неправильным.
1 welwel
 
11.08.14
21:44
(0) а чем синхронизация по УИН не устраивает?
2 sda553
 
11.08.14
21:47
(1) Это и есть "по ссылке". Только фразу "в приемнике для элементов справочника Ссылку не отредактировать" я пока что не понял
3 sda553
 
11.08.14
21:51
(0) А, я кажется понял эту фразу
Ссылка редактируется в приемнике следующим способом:
Берется элемент в котором надо поменять ссылку (уин)
Копируется в новый элемент с нужной ссылкой (дубль)
Производится поиск и замена элемента справочника в БД (обработка стандартная) со старой ссылки на новую.
Старая ссылка удаляется
4 Lled
 
11.08.14
22:44
(3)
1) ...
2) Копируется в новый элемент с нужной ссылкой (дубль)
3) Производится поиск и замена элемента справочника в БД (обработка стандартная) со старой ссылки на новую.
4) Старая ссылка удаляется

А можно поподробнее? Желательно пример кода.

"Копируется в новый элемент с нужной ссылкой (дубль)"
НовыйЭлем = Справочники.МойСправочник.СоздатьЭлемент();
НовыйЭлем.Ссылка = ТребуемаяСсылка; (Вот здесь платформа жестко ругнется)
5 Lled
 
11.08.14
22:45
Стоп! Кажется, нашел то что искал: УстановитьСсылкуНового(). Сейчас испытаю...
6 Lled
 
12.08.14
00:01
Все, тема закрыта. Всем спасибо.
7 Lled
 
12.08.14
07:58
В Приемнике данные элемента читаю из XML в структуру. Потом эту структуру обрабатываю процедурой:

Процедура ОбработатьСтруктуру(Структура1, Отправитель)
    ПродуктСсылка = Справочники.ПродуктыСФермы.ПолучитьСсылку(Новый УникальныйИдентификатор(Структура1["Ссылка"]));
    ФлагЭлемНайден = Истина;
    ПродуктЭлем = ПродуктСсылка.ПолучитьОбъект();
    Если ПродуктЭлем = Неопределено Тогда
        ПродуктЭлем = Справочники.ПродуктыСФермы.СоздатьЭлемент();
        ПродуктЭлем.УстановитьСсылкуНового(ПродуктСсылка);
        ПродуктЭлем.УстановитьНовыйКод();
    КонецЕсли;
    ПродуктЭлем.ОбменДанными.Отправитель = Отправитель;
    ПродуктЭлем.ОбменДанными.Загрузка = Истина;
    ПродуктЭлем.ПометкаУдаления = Структура1["ПометкаУдаления"] = "true";
    ПродуктЭлем.Наименование = Структура1["Наименование"];
    ПродуктЭлем.Колво = Число(Структура1["Колво"]);
    ПродуктЭлем.Цена = 0;
    Если Структура1["ОбластьФермы"] = "Овощи" Тогда
        ПродуктЭлем.ОбластьФермы = Перечисления.ОбластиФермы.Огород;
    Иначе
        ПродуктЭлем.ОбластьФермы = Перечисления.ОбластиФермы.Сад;
    КонецЕсли;
    ПродуктЭлем.Записать();
КонецПроцедуры