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

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 человек.
Рекламное место пустует