Имя: Пароль:
1C
 
Как правильно найти битую ссылку составного типа?
,
0 toypaul
 
гуру
11.11.14
10:25
Вот такое условие не срабатывает почему-то

ГДЕ ИТ_НаличиеПрикрепленныхФайлов.Объект.Ссылка ЕСТЬ NULL

типов много. есть и справочники и документы ...
1 Ёпрст
 
11.11.14
10:26
а с фига ли там null то будет ?
2 toypaul
 
гуру
11.11.14
10:27
насколько я понимаю (как написано на форуме) Объект.Ссылка приводить к соединению (левому). соот-но если ссылка битая, то будет НУЛЛ.

ваще запрос не я писал. мне надо разобраться.
3 ChAlex
 
11.11.14
10:57
В запросе НИКАК. Только через Ссылка.ПолучитьОбъект()=Неопределено
4 бомболюк
 
11.11.14
11:00
если нужны только битые то вот так должно полететь:
ГДЕ ИТ_НаличиеПрикрепленныхФайлов.Объект.Ссылка ЕСТЬ NULL
И ИТ_НаличиеПрикрепленныхФайлов.Объект <> Неопределено
5 Гёдза
 
11.11.14
11:10
А точно ссылка то битая?
если выбрать
ИТ_НаличиеПрикрепленныхФайлов.Объект.Ссылка
что будет?
6 Kalambur
 
11.11.14
11:20
(5) в запросе?
7 ChAlex
 
11.11.14
16:45
Блин - есть же время кусать кактус?! Для битой ссылки ВСЕ РАВНО есть ссылка!! Можете даже к реквизитам этой ссылки обращаться, другой вопрос что там все пусто. Поэтому ну нечего тут выеживаться!! НЕ УМЕЕТ 1С на сегодня выдавать битые ссылки в запросах!! Только через получение объекта!
8 H A D G E H O G s
 
11.11.14
16:50
(7) Ерунда.
9 StaticUnsafe
 
11.11.14
16:50
(7) Неправда. Получай представление ссылки. Если объекта нет, то в представлении будет "объект не найден(guid)".
парсишь представление, вуаля
10 H A D G E H O G s
 
11.11.14
16:51
(9) Автор помрет, прежде чем это отработает
11 H A D G E H O G s
 
11.11.14
16:54
Счаст я скриплю мозгами и вспоминаю, как я делал.
12 Serginio1
 
11.11.14
16:54
(0) Посмотри текст реального запроса
13 H A D G E H O G s
 
11.11.14
16:54
Не в том плане, как получить битые ссылки, а как получить их за приемлимое время.
14 StaticUnsafe
 
11.11.14
16:57
(10) зависит от количества типов в составном типе, для каждого типа можно делать свой запрос, или собрать его динамически по метаданным реквизита "Объект".

ну или "тестирование и исправление", но это не запрос.
15 H A D G E H O G s
 
11.11.14
16:59
Я делал не так, но:

1) ВЫБРАТЬ РАЗЛИЧНЫЕ ТИПЗНАЧЕНИЯ(ИТ_НаличиеПрикрепленныхФайлов.Объект)
2) Для Каждого ТипЗначения Из Результат

выполнить запрос РС + Справочник данного типа по Левому соединению
16 Serginio1
 
11.11.14
16:59
(13) Только левым соединением с каждой таблицей по типу, а для составных типов что типа такогд
Выбор Когда ТипЗначения(ИТ_НаличиеПрикрепленныхФайлов)= =ТИП(Документ.РеализацияТоваровУслуг) Тогда
соединение с
17 Serginio1
 
11.11.14
17:02
16+ либо сгруппировать по типу
ТИПЗНАЧЕНИЯ(ИТ_НаличиеПрикрепленныхФайлов.Объект),ИТ_НаличиеПрикрепленныхФайлов.Объект

и делать к каждой таблице левое соединение.
18 H A D G E H O G s
 
11.11.14
17:03
Примерное условие соединения:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЦеныНоменклатуры.Регистратор
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
        ПО (ЦеныНоменклатуры.Регистратор ССЫЛКА Документ.УстановкаЦенНоменклатуры
                И ЦеныНоменклатуры.Регистратор <> ЗНАЧЕНИЕ(Документ.УстановкаЦенНоменклатуры.ПустаяСсылка)
                И ЦеныНоменклатуры.Регистратор = УстановкаЦенНоменклатуры.Ссылка)
ГДЕ
    УстановкаЦенНоменклатуры.Ссылка ЕСТЬ NULL
19 H A D G E H O G s
 
11.11.14
17:03
(18) Я писал для РС и регистратора, РС с составным измерением бегло не нашел.
20 Serginio1
 
11.11.14
17:11
19+ либо делать Объединить все для каждого типа
21 StaticUnsafe
 
11.11.14
17:14
(19) аяяй, условие наложеное на правую таблицу при левом соединении, автоматически превращает соединение во внутреннее.

Книга Язык запросов "1С:Предприятия 8" стр. 115
22 Serginio1
 
11.11.14
17:16
(21) Только не для  ЕСТЬ NULL
стандарт SQL
23 StaticUnsafe
 
11.11.14
17:17
(22) пруф?
24 Зеленый пень
 
11.11.14
17:20
(0) попробуй
ГДЕ ИТ_НаличиеПрикрепленныхФайлов.Объект.Код ЕСТЬ NULL
И ИТ_НаличиеПрикрепленныхФайлов.Объект.Номер ЕСТЬ NULL
25 Serginio1
 
11.11.14
17:21
(23) То есть ты считаешь, что левое соединение
с условием  УстановкаЦенНоменклатуры.Ссылка ЕСТЬ NULL
то есть отсутствием соединения превращается во внутреннее?

Внутренним оно будет когда соединение выполняется
26 H A D G E H O G s
 
11.11.14
17:22
О чем я и говорил, в одной из прошлых веток, 1С никам дали несколько парадигд, в расчете на их дятлизм, дабы они вусмерть не убили систему, и они благополучно ими пользуются не пытаясь мыслить, почему так.

Это я о (21)
27 StaticUnsafe
 
11.11.14
17:22
(25) именно так и считаю
28 H A D G E H O G s
 
11.11.14
17:23
(27) Попробуй. Проверить.
29 H A D G E H O G s
 
11.11.14
17:25
(25) И ведь его мозг не в состоянии понять, почему
"условие наложеное на правую таблицу при левом соединении, автоматически превращает соединение во внутреннее.". И почему эта фраза образна.
30 StaticUnsafe
 
11.11.14
17:25
(28) проверил. если соединить два справочника по ссылкам левым соединением и в ГДЕ указать ЕСТЬ NULL на поле из правого справочника то запрос пустой, т.е. соединение стало внутренним, проффесор
31 H A D G E H O G s
 
11.11.14
17:27
(30) Продолжай пробовать.
32 StaticUnsafe
 
11.11.14
17:27
(31) лучше расскажи про состояния мозга
33 Serginio1
 
11.11.14
17:28
(30) https://ru.wikipedia.org/wiki/Join_(SQL)#LEFT_OUTER_JOIN

А то, что у тебя запрос пустой, то это говорит о том, что при левом соединении выполнились все условия.
34 StaticUnsafe
 
11.11.14
17:30
(33) читай еще раз, два справочника по ссылкам, т.е. не выполнится ни одно соединение, т.к. справочники разные. Попробуй, дядь
35 H A D G E H O G s
 
11.11.14
17:30
(32)
Давай я тебе помогу:

ВЫБРАТЬ ПЕРВЫЕ 10
    ТоварыОрганизаций.Регистратор
ИЗ
    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ABCКлассификацияПокупателей КАК ABCКлассификацияПокупателей
        ПО ТоварыОрганизаций.Регистратор = ABCКлассификацияПокупателей.Ссылка
ГДЕ
    ABCКлассификацияПокупателей.Ссылка ЕСТЬ NULL
36 Serginio1
 
11.11.14
17:30
(32) Безумству храбрых поем мы песню. Кстати сколько ты с SQL работаешь, и сколько книжек кроме Язык запросов "1С:Предприятия 8" прочитал?
37 H A D G E H O G s
 
11.11.14
17:32
(36) Все в порядке, я занес его в свой список.
38 Serginio1
 
11.11.14
17:32
(34) Кстати Для тебя H A D G E H O G s специально приводит код. Тогда и ты приведи свой
39 StaticUnsafe
 
11.11.14
17:35
(38) ладно, убедили
40 StaticUnsafe
 
11.11.14
17:35
все таки монстры из палеозоя тоже на что то годятся
41 StaticUnsafe
 
11.11.14
17:36
это я не про себя (если что)
42 Fragster
 
гуру
11.11.14
17:40
(26) да ладно, операция поиска битых ссылок все равно разовая. Ну, ради интереса можешь конечно объединение залепить, но как правило сильно впадлу.
43 Fragster
 
гуру
11.11.14
17:41
кстати, (0) должно таки работать :)
44 Torquader
 
11.11.14
17:46
Нет, а в чём проблема поиска битых ссылок ?
Ссылка считается битой, если в таблице объекта, на который она ссылается, нет записи.
Другое дело, что если у нас ссылка на документ общего вида, то без получения конкретного вида документа понять, что она битая - перебирать таблицы всех документов.