Имя: Пароль:
1C
1С v8
Как осуществить условие в запросе, чтобы работало полное соединение?
0 Prog111
 
02.10.16
15:15
Есть скелет запроса:

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


В результате запроса записи из второй таблицы ("ВложенныйЗапрос") выходят не все, так как на первую таблицу есть ограничения типа "ГДЕ". А как сделать, чтобы можно было и условия поставить на таблицы, и чтобы выходили все записи (там где нет записей - выходил NULL)?
1 и тут и там
 
02.10.16
15:25
Нужно убрать вот это
" ГДЕ
            ВозвратТоваровОтКлиентаТовары.Ссылка.ХозяйственнаяОперация = &ХозяйственнаяОперация"
2 jsmith
 
02.10.16
15:27
Я ничо не понял
3 Prog111
 
02.10.16
15:30
Попробую переформатировать:


"ВЫБРАТЬ
|    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
|    ВложенныйЗапрос.НоменклатураВозврат КАК НоменклатураВозврат
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|            ВозвратТоваровОтКлиентаТовары.Номенклатура КАК НоменклатураВозврат
|        ИЗ
|            Документ.ВозвратТоваровОтКлиента.Товары КАК ВозвратТоваровОтКлиентаТовары
|        ГДЕ
|            ВозвратТоваровОтКлиентаТовары.Ссылка.ХозяйственнаяОперация = &ХозяйственнаяОперация) КАК ВложенныйЗапрос
|        ПО (РеализацияТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.НоменклатураВозврат)
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
|    И РеализацияТоваровУслугТовары.Ссылка.Дата >= &НачалоПериода
|    И РеализацияТоваровУслугТовары.Ссылка.Дата <= &КонецПериода"
4 и тут и там
 
02.10.16
15:32
непонятка не в запросе а в том что ты хочешь в итоге
5 и тут и там
 
02.10.16
15:33
если тебе не нужны условия - убери их.
6 Prog111
 
02.10.16
15:34
(3) Вот здесь первая таблица - это "РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура"

Вторая таблица - это вложенный запрос "ВложенныйЗапрос.НоменклатураВозврат КАК НоменклатураВозврат".

Если на первую таблицу не накладывать эти условия:
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
|    И РеализацияТоваровУслугТовары.Ссылка.Дата >= &НачалоПериода
|    И РеализацияТоваровУслугТовары.Ссылка.Дата <= &КонецПериода"

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

Как сделать так, чтобы и условия на первую таблицу были, и чтобы из-за этих условий не ограничивалось количество записей во второй таблице?
7 Prog111
 
02.10.16
15:34
(4) Мне нужно классическое полное соединение двух таблиц. Чтобы были присутствовали все записи из обеих таблиц.
8 и тут и там
 
02.10.16
16:00
каких двух таблиц? у тебя их три.
две во вложенном запросе со полным объединением, ты на них потом кладешь условие и получаешь третью таблицу к на которую тоже кладешь условие

если не нужны условия - убери их


"ВЫБРАТЬ
|    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
|    ВложенныйЗапрос.НоменклатураВозврат КАК НоменклатураВозврат
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|            ВозвратТоваровОтКлиентаТовары.Номенклатура КАК НоменклатураВозврат
|        ИЗ
|            Документ.ВозвратТоваровОтКлиента.Товары КАК ВозвратТоваровОтКлиентаТовары) КАК ВложенныйЗапрос
|        ПО (РеализацияТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.НоменклатураВозврат)
"
9 Prog111
 
02.10.16
16:33
(8) Мне нужно наложить это условие на первую таблицу, а потом соединить её со второй. Кажется, дошло - первую таблицу (Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары) тоже сделать вложенным запросом?
10 ERWINS
 
02.10.16
17:00
выбери данные одним запросом из регистра накопления.
помести во временную таблицу, а потом через объединить все всерни
тогда не будет полного соединения.
11 и тут и там
 
02.10.16
17:35
(9) как вариант, но временная таблица (как тебе сказал (10) лучше)
кстати ты не группируешь. тебе принципиально получать кучу одинаковых позиций?
12 Prog111
 
02.10.16
17:41
(11) Я группирую, просто упростил запрос до минимума, чтобы саму методику понять.