Имя: Пароль:
1C
1С v8
Подсчет итогов при выводе группировок
0 shadow_sw
 
30.06.16
11:39
доброго времени суток!

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

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

вывожу информацию

ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаКонтрагент.Следующий() Цикл
            
            СекцияКонтрагент.Параметры.Контрагент = ВыборкаКонтрагент.Контр;
            СекцияКонтрагент.Параметры.НачОстКонт = ВыборкаКонтрагент.НачОст;
            СекцияКонтрагент.Параметры.ПриходКонт = ВыборкаКонтрагент.Приход;
            СекцияКонтрагент.Параметры.РасходКонт = ВыборкаКонтрагент.Расход;
            СекцияКонтрагент.Параметры.КонОстКонт = ВыборкаКонтрагент.КонОст;
            ДокРезультат.Вывести(СекцияКонтрагент, 1);
            
            ВыборкаДоговор =ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            Пока ВыборкаДоговор.Следующий() Цикл
                СекцияДоговор.Параметры.Договор= ВыборкаДоговор.Дог;
                СекцияДоговор.Параметры.Вид= ВыборкаДоговор.Вид;
                СекцияДоговор.Параметры.НачОст= ВыборкаДоговор.НачОст;
                СекцияДоговор.Параметры.Приход= ВыборкаДоговор.Приход;
                СекцияДоговор.Параметры.Расход= ВыборкаДоговор.Расход;
                СекцияДоговор.Параметры.КонОст= ВыборкаДоговор.КонОст;
                ДокРезультат.Вывести(СекцияДоговор,2);

                
                ВыборкаДок = ВыборкаДоговор.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                Пока ВыборкаДок.Следующий() Цикл
                      СекцияДокумент.Параметры.Документ = ВЫборкаДок.Док;
                      Если ТипЗнч(ВыборкаДок.Док) = Тип("ДокументСсылка.КорректировкаДолга") Тогда
                          Для Каждого Строка из ВыборкаДок.Док.СуммыДолга Цикл
                              Если ВыборкаДоговор.Дог = Строка.ДоговорКонтрагента Тогда
                                  СекцияДокумент.Параметры.ДокПрих = Строка.Сумма;
                                    СекцияДокумент.Параметры.ДокРасх = 0;
                                  ДокРезультат.Вывести(СекцияДокумент,3);
                            КонецЕсли;    
                          КонецЦикла;;      
                      Иначе
                          СекцияДокумент.Параметры.ДокПрих = 0;
                          СекцияДокумент.Параметры.ДокРасх = ВыборкаДок.Док.СуммаДокумента;
                          ДокРезультат.Вывести(СекцияДокумент,3);
                      КонецЕсли;      
                  КонецЦикла;
            КонецЦикла;
        
            
        КонецЦикла;

Получаю картину http://s011.radikal.ru/i317/1606/60/a904f243a50f.png


Итоговые суммы в разрезе группировок, увеличиваются пропорционально количеству строк, подскажите ЧЯДНТ?
1 В тылу врага
 
30.06.16
11:48
(0) а зачем тут соединение в запросе?
2 В тылу врага
 
30.06.16
11:48
достаточно поставить у ОстаткиИОбороты периодичность "регистратор"
3 shadow_sw
 
30.06.16
12:25
Спасибо :)иногда ткнуть носом лучше всего ;)
4 shadow_sw
 
06.07.16
11:40
подниму, уважаемый такой вопрос, почему не формируются итоги именно по одному контрагенту?
http://s017.radikal.ru/i434/1607/d1/35d5e8806c1c.png


картина в консоли
5 shadow_sw
 
06.07.16
12:09
причем в стандартном отчете "Взаиморасчеты по контрагентам" данные присутствуют
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс