Имя: Пароль:
1C
1С v8
Как восстановить элемент справочника?
0 Галахад
 
гуру
28.01.13
17:10
Имею такое:
<Объект не найден> (32:9f750015170f692c11de0886a33cbc68)

Получил строку ГУИД:
a33cbc68-0886-11de-9f75-0015170f692c


   UUID  = Новый УникальныйИдентификатор(ГУИД);
   НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(UUID);
   СпрНом = НоваяСсылка.ПолучитьОбъект();
   СпрНом = Справочники. Номенклатура.СоздатьЭлемент();
   СпрНом.УстановитьСсылкуНового(НоваяСсылка);
   UUID  = Новый УникальныйИдентификатор(ГУИД);
   НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(UUID);
   СпрНом = НоваяСсылка.ПолучитьОбъект();
   СпрНом = Справочники. Номенклатура.СоздатьЭлемент();
   СпрНом.УстановитьСсылкуНового(НоваяСсылка);
   СпрНом.Наименование = Наименование;
   СпрНом.ОбменДанными.Загрузка = Истина;
   СпрНом.Записать();

Получил новый элемент справочника с ГУИД:
a33cbc68-0886-11de-9f75-0015170f692c
Но
<Объект не найден> (32:9f750015170f692c11de0886a33cbc68)
никуда не изчез.
Ято я сделал не так?
1 DrShad
 
28.01.13
17:11
СпрНом = НоваяСсылка.ПолучитьОбъект();
   СпрНом = Справочники. Номенклатура.СоздатьЭлемент();

это что за адский отжиг!?
2 DrShad
 
28.01.13
17:12
ипать колотить - срочно зжечь! весь код в топку!
3 Aprobator
 
28.01.13
17:13
тему стереть срочно. Чтоб не дай бог кто таким заразился )
4 Kreont
 
28.01.13
17:16
Запусти с ТИИ с созданием недостающих, сделает то же самое :)

Идея вроде понятна, ну создашь элемент, а наименование, код и т.п. др.реквизиты откуда брать будешь?
5 Галахад
 
гуру
28.01.13
17:17
Да уж чего-то я продублировал код. Вот так вобщем:

   UUID  = Новый УникальныйИдентификатор(ГУИД);
   НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(UUID);
   СпрНом = НоваяСсылка.ПолучитьОбъект();
   
   // Если объект не существует - создадим его
   Если СпрНом = Неопределено Тогда
       СпрНом = Справочники. Номенклатура.СоздатьЭлемент();
       СпрНом.УстановитьСсылкуНового(НоваяСсылка);
       СпрНом.Наименование = Наименование;
       СпрНом.ОбменДанными.Загрузка = Истина;
       СпрНом.Записать();
   КонецЕсли;
6 Infsams654
 
28.01.13
17:17
(3) не.., в быдлокод срочно
7 Infsams654
 
28.01.13
17:18
(5) это чё?
8 Галахад
 
гуру
28.01.13
17:19
(7) Буквы. Слова.
9 Infsams654
 
28.01.13
17:21
(8) для чего СпрНом.УстановитьСсылкуНового(НоваяСсылка) ?
10 Aprobator
 
28.01.13
17:22
(9) чел пытается на старую ссылку данные закатать.
11 Infsams654
 
28.01.13
17:23
(10) это понятно, только для чего ? Он так любит эту ссылку ?
12 Maxus43
 
28.01.13
17:24
(0) не ожидал я от тебя такого хм... кода...
13 Галахад
 
гуру
28.01.13
17:24
(11) Да, мне нужна именно та самая ссылка.
14 Aprobator
 
28.01.13
17:24
(11) есть битая ссылка в базе, надо сделать ее не битой.
15 Галахад
 
гуру
28.01.13
17:26
Да. Я уже понял, что всех разочаровал.

Покажите уже ПРАВИЛЬНЫЙ код.
16 DrShad
 
28.01.13
17:27
(15) см (4)
17 Галахад
 
гуру
28.01.13
17:29
(16) Я хочу код.
18 DrShad
 
28.01.13
17:29
(17) а он тебя не хочет :)))
19 Aprobator
 
28.01.13
17:30
не дуйся - сегодня у многих похмельник ). Хотя,не совсем понятно, почем (5) не срабатывает? ИМХО, проблема с ГУИДОМ.
20 samozvanec
 
28.01.13
17:30
(17) код правильный, гуид не тот
21 Галахад
 
гуру
28.01.13
17:30
(18) Будем пилить...
22 Maxus43
 
28.01.13
17:31
(17) вон сам писал же - см (5), только условие не сработает
23 samozvanec
 
28.01.13
17:31
"32:9f750015170f692c11de0886a33cbc68" это ж ссылка, не?
24 Infsams654
 
28.01.13
17:31
(14) а, т.е. нужно в связанных объектах восстановить ? Ну я бы сделал так: создал новый, поискал у кого <Объект не найден> и подставил им ссылку нового
25 Галахад
 
гуру
28.01.13
17:32
ГУИД получаю так:
   ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
   ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
   ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
   ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));

   ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);
   ГУИДУдОбъктаСтр=ГУИД;
26 Aprobator
 
28.01.13
17:32
(22) сработает.
27 samozvanec
 
28.01.13
17:34
вообще НоваяСсылка = ТвойДокумент.РеквизитВКоторомБитаяСсылка;

вот ее и устанавливай как ссылку нового
28 Галахад
 
гуру
28.01.13
17:34
(22) Так создался же он. И ГУИД есть. Тот, что нужно.
Но блин <Объект не найден> никуда не исчезло...

(24) А я чего делаю?
29 Aprobator
 
28.01.13
17:34
(27) +100500. Дешево и сердито.
30 samozvanec
 
28.01.13
17:35
(25) херасе ты его перемешал... даже читать не хочу)
31 Maxus43
 
28.01.13
17:36
вкрайняк [<Объект не найден>].УникальныйИдентификатор();
а никак не (25)
32 samozvanec
 
28.01.13
17:36
(25) откуда метода такая, кстати?)
33 Maxus43
 
28.01.13
17:36
(26) проверяй, СП говорит что Неопределено не вернёт никогда. только Ссылку
34 Maxus43
 
28.01.13
17:37
(32) это метода чтоб из скуля получать гуид нормальный например)
35 samozvanec
 
28.01.13
17:38
(33) СП говорит:
ПолучитьОбъект();

Возвращаемые значения: СправочникОбъект; Неопределено;
36 hhhh
 
28.01.13
17:39
(28) ты просто из самого поля где Объект не найден возьми гуид. Чего ты паришься с этими строками?
37 Aprobator
 
28.01.13
17:40
(33) освежи версию СП ). Под 8.2 про неопределено точно есть.
38 Maxus43
 
28.01.13
17:40
(35) пля, согласен. я криво прочитал, про это говорил: Справочники.Номенклатура.ПолучитьСсылку(UUID);
39 Maxus43
 
28.01.13
17:40
(37) каюсь)
40 Галахад
 
гуру
28.01.13
17:43
Чо-та не понял. Попробовал еще раз все работает.
Всем спасибо. Код рабочий. Просто протупил с проверкой.
41 Aprobator
 
28.01.13
17:44
а я говорил - похмельник )
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.