![]() |
![]() |
![]() |
|
Конвертация: подмена уникального идентификатора | ☑ | ||
---|---|---|---|---|
0
Pro_1c_podcast
22.10.13
✎
13:13
|
Друзья, всем привет. Если я не нашел уже существующую ветку по данному вопросу, прошу прощения и заранее благодарен за ссылку.
Ситуация следующая: в конвертации данных при загрузке при поиске объекта по УИДу нужно подменить УИД идентификатора. Кто-то сталкивался с таким? Как решали? |
|||
1
Pro_1c_podcast
22.10.13
✎
13:15
|
*не идентификатора, а источника.
|
|||
2
kosts
22.10.13
✎
13:15
|
(0) А новый идентификатор в какой базе становиться известен в источнике или в приемнике?
|
|||
3
Pro_1c_podcast
22.10.13
✎
13:16
|
(2) в источнике уже все информация есть.
|
|||
4
NcSteel
22.10.13
✎
13:19
|
||||
5
Aleksey
22.10.13
✎
13:20
|
Бред какой то, что значит менять УИД?
Т.е. был уид 22345200-abe8-4f60-90c8-0d43c5f6c0f6, по какому правилу он должен поменяться? |
|||
6
Pro_1c_podcast
22.10.13
✎
13:23
|
(5) Нет, в источнике УИД менять не нужно. Но нужно в приемник передать другой УИД, отличный от источника.
(4) Спасибо. Судя по той ветке, простого решения нет. |
|||
7
echo77
22.10.13
✎
13:35
|
Другой - это какой другой? У вас в источнике есть другой?
Обмен V8 => V8 ? |
|||
8
Aleksey
22.10.13
✎
13:39
|
(6) да пофиг, откуда "другой" возъмётся?
А по сабжу, юзай поля поиска, в них сила |
|||
9
Pro_1c_podcast
22.10.13
✎
13:41
|
(7), (8) В источнике есть поле УИДПриемника. Там содержится УИД, который должен передаваться в приемник и устанавливаться в качестве уникального идентификатора для создаваемого объекта.
Не очень понимаю, как поля поиска помогут мне создать новый объект по этой ссылке, а при повторной выгрузке найти объект. |
|||
10
Aleksey
22.10.13
✎
13:50
|
(9) легко и непренуждено
1. передавай значение в качестве параметра или в качестве поля комментарий 2. В полях поисках вручную ищи свой объект, и если не нашел сам создавай нужный с нужным УИД 3. ... 4. Profit!!! |
|||
11
Pro_1c_podcast
22.10.13
✎
13:56
|
(10) Должно прокатить. По результатам отпишусь.
|
|||
12
Pro_1c_podcast
22.10.13
✎
17:23
|
Кажется, получилось.
Логика такая: 1. В параметр передаем УИД. Ставим ему флаг Поиск. Больше поиска нигде не стоит - по логике моей задачи синхрониззация только по УИД 2. При поиске СтрокаУИД = ПараметрыОбъекта["УИДПриемника"]; УИД = Новый УникальныйИдентификатор(СтрокаУИД); ТекСсылка = Справочники.КонтДоговораСтрахования.ПолучитьСсылку(УИД); Запрос = Новый Запрос("ВЫБРАТЬ | Справочник.Ссылка |ИЗ | Справочник.Справочник КАК Справочник |ГДЕ | Справочник.Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка",ТекСсылка); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда СсылкаНаОбъект = ТекСсылка; КонецЕсли; 3. При загрузке Если Не ОбъектНайден Тогда СтрокаУИД = ПараметрыОбъекта["УИДПриемника"]; УИД = Новый УникальныйИдентификатор(СтрокаУИД); ТекСсылка = Справочники.Справочник.ПолучитьСсылку(УИД); НОбъект = Справочники.Справочник.СоздатьЭлемент(); НОбъект.УстановитьСсылкуНового(ТекСсылка); Объект = нОбъект; КонецЕсли; |
|||
13
Aleksey
22.10.13
✎
17:50
|
Нет не так
|
|||
14
Pro_1c_podcast
22.10.13
✎
17:51
|
(13) Ваше сообщение не полностью дошло. =) только "Нет не так".
|
|||
15
Aleksey
22.10.13
✎
17:53
|
(14) Да сначало подумал что можно проще, а потом вспомнил, что не получится
А по факту запрос лишний СсылкаНаОбъект = Справочники.КонтДоговораСтрахования.ПолучитьСсылку(УИД); |
|||
16
Pro_1c_podcast
22.10.13
✎
17:55
|
А как проверить что по ссылке я получил именно Элемент, а не новую ссылку?
|
|||
17
Aleksey
22.10.13
✎
17:55
|
Либо как вариант
СсылкаНаОбъект = Справочники.КонтДоговораСтрахования.ПолучитьСсылку(УИД); СамОбъект = СсылкаНаОбъект.ПолучитьОбъект(); СамОбъект.ОбменДанными.Загрузка =Истина; СамОбъект.Записать(); И тогда не надо при загрузки ичего искать |
|||
18
Aleksey
22.10.13
✎
17:57
|
(16) а тебе не пофиг?
СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным Получается что он будет считать что объект не найден, если он ничего не нашел. Ну а далее твой код Если Не ОбъектНайден Тогда |
|||
19
Pro_1c_podcast
22.10.13
✎
18:01
|
(18) Ну с одной стороны согласен. Но все же мне больше нравится проверку делать и ПриЗагрузке создавать. Не люблю записывать документ а) пустой б) два раза
Сам запрос кстати из обработки обмена и выдрал. |
|||
20
Aleksey
22.10.13
✎
18:30
|
(16)
СправочникСсылка.<Имя справочника> (CatalogRef.<Имя справочника>) Пустая (IsEmpty) Синтаксис: Пустая() Возвращаемое значение: Тип: Булево. Истина - ссылка не указывает ни на какой объект (пустая ссылка); Ложь - в противном случае. Описание: Определяет, является ли ссылка пустой или нет. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). СтрокаУИД = ПараметрыОбъекта["УИДПриемника"]; УИД = Новый УникальныйИдентификатор(СтрокаУИД); ТекСсылка = Справочники.КонтДоговораСтрахования.ПолучитьСсылку(УИД); Если не ТекСсылка.Пустая() тогда СсылкаНаОбъект = ТекСсылка; КонецЕсли; |
|||
21
Pro_1c_podcast
23.10.13
✎
14:25
|
(20) Хороший вариант. Только он не работает. Если создавать объект с помощью УИД:
УИД = Новый УникальныйИдентификатор(СтрокаУИД); ТекСсылка = Документы.КонтСтраховойПолис.ПолучитьСсылку(УИД); То метод Пустая() возвращает ЛОЖЬ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |