1С Предприятие 7.7. Документация

       

Группировка


Получить следующее значение выборки запроса на заданном уровне группировки.

Синтаксис:

Группировка(<Группировка>, <Направление>)

Англоязычный синоним:

Group

Параметры:

<Группировка>

Выражение, содержащее порядковый номер или имя группировки.

<Направление>

Необязательный параметр. Числовое выражение:

1 — выборка значений группировки по возрастанию;



-1 (минус единица) — выборка значений группировки по убыванию.

Значение по умолчанию: 1.

Возвращаемое значение:

Число: 1 — если получено следующее значение выборки запроса, 0 — если нет.

Описание:

Метод Группировка служит для организации цикла получения данных из выборки, сформированной в результате работы метода Выполнить. Метод Группировка позиционирует в выборке очередную строку в порядке, определенном параметром <Группировка>. Нельзя использовать метод Группировка, задавая в качестве параметра младшие группировки, не использовав предварительно этот метод для позиционирования по старшим группировкам. Старшинство группировок определяется порядком их следования в тексте запроса.

Замечание: Обход группировок по многоуровневым справочникам в порядке убывания не выполняется.

Пример:

Процедура Сформировать()

   Перем Запрос, ТекстЗапроса;

   Если (Число(ДатаНач) = 0) ИЛИ (Число(ДатаКон) = 0) Тогда

      Предупреждение("Не задан период!");

      Возврат;

   КонецЕсли;

   //Создание объекта типа "Запрос" Запрос = СоздатьОбъект("Запрос");

   ТекстЗапроса =

   "//{{ЗАПРОС(Сформировать)

   |с ДатаНач по ДатаКон;

   |Рез = ЖурналРасчетов.Зарплата.Результат;

   |Сотр = ЖурналРасчетов.Зарплата.Объект;

   |Группировка Сотр без групп;

   |Группировка ПериодЖурнала;

   |Функция Сум = Сумма(Рез);

   |"//}}ЗАПРОС

   ;

   Если Сотрудник.Выбран() = 1 Тогда

      ТекстЗапроса = ТекстЗапроса + "Условие(Сотр = Сотрудник);";

   КонецЕсли;

   // Если ошибка в запросе, то выход из процедуры

   Если Запрос.Выполнить(ТекстЗапр) = 0 Тогда

      Возврат;

   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса

   Таб = СоздатьОбъект("Таблица");

   // сначала используем группировку по сотрудникам

   // а потом группировку по периоду журнала!!!

   Пока Запрос.Группировка("Сотр") = 1 Цикл

      // Заполнение полей Сотр

      Таб.ВывестиСекцию("Сотр<");

      Пока Запрос.Группировка("ПериодЖурнала") = 1 Цикл

         // Заполнение полей ПериодЖурнала

         Таб.ВывестиСекцию("Мес");

      КонецЦикла;

      Таб.ВывестиСекцию("Сотр>");

   КонецЦикла;

   // Вывод заполненной формы

   // Заполнение полей "Итого"

   Таб.Опции(0, 0, 0, 0);

   Таб.ТолькоПросмотр(1);

   Таб.Показать("Результат", );

КонецПроцедуры


Описание:

Оператор Группировка задает способ группировки информации и порядок ее упорядочивания в запросе.

Предопределенные группировки могут быть следующими:

Предопределенн. Группировка

Англояз.

Синоним


Выполняемое действие

Документ

Document

Позволяет детализацию до каждого документа.

СтрокаДокумента

DocumentLine

Позволяет детализацию до каждой строки табличной части каждого документа.

День

Неделя

Месяц

Квартал

Год

Day

Week

Month

Quarter

Year

Группировки по дате, дают возможность накапливать значения по документам за конкретный период (на каждый день, неделю, месяц и т. д.). В запросе может присутствовать несколько группировок такого типа.

Замечание: В программном модуле, где используется запрос, имя <ИмяГруппировки> (или <ПредопредГруппировка>) будет являться атрибутом запроса. Кроме того, это имя используется в качестве параметра метода запросов Группировка (см. главу «Работа с Запросами»).

