Имя: Пароль:
1C
1С v8
Как определить кодом, что это битая ссылка?
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 - канает.


просто ты не понял что поле "Номенклатура" - это и есть Ссылка