Имя: Пароль:
1C
 
Странный результат запроса
0 UncleVader
 
11.10.11
13:42
8.2.14.537, конфа самописная. Извините за многобуквие ;)
Есть 2 регистра для взаиморасчетов с покупателями и поставщиками одинаковой структуры. Задача - написать запрос для отчета по общим взаиморасчетам с обязательной детализацией по кредитным документам и регистраторам.
Запрос строится из двух объединенных запросов по каждому регистру, при этом остатки берутся из виртуальной таблицы ОстаткиИОбороты с детализацией по периоду, а обороты из Обороты с детализацией по регистратору. В результате также надо получить итоги суммовых показателей на уровне группировки по кредитному документу. Так вот, странность результата заключается в том что показатели как-то неправильно суммируются конструкцией "ИТОГИ .. ПО ..". Точнее не суммируется показатель КонДолг - в итог попадает последнее значение выборки. Еще большая странность заключается в том что если из итоговых показателей убрать "СУММА(УмДолг)" то по нему естественно итог не рассчитывается, а по показателю "СУММА(КонДолг)" итог начинает правильно суммироваться...

Вот текст

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

) КАК ВзаиморасчетыПокупателейОбороты
ПО
   ВзаиморасчетыПокупателейОбороты.Договор=ВзаиморасчетыПокупателейОстаткиИОбороты.Договор
   И ВзаиморасчетыПокупателейОбороты.КредДокумент=ВзаиморасчетыПокупателейОстаткиИОбороты.КредДокумент
   
ГДЕ
   ВзаиморасчетыПокупателейОстаткиИОбороты.Контрагент В ИЕРАРХИИ (&Контрагент)

СГРУППИРОВАТЬ ПО
   ВзаиморасчетыПокупателейОстаткиИОбороты.КредДокумент,
   ВзаиморасчетыПокупателейОбороты.Регистратор

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

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

   СУММА(ВзаиморасчетыПоставщиковОбороты.УмДолг) КАК УмДолг,
   СУММА(ВзаиморасчетыПоставщиковОбороты.УвДолг) КАК УвДолг
ИЗ
   РегистрНакопления.ВзаиморасчетыПоставщиков.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончание, Период, , ) КАК ВзаиморасчетыПоставщиковОстаткиИОбороты

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

) КАК ВзаиморасчетыПоставщиковОбороты
ПО
   ВзаиморасчетыПоставщиковОбороты.Договор=ВзаиморасчетыПоставщиковОстаткиИОбороты.Договор
   И ВзаиморасчетыПоставщиковОбороты.КредДокумент=ВзаиморасчетыПоставщиковОстаткиИОбороты.КредДокумент
   
ГДЕ
   ВзаиморасчетыПоставщиковОстаткиИОбороты.Контрагент В ИЕРАРХИИ (&Контрагент)

СГРУППИРОВАТЬ ПО
   ВзаиморасчетыПоставщиковОстаткиИОбороты.КредДокумент,
   ВзаиморасчетыПоставщиковОбороты.Регистратор



ИТОГИ
   СУММА(КонДолг),
   СУММА(УмДолг),
   СУММА(УвДолг)
ПО
   КредДокумент
   
   

Результат по все показателям:
КредДокумент    Регистратор    КонДолг    УмДолг    УвДолг
СФ 0000000000            9 419    9 420    9 419
СФ 0000000000    ПКО Неч-004481    -9 420    9 420    
СФ 0000000000    РКО Неч-001629    9 419        9 419


Результат без "СУММА(УмДолг)":
КредДокумент    Регистратор    КонДолг    УмДолг    УвДолг
СФ 0000000000            -1        9 419
СФ 0000000000    РКО Неч-001629    9 419        9 419
СФ 0000000000    ПКО Неч-004481    -9 420    9 420
1 PR
 
11.10.11
13:43
(0) Хвалишься?
2 UncleVader
 
11.10.11
13:46
(1) не понял
3 UncleVader
 
11.10.11
13:46
мне надо задачу решить, я не знаю как
4 PR
 
11.10.11
13:47
(2) Во всей ветке единственный знак вопроса и он в моем первом посте. Ты что хотел-то?
5 UncleVader
 
11.10.11
13:51
(4) Извини, забыл поставить сакраментальный вопрос: что делать?
6 PVV65
 
11.10.11
13:53
7 UncleVader
 
11.10.11
18:40
(6) Спасибо, помогла сборка всех подзапросов в одну кучу и обработка итогов на верхнем уровне одним надзапросом