Объекты, по которым запрос будет обрабатывать информацию и те значения которые он будет выбирать, упорядочивать и группировать во временном наборе данных, полностью определяются той внутренней переменной, на базе которой объявлена группировка (подробнее см. выше в разделе «Объявление внутренней переменной»).

Несколько операторов Группировка, следующих друг за другом в описании запроса, создают вложенные группировки запроса. Первая группировка — самая старшая, в нее будет вложена следующая группировка, далее будет вложена следующая и т. д. По смыслу, вложенная группировка осуществляет более детальный просмотр объекта внешней группировки. Например, если во внешней группировке мы просматриваем регистр, то во вложенной группировке можно просмотреть документы движений этого регистра, а далее можно сформировать группировку по номерам строк этих документов.

При описании вложенных группировок разработчик конфигурации должен ясно себе представлять суть и смысл образования вложенных группировок в формируемом запросе, поскольку интерпретация полученных результатов выполнения запроса полностью зависит от контекста решаемой задачи.



По умолчанию, документы упорядочиваются в группировке по дате и времени документов, элементы справочников — в зависимости от основного представления, заданного при описании справочника в конфигураторе (код или наименование). Однако критерий упорядочивания в группировке можно установить при помощи необязательного ключевого слова "Упорядочить по". Параметры, следующие за данным ключевым словом, определяют упорядочивание строк в группировке.

С параметром упорядочивания связан специальный метод для доступа к значениям объекта «Запрос». Речь идет об использовании метода ЗначениеУпорядочивания. В программном модуле, после того как запрос уже сформирован, мы можем при помощи этого метода получить значение поля упорядочивания из временного набора данных, не обращаясь к базе данных. Например, если у нас в запросе была группировка "Товар", а нам для формирования некоторого отчета нужны значения наименований товаров, то эти наименования товаров можно получить двумя способами:

Наим = Запрос.Товар.Наименование;

или

Наим = 3апрос.ЗначениеУпорядочивания("Товар", 1);

Смысл использования данного специального метода доступа в том, что значения упорядочивания хранятся во временном наборе данных, сформированном запросом, поэтому за этими значениями программе нет необходимости снова обращаться к информационной базе, а можно получить непосредственно из временного набора. Эффект использования специального метода доступа может проявиться только в сетевой версии информационной базы при формировании очень больших отчетов, время формирования которых порядка десятков минут. В этом случае применение этого метода доступа даст некоторый выигрыш по времени.

Пример:

Процедура Группировки()

   Перем Запрос, ТекстЗапроса;

   Перем ДатаНач, ДатаКон;

   ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата");

   Нач = ЖР.НачалоТекущегоПериода();

   Кон = ЖР.КонецТекущегоПериода();

   //Создание объекта типа Запрос

   Запрос = СоздатьОбъект("Запрос");



   ТекстЗапроса =

   "//{{ЗАПРОС(Группировки)

   |Период с ДатаНач по ДатаКон;

   |Рез = ЖурналРасчетов.Зарплата.Результат;

   |Расч = ЖурналРасчетов.Зарплата.ВидРасч;

   |Дни = ЖурналРасчетов.Зарплата.Дни;

   |Сотр = ЖурналРасчетов.Зарплата.Объект;

   |Группировка Сотр без групп;

   |Группировка Расч;

   |Функция Сум = Сумма(Рез);

   |Функция Дней = Сумма(Дни);

   |Условие(Рез о 0);

   |"//})ЗАПРОС

   ;

   // Если ошибка в запросе, то выход из процедуры

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

      Возврат;

   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса

   Таб = СоздатьОбъект("Таблица");

   Пока Запрос.Группировка("Сотр") = 1 Цикл

      // Заполнение полей Сотр

      Таб.ВывестиСекцию("Сотр ");

      Пока Запрос.Группировка("Расч") = 1 Цикл

         // Заполнение полей

         Расч Таб.ВывестиСекцию("Расч");

      КонецЦикла;

   КонецЦикла;

   Таб.Опции(0, 0, 0, 0);

   Таб.ТолькоПросмотр(1);

   Таб.Показать("Результат", );

   // Вывод заполненной формы

КонецПроцедуры


Содержание раздела