Имя: Пароль:
1C
1С v8
Не вхождение элементов справочника в результат вложенного запроса
,
0 Студиозус
 
28.11.13
10:40
Есть запрос в котором надо выбрать все элементы справочника которых нет в регистре. Т.к. запрос является частю динамического списка делаю вложенным.

ВЫБРАТЬ
    Автомобили.Ссылка КАК Автомобиль,
    ЗаказыАвтомобилейОстатки.Заказ.Заказчик КАК Контрагент
ИЗ
    Справочник.Автомобили КАК Автомобили
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыАвтомобилей.Остатки КАК ЗаказыАвтомобилейОстатки
        ПО (ЗаказыАвтомобилейОстатки.Автомобиль = Автомобили.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПланНаВыкупОбороты.Автомобиль КАК Автомобиль
        ИЗ
            РегистрНакопления.ПланНаВыкуп.Обороты КАК ПланНаВыкупОбороты) КАК ПланНаВукуп
        ПО (Автомобили.Ссылка = ПланНаВукуп.Автомобиль)
ГДЕ
    НЕ Автомобили.ПометкаУдаления

Вопрос: Как задать условие что бы выбирались все элементы справочника которых нет в результате выполнения вложеного запроса.

Спасибо.
1 butterbean
 
28.11.13
10:43
в ГДЕ добавь (НЕ ЗаказыАвтомобилейОстатки.Автомобиль ЕСТЬ NULL)
2 butterbean
 
28.11.13
10:44
(1) нет, надо так:
И ПланНаВукуп.Автомобиль ЕСТЬ NULL
3 Студиозус
 
28.11.13
10:46
(2) Всё равно выбирает  и те что есть во вложенном запросе.
4 Aprobator
 
28.11.13
10:48
Если нет в таблице остатков, это еще не значит, что нет ссылок в регистре вообще.
5 butterbean
 
28.11.13
10:49
(4) у него обороты за весь период
6 Студиозус
 
28.11.13
10:49
(4) Там этот авто точно есть.
7 Студиозус
 
28.11.13
10:50
Я вообще делал через ВЫБРАТЬ РАЗЛИЧНЫЕ напрмую из регистра, но работает медленно.
8 butterbean
 
28.11.13
10:50
(3) под вложенным запросом подразумевается  ПланНаВукуп??
9 Студиозус
 
28.11.13
10:51
(8) Да
10 Aprobator
 
28.11.13
10:51
(5) по РегистрНакопления.ЗаказыАвтомобилей.Остатки не скажешь. Хотя это - не вложенный запрос.
11 Aprobator
 
28.11.13
10:52
в любом случае юзать тут таблицу оборотов тоже кошерно.
12 Aprobator
 
28.11.13
10:53
ВЫБРАТЬ РАЗЛИЧНЫЕ из основной табоицы - самое то.
13 Студиозус
 
28.11.13
10:53
Что то и через вложенный запрос работает медленно.
А пакет сделать нельзя.
14 butterbean
 
28.11.13
10:53
(9) показывай запрос с  учетом (2)
15 Aprobator
 
28.11.13
10:55
(13) можно - сначала получаешь ссылки с регистра, а потом уже соединяешь со справочником.
16 Aprobator
 
28.11.13
10:56
в (11) кошерно = не кошерно. Пропустил.
17 Skom
 
28.11.13
10:56
А чем так не катит?

Выбрать Спр.Ссылка ИЗ Справочник
Где Спр.Ссылка НЕ В (Выбрать Автомобили ИЗ Регистра)
18 Skom
 
28.11.13
10:57
(0) тебе в итоге что получить то надо? просто те авто, которых нет в регистрах?
19 Skom
 
28.11.13
10:57
*получить-то
20 Студиозус
 
28.11.13
10:58
(14)
ВЫБРАТЬ
    Автомобили.Ссылка КАК Автомобиль,
    ЗаказыАвтомобилейОстатки.Заказ.Заказчик КАК Контрагент,
    ПланНаВукуп.Автомобиль КАК Автомобиль1
ИЗ
    Справочник.Автомобили КАК Автомобили
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыАвтомобилей.Остатки КАК ЗаказыАвтомобилейОстатки
        ПО (ЗаказыАвтомобилейОстатки.Автомобиль = Автомобили.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПланНаВыкупОбороты.Автомобиль КАК Автомобиль
        ИЗ
            РегистрНакопления.ПланНаВыкуп.Обороты КАК ПланНаВыкупОбороты) КАК ПланНаВукуп
        ПО Автомобили.Ссылка = ПланНаВукуп.Автомобиль
            И (ПланНаВукуп.Автомобиль ЕСТЬ NULL )
ГДЕ
    НЕ Автомобили.ПометкаУдаления
21 Aprobator
 
28.11.13
10:58
(7) хм - ща потестю на чем нить.
22 Студиозус
 
28.11.13
10:59
(18) Которых нет в регисте ПланНаВыкуп
23 Aprobator
 
28.11.13
11:00
(20) ПланыВыкуп.Автомобиль Есть NULL  в последнее где убери, а не в условие соединения.
24 Skom
 
28.11.13
11:01
тебе надо выбрать все из
ЗаказыАвтомобилей
чего нет в
ПланНаВыкуп
так?
25 Студиозус
 
28.11.13
11:03
(23) Точно! Спасибо, заработало.

Но вот поиск по этому списку очень уж медленно идёт. Не пойму причины.
26 Aprobator
 
28.11.13
11:04
(24) Выбрать автомобили на которые нет ссылок в регистре ПланНаВыкуп.
27 Aprobator
 
28.11.13
11:04
(25) сейчас пару тестов сделаю - скажу как шустрее.
28 Студиозус
 
28.11.13
11:05
Почему может долго работать поиск по строке в динамическом списке?
29 Студиозус
 
28.11.13
11:05
(27) Буду очень благодарен.
30 Skom
 
28.11.13
11:09
ВЫБРАТЬ
    Автомобили.Ссылка КАК Автомобиль,
    ЗаказыАвтомобилейОстатки.Заказ.Заказчик КАК Контрагент
ИЗ
    Справочник.Автомобили КАК Автомобили
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыАвтомобилей.Остатки КАК ЗаказыАвтомобилейОстатки
        ПО (ЗаказыАвтомобилейОстатки.Автомобиль = Автомобили.Ссылка)  
ГДЕ
    НЕ Автомобили.ПометкаУдаления И    
    Автомобили.Ссылка НЕ В (
                            ВЫБРАТЬ РАЗЛИЧНЫЕ
                                ПланНаВыкупОбороты.Автомобиль
                            ИЗ
                                РегистрНакопления.ПланНаВыкуп.Обороты КАК ПланНаВыкупОбороты
                            )
31 Skom
 
28.11.13
11:09
чем так не катит?
32 Aprobator
 
28.11.13
11:11
(31) прокатить то должно, только вроде условие В помедленне чем соединение.
33 Студиозус
 
28.11.13
11:11
(30) Работает медленно. Я так и делал.
34 Aswed
 
28.11.13
11:17
(28) ХЗ.
Я такую хрень решал программным добавлением отбора в дин. список.
35 Skom
 
28.11.13
11:17
А если так

ВЫБРАТЬ
    Автомобили.Ссылка КАК Автомобиль,
    ЗаказыАвтомобилейОстатки.Заказ.Заказчик КАК Контрагент
ИЗ
    Справочник.Автомобили КАК Автомобили
ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ЗаказыАвтомобилей.Остатки КАК ЗаказыАвтомобилейОстатки
    ПО (ЗаказыАвтомобилейОстатки.Автомобиль = Автомобили.Ссылка)  
ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ПланНаВыкуп.Обороты КАК ПланНаВыкуп
    ПО (Автомобили.Ссылка = ПланНаВукуп.Автомобиль)        
ГДЕ
    НЕ Автомобили.ПометкаУдаления И ПланНаВыкуп Есть NULL
36 Skom
 
28.11.13
11:18
сложно замеры скорости делать, если базы нет под рукой с данными.
37 Aswed
 
28.11.13
11:19
Кстати никто не в курсе почему медленно может происходить поиск в динамическом списке?
38 Skom
 
28.11.13
11:20
(36) ой, что то фигню нарисовал))
39 Студиозус
 
28.11.13
11:20
Спасибо. Теперь запрос формируется быстро. А вот поиск до списку все таки работает медленно. Очень медленно. Не понимаю почему.
40 Aswed
 
28.11.13
11:21
(36) "ПланНаВыкуп Есть NULL" - автомобиль пропустил)
41 Skom
 
28.11.13
11:21
(40) ага. уже увидел
42 Skom
 
28.11.13
11:21
(39) после чего быстро заработало?
43 Студиозус
 
28.11.13
11:22
(42) Как сделал соединение с результатом вложенного запроса. Когда делал выбрать различные работало раз в 5 медленнее.
44 Aprobator
 
28.11.13
11:24
нефига не понял, а чем Выбрать РАЗЛИЧНЫЕ от вложенного запроса отличается?
45 Aswed
 
28.11.13
11:27
А кстати да. По идеи то работать должно одинаково.
46 Студиозус
 
28.11.13
11:30
Не знаю. Но работает быстрее.
Всем спасибо.
47 Aprobator
 
28.11.13
11:33
(45) посмотрел отдельно подзапрос. Так ВЫБРАТЬ РАЗЛИЧНЫЕ из основной таблицы, работает гораздо быстрее чем ВЫБРАТЬ из таблицы оборотов. Сейчас попробую целиком ситуацию сэмулировать на регистре Продажи и Справочнике номенклатура.
48 Aswed
 
28.11.13
11:40
(47) А вложенный запрос медленнее работает чем выбрать различные?
49 Aswed
 
28.11.13
11:40
(48) по идеи то на то и должно выходить.
50 Skom
 
28.11.13
11:42
Еще бы посмотреть как у него в базе индексы организованы
51 Aswed
 
28.11.13
11:42
(50) вопрос есть ли они))))
52 Skom
 
28.11.13
11:43
если базу сами делали, вполне возможно что и нету)
53 Aswed
 
28.11.13
11:43
(52) Щас будет спрашивать а что это?:))))
54 hhhh
 
28.11.13
11:49
(35) ИЛИ блин, а не И. Что вы сегодня все с утра?
55 Aswed
 
28.11.13
11:51
(54) Да что ты с этим ИЛИ, ты лучше расскажи что такое ИНДЕКСЫ
56 Aswed
 
28.11.13
11:51
+(55) ???
57 Aprobator
 
28.11.13
11:52
(54) какое ИЛИ? Интересуют элементы справочника автомобили помеченные на удаление, на которые нет ссылок в регистре.
58 Aprobator
 
28.11.13
11:53
Сделал тест. Тестировались следующие запросы:

    ТекстЗапроса1 =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    спрНоменклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК спрНоменклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |            Продажи.Номенклатура КАК Номенклатура
    |        ИЗ
    |            РегистрНакопления.Продажи КАК Продажи) КАК рнПродажиСсылкиНаНоменклатуру
    |        ПО спрНоменклатура.Ссылка = рнПродажиСсылкиНаНоменклатуру.Номенклатура
    |ГДЕ
    |    рнПродажиСсылкиНаНоменклатуру.Номенклатура ЕСТЬ NULL ";
    
    ТекстЗапроса2 =
    "ВЫБРАТЬ
    |    ПродажиОбороты.Номенклатура
    |ИЗ
    |    Справочник.Номенклатура КАК спрНоменклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    |        ПО спрНоменклатура.Ссылка = ПродажиОбороты.Номенклатура
    |ГДЕ
    |    ПродажиОбороты.Номенклатура ЕСТЬ NULL ";
    
    ТекстЗапроса3 =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Продажи.Номенклатура КАК Номенклатура
    |ПОМЕСТИТЬ ВТСсылкиНаНоменклатуру
    |ИЗ
    |    РегистрНакопления.Продажи КАК Продажи
    |
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    спрНоменклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК спрНоменклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТСсылкиНаНоменклатуру КАК ВТСсылкиНаНоменклатуру
    |        ПО спрНоменклатура.Ссылка = ВТСсылкиНаНоменклатуру.Номенклатура
    |ГДЕ
    |    ВТСсылкиНаНоменклатуру.Номенклатура ЕСТЬ NULL ";
    
    ТекстЗапроса4 =
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    НЕ Номенклатура.Ссылка В
    |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                    Продажи.Номенклатура
    |                ИЗ
    |                    РегистрНакопления.Продажи КАК Продажи)";
    

59 Aprobator
 
28.11.13
11:55
Места распределились так:
1 - ТекстЗапроса1;
2 - ТекстЗапроса4;
3 - ТекстЗапроса3;
4 - ТекстЗапроса2;
60 Aprobator
 
28.11.13
11:56
Причем когда в Запросе3 попытался использовать индексы - он стал еще медленнее.
61 Aswed
 
28.11.13
11:57
(59) Большая разница между 1 и 2 местами?
62 Aprobator
 
28.11.13
11:58
(61) 0,04. Делал по 10 замеров.
63 Aswed
 
28.11.13
11:59
(62) В общем выбрать различные всё таки быстрее.
Спасибо, пригодиться в будущем.
Тогда вопросы возникают по устройству базы топик стартера.
64 hhhh
 
28.11.13
12:00
(56) думаю, у автора поле

ЗаказыАвтомобилейОстатки.Заказ.Заказчик КАК Контрагент

не проиндексировано.
65 Aprobator
 
28.11.13
12:01
по времени исполнения:
1 - ТекстЗапроса1 - 0,659373
2 - ТекстЗапроса4 - 0,697253
3 - ТекстЗапроса3 - 0,920075
4 - ТекстЗапроса2 - 1,380547
66 Aprobator
 
28.11.13
12:01
(64) и к гадалке не ходи.