|
Как определить кодом, что это битая ссылка? | ☑ | ||
---|---|---|---|---|
0
Икогнито
19.08.11
✎
21:46
|
Как определить кодом, что это битая ссылка?
|
|||
1
Necessitudo
19.08.11
✎
21:48
|
попытаться получить по ссылке объект конечно.
|
|||
2
Necessitudo
19.08.11
✎
21:56
|
можно еще попробовать сравнить тип данных через ТипЗНЧ() = Тип()
|
|||
3
vde69
19.08.11
✎
22:04
|
попытка
ссылка.ссылка; исключение битая = истина конецпопытки |
|||
4
Stim213
19.08.11
✎
22:04
|
Если знаешь, что это спр, то через Объект.Код, если док, то Объект.Дата
|
|||
5
Stim213
19.08.11
✎
22:05
|
ЗначениеЗаполнено()
|
|||
6
AlexNew
19.08.11
✎
22:05
|
Левое соединение, сколько можно?
|
|||
7
MikleV
19.08.11
✎
22:15
|
(0) Ссылка.ПолучитьОбъект() = Неопределено
|
|||
8
MikleV
19.08.11
✎
22:16
|
(3)бугага
|
|||
9
Злопчинский
19.08.11
✎
22:20
|
в 7-ке просто было... ПустоеЗначение(Ссылка)=0, а Ссылка.Выбран()=0
|
|||
10
Aleksey
19.08.11
✎
22:24
|
Запросом
|
|||
11
zak555
19.08.11
✎
22:26
|
Если НАйти(Сссылка) Тогда
Возврат ; КонецЕсли; Сообщить("куйня"); |
|||
12
Aleksey
19.08.11
✎
22:29
|
Функция ОбъектБДСуществует(ТестоваяСсылка)
ИмяОбъекта = ТестоваяСсылка.Метаданные().Имя; ПолноеИмяОбъекта = ТестоваяСсылка.Метаданные().ПолноеИмя(); Запрос = новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ИСТИНА КАК СсылкаБДСуществует |ИЗ | " + ПолноеИмяОбъекта + " КАК " + ИмяОбъекта + " |ГДЕ | " + ИмяОбъекта + ".Ссылка = &Cсылка"; Запрос.УстановитьПараметр("Cсылка", ТестоваяСсылка); РезультатЗапроса = Запрос.Выполнить(); Возврат Не РезультатЗапроса.Пустой(); КонецФункции и вызов Если не ОбъектБДСуществует(ТвояСсылка) тогда Сообщить(""+ТвояСсылка+" - битая ссылка",СтатусСообщения.ОченьВажное); |
|||
13
MikleV
19.08.11
✎
22:34
|
как много велосипедистов нынче
|
|||
14
Нуф-Нуф
19.08.11
✎
22:41
|
Найти(сокрлп(ссылка),"объект не найден")
|
|||
15
Alexandr Puzakov
20.08.11
✎
08:31
|
Попытка
СсылкаНаЭлемент.ПолучитьОбъект(); Исключение Сообщить("Ахтунг! Ссылка битая!"); КонецПопытки; |
|||
16
AlexNew
20.08.11
✎
08:38
|
(15) Какая попытка? А в запросе? А ежиков давят танками как в детском фильме.
|
|||
17
Alexandr Puzakov
20.08.11
✎
09:18
|
(16) перебор результатов запроса никто не отменял...
Каким образом предлагаете проверить без попытки? |
|||
18
vde69
20.08.11
✎
09:27
|
(16) в запросе
таблица.ссылка.ссылка есть NULL |
|||
19
Alexandr Puzakov
20.08.11
✎
09:56
|
(18) что это даст? Данные (строка таблицы) могут просто отсутствовать в ИБ, а уникальный идентификатор (ссылка) элемента останется в других таблицах (полях таблиц, имеющих ссылочный тип), так мы и получаем <Объект не найден ...>. Если искать в таблицах объектных данных, то мы нифига не найдём, их там просто нет...
|
|||
20
MikleV
20.08.11
✎
13:37
|
(19)посмешище
|
|||
21
Alexandr Puzakov
20.08.11
✎
13:56
|
(20) это еще почему?
|
|||
22
MikleV
20.08.11
✎
13:56
|
(21)потому что ерунду пишешь
|
|||
23
Alexandr Puzakov
20.08.11
✎
14:03
|
(22) например?
Вот имеем мы справочник Номенклатура, убилось в нем пара записей (ну или непосредственно удалили), и что нам даст попытка вытянуть из справочника Ссылка.Ссылка? |
|||
24
MikleV
20.08.11
✎
14:15
|
NULL, что и требовалось получить
|
|||
25
Alexandr Puzakov
20.08.11
✎
14:24
|
(24) NULL мы получим только если соединим, например, ПоступлениеТоваров.Товары.Номенклатура и Номенклатура.Ссылка, а соединение справочника с самим собой даст нулевой эффект.
|
|||
26
Rie
20.08.11
✎
14:27
|
Пошёл за попкорном...
|
|||
27
MikleV
20.08.11
✎
14:47
|
(25)а там выше что то было про справочник?
|
|||
28
Alexandr Puzakov
20.08.11
✎
14:57
|
(27) а про что там было? По-моему, как раз говорилось про справочник.
|
|||
29
Rie
20.08.11
✎
15:07
|
(28)
а) "Битая ссылка" - не обязательно на элемент справочника. б) Таблица.Ссылка.Ссылка - само по себе соединение. в) Таблица.Ссылка.Ссылка ЕСТЬ NULL - это лишь фрагмент некоторого запроса. |
|||
30
vde69
20.08.11
✎
15:12
|
(28) возьми и проверь, кстати указаный в (18) способ правильно работает и на элементах запрещенных доступом RLS а вот например (11) и (14) наботать на запрете RLS не будут, они на все закрытые (но существующие) ссылки будут кричать "битые"
|
|||
31
Alexandr Puzakov
20.08.11
✎
15:25
|
(29)
а) знаю. б) знаю. в) я боюсь, если попытаться потянуть данные вот так: ПоступлениеТоваров.Номенклатура.Ссылка.Ссылка, то для битой ссылки может ничего не получиться... Если с одной ссылкой, то проканает, а с двумя - никак. |
|||
32
Alexandr Puzakov
20.08.11
✎
15:28
|
(30) ну права это само собой, завершенный код тут никто не писал...
|
|||
33
Alexandr Puzakov
20.08.11
✎
15:31
|
+(31) для битой ссылки
Товары.Номенклатура.Ссылка ЕСТЬ NULL - канает. Товары.Номенклатура.Ссылка.Ссылка ЕСТЬ NULL - не канает. |
|||
34
Alexandr Puzakov
20.08.11
✎
15:34
|
(27) таблица.ссылка - может быть только у справочников, документов, планов счетов... Короче, только объектные таблицы имеют поле Ссылка.
|
|||
35
acsent
20.08.11
✎
15:49
|
(30) Так надо же в привелигерованном режиме получать. еще не хватало чтоб рлс накрутился
|
|||
36
Rie
20.08.11
✎
15:56
|
(31) А откуда Вы нарыли 2 (Две) Ссылка?
ПоступлениеТоваров.Номенклатура - это ведь не таблица. Это как раз ссылка. |
|||
37
Alexandr Puzakov
20.08.11
✎
16:00
|
(36) из (18)
|
|||
38
Rie
20.08.11
✎
16:07
|
(37) ПоступлениеТоваров.Номенклатура - это у вас что? таблица?
Сколько соединений Вы видите в (18)? Сколько их у Вас в ПоступлениеТоваров.Номенклатура.Ссылка.Ссылка? Ощутите разницу. |
|||
39
rs_trade
20.08.11
✎
16:12
|
В (14) самый простой и быстрый способ. Про ПолучитьОбъект можно и не думать даже. Тормозной вариант.
|
|||
40
Alexandr Puzakov
20.08.11
✎
16:15
|
(38) эти соединения не у меня, я прекрасно понимаю, что Товары.Номенклатура.Ссылка приведет к неявному левому соединению, которое и выплюнет нам нулл...
|
|||
41
Rie
20.08.11
✎
16:20
|
(40) В (18) была приведена _схема_ (обратите внимание на "таблица" - это обозначает именно _таблицу_, в Вашем примере - ПоступлениеТоваров).
А дальше - уже Ваши домыслы. |
|||
42
Alexandr Puzakov
20.08.11
✎
16:32
|
(41) я уже кажется пояснял, что поле ссылка есть только у объектных таблиц... Если было бы так:
Таблица.ПолеСсылочногоТипа - не возразил бы, но ведь мы имеем так: Таблица.Ссылка.Ссылка И в связи с этим напрашивается вот такая картина: ОбъектнаяТаблица.Ссылка.Ссылка И не надо из меня дурака делать, кто-то назвал рыбу салом, а я и подумал, что он про сало... |
|||
43
Aleksey
21.08.11
✎
11:28
|
(42) А ты не смешивай 2 РАЗНЫЕ задачи
1. Определить что конкретная ссылка битая 2. Найти ВСЕ битый ссылки В (0) спрашивается про первое. А вот то что написано в (19) - это второе Это две разные задачи и решаются они по разному |
|||
44
vde69
21.08.11
✎
11:30
|
(42)>>>Товары.Номенклатура.Ссылка ЕСТЬ NULL - канает.
Товары - Таблица Номенклатура - Ссылка Ссылка - Ссылка итого получаем Таблица.Ссылка.Ссылка ЕСТЬ NULL - канает. просто ты не понял что поле "Номенклатура" - это и есть Ссылка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |