Имя: Пароль:
1C
1С v8
Разность таблиц в запросе по двум полям
0 Chum
 
09.06.14
14:32
Вводная:

УПП
Есть регистр накопления "Реестр", где измерения "Заказ" и "Договор".
Есть документ "Заявка на расходование средств" с табличной частью "РасшифровкаПлатежа", где есть реквизиты "Ссылка" (aka Заказ) и "ДоговорКонтрагента".

Нужно получить таблицу с полями Заказ|Договор, куда войдут все документы Заказ, которые не фигурируют в регистре.

Нацарапал черновик запроса, а как поставить условие по двум параметрам?

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РеестрЗаявокНаПлатежОстатки.Заявка,
        |    РеестрЗаявокНаПлатежОстатки.Договор
        |ПОМЕСТИТЬ ЗаявкиВРеестре
        |ИЗ
        |    РегистрНакопления.РеестрЗаявокНаПлатеж.Остатки(&ДатаЗапроса, ) КАК РеестрЗаявокНаПлатежОстатки
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка КАК Заявка,
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента КАК Договор
        |ИЗ
        |    Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка,
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента";
1 Крошка Ру
 
09.06.14
14:35
Левое соединение "Расшифровка платежа" с "Реестром" по заказу и договору, где Реестр.заказ EСТЬNULL
2 Chum
 
09.06.14
14:42
(1) Спасибо, но можно ли пример? В запросах нуб, поэтому даже особо не понимаю нужны ли здесь временные таблицы
3 Ёпрст
 
09.06.14
14:46
(2)

выбрать * ИЗ ЗаявкиВРеестре как ЗаявкиВРеестре
внутреннее соединение Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
по ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка <>
РеестрЗаявокНаПлатежОстатки.Заявка и
ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента = РеестрЗаявокНаПлатежОстатки.Договор
4 Крошка Ру
 
09.06.14
14:47
(3) Не внутреннее. Так выберет те заказы, которые есть в реестре
5 Крошка Ру
 
09.06.14
14:48
+(4) вернее вообще пустой вернет, т.к. условие "<>"
6 Chum
 
09.06.14
14:48
?


        "ВЫБРАТЬ
        |    РеестрЗаявокНаПлатежОстатки.Заявка,
        |    РеестрЗаявокНаПлатежОстатки.Договор
        |ПОМЕСТИТЬ ЗаявкиВРеестре
        |ИЗ
        |    РегистрНакопления.РеестрЗаявокНаПлатеж.Остатки(&ДатаЗапроса, ) КАК РеестрЗаявокНаПлатежОстатки
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка КАК Заявка,
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента КАК Договор
        |ПОМЕСТИТЬ ЗаявкиВсе
        |ИЗ
        |    Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка,
        |    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ЗаявкиВсе.Заявка,
        |    ЗаявкиВсе.Договор
        |ИЗ
        |    ЗаявкиВсе КАК ЗаявкиВсе
        |        ЛЕВОЕ СОЕДИНЕНИЕ ЗаявкиВРеестре КАК ЗаявкиВРеестре
        |        ПО (ЗаявкиВРеестре.Заявка = ЗаявкиВсе.Заявка)
        |            И (ЗаявкиВРеестре.Договор = ЗаявкиВсе.Договор)
        |ГДЕ
        |    ЗаявкиВРеестре.Заявка ЕСТЬ NULL
        |    И ЗаявкиВРеестре.Договор ЕСТЬ NULL ";
7 Ёпрст
 
09.06.14
14:49
(4) да, наеборот надо, копи-пасте же :)

выбрать * ИЗ Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
внутреннее соединение ЗаявкиВРеестре как ЗаявкиВРеестре
по ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка <>
РеестрЗаявокНаПлатежОстатки.Заявка и
ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента = РеестрЗаявокНаПлатежОстатки.Договор
8 Крошка Ру
 
09.06.14
14:50
(6) Да. Только последнее условие можно убрать.
9 Крошка Ру
 
09.06.14
14:50
(7) Прочитай внимательнее (0)
10 Chum
 
09.06.14
14:51
(8) ок. спасибо.
11 Ёпрст
 
09.06.14
14:54
(9) и ?
12 Ёпрст
 
09.06.14
14:57
а ну да, туплю
13 Ёпрст
 
09.06.14
14:58
Хотя нет, заморочил мне голову..
14 Крошка Ру
 
09.06.14
15:08
(13) Нужны те заказы, которых нет в Реестре, у тебя - те заказы которые есть или там, или там (при этом соединение по договору)
15 Ёпрст
 
09.06.14
15:53
(14) и ? не равно по договору еще.. делов то, твой лефт джоин - тот-же иннер
16 Крошка Ру
 
09.06.14
16:40
(15) Не равно по договору в условии соединения?
17 Ёпрст
 
09.06.14
16:46
(16) да и по ссылке
18 Крошка Ру
 
09.06.14
16:48
(17) То есть запрос вытащит все заказы из регистра "Реестр", договоры по которым не встречаются в ТЧ "Расшифровка"?
19 Ёпрст
 
09.06.14
17:06
Наеборот, вытащит все документы, которых нет на остатке, что и нужно в (0)
20 Крошка Ру
 
09.06.14
17:13
(19) Да ты сам подумай)) Нужно вытащить все данные из одной таблицы и убрать из них те, которые есть в другой. А у тебя внутреннее (то есть симметричное) соединение. Как запрос сообразит из какой таблицы брать данные, а из какой отбрасывать?
21 Ёпрст
 
10.06.14
10:05
(20) см (12), есть такое, там кросс джоин выйдет
:)))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший