|
Найти ошибку в запросе | ☑ | ||
---|---|---|---|---|
0
Byasha
21.09.11
✎
22:40
|
УТ 10.3. Платформа 8.2
Задача простая. Нужно определить количество номенклатуры по документам корректировки и суммы корректировки заказов покупателей, и сумму оплаты заказов покупателей с детализацией до документа оплаты. Итоги нужны по основному менеджеру покупателя, контрагенту, договор и заказу покупателя. Ок. Корректировки возьмем из регистра "Заказы покупателей", Сумму оплаты из регистра "Расчеты с контрагентами". Вот текст запроса "ВЫБРАТЬ | ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента.Владелец.ОсновнойМенеджерПокупателя КАК Менеджер, | ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента.Владелец КАК Контрагент, | ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК Договор, | ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя КАК ЗаказПокупателя, | ЗаказыПокупателейОстаткиИОбороты.Регистратор КАК ЗаказыРегистратор, | РасчетыСКонтрагентамиОстаткиИОбороты.Регистратор КАК ДокументОплаты, | ВЫБОР | КОГДА (НЕ ЗаказыПокупателейОстаткиИОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя) | ТОГДА ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход, 0) | ИНАЧЕ 0 | КОНЕЦ КАК КоличествоКорректировки, | ВЫБОР | КОГДА (НЕ ЗаказыПокупателейОстаткиИОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя) | ТОГДА ЕСТЬNULL(ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовПриход, 0) | ИНАЧЕ 0 | КОНЕЦ КАК СуммаКорректировки, | ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОстатокЗаказа, | ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток, | ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя.ДатаОплаты КАК ДатаОплатыЗаказа, | РасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовРасход КАК СуммаОплаты |ИЗ | РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&НачДата, &КонДата, Регистратор, , ЗаказПокупателя В (&МассивЗаказов)) КАК ЗаказыПокупателейОстаткиИОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКонтрагентами.ОстаткиИОбороты(&НачДата, &КонДата, Регистратор, , Сделка В (&МассивЗаказов)) КАК РасчетыСКонтрагентамиОстаткиИОбороты | ПО ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента.Владелец.ОсновнойМенеджерПокупателя = РасчетыСКонтрагентамиОстаткиИОбороты.Контрагент.ОсновнойМенеджерПокупателя | И ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента.Владелец = РасчетыСКонтрагентамиОстаткиИОбороты.Контрагент | И ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = РасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента | И ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = РасчетыСКонтрагентамиОстаткиИОбороты.Сделка |ГДЕ | (НЕ РасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаЗаказаПокупателя) | И (НЕ РасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.ЗаказПокупателя) | |УПОРЯДОЧИТЬ ПО | ОстатокЗаказа, | КоличествоКорректировки |ИТОГИ | СУММА(СуммаОплаты), | СУММА(КоличествоКорректировки), | СУММА(СуммаКорректировки), | СУММА(ОстатокЗаказа), | СУММА(СуммаВзаиморасчетовКонечныйОстаток) |ПО | Менеджер, | Контрагент, | Договор, | ЗаказПокупателя, | ДокументОплаты" Все считает правильно, за исключением суммы оплаты. Если в отладчике после выполнения запроса данные выгрузить в таблицу, то получается что сумму оплаты считает по всем детальным записям. На примере. Есть заказ покупателя, по нему было два документа корректировки и один документ оплаты. Получаем такую таблицу результата запроса Менеджер | Контрагент | Договор | Заказ | Регистратор | Документ оплаты | Сумма Менеджер | | | | | | 120 000 Менеджер | Контрагент | | | | | 120 000 Менеджер | Контрагент | Договор | Заказ | | | 120 000 Менеджер | Контрагент | Договор | Заказ | | ПКО | 120 000 Менеджер | Контрагент | Договор | Заказ | Корр-ка 1 | ПКО | 30 000 Менеджер | Контрагент | Договор | Заказ | | ПКО | 30 000 Менеджер | Контрагент | Договор | Заказ | Корр-ка 2 | ПКО | 30 000 Менеджер | Контрагент | Договор | Заказ | Заказ | ПКО | 30 000 При этом суммирует только сумму оплаты, сумму корректировок и количество суммирует так как нужно. Уже всю голову сломал где собака зарыта. Может кто подскажет куда копать? |
|||
1
Byasha
21.09.11
✎
22:57
|
ЗЫ. СГРУППИРОВАТЬ ПО - не предлагать. Не помогает.
|
|||
2
viktor_vv
21.09.11
✎
23:17
|
Объединить Все
|
|||
3
viktor_vv
21.09.11
✎
23:18
|
Два запроса. Один по Заказы покупателей другой по РасчетыСКонтрагентами.
|
|||
4
viktor_vv
21.09.11
✎
23:21
|
Вместо Левого соединения.
|
|||
5
Byasha
21.09.11
✎
23:24
|
Это вообще-то только часть запроса. Выжимка так сказать. Там еще куча показателей рассчитывается. И объединение не хотелось бы делать, поскольку объединение потребует что бы типы были одинаковые, что не реально. Загвоздка только в показателе суммы оплаты. Все остальные рассчитываются верно. Если других вариантов кроме как объединение запросов не будет - тогда конечно придется объединять. Но пока очень не хочется.
|
|||
6
GROOVY
21.09.11
✎
23:28
|
"поскольку объединение потребует что бы типы были одинаковые" - это кто такое сказал?
|
|||
7
GROOVY
21.09.11
✎
23:32
|
Вообще упрощайте запросы. Сначала выбирайте нужные данные, потом уже соединяйте.
В Вашем случае Может не стоит суммировать сумму оплаты, а использовать другие функции, Минимум, Максимум. |
|||
8
viktor_vv
21.09.11
✎
23:35
|
(5) Будет оплат больше, чем корректировок, будет проблема в сумме корректировки.
|
|||
9
Byasha
21.09.11
✎
23:38
|
(6) Сорри, глупость сморозил. Каюсь. на объединение это условие не распространяется. Просто уже затюкался с этим запросом, и в каком то из вариантов 8-ка ругнулась что нужные одинаковые типы.
Да я только за, только клиент хочет один баааальшой отчет с возможностью сортировки по куче показателей. В частности сумма оплаты нужна для того что рассчитать сумму недоплаты или переплаты причем на различные даты. Эти различные даты указываются в заказе покупателя. И по рассчитанной сумме недоплаты или переплаты нужна сортировка. Я просто упростил текст запроса что бы сюда не тянуть всю эту кучу кода с отборами и т.п. Объединить то попробую - но блин, геморно это потом будет разгребать. (8) - неа, проверял, с корректировками все ок, в не зависимости от количества и наличия оплат - в запросе "ВЫБОР" для этого есть. |
|||
10
viktor_vv
21.09.11
✎
23:47
|
(9) Да там проблема в левом соединении по неоднозначной комбинации полей для выбранной детализации строк.
|
|||
11
Byasha
21.09.11
✎
23:49
|
Эт понятно. Вопрос в том как этого избежать и желательно без объединения запросов. Если коллективный разум ничего не подскажет - будем объединять, но пока не хоца.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |