Имя: Пароль:
1C
 
КД 2.1 Возможно ли в "После загрузки" подменить гуид у нового объекта?
,
0 Бешеный заяц
 
14.12.20
15:18
При выгрузке кидаю Нужный гуид в параметр, далее в модуле после загрузки планирую достать его от туда и присвоить новому объекту? сработает? или это по другому делается и просто так в лоб не получиться?
Если Объект.ЭтоНовый() Тогда
    Гуид = ПараметрыОбъекта.Получить("ГуидСерии");
    СсылкаСерии = Справочники.СерииНоменклатуры.ПолучитьСсылку(Гуид);
    Объект.УстановитьСсылкуНового(СсылкаСерии);
КонецЕсли;    

В полях поиска у меня соотвтственно поиск тоже по данному гуиду

ГУИД = ПараметрыОбъекта.Получить("ГуидСерии");
Если ЗначениеЗаполнено(ГУИД) Тогда     
     НовыйGUID = Новый УникальныйИдентификатор(ГУИД);
     СсылкаСерии = Справочники.СерииНоменклатуры.ПолучитьСсылку(НовыйGUID);
     Если  СсылкаТовар.ПолучитьОбъект() <> Неопределено
         СсылкаНаОбъект = СсылкаСерии;
     КонецЕсли;
КонецЕсли;
ПрекратитьПоиск = Истина;
1 mistеr
 
14.12.20
15:26
(0) А просто флаг "искать по внутреннему идентификатору" не работает что ли? Больше ничего и не нужно вроде.
2 Бешеный заяц
 
14.12.20
15:42
(1) не не лучше, внутренний идентификатор не совпадает с внутренним базы приемника и храниться в отдельном реквизите соответственно по нему и ищем и создёем новый
3 Бешеный заяц
 
14.12.20
15:43
(1) есть еще вариант при выгрузке гуид подменять , но видел это давно и уже не помню как
4 Бешеный заяц
 
14.12.20
15:52
Единственное меня грызут сомнения что подобное нужно делать в "После загрузке"... ,а не "При загрузке" но там "Объект" отсутствует если его нет
5 Бешеный заяц
 
14.12.20
16:38
вверх
6 Cthulhu
 
14.12.20
16:40
а подменить гуид перед выгрузкой - никак?..
тогда для загрузки хватит и (1)
7 hhhh
 
14.12.20
17:12
(4) нет, не нужно в ПриЗагрузке. Делайте в ПослеЗагрузки.
8 Aleksey
 
14.12.20
17:29
(4) Можно, только в полях поиска, а не при загрузки
9 Бешеный заяц
 
14.12.20
17:30
(6) вопрос как?
10 Бешеный заяц
 
14.12.20
17:34
Надо найти как то только что выгруженный атрибут с гуидом и подменить его значение?
11 бомболюк
 
14.12.20
17:35
1. У ПКО снимаешь галку "Поиск по ГУИД", или как там она зовется
2. Добавляешь ПКС с галкой поиск по любому полю.
3. В обработчике ПКС "Перед выгрузкой" ставишь отказ = Истина и программно формируешь в узле ссылки узел "{УникальныйИдентификатор}" точно такой же, как Кд формирует при наличии галки "Поиск по ГУИД", но, соответственно, с нужным тебе значением.
12 Aleksey
 
14.12.20
17:36
(9) Да примерно как ты и написал в (0). только добавить УстановитьСсылкуНового
13 Aleksey
 
14.12.20
17:44
ТОлько параметры объекта недоступны, там доступен СвойстваПоиска
И когда ты найдешь свою ссылку (или создашь новую), не забудь удалить свойства поиска иначе он будет пытаться заполнить реквизит твоим гуидом
14 Aleksey
 
14.12.20
17:45
Короче нужно пробывать я давно так делал, уже даже пример не найду. В крайнем случае ты всегда в полях поиска можешь написать

ЗагружаемыйОбъект  = Справочники.СерииНоменклатуры.СоздатьЭлемент();
ЗагружаемыйОбъект.УстановитьСсылкуНового(СсылкаСерии);
ЗагружаемыйОбъект.Записать();
СсылкаСерии = ЗагружаемыйОбъект.Ссылка;
15 Aleksey
 
14.12.20
17:58
нашел у себя пример при выгрузки из 7-к в 8-ку ищу по гуиду

Источник GUID Приемник пусто

Пример для справочника контрагенты

GUID = СвойстваПоиска[""]; //так как у приемника нет имени, то в свойствах поиска ничего не будет
СвойстваПоиска.Удалить("");
СвойстваПоиска.Вставить("{УникальныйИдентификатор}",GUID);//делаем так как будто такой гуид к нам прилетел из источника
УстанавливатьУОбъектаВсеСвойстваПоиска = ложь;
ПрекратитьПоиск =истина;
СсылкаНаОбъект = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(GUID));

Далее типовой алгоритм вполне справляется с "подменой" и создает с нужным гуидом
16 Aleksey
 
14.12.20
18:01
(3) Вариант с подменой гуид при выгрузке описан тут v8: КД. Поиск по гуид., но по мне это сильнее заморочено чем подмена при поиске
17 Бешеный заяц
 
14.12.20
20:56
ок спасибо буду пробовать
18 Бешеный заяц
 
14.12.20
21:29
Сделал через поля поиска все ок
те ищу по гуиду, если не нашел создаю элемент с нужным гуидом прям в модуле "Поля поиска" и присваиваю новый элемент переменной "СсылкаНаОбъект"
далее стандартным механизмом заполняется мой элемент.



ГУИД = ПараметрыОбъекта.Получить("ГуидСерии");
Если ЗначениеЗаполнено(ГУИД) Тогда     
     НовыйGUID = Новый УникальныйИдентификатор(ГУИД);
     СсылкаСерии = Справочники.СерииНоменклатуры.ПолучитьСсылку(НовыйGUID);
     Если  СсылкаСерии.ПолучитьОбъект() = Неопределено тогда //его нет
         ТекСпр = Справочники.СерииНоменклатуры.СоздатьЭлемент();
         ТекСпр.УстановитьСсылкуНового(СсылкаСерии);
         ТекСпр.ОбменДанными.Загрузка = ИСТИНА;
         ТекСпр.Записать();
     КонецЕсли;
     СсылкаНаОбъект = СсылкаСерии;
КонецЕсли;
19 Aleksey
 
15.12.20
00:15
(18) Создавать не обязательно.
И разве в параметры объекта доступны в Поля поиска?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший