Имя: Пароль:
1C
1С v8
Как получить значения группировки по столбцам
0 xenos
 
21.08.12
05:29
Допустим надо сделать такой отчет обычными запросом не СКД
http://s2.ipicture.ru/uploads/20120821/Rp8fT641.jpg

Если бы была группировка только по контрагентам тогда все просто.  

А вот как сделать такое, сначала получить группировку контрагенты и данные по периодам. А затем данные по договорам и опять перебор по периодам.
1 rphosts
 
21.08.12
05:36
и итоги по контрагентам и периодам. и запрос обходить по группировкам сначало по контрагентам а потом по периодам и наконец по договорам.
2 xenos
 
21.08.12
05:46
Вот простой пример по строкам

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

   Запрос.УстановитьПараметр("КонПер", КонПер);
   Запрос.УстановитьПараметр("НачПер", НачПер);
   Запрос.УстановитьПараметр("счет60", счет60);

   Результат = Запрос.Выполнить();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьКонтрагенты = Макет.ПолучитьОбласть("Контрагенты");
   ОбластьДоговор = Макет.ПолучитьОбласть("Договор");
   ОбластьМесяц = Макет.ПолучитьОбласть("Месяц");

   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.Вывести(ОбластьШапкаТаблицы);
   ТабДок.НачатьАвтогруппировкуСтрок();

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

   Пока ВыборкаКонтрагенты.Следующий() Цикл
       ОбластьКонтрагенты.Параметры.Заполнить(ВыборкаКонтрагенты);
       ТабДок.Вывести(ОбластьКонтрагенты, ВыборкаКонтрагенты.Уровень());

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

       Пока ВыборкаДоговор.Следующий() Цикл
           ОбластьДоговор.Параметры.Заполнить(ВыборкаДоговор);
           ТабДок.Вывести(ОбластьДоговор, ВыборкаДоговор.Уровень());

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

           Пока ВыборкаМесяц.Следующий() Цикл
               ОбластьМесяц.Параметры.Заполнить(ВыборкаМесяц);
               ТабДок.Вывести(ОбластьМесяц, ВыборкаМесяц.Уровень());
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);



Цикла самого нижнего уровня легко вывести в столбцы.

А как получить значения по периодам на группировке контрагент до вывода договоров?
3 xenos
 
21.08.12
05:47
з.ы. Это просто пример в реальности группировок несколько больше.
4 xenos
 
21.08.12
08:16
апапап
5 hhhh
 
21.08.12
08:27
(4) ВыборкаКонтрагенты = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,ммм,ммм);

использовать второй и третий параметр
6 xenos
 
21.08.12
08:31
Т.е. из выборки контрагентов выбирать периоды? а они туду не с договорами будут попадать?
7 xenos
 
21.08.12
08:31
(5) А примера подобного нет?
8 xenos
 
21.08.12
08:41
апапапап
9 butterbean
 
21.08.12
08:53
делаешь выборку по контрагентам, внутри нее
ВыборкаПериоды = ВыборкаКонтрагенты.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Месяц");
перебираешь ее, заполняешь столбцы
потом внутри договоров
ВыборкаПериоды = ВыборкаДоговор.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Месяц");
и т.д.
10 xenos
 
21.08.12
09:13
(9) Ясно спасибо попробую.