Версия для печати темы (https://pro1c.org.ua/index.php?s=3196595390164147333f4e195b2fd2e2&showtopic=52545)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как присвоить указанный уникальный идентификатор объекту?

Автор: 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);
    ЭтотОбъект.УстановитьСсылкуНового(НоваяСсылка);
    //ЭтотОбъект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
КонецПроцедуры

Но по поводу импорта-экспорта данных есть пару вопросов..
Но это во первых другая тема...
Во вторых стоящие вопросы требуют капитального ознакомления с кодом, над которым работал аж целую неделю.
Так что, может выйду на форум и задам их. Правда что бы было понятно, придется скинуть не мало кодовых строк.
Ладно ... позже может выйду на форум создав другую тему.
И буду признателен за отклик!
Пока!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua