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

1С:Предприятие ::

Метки: 

Левое соединение в запросе

Я
   serg_buz
 
16.04.18 - 10:15
Доброго времени! Коллеги, помогите пожалуйста, где я допустил ошибку, ни как понять не могу... Есть запрос, его смысл понять по каким заказам покупателя пришла вся номенклатура и он готов к отгрузке: ВЫБРАТЬ
    ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
    ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
    ЗаказыПокупателейОстатки.КоличествоОстаток
ПОМЕСТИТЬ Заказ
ИЗ
    РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
ГДЕ
    ЗаказыПокупателейОстатки.Номенклатура.Услуга = ЛОЖЬ
    И ЗаказыПокупателейОстатки.ЗаказПокупателя.Ответственный = &Ответственный
    И ЗаказыПокупателейОстатки.ЗаказПокупателя.ВнутреннийСтатусЗаказаПокупателя = ЗНАЧЕНИЕ(Перечисление.СтатусЗаказаПокупателя.Запущен)
;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Заказ.ЗаказПокупателя КАК ЗаказПокупателя,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Заказ.Номенклатура) КАК Номенклатура,
    СУММА(Заказ.КоличествоОстаток) КАК КоличествоОстаток,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Остатки.ДокументРезерва) КАК ДокументРезерва,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Остатки.Номенклатура) КАК Номенклатура1,
    СУММА(Остатки.КоличествоОстаток) КАК КоличествоОстаток1,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказыПоставщикам.ЗаказПоставщикуДокументОснование) КАК ЗаказПоставщикуДокументОснование,
    СУММА(ЗаказыПоставщикам.КоличествоОстаток) КАК КоличествоОстаток2
ИЗ
    Заказ КАК Заказ
        ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
        ПО Заказ.ЗаказПокупателя = Остатки.ДокументРезерва
            И Заказ.Номенклатура = Остатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыПоставщикам КАК ЗаказыПоставщикам
        ПО Заказ.ЗаказПокупателя = ЗаказыПоставщикам.ЗаказПоставщикуДокументОснование
ГДЕ
    Заказ.КоличествоОстаток <= Остатки.КоличествоОстаток
    И ЗаказыПоставщикам.КоличествоОстаток ЕСТЬ NULL

СГРУППИРОВАТЬ ПО
    Заказ.ЗаказПокупателя

УПОРЯДОЧИТЬ ПО
    ЗаказПокупателя,
    Номенклатура
Проверяю через консоль запросов первую временную таблицу "Заказ" по одному заказу покупателя вижу 4 номенклатуры, по временной таблице "Остатки" вижу 3 номенклатуры, т.е. в результат он не должен падать, а он падает, и показывает что по "Заказ.Номенклатура" = 3. Что то я, видимо, затупил с соединением, по тому что если убрать связь
И Заказ.Номенклатура = Остатки.Номенклатура
то в результате "Заказ.Номенклатура" = 4, как и должно быть. Не могу понять где я ошибся, подскажите пожалуйста.
 
 
   Darych
 
1 - 16.04.18 - 10:20
ну так у тебя условие на количествоостаток, а не на номенклатуру
   serg_buz
 
2 - 16.04.18 - 10:39
Все правильно, по номенклатуре мне нужно только общее понимание пришло все или нет. Или я Вас неправильно понял?
   catena
 
3 - 16.04.18 - 10:52
Условие на левую таблицу превращает левое соединение во внутреннее.
   Darych
 
4 - 16.04.18 - 10:59
а (3) права... у тебя в выборку попадают позиции которые есть в обоих вт.. условие Заказ.Номенклатура = Остатки.Номенклатура в топку
   serg_buz
 
5 - 16.04.18 - 11:22
(3) А можно поподробнее? Не совсем понял...
   serg_buz
 
6 - 16.04.18 - 11:24
(4) Без него ни как... Не будет понятно пришел ли груз по данной номенклатуре или нет. Или можно как то по другому реализовать можно?


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