Имя: Пароль:
1C
 
Как понять что ссылка не найдена ?
0 Родной
 
22.12.10
10:35
Есть код:
СсылкаНоменклатура = Справочники.Номенклатура.ПолучитьСсылку(УникИдент);
В СсылкаНоменклатура после выполнения ОбъектНеНайден.
Как понять что там объект не найден ?
Сравнивал и с NULL и c пустаяСсылка - непомогает...
1 Vitello
 
22.12.10
10:36
сравни реквизит этой ссылки с NULL
2 Salvador Limones
 
22.12.10
10:36
ЗначениеЗаполнено не пашет?
3 zzerro
 
22.12.10
10:36
(0)Неопределено?
4 Defender aka LINN
 
22.12.10
10:37
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать Ссылка Из Справочник.Номенклатура где Ссылка = &Ссылка";
ЭтоБитаяСсылка = Запрос.Выполнить().Пустой();
5 zzerro
 
22.12.10
10:38
Попытка
СсылкаНоменклатура.ПолучитьОбъект();
// есть объект
Исключение
// нет объекта
КонецПопытки
6 Irbis
 
22.12.10
10:38
типЗнч(Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор).получитьОбъект())
7 Родной
 
22.12.10
10:38
(2)спс
8 wPa
 
22.12.10
10:39
(0) ПОлучитьОбъект в попытке
9 dimoff
 
22.12.10
10:39
Найти("" + СсылкаНоменклатура, "<Объект не найден>") = 1
10 sda553
 
22.12.10
10:40
(5)
А теперь правильный ответ :)!!!!

СсылкаНоменклатура = Справочники.Номенклатура.ПолучитьСсылку(УникИдент);
Если СсылкаНоменклатура.ПолучитьОбъект() = Неопределено Тогда
//О боже, эта ссылка битая
КонецЕсли;
11 Defender aka LINN
 
22.12.10
10:40
(5), (8) Получение объекта по битой ссылке - не исключительная ситуация.
12 Serg_1960
 
22.12.10
10:41
:)
Если ЗначениеЗаполнено(СсылкаНоменклатура.Ссылка) Тогда
13 Defender aka LINN
 
22.12.10
10:42
(10) И что в нем правильного? :)
Правильный - в (4), остальное фигня :)
14 sda553
 
22.12.10
10:43
(12) Сдается мне что ЗначениеЗаполнено(СсылкаНоменклатура.Ссылка)=Истина

так что правильный ответ в 10
15 sda553
 
22.12.10
10:43
(13) Думаем, думаем.....
16 Defender aka LINN
 
22.12.10
10:43
(15) Ну вот и подумай :)
17 wPa
 
22.12.10
10:44
(11) у тебя в базе есть битые ссылки? )
(13) =)
18 Defender aka LINN
 
22.12.10
10:45
(17) Полно. Ибо авторы из нерезиновой.
19 sda553
 
22.12.10
10:45
(16) Теперь представь что у тебя в некотором объекте есть реквизит с типом СправочникСсылка (любая). Тебе надо проверить не битая ли она.

Думаем дальше сами....
20 Serg_1960
 
22.12.10
10:46
Ещё один кривой вариант :))
Если Найти(Строка(СсылкаНоменклатуры), "<Объект не найден>") Тогда
21 wPa
 
22.12.10
10:47
(20)  ) (9)
22 Defender aka LINN
 
22.12.10
10:48
(19) Запрос.Текст = "Выбрать Ссылка Из " + ПроверяемаяСсылка.Метаданные().ПолноеИмя() + " где Ссылка = &Ссылка";
Думай дальше.
23 zzerro
 
22.12.10
10:49
(11) А ну да, ты прав
24 sda553
 
22.12.10
10:49
(22) Еще добавь что нибудь чтобы "Справочники" превращались в "Справочник", ну и для универсальности "Документы" в "Документ" и т.д.
25 Defender aka LINN
 
22.12.10
10:51
(24) Для зачем?
26 Serg_1960
 
