Имя: Пароль:
1C
 
Как в построитель отчета программно добавить группировки?
0 мистер игрек
 
25.10.10
08:32
Есть код:

   Запрос.Текст = "ВЫБРАТЬ
                  |    Таб.Работал1,
                  |    Таб.Работал2,
                  |    Таб.Отдел,
                  |    Таб.Месяцц,
                  |    Таб.Подразделение
                  |ИЗ
                  |    ВТ_СотрПодр КАК Таб";
   Рез = Запрос.Выполнить();              
   //
   Построитель = Новый ПостроительОтчета;
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Рез);
   Построитель.Выполнить();
   Построитель.Вывести();

Теперь для вывода в отчет кросс-таблицу с группировкой строк "Отдел, Подразделение" и группировкой колонок "Месяц"?
1 мистер игрек
 
25.10.10
09:08
Ап
2 Irbis
 
25.10.10
09:17
Итоги {Отдел, Подразделение...} не спасут?
3 мистер игрек
 
25.10.10
09:18
Начертил вот это. Но выводить только первый уровень гурпировки.

   Запрос.Текст = "ВЫБРАТЬ
                  |    СУММА(Таб.Работал1) КАК Работал1,
                  |    СУММА(Таб.Работал2) КАК Работал2,
                  |    Таб.Отдел КАК Отдел,
                  |    Таб.Месяцц КАК Месяцц,
                  |    Таб.Подразделение КАК Подразделение
                  |ИЗ
                  |    ВТ_СотрПодр КАК Таб
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    Таб.Отдел,
                  |    Таб.Подразделение,
                  |    Таб.Месяцц
                  |ИТОГИ
                  |    СУММА(Работал1),
                  |    СУММА(Работал2)
                  |ПО
                  |    Отдел,
                  |    Подразделение,
                  |    Месяцц";
   Рез = Запрос.Выполнить();              
   //
   Построитель = Новый ПостроительОтчета;
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Рез);
   
   Построитель.Выполнить();
   Построитель.Вывести();
4 hhhh
 
25.10.10
09:21
(1) такие проблемы с помощью отладчика решаются. В общем, там надо поставить флажки, что это измерения.
5 мистер игрек
 
25.10.10
09:47
Поставил. Выдает ошибку: "{Форма.ФормаОтчета(93)}: Ошибка при вызове метода контекста (Добавить): Не найдено измерение. "Отдел"
   Построитель.ИзмеренияСтроки.Добавить("Отдел","Отдел");
по причине:
Не найдено измерение. "Отдел"
"

Вот код:

   Запрос.Текст = "ВЫБРАТЬ
                  |    Таб.Работал1 КАК Работал1,
                  |    Таб.Работал2 КАК Работал2,
                  |    Таб.Отдел КАК Отдел,
                  |    Таб.Месяцц КАК Месяцц,
                  |    Таб.Подразделение КАК Подразделение
                  |ИЗ
                  |    ВТ_СотрПодр КАК Таб
                  |ИТОГИ
                  |    СУММА(Работал1),
                  |    СУММА(Работал2)
                  |ПО
                  |    Отдел,
                  |    Подразделение,
                  |    Месяцц";
   Рез = Запрос.Выполнить();              
   //
   Построитель = Новый ПостроительОтчета;
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Рез);
   Построитель.доступныеполя.Найти("Отдел").Измерение = Истина;
   Построитель.доступныеполя.Найти("Подразделение").Измерение = Истина;
   Построитель.доступныеполя.Найти("Месяцц").Измерение = Истина;
   Построитель.ИзмеренияСтроки.Добавить("Отдел","Отдел");
   Построитель.ИзмеренияСтроки.Добавить("Подразделение","Подразделение");
   Построитель.ИзмеренияКолонки.Добавить("Месяцц","Месяцц");
   
   Построитель.Выполнить();
   Построитель.Вывести();
6 stangen
 
25.10.10
09:52
(5) зайди в конструктор запрос на закладку "построитель" и добавь нужные поля в закладке Итоги
7 мистер игрек
 
25.10.10
09:57
Изменил так. Все рвно это оишбка.

   Запрос.Текст = "ВЫБРАТЬ
                  |    Таб.Работал1 КАК Работал1,
                  |    Таб.Работал2 КАК Работал2,
                  |    Таб.Отдел КАК Отдел,
                  |    Таб.Месяцц КАК Месяцц,
                  |    Таб.Подразделение КАК Подразделение
                  |ИЗ
                  |    ВТ_СотрПодр КАК Таб
                  |ИТОГИ
                  |    СУММА(Работал1),
                  |    СУММА(Работал2)
                  |ПО
                  |    Отдел,
                  |    Подразделение,
                  |    Месяцц
                  |{ИТОГИ ПО
                  |    Отдел,
                  |    Подразделение,
                  |    Месяцц}";
   Рез = Запрос.Выполнить();              
   //
   Построитель = Новый ПостроительОтчета;
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Рез);
   Построитель.доступныеполя.Найти("Отдел").Измерение = Истина;
   Построитель.доступныеполя.Найти("Подразделение").Измерение = Истина;
   Построитель.доступныеполя.Найти("Месяцц").Измерение = Истина;
    Построитель.ИзмеренияСтроки.Добавить("Отдел","Отдел");
   Построитель.ИзмеренияСтроки.Добавить("Подразделение","Подразделение");
   Построитель.ИзмеренияКолонки.Добавить("Месяцц","Месяцц");
   
   Построитель.Выполнить();
   Построитель.Вывести();
8 stangen
 
25.10.10
10:31
(7) ну если с таким извращением, то тогда так
Запрос.Текст = "ВЫБРАТЬ
                  |    Таб.Работал1 КАК Работал1,
                  |    Таб.Работал2 КАК Работал2,
                  |    Таб.Отдел КАК Отдел,
                  |    Таб.Месяцц КАК Месяцц,
                  |    Таб.Подразделение КАК Подразделение
                  |ИЗ
                  |    ВТ_СотрПодр КАК Таб
                  |ИТОГИ
                  |    СУММА(Работал1),
                  |    СУММА(Работал2)
                  |ПО
                  |    Отдел,
                  |    Подразделение,
                  |    Месяцц";
   Рез = Запрос.Выполнить();              
   Построитель = Новый ПостроительОтчета;
  ОИД = Новый ОписаниеИсточникаДанных(Рез);
  Для каждого Колонка ИЗ ОИД.Колонки Цикл
    Колонка.Измерение = Колонка.Имя="Месяцц" ИЛИ Колонка.Имя="Подразделение" ИЛИ Колонка.Имя="Отдел";
  КонецЦикла;
  Построитель.ИсточникДанных = ОИД;
   Измерение= Построитель.ИзмеренияСтроки.Найти("Месяцц");
   Если Измерение <> Неопределено Тогда
       Построитель.ИзмеренияСтроки.Удалить(Измерение);
   КонецЕсли;
   Построитель.ИзмеренияКолонки.Добавить("Месяцц","Месяцц");

  Построитель.Выполнить();
  Построитель.Вывести();
9 мистер игрек
 
25.10.10
11:03
(8) спасибо. Но!

1. не выводить значение измерений "ПОдразделение","Месяцц"
2. не выводить значение Работал1 и работал2
3. Кросс таблицу не чертить
10 mooo
 
25.10.10
11:11
Зачем это ОИД = Новый ОписаниеИсточникаДанных(Рез); ??
И почему не так: Построитель.Текст = "...Запрос..."???
11 мистер игрек
 
25.10.10
11:13
(10) потому что, там источник данных - временная таблица. Т.е построитель не признает временную таблицу О_О
12 мистер игрек
 
25.10.10
11:27
уп
13 mooo
 
25.10.10
11:32
(11) это понятно, а пакетный запрос сделать?

(12) попробуй так

Запрос.Текст = "ВЫБРАТЬ
                  |    Таб.Работал1 КАК Работал1,
                  |    Таб.Работал2 КАК Работал2,
                  |    Таб.Отдел КАК Отдел,
                  |    Таб.Месяцц КАК Месяцц,
                  |    Таб.Подразделение КАК Подразделение
                  |    {Работал1,
                  |    Работал2,
                  |    КАК Отдел,
                  |    Месяцц,
                  |    Подразделение}
                  |ИЗ
                  |    ВТ_СотрПодр КАК Таб
                  |ИТОГИ
                  |    СУММА(Работал1),
                  |    СУММА(Работал2)
                  |ПО
                  |    Отдел,
                  |    Подразделение,
                  |    Месяцц";

И заполни коллекцию Построитель.ВыбранныеПоля
14 mooo
 
25.10.10
11:33
+(13) в итогах там добавить нужно:

|{ИТОГИ ПО
|    Отдел,
|    Подразделение,
|    Месяцц}";
15 мистер игрек
 
25.10.10
11:37
(14) Короче, источником сделал таблицу значений. Вроде отчет получился. Щас еще раз протестирую... Посмотрим
16 мистер игрек
 
25.10.10
12:06
Еще один момент. В кросс таблице в шапке колонок "месяц" выводится как "01.01.10", "01.01.10" и т.д.
Как добится чтоб получился "январь.10", "февраль.10" ?
17 мистер игрек
 
25.10.10
12:21
еще ап
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.