Основная страница

 

Глава 33
Работа с Запросами


Для формирования и выполнения запросов к документам, справочникам, регистрам, журналам расчетов, планам счетов, бухгалтерским операциям и проводкам в системе используется специальный агрегатный тип данных — «Запрос». Возможности работы со справочниками, документами и журналами расчетов предоставляют достаточно мощные средства получения различной информации об этих объектах. Однако, существует также необходимость в получении информации, сгруппированной определенным образом, которую невозможно или очень сложно получить непосредственно работая с документами, справочниками, регистрами или журналами расчетов. Для получения такой информации и существует механизм запросов.

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

Кроме того, механизм запросов позволяет легко получать информацию в различных временных разрезах.

Контекст работы с запросами

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

При создании объекта типа «Запрос» в качестве параметра функции СоздатьОбъект используется ключевое слово Запрос .

Англоязычный синоним ключевого слова ЗапросQuery.

Пример:

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

Структура запросов и методика их использования

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

Запросы можно использовать не только для построения отчетов, но и для реализации других процедур конфигурации, требующих получения из БД некой сводной информации. Например, реализация алгоритма списания стоимости товара по методам FIFO или LIFO.

Работа с запросами предполагает следующий порядок:

·         при помощи функции СоздатьОбъект создается объект типа «Запрос» и ссылка на него присваивается какой-либо переменной. Далее обращение к запросу производится посредством этой ссылки.

·         после создания переменной типа «Запрос» следует обращение к методу Выполнить, которому в качестве параметра передается текст запроса, написанный на специальном языке запросов (см. главу «Язык запросов»). Метод Выполнить анализирует текст запроса, выполняет в соответствии с ним выборку данных и формирует временный выходной набор данных (выборку).

·         после этого организуется циклическая обработка сформированного временного набора данных (выборки) с целью получения требуемого отчета.

В данном разделе мы рассмотрим структуру создаваемого запросом временного набора данных и работу методов запросов по выборке информации из этого временного набора.

Дальнейшее описание проведем на простом примере: необходимо получить отчет о количестве товаров, хранящихся на складах. Текст процедуры, выполняющей эту операцию приведен ниже.

Пример:

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

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

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

|СКЛАД = Регистр.ТоварныйЗапас.Склад;

|ТОВАР = Регистр.ТоварныйЗапас.Товар;

|КОЛИЧЕСТВО = Регистр.ТоварныйЗапас.Количество;

|Группировка ТОВАР Упорядочить По ТОВАР.Код;

|Группировка СКЛАД Упорядочить По СКЛАД.Код;

|Функция КОЛ = КонОст(КОЛИЧЕСТВО);

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

;

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

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

   Возврат;

КонецЕсли;

Структура временного набора данных, созданная запросом "НашЗапрос" после его выполнения, представлена на следующем рисунке:

 

Товар

Склад

Кол.

Итог общий

X

X

62

Итог по товару Стол

Стол

X

35

Строка по товару Стол на складе Первый

Стол

Первый

10

Строка по товару Стол на складе Второй

Стол

Второй

20

Строка по товару Стол на складе Третий

Стол

Третий

5

Итог по товару Стул

Стул

X

9

Строка по товару Стул на складе Второй

Стул

Второй

7

Строка по товару Стул на складе Третий

Стул

Третий

2

Итог по товару Шкаф

Шкаф

X

18

Строка по товару Шкаф на складе Первый

Шкаф

Первый

8

Строка по товару Шкаф на складе Третий

Шкаф

Третий

10

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

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

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

Продолжение примера:

//Итог общий

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

   //Итог по товару

КонецЦикла;

//Итог общий

Поскольку после первого просмотра временного набора данных (как мы это сделали выше) объект "НашЗапрос" снова спозиционирован на первой записи, то можно запустить просмотр еще раз.

Допустим, теперь нам надо просмотреть в цикле всю информацию по внешней ("Товар") и вложенной группировке запроса ("Склад"). В теле цикла по внешней группировке ("Товар") объект "НашЗапрос" позиционируется во временном наборе данных на записи, содержащие итоги по каждому конкретному товару, поэтому в теле этого цикла мы можем использовать итоги по товарам.

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

После завершения цикла по вложенной группировке ("Склад"), объект "НашЗапрос" снова позиционируется на записи временного набора данных, где содержится общий итог по конкретному товару. Поэтому, общие итоги по конкретному товару можно использовать в двух местах: до и после цикла по вложенной группировке ("Склад").

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

Продолжение примера:

//Итог общий

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

   //Итог по товару

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

      //Строка по товару — складу

   КонецЦикла;

   //Итог по товару

КонецЦикла;

//Итог общий

После выхода из процедуры, где была определена переменная, содержащая объект типа «Запрос» (в нашем примере "НашЗапрос") или после уничтожения объекта типа «Запрос» (Наш3апрос = 0;), временный набор данных на локальной машине пользователя уничтожается.

Из приведенного выше примера можно сделать несколько важных заключений:

·         при просмотре временного набора данных, вложенность циклов просмотра должна точно повторять порядок группировок запроса (нельзя входить во вложенную группировку, не войдя в предыдущую);

·         допускается просматривать временный набор данных, опуская с некоторого уровня все вложенные (внутренние) группировки;

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

Пример:

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

   Если (Запрос.Товар = НужныйТовар) Тогда

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

         Если (Запрос.Отдел = НужныйОтдел) Тогда

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

               Если (Запрос.Сотрудник = НужныйСотрудник) Тогда

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

                     Док = Запрос.Док;

                     Если Запрос.ПрихКол <> 0 Тогда

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

                     ИначеЕсли Запрос.РасхКол <> 0 Тогда

                        Приращение = Запрос.РасхКол;

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

                     КонецЕсли;

                  КонецЦикла;

               КонецЕсли;

            КонецЦикла;

         КонецЕсли;

      КонецЦикла;

   КонецЕсли;

КонецЦикла;

Атрибуты запросов

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

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

Методы запросов

Выполнить

Выполнить запрос.

Синтаксис:

Выполнить(<ТекстЗапроса>)

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

Execute

Параметры:

<ТекстЗапроса>

Строковое выражение, содержащее текст запроса на языке запросов (см. Главу «Язык запросов»).

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

Число: 1 — если запрос выполнен успешно, 0 — если зафиксирована ошибка при выполнении запроса (синтаксическая или времени выполнения).

Описание:

Метод Выполнить анализирует описание запроса, содержащееся в тексте запроса <ТекстЗапроса>, выполняет выборку данных, формирует временный выходной набор данных (выборку), вычисляет значения функций запроса (см. главу «Язык запросов»).

Язык запросов предназначен для описания запросов к базе данных. Написанный на языке запросов текст описания передается методу Выполнить в качестве параметра. Метод Выполнить непосредственно выполняет запрос, о результате его выполнения формируется временный выходной набор данных, который в дальнейшем используется для заполнения формы отчета.

Пример:

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

   // сформируем данные на начало месяца

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

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

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

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

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

   флаг1 = Запрос.Выполнить(

   "//({ЗАПРОС(Двойной)

   |Период с _Дата по _Дата;

   |Оклад = Справочник.Сотрудники.Оклад;

   |Пдр = Справочник.Сотрудники.МестоРаботы.Владелец;

   |Ктг = Справочник.Сотрудники.Категория;

   |Условие((Ктг.Выбран() = 1) И (Пдр.Выбран() = 1));

   |Группировка Пдр без групп;

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

   |Функция Всего = Сумма(Оклад);

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

   );

   Флаг2 = ЗапросКат.Выполнить(

   "//{{ЗАПРОС(Одинарный)

   |Период с _Дата по _Дата;

   |Оклад = Справочник.Сотрудники.Оклад;

   |Ктг = Справочник.Сотрудники.Категория;

   |Условие(Ктг.Выбран() = 1);

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

   |Функция Всего = Сумма(Оклад);

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

   );

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

   Если ((Флаг1 = 0) ИЛИ (Флаг2 = 0)) Тогда

      Сообщить("Ошибка в запросе!");

      Возврат;

   КонецЕсли;

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

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

   // Выводим заглавие таблицы

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

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

      Таб.ПрисоединитьСекцию("Документ<|Осн2");

   КонецЦикла;

   Таб.ПрисоединитьСекцию("Документ<|ДокументВерт>");

   // Выводим колонтитул таблицы

   Таб.ВывестиСекцию("КолонТитул|ДокументВерт<");

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

      Таб.ПрисоединитьСекцию("КолонТитул|Осн2");

   КонецЦикла;

   Таб.ПрисоединитьСекцию("КолонТитул|ДокументВерт>");

   Продолжать = 1;

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

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

      Пдр Таб.ВывестиСекцию("Осн1|ДокументВерт<");

      Далее = 1;

      Пока Продолжать = 1 Цикл

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

         СлКат = ЗапросКат.Группировка("Ктг");

         Если Далее = 1 Тогда

            ОК = Запрос.Группировка("Ктг");

         КонецЕсли;

         Если СлКат = 0 Тогда

            Прервать;

         КонецЕсли;

         Если ЗапросКат.Ктг = Запрос.Ктг Тогда

            Таб.ПрисоединитьСекцию("Осн1|Осн2");

            Далее = 1;

         Иначе

            Таб.ПрисоединитьСекцию("Осн1|Пусто");

            Далее = 0;

         КонецЕсли;

      КонецЦикла;

      Таб.ПрисоединитьСекцию("Осн1|ДокументВерт>");

   КонецЦикла;

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

   Таб.ВывестиСекцию("Документ>|ДокументВерт<");

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

      Таб.ПрисоединитьСекцию("Документ>|Осн2");

   КонецЦикла;

   Таб.ПрисоединитьСекцию("Документ>|ДокументВерт>");

   // Вывод заполненной формы Таб.Опции(0, 0, 0, 0);

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

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

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

ИспользоватьГрафуОтбора

Установить режим использования графы отбора в запросе.

Синтаксис:

ИспользоватьГрафуОтбора(<ГрафаОтбора>)

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

UseSelectionColumn

Параметры:

<ГрафаОтбора>

Строковое выражение — идентификатор графы отбора, как он задан в конфигураторе. Данный параметр устанавливает режим использования определенной графы отбора.

"*" — автоматический выбор графы отбора.

Пустая строка — не использовать графу отбора.

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

Строковое значение: идентификатор использованной реально графы отбора, если метод вызывается после выполнения запроса.

Описание:

Метод устанавливает режим использования графы отбора в запросе. Если метод не используется — по умолчанию устанавливается автоматический выбор графы отбора.

Пример:

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

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

"//{{ЗАПРОС(ОбработкаДок)

|Период с '01.10.96' по '05.10.96';

|ОбрабатыватьДокументы Все;

|Тов = Документ.РасхНакл.Товар;

|Клиент = Документ.РасхНакл.Клиент;

|Группировка Клиент;

|Группировка Тов;

|Группировка Документ;

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

;

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

Запрос.ИспользоватьГрафуОтбора("Клиент");

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

   Возврат;

КонецЕсли;

Группировка

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

Синтаксис:

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

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

Group

Параметры:

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

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

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

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

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

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

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

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

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

Описание:

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

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

Пример:

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

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

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

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

      Возврат;

   КонецЕсли;

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

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

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

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

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

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

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

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

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

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

   ;

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

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

   КонецЕсли;

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

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

      Возврат;

   КонецЕсли;

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

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

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

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

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

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

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

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

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

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

      КонецЦикла;

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

   КонецЦикла;

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

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

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

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

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

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

ЭтоГруппа

Возвращает флаг принадлежности группе справочника.

Синтаксис:

ЭтоГруппа(<ИмяГруппировки>)

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

IsItAGroup

Параметры:

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

Выражение, содержащее порядковый номер или имя группировки (см. Главу «Язык запросов»).

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

Число: 1 — если текущая строка выборки (временного набора данных, сформированного в результате выполнения запроса) является группой справочника, 0 — если это обычный элемент справочника.

Описание:

Метод ЭтоГруппа предназначен для выделения строк временного набора данных, которые являются группой справочника.

Пример:

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

   ...

КонецЦикла;

НачалоПериода

Возвращает дату начала периода формирования запроса.

Синтаксис:

НачалоПериода()

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

BeginOfPeriod

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

Значение типа «дата» — начало периода формирования запроса.

Описание:

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

Пример:

ДатаНачала = Запрос.НачалоПериода();

КонецПериода

Возвращает дату конца периода формирования запроса.

Синтаксис:

КонецПериода()

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

EndOfPeriod

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

Значение типа «дата» — конец периода формирования запроса.

Описание:

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

Пример:

ДатаКонца = Запрос.КонецПериода();

Получить

Прямое позиционирование на запись в выборке по конкретным значениям группировок.

Синтаксис:

Получить(<ЗначениеГруппировки_1>, ..., <ЗначениеГруппировки_n>)

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

Get

Параметры:

<ЗначениеГруппировки_n>

Выражение, содержащее значение n-ой группировки запроса.

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

Число: 1 — если запись найдена, 0 — если нет.

Описание:

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

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

После выполнения метода Получить может осуществляться дальнейший обход выборки вызовами метода Группировка.

Пример:

// Текст запроса

Текст3апроса = "

| ...

|Группировка Должность;

|Группировка Категория;

| ...

|";

// Текст процедуры обработки запроса

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

   Возврат;

КонецЕсли;

Если Запрос.Получить(ВыбДолжн, ВыбКатег) = 0 Тогда

   Если Запрос.Получить(ВыбДолжн, ) = 0 Тогда

      // ...

   КонецЕсли;

КонецЕсли;

ВНачалоВыборки

Осуществляет прямое позиционирование на начало выборки.

Синтаксис:

ВНачалоВыборки()

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

ToSelectionBegin

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

Число: 1 — если операция выполнена успешно, 0 — если нет.

Описание:

Метод ВНачалоВыборки осуществляет прямое позиционирование на начало выборки.

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

Пример:

// Текст запроса

Текст3апроса = "

| ...

|Группировка Должность;

|Группировка Категория;

| ...

|";

// Текст процедуры обработки запроса

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

   Возврат;

КонецЕсли;

Если Запрос.Получить(ВыбДолжн, ВыбКатег) = 0 Тогда

   Если Запрос.Получить(ВыбДолжн, ) = 0 Тогда

      // ...

   КонецЕсли;

КонецЕсли;

Запрос.ВНачалоВыборки();

Пока Запрос.Группировка(1, -1) цикл

   // ...

Конеццикла;

Выгрузить

Выгружает результаты запроса в таблицу значений.

Синтаксис:

Выгрузить(<ТаблЗнач>, <Флаг>, <Итоги>)

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

Unload

Параметры:

<ТаблЗнач>

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

<Флаг>

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

0 — значения групп и функций (по умолчанию);

1 — значения групп и функций, дополнительных переменных;

2 — значения упорядочиваний групп и функций;

3 — значения упорядочиваний групп и функций, дополнительных переменных;

Строка — "Товар(1), Товар(2), Товар, Склад, Приход, Расход"

, где Товар(1) — значение первого упорядочивания группировки "Товар".

<Итоги>

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

0 — итоги по группировкам не выводить;

1 — итоги по группировкам выводить сверху (по умолчанию);

2 — итоги по группировкам выводить снизу;

3 — итоги по группировкам выводить сверху и снизу.

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

Число: 1 — если выгрузка произошла успешно, иначе — 0.

Описание:

Метод Выгрузить выгружает результаты запроса в таблицу значений.

Пример:

// Текст запроса

Текст3апроса = "

| ...

|Группировка Должность;

|Группировка Категория;

| ...

|";

// Текст процедуры обработки запроса

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

   Возврат;

КонецЕсли;

ТаблЗнач = Создать("ТаблицаЗначений");

Запрос.Выгрузить(ТаблЗнач, 0, 0);

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

Возвращает значение поля упорядочивания для заданной группировки.

Синтаксис:

ЗначениеУпорядочивания(<Группировка>, <Упорядочив>)

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

OrderValue

Параметры:

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

Выражение, содержащее значение номера или имени группировки (номер работает быстрее).

<Упорядочив>

Необязательный параметр. Порядковый номер параметра упорядочивания указанной группировки. Значение по умолчанию: 1.

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

Значение поля упорядочивания.

Описание:

Метод ЗначениеУпорядочивания возвращает значение поля упорядочивания, выбирая его из временной выборки запроса, не обращаясь к базе данных.

Замечание: Если в тексте запроса для данной группировки не используется конструкция "Упорядочить по", то в этом случае действует упорядочивание по умолчанию:

·          для справочников — зависит от основного представления при описании справочника в конфигураторе (код или наименование).

·          для документов — дата и время создания документа.

Пример:

// Текст запроса

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

|ВидРаб = Документ.Наряд.ВидРаботы;

|Сотр = Документ.Наряд.Сотрудник;

|Группировка ВидРаб

|Упорядочить По ВидРаб.Код, ВидРаб.Стоимость;

|Группировка Сотр;

|";

//...

// Фрагмент заполнения таблицы

// Выбираем значение

ВидРаб.Стоимость

Запрос.ЗначениеУпорядочивания("ВидРаб", 2);

// Выбираем имя сотрудника

Запрос.ЗначениеУпорядочивания(2, 1);

ПолучитьАтрибут

Возвращает значение атрибута запроса по его имени.

Синтаксис:

ПолучитьАтрибут(<ИмяАтрибута>)

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

SetAttrib

Параметры:

<ИмяАтрибута>

Строковое выражение, содержащее значение любого атрибута запроса.

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

Значение атрибута запроса.

Описание:

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

Пример:

// Текст запроса

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

|ВидРаб = Документ.Наряд.ВидРаботы;

|Сотр = Документ.Наряд.Сотрудник;

|Группировка ВидРаб

|Упорядочить По ВидРаб.Код, ВидРаб.Стоимость;

|Группировка Сотр;

|";

// ...

// Фрагмент заполнения таблицы

// Выбираем значение ВидРаб

Запрос.ПолучитьАтрибут("ВидРаб");

// Выбираем сотрудника

Запрос.ПолучитьАтрибут("Сотр");



Перейти  к оглавлению: Описание встроенного языка

Hosted by uCoz