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

 

Глава 34-1
Язык Запросов


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

Формат текста описания запроса

Текст описания запроса на языке запросов состоит из последовательности операторов. Концом оператора является символ ";". Операторы могут записываться в любом порядке, однако, следует помнить, что интерпретатор языка запросов однопроходный, следовательно, сначала следует описать переменную, и только потом ее использовать в операторах Группировка, Функция или Условие.

Пример:

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

"//({ЗАПРОС(РасчЛистки)

|  // Задаем интервал запроса

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

|  // Определяем внутренние переменные

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

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

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

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

|  // Назначаем группировки

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

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

|  // Назначаем функции

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

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

|  // Назначаем условие

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

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

;

// ...

Соглашения и обозначения

В синтаксических диаграммах языка запросов используются следующие символы:

Символ

Значение

[ ]

В квадратных скобках заключаются необязательные синтаксические элементы.

[ ]+

В квадратных скобках со знаком "+" заключаются обязательные синтаксические элементы, которые могут использоваться один или более раз.

[ ]*

В квадратных скобках со знаком "*" заключаются необязательные синтаксические элементы, которые могут использоваться один или более раз.

( )

Круглые скобки заключают в себе список параметров.

|

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

Зарезервированные слова языка запросов

Ключевые слова — это слова, которые используются языком запросов для обозначения встроенных операторов.

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

Русский яз.

Английский яз.

Без

Without

Год

Year

Групп

Groups

Группировка

Group

День

Day

Документ

Document

И

And

Или

Or

Квартал

Quarter

Когда

When

Месяц

Month

Неделя

Week

НомерСтроки

LineNum

Обрабатывать

Process

ОбрабатыватьДокументы

ProcessDocuments

ОбрабатыватьОперации

PrосessOperations

Период

Period

ПериодЖурнала

Journal Period

По

By

По

Till

С

From

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

Document Line

Упорядочить

Order

Условие

Condition

Функция

Function

Все ключевые слова могут быть набраны в любом регистре (верхний и нижний), например: Функция, ФУНКЦИЯ, фУНКЦИЯ .

Комментарий

Комментарий в тексте описания запроса начинается парой символов //и заканчивается концом строки.

Пример:

// Это — комментарий

Группировка Кат;  // Это тоже комментарий

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

Константы

Язык содержит следующие типы констант:

Числовая константа описывается следующей синтаксической диаграммой:

[+|-][0-9]+ | [0-9]*.[0-9]+

Пример:

-17

43.712

.43842

Строковая константа — это строка, заключенная в двойные кавычки.

Пример:

"Это текстовая константа" // ОК

"Это ошибочная константа

и должна находиться на одной строке" // Ошибка

Константа типа "дата" задается в виде строки, заключенной в одинарные кавычки, в формате 'ДД.ММ.ГГ' или 'ДД.ММ.ГГГГ'.

Пример:

'21.05.96'

'25.09.1964'

Внутренние переменные

Внутренняя переменная — это переменная, объявленная в тексте описания запроса. Именем переменной может быть любая последовательность букв, цифр и знаков подчеркивания "_", начинающаяся с буквы или знака подчеркивания "_". Имена внутренних переменных не должны совпадать с зарезервированными словами языка запросов. Распознавание имен переменных, названий операторов, процедур и функций ведется без учета регистра букв.

Пример:

*

// имена внутренних переменных в описании запроса

_43842        // ОК

НачалоПериода // ОК

712piece      // Ошибка: начинается с цифры

Week          // Ошибка: ключевое слово зарезервировано

*

// применение имен внутренних переменных описания запроса

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

// выборки функцией Группировка

Сотр = НовЗапрос.Сотр;

Кат = НовЗапрос.Кат;

ИТОГ = НовЗапрос.Итого;

Конкретизация переменной

Конкретизация переменной — это уточнение описания внутренней переменной, если это возможно в текущем контексте. Конкретизации переменной могут использоваться в языке запросов в операторах Группировка ... Упорядочить По и в качестве аргумента оператора Функция (см. далее).

Синтаксис:

<ВнутренняяПеременная>[.<Путь>]+;

Параметры:

<ВнутренняяПеременная>

Идентификатор объявленной ранее внутренней переменной.

<Путь>

Доступный атрибут внутренней переменной или конкретизации переменной (см. «Атрибуты, доступные при описании внутренних переменных»).

Пример:

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

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

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

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

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

|Тов = Справочник.Товары.ТекущийЭлемент, Документ.РасхНакл.Товар;

|  // используем конкретизацию внутренней переменной Тов

|Группировка Тов Упорядочить По Тов.Наименование;

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

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

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

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

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

   Возврат;

КонецЕсли;

Внимание! Запрос не манипулирует величинами типа «Строка неограниченной длины».

Внешние переменные

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

Пример:

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

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

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

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

      Возврат;

   КонецЕсли;

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

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

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

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

   |  // используем внешние переменные ДатаНач и ДатаКон

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

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

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

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

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

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

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

   ;

   // используем внешнюю переменную ВыбСотр

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

      // используем в запросе внешнюю переменную ВыбСотр

      ТекстЗапроса = ТекстЗапроса + "Условие(Сотр = ВыбСотр);";

   КонецЕсли;

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

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

      Возврат;

   КонецЕсли;

   ...

КонецПроцедуры // ВыбСотр — это реквизит диалога

Атрибуты, доступные при описании внутренних переменных

В языке запросов можно обращаться к атрибутам следующих видов данных:

Русское назв.

Англ. Назв.

Описание

Документ

Document

Данные документов.

Справочник

Reference

Данные справочников.

Регистр

Register

Данные регистров.

ЖурналРасчетов

CalcJournal

Данные журналов расчета.

Счет

Account

Данные счетов.

Операция

Operation

Данные бухгалтерских операций и проводок.

Эти названия являются первыми в пути описания переменных. В качестве атрибутов допускается использовать любые реквизиты, которые заданы для них в конфигураторе в дереве метаданных (реквизиты для справочников, документов и журналов расчетов; измерения и ресурсы для регистров). Кроме этих атрибутов, разрешен так же доступ к следующим предопределенным атрибутам:

Доступные атрибуты объектов типа «Документ»:

Русское назв.

Англ. Назв.

Описание

ВремяДок

DocTime

Время документа.

ДатаДок

DocDate

Дата документа.

НомерДок

DocNum

Номер документа.

НомерСтроки

LineNum

Номер строки документа.

ТекущийДокумент

CurDocument

Значение текущего документа.

Доступные атрибуты объектов типа «Справочник»:

Русское назв.

Англ.назв.

Описание

родитель

Parent

Родитель элемента многоуровневого справочника.

Владелец

Owner

Владелец подчиненного справочника.

Код

Code

Код элемента справочника.

Наименование

Description

Наименование элемента справочника.

ТекущийЭлемент

CurItem

Значение текущего элемента справочника.

Доступные атрибуты объектов типа «Регистр»:

Русское назв.

Англ.назв.

Описание

НомерСтроки

LineNum

Номер строки документа, выполнившего движение регистра (в случае, когда в Модулях документов в конфигурации перед движением регистра использовали метод ПривязыватьСтроку).

ТекущийДокумент

CurDocument

Значение документа, выполнившего движение регистра.

Доступные атрибуты объектов типа «ПланСчетов»:

Русское назв.

Англ. назв.

Описание

БезКорреспонденций

IsSingle

Флаг того, что элемент плана счетов — забалансовый.

Валютный

IsCurrency

Флаг валютного учета элемента плана счетов.

КОД

Code

Код элемента плана счетов.

Количественный

Is Amount

Флаг количественного учета элемента плана счетов.

Наименование

Description

Наименование элемента плана счетов.

ТекущийСчет

CurAccount

Значение текущего счета плана счетов.

Доступные атрибуты объектов типа «Операция»:

Русское назв.

Англ. Назв.

Описание

ВремяОперации

OperTime

Время операции.

ДатаОперации

OperDate

Дата операции.

Содержание

Description

Содержание операции.

СуммаОперации

OperSum

Сумма операции.

ТекущийДокумент

CurDocument

Значение документа создавшего операцию.

Доступные атрибуты объектов типа «Проводка»:

Русское назв.

Англ. назв.

Описание

ВалСумма

CurSum

Валютная сумма проводки (для счетов с валютным учетом).

Валюта

Currency

Валюта проводки.

Количество

Amount

Количество проводки (для счетов с количественным учетом).

КорСчет

CorAccount

Корреспондирующий счет. Корреспондирующим счетом, для которого является Счет.

Сумма

Sum

Сумма проводки.

Счет

Account

Счет, для обработки корреспонденции. Корреспондирующим счетом, для которого является КорСчет.

Пример:

*

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

ТекстЗапроса = "//{{ЗАПРОС(Сформировать)

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

|ДОКУМ = Документ.РасходнаяБН.ТекущийДокумент,

|   Документ.РасходнаяКредит.ТекущийДокумент,

|   Документ.РасходнаяНал.ТекущийДокумент,

|   Документ.РасходнаяРеализ.ТекущийДокумент,

|   Документ.Счет.ТекущийДокумент;

|Группировка ДОКУМ; //по документам

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

;

*

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

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

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

"//{{ЗАПРОС(Печать)

|Товар = Справочник.Товары.ТекущийЭлемент;

|Группировка Товар Упорядочить по Товар.МинЗапас;

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

*

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

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

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

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

|ВидТоплива = Регистр.ПокупателиКолво.ВидыТоплива;

|Вес = Регистр.ПокупателиКолво.Кг;

|Покуп = Регистр.ПокупателиКолво.Покупатели;

|Док = Регистр.ПокупателиКолво.ТекущийДокумент;

|Ном = Регистр.ПокупателиКолво.НомерСтроки;

|Группировка ВидТоплива; //по измерению Регистра

|Группировка Док; // по документам, двигавшим Регистр

|Группировка Ном; // по номерам строк документов

|Функция ВсегоКолво = КонОст(Вес);

|Функция ПриходКолво = Приход(Вес);

|Условие(Покуп = ВыбПокупатель);

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

;

 



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

Hosted by uCoz