Имя: Пароль:
1C
1С v8
Обход по группировкам в запросе
0 Flyd-s
 
22.12.11
11:17
Пишу вот такой код:

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

   ТабДок.НачатьАвтогруппировкуСтрок();
   Пока ВыборкаНоменклатуры.Следующий() Цикл
        ОбластьСтрока.Параметры.Заполнить(ВыборкаНоменклатуры);
        ТабДок.Вывести(ОбластьСтрока, ВыборкаНоменклатуры.Уровень());
        ВыборкаРегистратор = ВыборкаНоменклатуры.Выбрать(ОбходРезультатаЗапроса.Прямой);
        пока ВыборкаРегистратор.Следующий() Цикл
             ОбластьПериод.Параметры.Заполнить(ВыборкаРегистратор);
             ТабДок.Вывести(Областьпериод, ВыборкаНоменклатуры.Уровень());
        КонецЦикла;
   КонецЦикла;
   ТабДок.ЗакончитьАвтогруппировкуСтрок();
----------
По-идее он должен группировать по номенклатуре и регистратору и выводить сначала список номенклатуры, потом расшифровку по регистратору. Но вместо этого показывает вот такую кашу:

http://s017.radikal.ru/i444/1112/f4/61bc476ae86e.jpg
1 Ненавижу 1С
 
гуру
22.12.11
11:18
Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

1С вас вводит в заблуждение, обходить по группировкам можно когда есть итоги
2 zbv
 
22.12.11
11:18
СГРУППИРОВАТЬ ПО - это типа Свернуть для ТЗ.

тебе ИТОГИ ПО нужны
3 Flyd-s
 
22.12.11
11:30
спасибо, уже лучше.
Запрос.Текст = "ВЫБРАТЬ
                  |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
                  |    ХозрасчетныйОстаткиИОбороты.Регистратор КАК Регистратор,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК СумНач,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СумПр,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СумРасх,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК СумКон,
                  |    ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток КАК КолНач,
                  |    ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт КАК КолПр,
                  |    ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт КАК КолРасх,
                  |    ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток КАК КолКон
                  |ИЗ
                  |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор, ДвиженияИГраницыПериода, Счет В ИЕРАРХИИ (&СчетТоваров), , ) КАК ХозрасчетныйОстаткиИОбороты
                  |ГДЕ
                  |    ХозрасчетныйОстаткиИОбороты.Регистратор <> НЕОПРЕДЕЛЕНО
                  |ИТОГИ
                  |    СУММА(СумНач),
                  |    СУММА(СумПр),
                  |    СУММА(СумРасх),
                  |    СУММА(СумКон),
                  |    СУММА(КолНач),
                  |    СУММА(КолПр),
                  |    СУММА(КолРасх),
                  |    СУММА(КолКон)
                  |ПО
                  |    Номенклатура,
                  |    Регистратор";

Но почему-то список документов задвоен
4 hhhh
 
22.12.11
11:36
а если так?

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


а то получается, что вы документ два раза выводите.
5 Flyd-s
 
22.12.11
11:43
спасибо, работает