8.х Запрос 1С

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем serg_buz, 16 апр 2018.

  1. TopicStarter Overlay
    serg_buz
    Offline

    serg_buz Опытный в 1С

    Регистрация:
    21 дек 2011
    Сообщения:
    116
    Симпатии:
    1
    Баллы:
    29
    Доброго времени! Коллеги, помогите пожалуйста, где я допустил ошибку, ни как понять не могу... Есть запрос, его смысл понять по каким заказам покупателя пришла вся номенклатура и он готов к отгрузке:
    Код:
    ВЫБРАТЬ
        ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
        ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
        ЗаказыПокупателейОстатки.КоличествоОстаток
    ПОМЕСТИТЬ Заказ
    ИЗ
        РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
    ГДЕ
        ЗаказыПокупателейОстатки.Номенклатура.Услуга = ЛОЖЬ
        И ЗаказыПокупателейОстатки.ЗаказПокупателя.Ответственный = &Ответственный
        И ЗаказыПокупателейОстатки.ЗаказПокупателя.ВнутреннийСтатусЗаказаПокупателя = ЗНАЧЕНИЕ(Перечисление.СтатусЗаказаПокупателя.Запущен)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ТоварыВРезервеНаСкладахОстатки.ДокументРезерва,
        ТоварыВРезервеНаСкладахОстатки.Номенклатура,
        ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
    ПОМЕСТИТЬ Остатки
    ИЗ
        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки
    ГДЕ
        ТоварыВРезервеНаСкладахОстатки.Номенклатура.Услуга = ЛОЖЬ
        И ТоварыВРезервеНаСкладахОстатки.ДокументРезерва.Ответственный = &Ответственный
        И ТоварыВРезервеНаСкладахОстатки.ДокументРезерва.ВнутреннийСтатусЗаказаПокупателя = ЗНАЧЕНИЕ(Перечисление.СтатусЗаказаПокупателя.Запущен)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ЗаказыПоставщикамОстатки.ЗаказПоставщику.ДокументОснование,
        ЗаказыПоставщикамОстатки.КоличествоОстаток
    ПОМЕСТИТЬ ЗаказыПоставщикам
    ИЗ
        РегистрНакопления.ЗаказыПоставщикам.Остатки КАК ЗаказыПоставщикамОстатки
    ГДЕ
        ЗаказыПоставщикамОстатки.Номенклатура.Услуга = ЛОЖЬ
        И ЗаказыПоставщикамОстатки.ЗаказПоставщику.ДокументОснование.Ответственный = &Ответственный
        И ЗаказыПоставщикамОстатки.ЗаказПоставщику.ДокументОснование.ВнутреннийСтатусЗаказаПокупателя = ЗНАЧЕНИЕ(Перечисление.СтатусЗаказаПокупателя.Запущен)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Заказ.ЗаказПокупателя КАК ЗаказПокупателя,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Заказ.Номенклатура) КАК Номенклатура,
        СУММА(Заказ.КоличествоОстаток) КАК КоличествоОстаток,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Остатки.ДокументРезерва) КАК ДокументРезерва,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Остатки.Номенклатура) КАК Номенклатура1,
        СУММА(Остатки.КоличествоОстаток) КАК КоличествоОстаток1,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказыПоставщикам.ЗаказПоставщикуДокументОснование) КАК ЗаказПоставщикуДокументОснование,
        СУММА(ЗаказыПоставщикам.КоличествоОстаток) КАК КоличествоОстаток2
    ИЗ
        Заказ КАК Заказ
            ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
            ПО Заказ.ЗаказПокупателя = Остатки.ДокументРезерва
                И Заказ.Номенклатура = Остатки.Номенклатура
            ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыПоставщикам КАК ЗаказыПоставщикам
            ПО Заказ.ЗаказПокупателя = ЗаказыПоставщикам.ЗаказПоставщикуДокументОснование
    ГДЕ
        Заказ.КоличествоОстаток <= Остатки.КоличествоОстаток
        И ЗаказыПоставщикам.КоличествоОстаток ЕСТЬ NULL
    
    СГРУППИРОВАТЬ ПО
        Заказ.ЗаказПокупателя
    
    УПОРЯДОЧИТЬ ПО
        ЗаказПокупателя,
        Номенклатура
    
    Проверяю через консоль запросов первую временную таблицу "Заказ" по одному заказу покупателя вижу 4 номенклатуры, по временной таблице "Остатки" вижу 3 номенклатуры, т.е. в результат он не должен падать, а он падает, и показывает что по "Заказ.Номенклатура" = 3. Что то я, видимо, затупил с соединением, по тому что если убрать связь
    Код:
    И Заказ.Номенклатура = Остатки.Номенклатура
    то в результате "Заказ.Номенклатура" = 4, как и должно быть. Не могу понять где я ошибся, подскажите пожалуйста.
  2. Элла
    Offline

    Элла Опытный в 1С

    Регистрация:
    19 фев 2013
    Сообщения:
    59
    Симпатии:
    0
    Баллы:
    26
    А разве "ЛЕВОЕ СОЕДИНЕНИЕ" как раз не предполагает вывод всех заказов, независимо от условий объединения? Попробуйте сделать внутреннее соединение.

Поделиться этой страницей