Помогите найти ошибку в запросе

1. SheremetevaValentina 28.02.17 11:36 Сейчас в теме
Кратко суть такова: нужно получить отчет по заказу покупателя в разрезе всех платежей, связанных с данным заказом, а именно 1. расчеты с покупателем 2 расчеты с поставщиками, связанные с заказом покупателя. Примерный вид отчета - см. рис.1. Искомый результат - число, выделенное маркером.

Так как в заказе поставщику могут быть строки, связанные с разными заказами покупателя, то платеж нужно разносить построчно пропорционально сумме (что касается таблицы "Товары" заказа поставщику).
Так как таблица "Услуги" с заказами покупателя не связывается, этот момент решаем пока организационно - один заказ с услугами на 1 заказ покупателя (ибо изменять документ пока не пожелали)

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

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

СГРУППИРОВАТЬ ПО
    РазмещениеЗаказовПокупателей.Номенклатура,
    РазмещениеЗаказовПокупателей.ХарактеристикаНоменклатуры,
    РазмещениеЗаказовПокупателей.ЗаказПоставщику,
    РазмещениеЗаказовПокупателей.ЗаказПокупателя
;

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

СГРУППИРОВАТЬ ПО
    ЗаказыПоставщикам.Номенклатура,
    ЗаказыПоставщикам.ХарактеристикаНоменклатуры,
    ЗаказыПоставщикам.ЗаказПоставщику,
    ЗаказыПоставщикам.ЗаказПоставщику.ДокументОснование
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    РазмещениеЗаказовПокупателейТовары.Номенклатура,
    РазмещениеЗаказовПокупателейТовары.ХарактеристикаНоменклатуры,
    РазмещениеЗаказовПокупателейТовары.ЗаказПокупателя,
    РазмещениеЗаказовПокупателейТовары.ЗаказПоставщику,
    РазмещениеЗаказовПокупателейТовары.Количество
ПОМЕСТИТЬ РазмещениеЗаказовПокупателейТоварыУслуги
ИЗ
    РазмещениеЗаказовПокупателейТовары КАК РазмещениеЗаказовПокупателейТовары

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РазмещениеЗаказовПокупателейУслуги.Номенклатура,
    РазмещениеЗаказовПокупателейУслуги.ХарактеристикаНоменклатуры,
    РазмещениеЗаказовПокупателейУслуги.ЗаказПокупателя,
    РазмещениеЗаказовПокупателейУслуги.ЗаказПоставщику,
    РазмещениеЗаказовПокупателейУслуги.Количество
ИЗ
    РазмещениеЗаказовПокупателейУслуги КАК РазмещениеЗаказовПокупателейУслуги
;

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

СГРУППИРОВАТЬ ПО
    ЗаказыПоставщикам.ЗаказПоставщику
;

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

СГРУППИРОВАТЬ ПО
    ЗаказыПоставщикам.ЕдиницаИзмерения,
    ЗаказыПоставщикам.Номенклатура,
    ЗаказыПоставщикам.ХарактеристикаНоменклатуры,
    ЗаказыПоставщикам.СтатусПартии,
    ЗаказыПоставщикам.ЗаказПоставщику,
    ЗаказыПоставщикам.СуммаВзаиморасчетов
;

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

СГРУППИРОВАТЬ ПО
    ЗаказыПоставщикамОбщаяСуммаЗаказа.СуммаУпр,
    ЗаказыПоставщикам.Номенклатура,
    ЗаказыПоставщикам.ХарактеристикаНоменклатуры,
    ЗаказыПоставщикам.ЗаказПоставщику,
    ЗаказыПоставщикам.СтатусПартии,
    РазмещениеЗаказовПокупателейТоварыУслуги.ЗаказПокупателя
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ДвиженияДенежныхСредствОбороты.Период,
    ДвиженияДенежныхСредствОбороты.Регистратор,
    ДвиженияДенежныхСредствОбороты.БанковскийСчетКасса,
    ДвиженияДенежныхСредствОбороты.ВидДенежныхСредств,
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СтатьяДвиженияДенежныхСредств,
    ДвиженияДенежныхСредствОбороты.ДокументДвижения,
    ДвиженияДенежныхСредствОбороты.Контрагент,
    ДвиженияДенежныхСредствОбороты.ДоговорКонтрагента,
    ДвиженияДенежныхСредствОбороты.Сделка,
    ДвиженияДенежныхСредствОбороты.Проект,
    ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа,
    ДвиженияДенежныхСредствОбороты.ДокументРасчетовСКонтрагентом,
    ДвиженияДенежныхСредствОбороты.Организация,
    ДвиженияДенежныхСредствОбороты.СуммаОборот,
    ДвиженияДенежныхСредствОбороты.СуммаУпрОборот,
    ЗаказыПоставщикам.Номенклатура,
    ЗаказыПоставщикам.ХарактеристикаНоменклатуры,
    ЗаказыПоставщикам.СуммаУпр,
    ЗаказыПоставщикам.СуммаЗаказаОбщая,
    ВЫБОР
        КОГДА ЗаказыПоставщикам.СуммаЗаказаОбщая <> 0
            ТОГДА ДвиженияДенежныхСредствОбороты.СуммаУпрОборот * (ЗаказыПоставщикам.СуммаУпр / ЗаказыПоставщикам.СуммаЗаказаОбщая)
        ИНАЧЕ ДвиженияДенежныхСредствОбороты.СуммаУпрОборот
    КОНЕЦ КАК РаспределенныйПлатеж,
    ЗаказыПоставщикам.ЗаказПокупателя
ПОМЕСТИТЬ РаспределенныеПлатежиПоставщикам
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(, , Регистратор, ТИПЗНАЧЕНИЯ(Сделка) = ТИП(Документ.ЗаказПоставщику)) КАК ДвиженияДенежныхСредствОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыПоставщикамРаспределение КАК ЗаказыПоставщикам
        ПО ДвиженияДенежныхСредствОбороты.Сделка = ЗаказыПоставщикам.ЗаказПоставщику
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ПлатежиПоЗаказуПокупателя.Период,
    ПлатежиПоЗаказуПокупателя.Регистратор,
    ПлатежиПоЗаказуПокупателя.БанковскийСчетКасса,
    ПлатежиПоЗаказуПокупателя.ВидДенежныхСредств,
    ПлатежиПоЗаказуПокупателя.ПриходРасход,
    ПлатежиПоЗаказуПокупателя.СтатьяДвиженияДенежныхСредств,
    ПлатежиПоЗаказуПокупателя.ДокументДвижения,
    ПлатежиПоЗаказуПокупателя.Контрагент,
    ПлатежиПоЗаказуПокупателя.ДоговорКонтрагента,
    ПлатежиПоЗаказуПокупателя.Сделка,
    ПлатежиПоЗаказуПокупателя.Проект,
    ПлатежиПоЗаказуПокупателя.ДокументПланированияПлатежа,
    ПлатежиПоЗаказуПокупателя.ДокументРасчетовСКонтрагентом,
    ПлатежиПоЗаказуПокупателя.Организация,
    ВЫБОР
        КОГДА ПлатежиПоЗаказуПокупателя.ПриходРасход = &ВидДвиженияПриход
            ТОГДА ПлатежиПоЗаказуПокупателя.СуммаУпрОборот
        ИНАЧЕ 0
    КОНЕЦ КАК Приход,
    ВЫБОР
        КОГДА ПлатежиПоЗаказуПокупателя.ПриходРасход = &ВидДвиженияРасход
            ТОГДА ПлатежиПоЗаказуПокупателя.СуммаУпрОборот
        ИНАЧЕ 0
    КОНЕЦ КАК Расход,
    ПлатежиПоЗаказуПокупателя.Сделка КАК ЗаказПокупателя,
    NULL КАК СуммаУпр,
    NULL КАК СуммаЗаказаОбщая
ПОМЕСТИТЬ ВсеВыбранныеПлатежи
ИЗ
    ПлатежиПоЗаказуПокупателя КАК ПлатежиПоЗаказуПокупателя

ОБЪЕДИНИТЬ

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВсеВыбранныеПлатежи.Период,
    ВсеВыбранныеПлатежи.Регистратор,
    ВсеВыбранныеПлатежи.БанковскийСчетКасса,
    ВсеВыбранныеПлатежи.ВидДенежныхСредств,
    ВсеВыбранныеПлатежи.ПриходРасход,
    ВсеВыбранныеПлатежи.СтатьяДвиженияДенежныхСредств,
    ВсеВыбранныеПлатежи.ДокументДвижения,
    ВсеВыбранныеПлатежи.Контрагент,
    ВсеВыбранныеПлатежи.ДоговорКонтрагента,
    ВсеВыбранныеПлатежи.Сделка,
    ВсеВыбранныеПлатежи.Проект,
    ВсеВыбранныеПлатежи.ДокументПланированияПлатежа,
    ВсеВыбранныеПлатежи.ДокументРасчетовСКонтрагентом,
    ВсеВыбранныеПлатежи.Организация,
    ВсеВыбранныеПлатежи.Приход КАК Приход,
    ВсеВыбранныеПлатежи.Расход КАК Расход,
    ВсеВыбранныеПлатежи.ЗаказПокупателя КАК ЗаказПокупателя,
    ВсеВыбранныеПлатежи.Приход - ВсеВыбранныеПлатежи.Расход КАК Оборот,
    ВсеВыбранныеПлатежи.СуммаУпр,
    ВсеВыбранныеПлатежи.СуммаЗаказаОбщая
ИЗ
    ВсеВыбранныеПлатежи КАК ВсеВыбранныеПлатежи
ИТОГИ
    СУММА(Приход),
    СУММА(Расход),
    СУММА(Оборот)
ПО
    ОБЩИЕ,
    ЗаказПокупателя

Показать


Так вот в чем ошибка: Если в заказе поставщику более 1 строки (неважно, с указанием разных заказов покупателя или одного и того же) или Заказ поставщику корректировался документом Корректировка заказа поставщику (тестировалось на изменении цены), то платеж не выбирается или выбирается с неправильной суммой. Подозреваю, что я что-то начудила при объединении таблиц, но уже так загрузилась, что понять не могу.

Конфигурации: УПП или УТ10.3
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1536 28.02.17 12:21 Сейчас в теме
(1) открываешь консоль запросов и смотришь цифры и реквизиты по каждой таблице.
Скорее всего проблема в том что ты не можешь объединить разные записи вот и косяк.
Но если ты делал на СКД, то период ты должен обозначить ролью и тогда все склеится!
Посмотри уроки Гилева по СКД.
3. SheremetevaValentina 28.02.17 12:27 Сейчас в теме
(2) Нет, не на скд, Сижу как раз в консоли запросов.
4. SheremetevaValentina 28.02.17 12:28 Сейчас в теме
(2)Да, проблема именно при объединении, только пока не поняла почему
5. Xershi 1536 28.02.17 12:46 Сейчас в теме
(4) поля же говорю. Отбор поставь и сверь реквизиты там же все видно будет.
6. ditp 94 28.02.17 12:49 Сейчас в теме
При формировании врем. таблицы ЗаказыПоставщикамРаспределение у вас связь по количеству точно нужна?

Вот здесь:
ПО ЗаказыПоставщикам.ЗаказПоставщику = РазмещениеЗаказовПокупателейТоварыУслуги.ЗаказПоставщику
            И ЗаказыПоставщикам.Номенклатура = РазмещениеЗаказовПокупателейТоварыУслуги.Номенклатура
            И ЗаказыПоставщикам.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателейТоварыУслуги.ХарактеристикаНоменклатуры
            И ЗаказыПоставщикам.Количество = РазмещениеЗаказовПокупателейТоварыУслуги.Количество


Как по мне, достаточно
ПО ЗаказыПоставщикам.ЗаказПоставщику = РазмещениеЗаказовПокупателейТоварыУслуги.ЗаказПоставщику
            И ЗаказыПоставщикам.Номенклатура = РазмещениеЗаказовПокупателейТоварыУслуги.Номенклатура
            И ЗаказыПоставщикам.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателейТоварыУслуги.ХарактеристикаНоменклатуры
7. SheremetevaValentina 28.02.17 14:22 Сейчас в теме
Одну ошибку нашла :) По-запарке в таблице ВсеВыбранныеПлатежи поставила
ОБЪЕДИНИТЬ
вместо
ОБЪЕДИНИТЬ ВСЕ
. Проблема количества строк в заказе поставщику снята, работает как со строками, связанными с одним заказом покупателя, так и с разными.
Остался вопрос с корректировкой заказа.
8. SheremetevaValentina 28.02.17 14:58 Сейчас в теме
Вторую ошибку нашла. В таблицу ЗаказыПоставщикам закралась лишняя группировка по сумме взаиморасчетов, которой там быть ну никак не должно :). А ларчик просто открывался....
Вопрос снят, запрос работает. Осталось засунуть его в построитель и отдать пользователям.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот