Название: Автоматизированный бухгалтерский учет в программном комплексе «1С-М52 Предприятие» (Меркулова Т.А)

Жанр: Информационные системы и технологии

Просмотров: 1286


6.2. язык генерации запросов

Язык Генерации Запросов предназначен для описания запросов к

Документам, Справочникам, Регистрам. Текст описания Запроса на языке

Генерации Запросов передается функции выполнить в параметре

ТекстЗапроса. Функция   непосредственно выполняет

Запрос,   который в дальнейшем используется для заполнения формы

отчета.

Формат текста описания Запроса. Соглашения и обозначения.

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

Символ Значение

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

[]+      В квадратных скобках со знаком "+" заключаются обязательные

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

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

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

|    Вертикальной линией разделяются синтаксические элементы, среди

которых нужно выбирать один и только один.

Переменные Языка Генерации Запросов. Внутренняя переменная — переменная, обьявленная в тексте описания Запроса. Именем переменной может быть любая последовательность букв, цифр и знаков подчеркивания (_J. Имена переменных не должны совпадать с зарезервированными словами языка генерации Запросов. Распознавание

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

К   внутренней   переменной      возможно   обращение   из вызывающего программного модуля по имени через точку после имени ссылки на объект типа Запрос-Пример:

Итог = НовЗапросИтого

Конкретизации переменной - это уточнение описания внутренней переменной (если это возможно в текущем контексте). Синтаксис:

Внутренняя Переменная Путь... ;

Внешние переменные - это переменные из области использования того программного модуля, в теле которого используется данное описание запроса на языке Генерации Запросов. Внешние переменные в тексте описания Запроса выделяются фигурными скобками «{}». Пример:

Период с (ДатаДок);

Команды Языка Генерации Запросов •  Обьнвленне внутренней переменной

ИмяПеременной = ОписаниеПеременной [,ОписаниеПеременой... J; МмяПеременной   - имя объявляемой внутренней переменной описания Запроса.

ОписаниеПеременной - указывает на конкретный реквизит Документа, Справочника, измерение или ресурс Регистра.

В объявлении внутренней переменной можно указывать несколько вариантов ОписанияПременной. Все описания должны указывать на одни и тот же тип данных (число, строку, Справочник или Документ). Переменной, указывающей на разные Справочники или Документы, присваивается неопределенный тип. Пример:

Тов = Документ.НаклПрих.Товар, Документ. Счет.Товар. Регистр.ТовЗап. Товар;

Документы и Справочники (кроме реквизитор) обладают еще дополнительными именами для доступа: = Документы:

ТекущийДокумент (сам Документ)

НомерДок

ДатаДок

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

ВремяДок

= Справочники:

ТекущийЭлемент (сам Справочник)

-Код

-    Наименование Пример:

Док—Документ.Накл.Расх.ТьекущийДокумент;

•    (Период С Дата | Внешняя переменная [ПО Дата | Внешняя Переменная!;!

—    установить интервал дат Запроса

Команда Период С устанавливает интервал дат формирования Запроса. Если в описании Запроса команда Период С опущена, то интервал дат формирования  Запроса  устанавливается  в  точку  актуальности итогов (формировать Запрос только на этот момент времени). Пример:

Период с(ДатаДок);

Условие (Логическое выражение) - назначить условие включения информации в Запрос

Команда Условие назначает условие включения информации в Запрос. Если значение Логического_выражения ИСТИНА, то выбранная информация включается в запрос, иначе иет. Пример:

Условие (Клиент = ВыбКлиент); Условие(Товар.ПринадлежитГруппе(ВыбТовар) - 1);

Функция - вычислить функцию

Функция ИмяФункции = ТипФункции (7Тйрл*е/и/?|УтонченныйПараметр) [ Когда Условие];

Функция      Вычисляет функцию ТипФункции и присваивает ее значение внутренней переменной ИмяФункции.

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

Тип Функции . Ключевое слово одной из встроенных функций Языка

 

Ключевое слово

Пояснения

CyMMa(Sum)

Вычисляет сумму выбранных по Запросу значений параметра

Cpeдиee(Avg)

Вычисляет Среднее из выбранных по Запросу значений параметра

Минимум(Мт)

Вычисляет Минимум из выбранных по Запросу значений параметра

Максимум(Мах)

Вычисляет Максимум из выбранных по Запросу значений параметра

HanOcrfBegRest)

Вычисляет начальный остаток для выбранных по Запросу значений параметра (ресурс Регистра)

 

КонОст (EndReg)

Вычисляет Конечный остаток для выбранных по Запросу значений параметра (ресурс Регистра)

 

Приход(БеЬк)

Вычисляет Приход для выбранных по Запросу значений парметра (ресурс Регистра)

 

Pacxofl(Credit)

Вычисляет Расход для выбранных по Запросу значений параметра (ресурс Регистра)

 

Замечание: Типы функции НачОст, КонОст, Приход, Расход -используются только для параметров, указывающих на ресурсы регистров. К таким переменным не могут применяться другие функции.

Параметр . Имя объявленной ранее внутренней переменой, значение которой, значение которой используется как параметр вызова встроенной функции ТипФункции.

Уточненный Параметр. Конкретизация обьявленной ранее внутренней переменой, значение которой используется как параметр вызова встроенной функции ТипФункции.

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

Условие . Логические выражение встроенного языка 1С:Торговля. В логическом выражении могут участвовать как внутренние, так и внешние переменные Языка генерации запросов. Используется только после ключевого слова Когда.

Замечание. В вызывающем программном модуле ИмяФункции будет являться атрибутом Запроса. При помощи данного атрибута можно обращаться к значению вычисленной в Запросе функции. Полное имя атрибута Запроса пишется через точку после имени ссылки на объект типа Запрос. Пример:

Функция СумОтп = Сумма(ОТ11УЩЕНО); Функция НачОст = НачОст(Наличие); Функция КонОст = КонОст(Наличие); Функция Прих = Приход(Наличие); Функция Расх - Расход(Наличие);

• Группировка ИмяГрущтировки Предопределенная Группировка

[ Упорядочить по КонкретизацияИмяГруппировкиЗ.... [Без групп] <. -

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

формировании Запроса.

Имя Группировки , Имя объявленной ранее внутренней переменной, по

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

ПредопределеннаяГруппровка. Ключевое слово одной из встроенных предопределенных группировок Языка Генерации Запросов. Может быть

 

Документ

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

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

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

День

Неделя

Месяц

Квартал

Год

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

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

КонкретизщняИмяТруппировки Конкретизация внутренней переменной ИмяГруппировки, значение которой является параметром упорядочивания строк в группировке. Используется только после ключевого слова Упорядочить по.

Без Групп Необязательное ключевое слово, использование

которого в команде назначает вывод в запрос только простых элементов Справочников (не Групп)

Несколько команд Группировка, следующих друг за другом в описании запроса, создают вложенные группировки Запроса.

Имя имяГруппировки или предопределеннойГруппировки, которая используется в команде, можно использовать в вызывающем программном модуле в качестве параметра при вызове для данного Запроса функции 1 руппировка

Замечание: в вызывающем программном модуле ИмяГруппировкиши ПредопределеннойГруппировки будет являться атрибутом Запроса, Данный атрибут используется в вызывающем программном модуле в качестве параметра при  вызове функции  Группировка .

Полное имя атрибута Запроса пишется через точку после вызова ссылки на объект типа запрос. Пример:

Группировка товар упорядочить по Товар. Наименование без групп; Группировка Склад без Групп;

//Используем предопределенную группировку Группировка месяц; Группировка Документ;

Структура текста описания запроса Текст описания Запроса на языке Генерации Запросов состоит из последовательных секций. Секции между собой ничем не разделяются, а определяются контекстом их содержания. Любая секция в описании Запроса может быть опущена, но порядок их следования должен строго соблюдаться. Порядок следования секций в описании Запроса может быть опущена, но порядок их следования должен строго соблюдаться. Порядок следования секций в описании Запроса должен быть следующим:

Секция описания интервала запроса (за какой период производить выборку) секция состоит из команды Период С. Если эта секция в описания Запроса опущена (нет команды период С), то интервал дат формирования Запроса устанавливается в точку актуальности итогов .

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

Секция функций состоит из последовательности команд Функция;

Секция группировок состоит из последовательности команд Группировка.' Секция функций может располагаться как перед секцией группировок, так и после нее.

Пример:

Процедура: ОстаткиНаСкладе()

//создадим обьект запрос

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

ТекстЗапроса = "Склад = Регистр.ОстаткиТоваров.Склад;

|Товар = Регистр.остаткиТоваров. Товар;

|БазСто = Регистр.остаткиТоваров.БазоваяСтоимость;

|ВалСто = Регистр.остаткиТоваров.ВалютнаяСтоимость;

|Кол = Регистр.ОстаткиТоваром.ОстаткиТовара;";

Если ВыбТовар.Выбран()=0 Тогда //юез условий

ИначеЕсли ВыбТовар. Этогруппа()=1 Тогда

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

«Условие{Товар.принадлежитГруппе(ВыбТовар)= 1);»; Иначе

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

«Условие (ТекстЗапроса + «Условие (Товар = {ВыбТовар}):»; КонецЕсли;

Если ВыбСклад.Выбран()=0 Тогда //без условий Иначе

ТекстЗапроса = ТекстЗапроса + «Условие (Склад = {ВыбТовар})»;

КоиецЕсли;

ТекстЗапроса = ТекстЗапроса + " [ГруппировкаСклад; [ГруппировкаТовар; |Функция Базсто1 = КонОст(БазСто); |Функция Валсто1 = КонОст(ВалСто); | Функция НачКол = КонОст(Кол); | Функция КонКол= КонОст(Кол); | Функция ПрихКол= Приход (Кол); | Функция РасхКол= Расход(Кол);"; //выполним запрос

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

//проверим выполнение запроса

Если Флаг = 0 тогда

Возврат;

КонецЕслн;

//Создание Таблицы для выхода выходного отчета

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

Таб.ВывестиСекцию(«Отчет»);

Пока ЗапросГруппировка («Склад») = 1 Цикл

Таб.ВывестиСекцию(«Склад»);

Пока ЗапросГруппировка(«Товар»); = 1 Цикл

Если Запрос.Товар Это группа()=1 Тогда

ТабВывестиСекцию(«Группа»);

Продолжить;

Иначе

Таб.ВывестиСекцию(«Отчет»);

КоиецЕсли;

КонецЦикла;

КонецЦикла;

//Вызов выходоного отчета в окно просмотра и редактирования. // как я заколебался набивать, если бы вы только знали. Таб.ТолькоПросмотр( 1); ТабОпшш(0,0,5,0);

ТабПоказать(«Остатки Товара на складах»,»»); ВыбСклад = 0; ВыбТовар = 0; КонецПроцедуры