|
Не получается создать элемент справочника с заданным GUID | ☑ | ||
---|---|---|---|---|
0
Gorr
05.09.19
✎
15:47
|
НовыйОбъект = Справочники.ВнешниеОбработки.СоздатьЭлемент();
НоваяСсылка = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор(НовыйGUIDОбъекта)); НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка); гуид = XMLСтрока(НовыйОбъект.ПолучитьСсылкуНового());//здесь НовыйGUIDОбъекта = гуид НовыйОбъект.Записать(); фактгуид = XMLСтрока(НовыйОбъект.Ссылка);//а вот после записи уже так:фактгуид <> гуид В этой же базе следующий код вызывает открытие формы создание нового элемента: НайденныйОбъект = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор(НовыйGUIDОбъекта)); Если ЗначениеЗаполнено(НайденныйОбъект) Тогда //Предупреждение("Объект найден"); ОткрытьЗначение(НайденныйОбъект); Иначе Предупреждение("Объект не найден"); КонецЕсли; Почему и что не так? есть идеи? |
|||
1
palsergeich
05.09.19
✎
15:50
|
XMLСтрока(НовыйОбъект.ПолучитьСсылкуНового());//здесь НовыйGUIDОбъекта = гуид
Это лишнее XMLСтрока(НовыйОбъект.Ссылка) Сделай так |
|||
2
Gorr
05.09.19
✎
15:51
|
(1) у нового элемента ссылки нет.
|
|||
3
Gorr
05.09.19
✎
15:52
|
(1)2. и вопрос не в этом эта строка для отладки кода
|
|||
4
palsergeich
05.09.19
✎
15:53
|
Ты сначала устанавливает ссылку из гуид этими строками
НовыйОбъект = Справочники.ВнешниеОбработки.СоздатьЭлемент(); НоваяСсылка = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор(НовыйGUIDОбъекта)); НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка) А потом загемняешь его здесь НовыйОбъект.ПолучитьСсылкуНового() |
|||
5
Aleksey
05.09.19
✎
15:53
|
Смотри подписки. В типовой у некоторых справочников происходит подмена гуид при записи. Т.е. типа если это новый, то принудительно присваиваем новый гуид
|
|||
6
palsergeich
05.09.19
✎
15:53
|
(2) после строки
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка) Гуид уже есть |
|||
7
palsergeich
05.09.19
✎
15:55
|
(6) в том и суть этого метода, что при установке ссылки нового пустая ссылка меняется на то что ты передаешь в метод
|
|||
8
palsergeich
05.09.19
✎
15:55
|
А вот этим ты свой же код ломаешь
НовыйОбъект.ПолучитьСсылкуНового() |
|||
9
palsergeich
05.09.19
✎
15:56
|
Верь мне и просто сделай как я говорю
|
|||
10
palsergeich
05.09.19
✎
15:57
|
(5) нет, он ставится, если пустой, если заполнен - не устанавливается.
Проблема в этом НовыйОбъект.ПолучитьСсылкуНового() |
|||
11
palsergeich
05.09.19
✎
15:59
|
Просто вбей в табло xmlстрока(новыйобъект.Ссылка) и пошагово пройдись в отладчике и ты увидишь
|
|||
12
Gorr
05.09.19
✎
16:03
|
(5) это бы все объяснило. спасибо.
(6) вы не правы - попытка получения гуида от не записанного еще объекта всегда возращает пустой гуид ("00000000-0000-0000-0000-000000000000") |
|||
13
Gorr
05.09.19
✎
16:12
|
(5) единственная подписка - ПриУстановкеНовогоКодаСправочника:
Процедура ПриУстановкеНовогоКодаСправочникаПриУстановкеНовогоКода(Источник, СтандартнаяОбработка, Префикс) Экспорт ДобавитьПрефиксУзла(Префикс); КонецПроцедуры Уже в ней ЭтоНовый() возвращает истина, а XMLСтрока(Источник.ПолучитьСсылкуНового()) уже не та. |
|||
14
Gorr
05.09.19
✎
16:27
|
Добавил код установки новой ссылки в обработчик этой самой единственной подписки и ВУАЛЯ - требуемый ГУИД записался в базу!!!
|
|||
15
Gorr
05.09.19
✎
16:30
|
Видимо, в процессе генерации кода справочника платформа задает не только код, но и так же ГУИД объекта.
|
|||
16
unenu
05.09.19
✎
16:33
|
(12) и зачем было бредокодить с получением гуида от не записанного объекта, тем паче что переменная говорит сама за себя НовыйОбъект?
в СП можно было посмотреть методы установки и все |
|||
17
Максим Нижегородец
05.09.19
✎
16:34
|
(0) ЕСЛИ ВОПРОС: Почему и что не так? есть идеи?
ОТВЕТ: Все, что написал - ВСЕ НЕ ТАК. (это все как умножать на ноль) Похоже не понимаешь разницу между ОБЪЕКТом и Ссылкой на объект и между УникальнымИдентификатором и Ссылкой. Все это разные вещи и просто так эти понятия подменять нельзя. |
|||
18
Gorr
05.09.19
✎
16:41
|
(16) была предпринята попытка понять почему объект записывается не с тем гуид.
какая она до записи? а устанавливается ли вообще? в данном случае наблюдаемое противоречило СП. |
|||
19
Gorr
05.09.19
✎
16:42
|
(17) если вы не в состоянии понять вопрос))
|
|||
20
RomanYS
05.09.19
✎
16:51
|
(13) замер делал, другой код точно не выполняется?
|
|||
21
RomanYS
05.09.19
✎
16:52
|
(0) конфигурация какая?
|
|||
22
RomanYS
05.09.19
✎
16:52
|
(15) скорее ты пропустил другую подписку
|
|||
23
Gorr
05.09.19
✎
17:07
|
(22) ЗУП 2.5. Поиск ссылок на объект рулит.
|
|||
24
RomanYS
05.09.19
✎
17:11
|
(23) ни капли не рулит. Подписка может быть общая для справочников
|
|||
25
RomanYS
05.09.19
✎
17:16
|
(0) В этой же базе следующий код вызывает открытие формы создание нового элемента:
НайденныйОбъект = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор(НовыйGUIDОбъекта)); Если ЗначениеЗаполнено(НайденныйОбъект) Тогда //Предупреждение("Объект найден"); ОткрытьЗначение(НайденныйОбъект); ... А тут всё очевидно НайденныйОбъект не пустая ссылка, поэтому ЗначениеЗаполнено(НайденныйОбъект) всегда истина. Вы неправильно проверяете наличие ссылки в таблице |
|||
26
Gorr
05.09.19
✎
17:19
|
(24) нет, общей нет.
(25) верно. |
|||
27
RomanYS
05.09.19
✎
17:20
|
(26) Замер то сделал?
|
|||
28
Максим Нижегородец
05.09.19
✎
17:20
|
(25) А если так:
НайденныйОбъект = Новый Структура("Один,Два",1,2); Если ЗначениеЗаполнено(НайденныйОбъект) Тогда ОткрытьЗначение(НайденныйОбъект); КонецЕсли; Подскажите, что в этом случае должно открыться? |
|||
29
Gorr
05.09.19
✎
17:23
|
(15) Ответ на вопрос я нашел. Тема закрыта.
|
|||
30
Gorr
05.09.19
✎
17:23
|
(27) а зачем?
|
|||
31
RomanYS
05.09.19
✎
17:25
|
(29) это не ответ.
|
|||
32
RomanYS
05.09.19
✎
17:26
|
НастройкаПравДоступа.ПередЗаписьюНовогоОбъектаСПравамиДоступаПользователей(ЭтотОбъект, Отказ, Родитель);
|
|||
33
spiller26
05.09.19
✎
17:31
|
(29) Не поставишь ГУИД, я тоже как то пытался.
|
|||
34
Gorr
05.09.19
✎
17:34
|
(27)
+ можно даже задать код явно тем самым избежать события ПриУстановкеНовогоКода и генерации платформой нового ГУИДа... (32) и что? там идет получение ссылки нового для запись в регист сведений прав доступа пользователей. Саму ссылку нового там никто не устанавливает. (33) у меня все получилось. |
|||
35
Gorr
05.09.19
✎
17:34
|
Все работает.
|
|||
36
Gorr
05.09.19
✎
17:38
|
Уважаемый администратор форума, просьба закрыть тему.
|
|||
37
RomanYS
05.09.19
✎
17:39
|
(35) понятно, что работает. От этого (15) не перестает быть бредом
|
|||
38
Gorr
05.09.19
✎
17:42
|
(37) Вы что-то хотели?)
|
|||
39
Gorr
05.09.19
✎
18:09
|
(37) а вы таки правы.
вообще, можно было бы и проверять устанавливалась ли уже ссылка, но кого это... |
|||
40
RomanYS
05.09.19
✎
18:19
|
(39) так где кривой код-то. В УПП вроде красиво:
Если ЭтотОбъект.ЭтоНовый() Тогда СсылкаНового = ЭтотОбъект.ПолучитьСсылкуНового(); Если НЕ ЗначениеЗаполнено(СсылкаНового) Тогда СсылкаНового = Справочники[ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку(); КонецЕсли; ПолныеПрава.ЗарегистрироватьПраваДоступаПользователяКОбъекту(СсылкаНового, Родитель, Отказ); Если НЕ Отказ И НЕ ЗначениеЗаполнено(ЭтотОбъект.ПолучитьСсылкуНового()) Тогда ЭтотОбъект.УстановитьСсылкуНового(СсылкаНового); КонецЕсли; КонецЕсли; |
|||
41
Gorr
05.09.19
✎
19:48
|
(40) наверное в УПП не просто так код другой нежели в зуп,
но я славо богу не в упп)) |
|||
42
RomanYS
05.09.19
✎
20:18
|
(41) Этот код в УПП и ЗУП2.5 наверняка одинаков. Вероятно у тебя какая-то древняя версия, в который этот код с багом.
|
|||
43
Gorr
05.09.19
✎
20:36
|
2.5.139.1
всего одна строка СсылкаНового = Справочники[ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку(); вместо СсылкаНового = ЭтотОбъект.ПолучитьСсылкуНового(); Если НЕ ЗначениеЗаполнено(СсылкаНового) Тогда СсылкаНового = Справочники[ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку(); КонецЕсли; почему-то я думаю что там все так и в последних версиях. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |