|
УникальныйИдентификатор | ☑ | ||
---|---|---|---|---|
0
Alien74
21.03.14
✎
12:08
|
Здравствуйте! Пишу свой обмен между Бухгалтерией 3.0 и самописной конфигой. Через выгрузку\загрузку XML документа. При загрузке данных из xml создаю новый элемент справочника контрагентов
УИ = Новый УникальныйИдентификатор(Чтение.Значение); СсылкаНаОбъект = Справочники.Контрагенты.ПолучитьСсылку(УИ); Контрагент = Справочники.Контрагенты.СоздатьЭлемент(); Контрагент.УстановитьСсылкуНового(СсылкаНаОбъект); Контрагент.Записать(); При установке ссылки нового не присваивается нужная ссылка. При записи контрагента берётся какая то левая ссылка и присваевается ему. Каждый раз разная. Моя не присваивается. Причины этого не могу понять. Делал однотипный обмен между другими конфигами - примерно тот же код работает как нужно - присваивается именно та ссылка, которую создали на основании УИ. Помогите... |
|||
1
Alien74
21.03.14
✎
12:10
|
Платформа 8.3
|
|||
2
Godofsin
21.03.14
✎
12:12
|
КД2 не предлагать?
|
|||
3
kiruha
21.03.14
✎
12:14
|
СсылкаНаОбъект =Новый (Тип("СправочникСсылка.Контрагенты"))(УИ )
|
|||
4
Alien74
21.03.14
✎
12:18
|
КД2 отличная штука, но нет... Хочется написать свою выгрузку, а не корячится с изменением правил обмена с КД
|
|||
5
dj_serega
21.03.14
✎
12:21
|
(4) Давно такого не читал.
Чего тогда не через ole? |
|||
6
Alien74
21.03.14
✎
12:25
|
(5) Ну это делается в том числе ради обучения, и полного понимания работы выгрузки\загрузки данных вручную. Не нападайте уж так :)
|
|||
7
Alien74
21.03.14
✎
12:30
|
(3) По вашему коду создаётся новый справочник. Но мне необходимо ещё и установить этому справочнику ссылку по УИ.
Или я не так понял код... что значит в конце строки "(УИ)" ? |
|||
8
kiruha
21.03.14
✎
12:31
|
УИ = Новый УникальныйИдентификатор(Чтение.Значение);
|
|||
9
kiruha
21.03.14
✎
12:47
|
Пардон, скобки не правильно поствил
Еще можно сразу объект на основании УИ создавать : СсылкаНаОбъект =Новый (Тип("СправочникОбъект.Контрагенты"),УИ ); |
|||
10
mrDSide
21.03.14
✎
13:25
|
(4) как ты собираешься "корячится" с правилами обмена из типовой конфигурации в самописную (здесь предполагается, что работает в относительно небольшом локальном регионе: организация, холдинг), если их по определению не может существовать?
Только конвертация данных, бери и пиши свои правила. (5)+=) |
|||
11
Alien74
21.03.14
✎
13:30
|
(10) Я написал уже обмен, который бы взлетел, если бы не Сабж. Если ничего не удастся сделать, то буду пробовать КД.
|
|||
12
Alien74
21.03.14
✎
13:56
|
(9)Дело в том, что не всегда нужно создавать новый элемент справочника. Если такой уже есть, то необходимо изменить реквизиты в нём. Именно поэтому ищется ссылка по переданному УИ, там дальше по коду проверяется существует ли такой или нет (этот код я не вставил сюда), и далее уже смотрим. Но тем не менее и ваша строка не работает, почему то ссылка остаётся пустой и создаётся новый элемент справочника, после записи которого, естесственно задаётся новая ссылка с другим рандомным УИ.
Есть подозрение что Контрагент.УстановитьСсылкуНового(СсылкаНаОбъект); не работает как нужно. Мб косяк платформы. Сейчас посмотрю в других модулях правильно ли работает эта функция. |
|||
13
kiruha
21.03.14
✎
13:57
|
(12)
У меня тоже не заработало. Где то подвох |
|||
14
Alien74
21.03.14
✎
14:07
|
Разберу пример, который я уже делал в с другими конфигурациями. Загрузка из УПП в самописную конфигурацию мобильного приложения.
Читается из XML и создаётся элемент справочника СпецификацииНоменклатуры: ----------- Чтение.Прочитать(); УИ = Новый УникальныйИдентификатор(Чтение.Значение); СсылкаНаОбъект = Справочники[ИмяСправочника].ПолучитьСсылку(УИ); Справочник = Справочники[ИмяСправочника].СоздатьЭлемент(); Справочник.УстановитьСсылкуНового(СсылкаНаОбъект); Справочник.Записать(); ----------- Далее в коде читается XML и создаётся Документ.Предъвка в котором есть реквизит СправочникСсылка.СпецификацииНоменклатуры: ----------- ИначеЕсли Чтение.Имя = "Спецификация" И Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяРеквизита = Чтение.Имя; Чтение.Прочитать(); УИ = Новый УникальныйИдентификатор(Чтение.Значение); Док[ИмяРеквизита] = Справочники.СпецификацииНоменклатуры.ПолучитьСсылку(УИ).Ссылка; ------------ Чудо, но в созданном документе вставляется в реквизит Спецификация ссылка на Справочник.СпецификацияНоменклатуры правильно. Тоесть ссылка по УИ генерируется верно и не рандомно. |
|||
15
Alien74
21.03.14
✎
14:10
|
Имею ввиду, что примерно такой же код абсолютно верно работает в другой конфиге...
|
|||
16
Alien74
21.03.14
✎
14:13
|
Если далее написать Справочник.Ссылка.УникальныйИдентификатор(), то результатом будет именно тот УИ, который передавался XMLькой. Чего не происходит в Бухгалтерии 3.0
|
|||
17
Alien74
21.03.14
✎
14:21
|
(13)kiruha, вам отдельное спасибо за уделённое внимание теме :)
|
|||
18
Alien74
24.03.14
✎
07:50
|
Вообщем не нашёл я откуда ноги растут... Сделал всё по привязке к кодам справочников. Не дай им Боже изменить их...
|
|||
19
Aleksey
24.03.14
✎
07:56
|
(12) Это не косяк платформы, а косяк головах разработчиков типовых
(18) не торопись Косяк в том что при записи программе плевать на твой гуид, она для новых элементов принудительно вставляет свой. Для чего так 1С сделала во всех типовых я не знаю, но по факту все на эти грабли наступают :) Для обхода это безобразия нужно вставить строку Контрагент.ОбменДанными.Загрузка = Истина; перед Контрагент.Записать(); И тогда программа оставить гуид который ты присвоил, будет считать что контрагент пришел с обменом из другой базы |
|||
20
Alien74
24.03.14
✎
09:36
|
(19)Aleksey, спасибо! Уже правда переделал всё по коду... Всё работает. Но в следующий раз сделаю как вы написали. Или если пойдут косяки в этой конфиге.
|
|||
21
13_Mult
24.03.14
✎
10:20
|
(19)+1 ещё ГУИД мона поменять после записи нового.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |