Имя: Пароль:
1C
 
Как обойти запрос по 2 группировкам?
0 Мисти
 
03.12.18
18:19
"ВЫБРАТЬ
    |    ХозрасчетныйОборотыДтКт.СубконтоКт1 КАК Номенклатура,
    |    ХозрасчетныйОборотыДтКт.Регистратор КАК Документ,
    |    ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаСписания,
    |    ХозрасчетныйОборотыДтКт.КоличествоОборотКт КАК Количество
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
    |            &ВыбНач,
    |            &ВыбКон,
    |            Регистратор,
    |            СчетДт = &ВыбСчет,
    |            ,
    |            ,
    |            ,
    |            Организация = &ВыбОрганизация
    |                И СубконтоДт1 = &ВЫбКолеровка) КАК ХозрасчетныйОборотыДтКт
    |ИТОГИ
    |    СУММА(СуммаСписания),
    |    СУММА(Количество)
    |ПО
    |    Номенклатура,
    |    Документ";
1 Fragster
 
гуру
03.12.18
18:20
также как по одной, только вторую выборку не из результата а из первой
2 Мисти
 
03.12.18
18:20
Нашла уже свой вопрос - "по пяти", но там нет ответа.
Как-то же решила тогда, но как?
И вот опять то же самое, запишу в тетрадку, честно!!!
Просто нужно обойти по номенклатуре, а потом по документу.
Вот с текущим запросом у меня по документу 2 строки почему-то получаются.
3 Мисти
 
03.12.18
18:21
(1) Я пробовала так, но тогда не работает второй цикл!
4 Мисти
 
03.12.18
18:23
Вот такой обход -
    ПоНомен = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ном = 1;
    ТабДок.НачатьАвтогруппировкуСтрок();
    Пока ПоНомен.Следующий() цикл
        ОбластьДетальныхЗаписей.Параметры.ном = Ном;                                  
        ЗаполнитьЗначенияСвойств(ОбластьДетальныхЗаписей.Параметры,ПоНомен);    
        
        ТабДок.Вывести(ОбластьДетальныхЗаписей);
        Ном = Ном+1;
        ВыборкаДействий            = ПоНомен.Выбрать();
        
        Пока ВыборкаДействий.Следующий() Цикл
            ЗаполнитьЗначенияСвойств(ОбластьДетальныхЗаписей1.Параметры,ВыборкаДействий);
5 Василий Алибабаевич
 
03.12.18
18:26
(4) Все здесь : "ВыборкаДействий = ПоНомен.Выбрать();"
Посмотрите в СП параметры метода Выбрать. А сособо параметр №3.
6 Мимохожий Однако
 
03.12.18
18:27
Попробуй это запрос запихнуть в мастер по созданию запроса для вывода в табличный документ и увидишь на примере
как используется уровень группировки.
7 Мисти
 
03.12.18
18:28
Если просто выгрузить результаты таблицы, то и там 2 строки по одному документу.
8 Мисти
 
03.12.18
18:29
У меня нет мастера и никогда таким не пользовалась.
9 Мисти
 
03.12.18
18:29
По-моему, там одна простая ошибка, ткните меня уже в нее и всё!!!1
10 Eiffil123
 
03.12.18
18:29
(4) не будет это работать. Обход всегда только по 1й группировке
11 Мимохожий Однако
 
03.12.18
18:30
По правой клавише мышки создать запрос с обработкой и выбрать второй способ обхода для табличного документа. Этот мастер встроен в платформу
12 Василий Алибабаевич
 
03.12.18
18:31
(9) За параметры метода Выбрать() уже прочитала?
13 Eiffil123
 
03.12.18
18:32
(0) У вас 2 группировки. Соответственно, 3 уровня выборки:

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

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

        ВыборкаДетали = ВыборкаДок.Выбрать();
        Пока ВыборкаДетали.Следующий() Цикл

            // Тут код по детальным записям

        КонецЦикла;

    КонецЦикла;

КонецЦикла;
14 Eiffil123
 
03.12.18
18:34
Можно документ убрать из итогов, тогда будет 2 уровня выборки (для вашего запроса это как раз подходит).
15 Мисти
 
03.12.18
18:34
Верхняя - правильная, по номенклатуре, а потом 2 строки совершенно одинаковые идут.
Как я этого добилась?
16 Вафель
 
03.12.18
18:35
ВыборкаДействий            = ПоНомен.Выбрать();
не указан способ обхода
17 Eiffil123
 
03.12.18
18:35
(15) из итогов убрать документ. Должно помочь
18 Мисти
 
03.12.18
18:36
(14) Точно! Получилось.
Теперь еще с автогруппировкой.
Почему она у меня не работает?
19 Мисти
 
03.12.18
18:44
ТабДок.НачатьАвтогруппировкуСтрок();
    Пока ПоНомен.Следующий() цикл
        ОбластьДетальныхЗаписей.Параметры.ном = Ном;                                  
        ЗаполнитьЗначенияСвойств(ОбластьДетальныхЗаписей.Параметры,ПоНомен);    
        
        ТабДок.Вывести(ОбластьДетальныхЗаписей);
        Ном = Ном+1;
        ВыборкаДействий            = ПоНомен.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока ВыборкаДействий.Следующий() Цикл
            ЗаполнитьЗначенияСвойств(ОбластьДетальныхЗаписей1.Параметры,ВыборкаДействий);    
            ОбластьДетальныхЗаписей1.Параметры.Документ = ВыборкаДействий.Документ;
            ТабДок.Вывести(ОбластьДетальныхЗаписей1);  
        КонецЦикла;
    КонецЦикла;     
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
20 Мисти
 
03.12.18
18:44
Что опять не так?
21 Eiffil123
 
03.12.18
18:54
(18) не использовал ни разу. А зачем автогруппировка, можно же ручную группировку делать, иерархии справочников же нет.
22 Мисти
 
03.12.18
19:29
Ручную я тем более не умею.
23 Мимохожий Однако
 
03.12.18
19:32
(22) У тебя всё впереди. Я в это твёрдо верю.
24 Мисти
 
03.12.18
21:32
Ага, пенсию на 3 года отодвинули.
25 Мисти
 
03.12.18
21:43
(23) А ведь получилось! Поскольку там 2 цикла, то нужно при выводе ставить уровень группировки вторым параметром.
26 Мимохожий Однако
 
03.12.18
22:00
(25) я тебе об этом еще в (6) намекал )) Молодца
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.