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

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

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


6.1. обработка запроса

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

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

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

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

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

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

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

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

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

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

Пример:

МойЗапрос=СоздатьОбьект(«Запрос>>);

Атрибуты работы с Запросами

Атрибутами Запросами являются объявленные в описании Запроса внутренние переменные, которые являются именами группировок Запроса и функции Запроса.

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

Функции работы с Запросами •  Вы полннть(ТекстЗапроса)

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

Возвращаемое численное значение: 1- если Запрос выполнен успешно, О - если зафиксирована ошибка при выполнении Запроса (синтаксическая или времени выполнения).

Язык Генерации Запросов предназначен для описания Запросов к базе данных. Текст описания Запроса на Языке Генерации Запросов передается функции Выполнить в параметре ТекстЗапроса. Функция Выполнить непосредственно выполняет ТекстЗапроса. В результате выполнения Запроса генерируется временный выходной набор данных, который в дальнейшем используется для заполнения формы отчета. Пример:

Функции ДолгРеализатораО

Если Число(Конт.Клиент.Выбран())<=: 0 Тогда

Возврат «Выберите клиента! Накладная не будет проведена!!!»;

КонецЕсли; //Сделаем это при помощи механизма запросов Запрос = СоздатьОбьект(«Запрос»); ПромКлиент=Конт.Клнент; //Сформируем текст запроса ТекстЗапроса = «

|Клент = Регистр.УчетРеализации.Клиент;

|Товар = Регистр.УчетРеализации.Товар;

[ОстатокТовара = Регистр.УчетРеализации.ОстатокТовара;

|ПродСтоимость — Регистр.УчетРеализации.ПродСтоимость;

|Условие (Клиент = {ПромКлиент});

|Условие (ОстатокТовара <> 0);

[Группировка Клиент; /Группировка Товар;

|Функция КонСтоимость = КонОст(ПродСтоимость); »;

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

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

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

Возврат «Запрос ие выполнился!!!»;

КонецЕсли;

Если Запрос.Группировка(«Клиент») = 1 Тогда

Возврат «На реализации товаров на общую сумму» + СокрЛ(Запрос.КонСтоимость)

+ СокрП{Коистанта.ВалютаВзаиморасчетов.Сокр_назв); Иначе

Возврат «Запрос не выполнился!!!»; ЕслиКонец; КонецФун кции

Группировка (Группировка) ш

Функция Группировка получает из выборки Запроса следующее значение в порядке Группировки Запроса, заданной параметром Группировки. Нельзя обращаться к младшим Группировкам , не обратившись предварительно к старшим.

Возвращаемое численное значение: I - если получено следующее значение

выборки Запроса, 0 - если нет.

Пример:

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

Тов.ВывестиСекцию(«СекцияТовар»);

Пока.ВывестиСекцию{«СекцияТовар»);

Пока Запр.Группировка(«Склад») = 1 Цикл Тов.ВывестиСекцию(«СекцияТовар»);

КонецЦикла; КонецЦикла;

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

Функция ЭтоГруппа возвращает численное значение;. - если ИмяГруппировки является группой справочника, 0 — если ИмяГруппировки-обычный элемент Справочника. Пример:

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

КонецЦикла;

•  НачалоПериода О ,

Функция НачалоПериода возвращает дату начала периода Запроса. Тип возвращаемого значения — дата.

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

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

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

Функция КоиецПериода возвращает дату конца периода Запроса. Тип возвращаемого значения    дата. Если в Запросе указана группировка типа период(Год, месяц, день...), то при обработке этой и вложенных в нее группировок функции НачалоПериода и КоиецПериода будут выдавать начало и конец текущего значения группировки типа период. Пример:

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

Получить(Значение_группировки_1,     Значение группировки К)

Функция Получить осуществляет прямо позиционирование на запись в выборке по конкретным значениям группировок. Количество параметров функции зависит от количества группировок в запросе. Можно пропускать значения одной или нескольких последних группировок в запросе. Можно пропускать значения одной или нескольких группировок, в этом случае функция позиционируется на запись, которая будет содержать итоговые значения для указанных группировок. Пропускаемые при вызове функции последние значения группировок должны заменяться запятыми. Возвращаемые значения: 1 — если запись найдена и 0 — если нет. Пример: //Текст запроса [Группировка Товар; [Группировка Склад; //Текст процедуры обработки запроса Если Запрос.Выполнитъ(ЗапросТекста) = 0 Тогда Возврат; КонецЕсли;

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

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

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

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

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

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

//Фрагмент текста запроса

Товар = Документ.НаклПрих.Товар;

|Склад - Документ. Накл.Прих.Склад;

|Группировка Товар упорядочить по Товар.Кол;

[Товар .КодыКомплектка;

(Группировка Склад;

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

//выбираем значение Товар.КодыКомплекта;

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

//Выбираем название склада

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