Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как осуществить условие в запросе, чтобы работало полное соединение?

Как осуществить условие в запросе, чтобы работало полное соединение?
Я
   Prog111
 
02.10.16 - 15:15
Есть скелет запроса:

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


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


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

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

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

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

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

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


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

Список тем форума
  Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует