Имя: Пароль:
1C
1С v8
Как определить программно ссылка битая или нет ?
0 EarthsSoul
 
29.08.12
07:25
Здравствуйте

Нужно определить ссылка битая или нет, и не хочется использовать конструкцию: попытка ... исключение.
Как определить программно, ссылка битая или нет ?
1 EarthsSoul
 
29.08.12
07:34
Похоже ничего лучше чем

Если БИТАЯССЫЛКА.ПолучитьОбъект() = Неопределено тогда

уже не найти...
2 kosts
 
29.08.12
07:35
можно попробовать запрос
3 shuhard
 
29.08.12
07:36
(2) +1
код для справочника
номер для документа
4 Sammo
 
29.08.12
07:42
Кстати, емнип запрос у меня получился быстрее, чем получитьобъект
5 DosBot
 
29.08.12
08:09
могу предложить код сомнительного качества, но работает всегда, даже в случае, если ссылки нема из-за РЛС:

ОбъектСуществует = (Найти(Строка(Задача), "<Объект не найден>") = 0)
6 DosBot
 
29.08.12
08:11
+(5) тьфу,

Задача = НужныйОбъект
7 rs_trade
 
29.08.12
08:12
(5) нормальный код. по крайней мере он быстрее в тысячу раз чем вариант в (1)
8 Рэйв
 
29.08.12
08:12
Если Лев(Строка(Реквизит.Ссылка),7) ="<Объект" Тогда
   Сообщить("Оно битое!");
КонецЕсли;
9 Starhan
 
29.08.12
08:13
ЕМНИП в запросе.

ГДЕ
(НЕ Объект Есть NULL) И (Объект.Ссылка Есть NULL)
10 DosBot
 
29.08.12
08:13
(7) честно говоря, помозговав на эту тему и выбирая из множества вариантов, пожалуй да, он нормальный. Ввиду того, что объектов с представлением "<Объект не найден>" уж точно не будет :)
11 Рэйв
 
29.08.12
08:14
для пущей уверенности можно

Если Лев(Строка(Реквизит.Ссылка),18) ="<Объект не найден>" Тогда
12 andrewks
 
29.08.12
08:14
(4) зависит от типа объекта - сколько и каких у него реквизитов, ТЧ
13 andrewks
 
29.08.12
08:14
(11) не зачёт
14 hhhh
 
29.08.12
08:15
(7) а откуда сведения, что быстрее? Ведь платформа тоже неявно выполняет команду ПолучитьОбъект(), и после этого уже пишет "Объект не найден".
15 Sammo
 
29.08.12
08:15
(10) Хм. А если кто-то создаст элемент справочника с таким наименованием и основным представлением по наименованию?
Просто чтобы потролить?
16 andrewks
 
29.08.12
08:17
(14) не-не-не, не путай, представление есть всегда, за ним в БД не лезут
17 DosBot
 
29.08.12
08:18
(15) вероятность этого идиотизма намного меньше, чем вред от рассуждений на тему как бы идеально-универсально узнать битость объекта :)
18 DosBot
 
29.08.12
08:19
+(15) если захочется потроллить - есть масса других вариантов.. %)
19 DosBot
 
29.08.12
08:21
а главное в (5) работает даже в случае RLS - когда нельзя обращаться к другим реквизитам.. и Попытка Исключение не нужны..
20 andrewks
 
29.08.12
08:23
(19) пока (внезапно) не найдётся клиент с интерфейсом на другом языке?
21 GaikA_13rus
 
29.08.12
08:26
22 hhhh
 
29.08.12
08:32
(16) то есть вы намекаете, что представление всегда считывается из базы вместе со ссылкой? И хранится в памяти? Но это же нерационально. Может оно не понадобится, зачем его каждый раз грузить?
23 DosBot
 
29.08.12
08:32
(20) Если делаешь нетленку с расчётом на международный уровень тогда конечно - не. Просто это самый простой способ, и конечно, не самый надёжный
24 rs_trade
 
29.08.12
08:33
(20) что же выбрать?

1. Тормозной способ работающий в 100% случаев
2. Быстрый способ работающий в 99% случаев?

я бы выбрал второе. уж больно ПолучитьОбъект грузит систему.
25 DosBot
 
29.08.12
08:34
а вот интересно, чего выдаст платформа вместо <Объект не найден> в отладчике, на другом языке?? есть возможность проверить?
26 DosBot
 
29.08.12
08:35
<Object not found> и т.п.??
27 DosBot
 
29.08.12
08:37
можно в конце концов проверить, если основной язый русский тогда
Найти(), иначе ПолучитьОбъект()
28 andrewks
 
29.08.12
08:43
(24) я бы выбрал
3. запрос
29 andrewks
 
29.08.12
08:44
(22) на то оно и представление
30 Sammo
 
29.08.12
09:11
(26) Да. Для английского, разумеется