22.12.10
10:51
(21) У меня другой вариант.

PS: стёбаем дальше по поводу битых? Баян ведь.
27 Defender aka LINN
 
22.12.10
10:52
+(25) А. Ты не знаешь, что ПолноеИмя() возвращает, да? :)
28 Родной
 
22.12.10
10:52
ЗначениеЗаполнено не работает
29 sda553
 
22.12.10
10:54
Какая связь между нерезиновском и битыми ссылками?

А вообще тема уже была раскрыта тут
Книга знаний: v8: Пустые ссылки
30 sda553
 
22.12.10
10:55
(27) Что то вроде "Справочники.Номенклатура"
Разве нет?
31 wPa
 
22.12.10
10:55
(27) а  ТипЗнч(ОбъектПоБитойСсылке) какой будет?
У меня просто их нет и сделать не быстро )
32 wPa
 
22.12.10
10:56
(29) казалось бы, при чем тут Лужков? (С)
33 sda553
 
22.12.10
10:57
(30) О нет, позор мне. Пойду приму яду...
34 Irbis
 
22.12.10
10:57
(31) Неопределено
35 Defender aka LINN
 
22.12.10
10:57
(29) С битыми ссылками связи нет, а вот с огромным количеством криворуких в нерезиновске - есть :)
(30) Нет.
(31) Тип будет правильный.
36 sda553
 
22.12.10
10:58
(31) Ты можешь очень легко сделать битую ссылку даже если ее нет

ИскуственнаяБитаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(НовыйУНикальныйИдентификатор());

ТипЗнч такой же как у обычнойй ссылки
37 Defender aka LINN
 
22.12.10
10:58
+(35) Если тип самой ссылки, конечно имеется в виду.
Но правильный и гарантированно рабочий вариант - (4). :)
38 sda553
 
22.12.10
10:59
(37) А я все равно за (10) так как там кода меньше
39 wPa
 
22.12.10
10:59
(30) + весь путь по метаданным
40 wPa
 
22.12.10
11:00
(37) Нет - полученного по битой ссылке Объекта
41 sda553
 
22.12.10
11:01
(40) Это уже обсуждалось в (10)
42 Serg_1960
 
22.12.10
11:02
Хм... про значение в УникИдент ещё никто не спрашивал? Ну тогда я буду первый.
43 Defender aka LINN
 
22.12.10
11:03
(38) У нас, например, модули практически ВСЕГО не компилируются на сервере и в режиме внешнего соединения. Что будет с твоим кодом в этом случае? Ну и получать целиком объект только для того, чтобы проверить, существует ли он в базе - перебор.
44 sda553
 
22.12.10
11:03
(42) Спрашивай, но что то подсказывает что там уникальный идентификатор
45 Defender aka LINN
 
22.12.10
11:03
(40) ТипЗнч(Неопределено) = Тип("Неопределено")
46 sda553
 
22.12.10
11:05
(43) Модули надо нормально писать. С директивами...Будет плохо...
47 Defender aka LINN
 
22.12.10
11:07
(46) К сожалению, об том и речь. До многих одинэснегов это не доходит.
48 wPa
 
22.12.10
11:09
(43) убедил с (4). тем более он работает не только по битой ссылке, а и по несуществовавшей с таким гуидом. и объект гонять не нужно
49 Ненавижу 1С
 
гуру
22.12.10
11:10
чей-то вы так оживились, гляди-ка
перебирают еще: Неопределено, NULL
жрите что дают!
50 Defender aka LINN
 
22.12.10
11:18
(49) Тут ничего этого нет, ты промахнулся :)))
51 Ненавижу 1С
 
гуру
22.12.10
11:19
(50) да вот и хрен тебе: смотри (1) и (3) как пример
52 Serg_1960
 
22.12.10
11:19
(48) + потеря времени + забыли про RLS
53 Defender aka LINN
 
22.12.10
11:20
(51) Они не шарят :)
54 Ненавижу 1С
 
гуру
22.12.10
11:22
(53) зато как тычутся в темноте
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн