Имя: Пароль:
1C
 
Автогруппировка строк при выводе макета
0 NIGHTHUNTER
 
13.07.22
07:11
Подскажите пожалуйста, как правильно сделать автогруппировку строк, в этом коде?

    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    АвансовыйОтчет.ПодотчетноеЛицо КАК ПодотчетноеЛицо,
        |    АвансовыйОтчет.Номер           КАК Номер,
        |    АвансовыйОтчет.Дата            КАК Дата,
        |    АвансовыйОтчет.Ссылка          КАК Ссылка
        |ИЗ
        |    Документ.АвансовыйОтчет КАК АвансовыйОтчет
        |ГДЕ
        |    АвансовыйОтчет.Дата МЕЖДУ &НачДата И &КонДата
        |
        |СГРУППИРОВАТЬ ПО
        |    АвансовыйОтчет.ПодотчетноеЛицо,
        |    АвансовыйОтчет.Ссылка,
        |    АвансовыйОтчет.Номер,
        |    АвансовыйОтчет.Дата
        |
        |УПОРЯДОЧИТЬ ПО
        |    АвансовыйОтчет.ПодотчетноеЛицо.Наименование";
    Запрос.УстановитьПараметр("НачДата", ЭтаФорма.НачДата);
    Запрос.УстановитьПараметр("КонДата", ЭтаФорма.КонДата);
    Рез = Запрос.Выполнить();
    Ном = 1;
    Если Не Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        РезультатОтчета.НачатьАвтогруппировкуСтрок();
        Пока Выборка.Следующий() Цикл
            ОбластьСтроки.Параметры.НомерПП         = Ном;
            ОбластьСтроки.Параметры.ПодотчетноеЛицо = Выборка.ПодотчетноеЛицо;
            ОбластьСтроки.Параметры.Дата            = Выборка.Дата;
            ОбластьСтроки.Параметры.Номер           = Выборка.Номер;
            ОбластьСтроки.Параметры.Ссылка          = Выборка.Ссылка;
            //
            РезультатОтчета.Вывести(ОбластьСтроки, 1, "ПодотчетноеЛицо");
            Ном = Ном + 1;    
        КонецЦикла;
        РезультатОтчета.ЗакончитьАвтоГруппировкуСтрок();
    КонецЕсли;
1 NIGHTHUNTER
 
13.07.22
07:21
Пробую так, вообще ничего не выводит. В чем ошибка?

    РезультатОтчета.НачатьАвтогруппировкуСтрок();
    Если Не Рез.Пустой() Тогда
        ВыборкаПоПодотчетномуЛицу = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        ОбластьСтроки.Параметры.НомерПП         = Ном;
        ОбластьСтроки.Параметры.ПодотчетноеЛицо = ВыборкаПоПодотчетномуЛицу.ПодотчетноеЛицо;
        РезультатОтчета.Вывести(ОбластьСтроки, 1, "ПодотчетноеЛицо");
        ВыборкаПоАвансовымОтчетам = ВыборкаПоПодотчетномуЛицу.Выбрать();
        Пока ВыборкаПоАвансовымОтчетам.Следующий() Цикл
            ОбластьСтроки.Параметры.НомерПП         = Ном;
            ОбластьСтроки.Параметры.ПодотчетноеЛицо = ВыборкаПоАвансовымОтчетам.ПодотчетноеЛицо;
            ОбластьСтроки.Параметры.Дата            = ВыборкаПоАвансовымОтчетам.Дата;
            ОбластьСтроки.Параметры.Номер           = ВыборкаПоАвансовымОтчетам.Номер;
            ОбластьСтроки.Параметры.Ссылка          = ВыборкаПоАвансовымОтчетам.Ссылка;
            //
            РезультатОтчета.Вывести(ОбластьСтроки, 2, "АвансовыйОтчет");
            Ном = Ном + 1;    
        КонецЦикла;
        РезультатОтчета.ЗакончитьАвтоГруппировкуСтрок();
    КонецЕсли;
2 Гипервизор
 
13.07.22
07:36
А чего вы ожидаете и как должен выглядеть результат?
3 NIGHTHUNTER
 
13.07.22
07:46
1 ФИО1
   1 АвансовыйОтчет
   2 АвансовыйОтчет
   3 АвансовыйОтчет
2 ФИО2
   1 АвансовыйОтчет
3 ФИО3
   1 АвансовыйОтчет
   2 АвансовыйОтчет
4 ФИО4

делаю что то подобное, пока что то с выборкой не пойму (((
4 NIGHTHUNTER
 
13.07.22
08:25
Почему у меня не срабатывает этот цикл ВыборкаПоАвансовымОтчетам ?

    РезультатОтчета.НачатьАвтогруппировкуСтрок();
    Если Не Рез.Пустой() Тогда
        ВыборкаПоПодотчетномуЛицу = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Пока ВыборкаПоПодотчетномуЛицу.Следующий() Цикл
            ОбластьСтроки.Параметры.НомерПП         = Ном;
            ОбластьСтроки.Параметры.ПодотчетноеЛицо = ВыборкаПоПодотчетномуЛицу.ПодотчетноеЛицо;
            РезультатОтчета.Вывести(ОбластьСтроки, 1, "ПодотчетноеЛицо");
            ВыборкаПоАвансовымОтчетам = ВыборкаПоПодотчетномуЛицу.Выбрать();
            Пока ВыборкаПоАвансовымОтчетам.Следующий() Цикл
                ОбластьСтроки.Параметры.НомерПП         = Ном;
                ОбластьСтроки.Параметры.ПодотчетноеЛицо = ВыборкаПоАвансовымОтчетам.ПодотчетноеЛицо;
                ОбластьСтроки.Параметры.Дата            = ВыборкаПоАвансовымОтчетам.Дата;
                ОбластьСтроки.Параметры.Номер           = ВыборкаПоАвансовымОтчетам.Номер;
                ОбластьСтроки.Параметры.Ссылка          = ВыборкаПоАвансовымОтчетам.Ссылка;
                //
                РезультатОтчета.Вывести(ОбластьСтроки, 2, "АвансовыйОтчет");
                Ном = Ном + 1;    
            КонецЦикла;
        КонецЦикла;
5 Гипервизор
 
13.07.22
08:34
(4) ОбходРезультатаЗапроса.ПоГруппировкам - это не те группировки, которые "СГРУППИРОВАТЬ ПО", а которые групповые итоги "ИТОГИ ПО".
6 NIGHTHUNTER
 
13.07.22
08:43
(5) Да, спасибо, я уже увиде, что не так понимаю. Обход по группировкам это ИТОГИ ПО ..
Вот вроде как то что я хотел, -

    Запрос       = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    АвансовыйОтчет.ПодотчетноеЛицо КАК ПодотчетноеЛицо,
                   |    АвансовыйОтчет.Номер КАК Номер,
                   |    АвансовыйОтчет.Дата КАК Дата,
                   |    АвансовыйОтчет.Ссылка КАК Ссылка
                   |ИЗ
                   |    Документ.АвансовыйОтчет КАК АвансовыйОтчет
                   |ГДЕ
                   |    АвансовыйОтчет.Дата МЕЖДУ &НачДата И &КонДата
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    АвансовыйОтчет.ПодотчетноеЛицо,
                   |    АвансовыйОтчет.Ссылка,
                   |    АвансовыйОтчет.Номер,
                   |    АвансовыйОтчет.Дата
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    АвансовыйОтчет.ПодотчетноеЛицо.Наименование
                   |ИТОГИ ПО
                   |    ПодотчетноеЛицо,
                   |    Ссылка";
    Запрос.УстановитьПараметр("НачДата", ЭтаФорма.НачДата);
    Запрос.УстановитьПараметр("КонДата", ЭтаФорма.КонДата);
    Рез = Запрос.Выполнить();
    Ном = 1;
    РезультатОтчета.НачатьАвтогруппировкуСтрок();
    Если Не Рез.Пустой() Тогда
        ВыборкаПоПодотчетномуЛицу = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ПодотчетноеЛицо");
        Пока ВыборкаПоПодотчетномуЛицу.Следующий() Цикл
            ОбластьСтроки.Параметры.НомерПП         = Ном;
            ОбластьСтроки.Параметры.ПодотчетноеЛицо = ВыборкаПоПодотчетномуЛицу.ПодотчетноеЛицо;
            РезультатОтчета.Вывести(ОбластьСтроки, 1, "ПодотчетноеЛицо");
            ВыборкаПоАвансовымОтчетам = ВыборкаПоПодотчетномуЛицу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка");
            НомГр = 1;
            Пока ВыборкаПоАвансовымОтчетам.Следующий() Цикл
                ОбластьСтроки.Параметры.НомерПП         = НомГр;
                ОбластьСтроки.Параметры.ПодотчетноеЛицо = ВыборкаПоАвансовымОтчетам.ПодотчетноеЛицо;
                ОбластьСтроки.Параметры.Дата            = ВыборкаПоАвансовымОтчетам.Дата;
                ОбластьСтроки.Параметры.Номер           = ВыборкаПоАвансовымОтчетам.Номер;
                ОбластьСтроки.Параметры.Ссылка          = ВыборкаПоАвансовымОтчетам.Ссылка;
                //
                РезультатОтчета.Вывести(ОбластьСтроки, 2, "АвансовыйОтчет");
                НомГр = НомГр + 1;    
            КонецЦикла;
            Ном = Ном + 1;
        КонецЦикла;
        РезультатОтчета.ЗакончитьАвтоГруппировкуСтрок();
    КонецЕсли;
7 NIGHTHUNTER
 
13.07.22
08:50
(6) Почему, выборки на СКД и самостоятельный вывод в макет, имеют разные данные ?
8 NIGHTHUNTER
 
13.07.22
08:56
(7) Это кажется устранил. В своей выборке сам, же задал НачДата "20220121", а нужно "20220101", исправил, те же данные вышли.