Автор: Gigi 14.06.19, 17:15
Всем привет!
Никто не подскажет как это сделать?
Дело в чем ...
Хотя ладно .... скину часть задачи
Вот эту частьФункция Сериализация(СоединениеCOM,СериализуемыйОбъектИлиСсылка) Экспорт
//============================
//Многие говорят "Попытка/Исключение " это "Манера плохого тона". Но при этом не понимают, что хороший тон еще нужно заслуживать.
//А те которые на пример написали функцию: "ТипЗнч(Значение)" другого тона точно не зауживают.
//Поэтому вынужден был в таком тоне.... И хороший программист итак поймет почему решил только в таком тоне.
Попытка знОбъектИлиСсылка=СериализуемыйОбъектИлиСсылка.ПолучитьОбъект(); Исключение знОбъектИлиСсылка=СериализуемыйОбъектИлиСсылка КонецПопытки;
//============================
Если СоединениеCOM=Неопределено Тогда
Дерево=СериализаторXDTO.ЗаписатьXDTO(знОбъектИлиСсылка);
ЗаписьXML=Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,Дерево); //Сообщить(Ф.Параметры);
Иначе
Дерево=СоединениеCOM.СериализаторXDTO.ЗаписатьXDTO(знОбъектИлиСсылка);
ЗаписьXML = СоединениеCOM.NewObject("ЗаписьXML");
ЗаписьXML.УстановитьСтроку();
СоединениеCOM.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,Дерево);
КонецЕсли;
//============================
Возврат ЗаписьXML.Закрыть();
КонецФункции
Функция Десериализация(СоединениеCOM,ТекстXML,ВозвратСсылкаОбъект) Экспорт
//============================
Если СоединениеCOM=Неопределено Тогда
ПарсерXML=Новый ЧтениеXML;
ПарсерXML.УстановитьСтроку(ТекстXML); //Сообщить(ТекстXML+Символы.ПС+Строка(ПарсерXML)+" - "+ТипЗнч(ПарсерXML));
Иначе
ПарсерXML = СоединениеCOM.NewObject("ЧтениеXML");
ПарсерXML.УстановитьСтроку(ТекстXML); //Сообщить(ПарсерXML);
КонецЕсли;
//============================
Пока ПарсерXML.Прочитать() Цикл
Если ПарсерXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
МетаОбъект=ПарсерXML.Имя; //Сообщить(МетаОбъект);
Прервать;
КонецЕсли;
КонецЦикла;
//============================
Если СоединениеCOM=Неопределено Тогда
Объект=СериализаторXDTO.ПрочитатьXML(ПарсерXML);
Иначе
Объект=СоединениеCOM.СериализаторXDTO.ПрочитатьXML(ПарсерXML);
КонецЕсли;
//============================
ПарсерXML.Закрыть();
//============================
//Сообщить(МетаОбъект);
Если Найти(МетаОбъект,"Catalog")>0 или Найти(МетаОбъект,"Document")>0 Тогда
Если ВозвратСсылкаОбъект="Ссылка" Тогда Значение=Объект.Ссылка; Иначе Возврат Значение=Объект; КонецЕсли;
Иначе
Значение=Объект;
КонецЕсли;
//============================
//Сообщить(Строка(Значение)+" - "+ТипЗнч(Значение));
Возврат Значение;
КонецФункции
Дело в том, что при перезаписи имеющихся объектов в базе приема по данным объектов базы источника, нужна предварительная десериализация.
Которая осуществляется не по коду или номеру, а по уникальному идентификатору.
Поэтому если на пример у принятого из базы источника документа записанного в XML, на пример номер: "00000002". И если документ с таким же номером имеется в базе приема то команда:
Объект=СериализаторXDTO.ПрочитатьXML(ПарсерXML);
Не вернет его как Объект с номером "00000002". А вместо этого вернет пустое значение объекта.
Поэтому нужно как то при создании нового объекта принудительно записать тот идентификатор который указан в данных XML
Вот собственно и весть вопрос.
Короче ... КАК ОБЪЕКТУ ПРИСВОИТЬ УКАЗАННЫЙ ИДЕНТИФИКАТОР И ТАК ЕГО И ЗАПИСАТЬ.
Никто не подскажет как можно это сделать по быстрому.
Буду признателен!
Gigi @ Сегодня, 16:46
,
Молчание не всегда золото ... че нет отклика?
Gigi @ Сегодня, 17:10
,
Видимо уже не рабочее время...
Ладно... я тоже закруглюсь ...
Но буду признателен за отклик ..
Автор: Gigi 16.06.19, 13:12
Gigi @ 14.06.19, 18:15
,
С темой уже разобрался.
Это тестовая запись в модуле объекта
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЭтотОбъект.Номер="" тогда
СтрокаGUID = "4f589c45-8e93-11e9-8e27-94de80d781f5";
НовыйGUID= Новый УникальныйИдентификатор(СтрокаGUID);
НоваяСсылка = Документы["ДокИмя"].ПолучитьСсылку(НовыйGUID);
ЭтотОбъект.УстановитьСсылкуНового(НоваяСсылка);
//ЭтотОбъект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
КонецПроцедуры
Но по поводу импорта-экспорта данных есть пару вопросов..
Но это во первых другая тема...
Во вторых стоящие вопросы требуют капитального ознакомления с кодом, над которым работал аж целую неделю.
Так что, может выйду на форум и задам их. Правда что бы было понятно, придется скинуть не мало кодовых строк.
Ладно ... позже может выйду на форум создав другую тему.
И буду признателен за отклик!
Пока!