Описание встроенного языка системы 1С Предприятие

         

Группировка


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

Синтаксис:

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

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

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

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

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);

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

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

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


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