|   |   | 
| 
 | Как определить кодом, что это битая ссылка? | ☑ | ||
|---|---|---|---|---|
| 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 - канает. просто ты не понял что поле "Номенклатура" - это и есть Ссылка | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |