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

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

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

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

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

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