Имя: Пароль:
1C
 
Правое соединение не добавляет записи если данные не пересекаются
0 kobayoshi
 
31.05.24
11:13
Подскажите, если есть запрос вида:
ВЫБРАТЬ
ДоступныеОстаткиПланируемыхПоступлений.Характеристика,
ДоступныеОстаткиПланируемыхПоступлений.Склад,
ДоступныеОстаткиПланируемыхПоступлений.Количество
Поместить ОжидаемыеПоступления
ИЗ
РегистрСведений.ДоступныеОстаткиПланируемыхПоступлений КАК ДоступныеОстаткиПланируемыхПоступлений
ГДЕ
ДоступныеОстаткиПланируемыхПоступлений.Номенклатура = &Ссылка
И ДоступныеОстаткиПланируемыхПоступлений.Количество > 0


Отдельно он возвращает что-то вроде этого:
Характеристика|Склад|Количество
M, белый|Основной|50


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


Получится что-то такое:
Характеристика|Склад|ВНаличииОстаток|Количество
S, белый|Магазин|8|0
L, белый|Магазин2|7|0


А нужно, что бы результат из первого запроса тоже выводился:
Характеристика|Склад|ВНаличииОстаток|Количество
M, белый|Основной|0|50
S, белый|Магазин|8|0
L, белый|Магазин2|7|0
1 Волшебник
 
31.05.24
11:13
В теме ПРАВОЕ, а в запросе ПОЛНОЕ... Странно-странно
2 Волшебник
 
31.05.24
11:14
отбор по номенклатуре надо загнать сюда:
РегистрНакопления.СвободныеОстатки.Остатки(&ТекДата, сюда)
3 kobayoshi
 
31.05.24
11:27
(1) Извиняюсь, опечатка, имел ввиду Полное
4 kobayoshi
 
31.05.24
11:32
(2) Действительно, так записи добавляются в конец результата! Но почему-то поля склад и хар-ка у строк из первой таблицы пустые... Вот так получается:
Характеристика|Склад|ВНаличииОстаток|Количество
S, белый|Магазин|8|
L, белый|Магазин2|7|
|||50
5 Волшебник
 
31.05.24
11:37
(4) Таблички у Вас кривые...
6 Мультук
 
31.05.24
11:37
(3)

Берём ВСЕ данные из "ОжидаемыеПоступления" присоединяем к ним данные из свободных остатков
Люди, которые зевают одно из условий связи, в данном случае по номенклатура - ССЗБ

ВЫБРАТЬ
  ОжидаемыеПоступления.Характеристика,
  ОжидаемыеПоступления.Склад,
  ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0),
  ОжидаемыеПоступления.Количество
ИЗ
   ОжидаемыеПоступления КАК ОжидаемыеПоступления

   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&ТекДата, ) КАК СвободныеОстаткиОстатки

ПО
  (ОжидаемыеПоступления.Характеристика = СвободныеОстаткиОстатки.Характеристика)
И (ОжидаемыеПоступления.Склад = СвободныеОстаткиОстатки.Склад)
И (ОжидаемыеПоступления.Номенклатура = СвободныеОстаткиОстатки.Номенклатура)

ГДЕ
   СвободныеОстаткиОстатки.Номенклатура = &Ссылка
7 Волшебник
 
31.05.24
11:38
(3) А Вы знаете, что ПОЛНОЕ = ЛЕВОЕ + ПРАВОЕ ?
8 mmg
 
31.05.24
12:14
(0) ГДЕ превращает ПОЛНОЕ соединение в ПРАВОЕ
9 kobayoshi
 
31.05.24
13:46
(8) Спасибо, без него заработало. Но, как я указывал в (4), почему-то пустые поля Склад и Хар-ка присоединяются, только Количество заполнено.
В итоге я решил не заморачиваться. В моём случае достаточно отдельно получить таблицу планируемых поступлений и при выводе результата искать в ней. Там данных не так много, работает шустро, хоть и не так изящно, как хотелось бы)