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

       

Группировка


Устанавливает порядок выборки информации.

Синтаксис:

Группировка <ИмяГруппировки>|<ПредопредГруппировка>

           [Упорядочить по <Порядок>[, <Порядок>]*]

           [Без Упорядочивания][Без Групп][Все [ВошедшиеВЗапрос]];

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

Group <ИмяГруппировки>|<ПредопредГруппировка>

           [Order By <Порядок>[, <Порядок>]*]

           [Without Order][Without Groups][All [IncludedInQuery]];

Параметры:

<ИмяГруппировки>



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

<ПредопредГруппировка>

Ключевое слово одной из встроенных предопределенных группировок языка запросов. По этому имени можно будет обращаться к значению группировки из вызывающего программного модуля. Возможные значения приведены ниже.

упорядочить по

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

<Порядок>

Используется только после ключевого слова Упорядочить по. Конкретизация внутренней переменной <ИмяГруппировки>, значение которой является параметром упорядочивания строк в группировке. Кроме того, в данном параметре можно использовать имя функции, объявленной в этом же запросе в операторе Функция.

Без Упорядочивания

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

Без Групп

Необязательное добавочное ключевое слово, использование которого назначает вывод в запрос только простых элементов справочников (исключая группы). Используется только для группировок, построенных на основе внутренней переменной типа «справочник».

Все

Необязательное добавочное ключевое слово, действие которого зависит от типа внутренней переменной, на основе которой построена группировка. Используется только для группировок, построенных на основе внутренней переменной типа «справочник» или для предопределенных группировок, задающих временной интервал (Год, Месяц, Квартал, Неделя, День). Для предопределенных временных группировок подразумевается, что в запрос будут включены любые значения данных (в том числе нулевые) в каждый заданный момент времени с даты начала запроса по дату конца запроса (интервал задается оператором Период С...) Для группировок по справочникам подразумевается, что в запрос будут включены любые значения данных (в том числе нулевые) для каждого допустимого элемента справочника.

ВошедшиеВЗапрос

Необязательное добавочное ключевое слово действие которого уточняет предыдущее ключевое слово «Все». Использование данного слова подразумевает, что в каждую строку запроса будут включены значения данных (в том числе нулевые), для которых есть ненулевое значение хотя бы в одной строке запроса.

Описание:

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

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

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

Англояз.

Синоним


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

Документ

Document

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

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

DocumentLine

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

День

Неделя

Месяц

Квартал

Год

Day

Week

Month

Quarter

Year

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

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

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

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

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


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

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

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

или

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

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

Пример:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

   ;

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

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

      Возврат;

   КонецЕсли;

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

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

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

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

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

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

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

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

      КонецЦикла;

   КонецЦикла;

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

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

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

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

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




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