Запросы в системе "1С:Предприятие 8" предназначены для выборки информации из базы данных. По сути, запрос — это обращение к системе с просьбой выбрать определенную информацию из базы данных, а часто не только выбрать, но и произвести некоторую обработку: сгруппировать, отсортировать, вычислить. Например, с помощью запроса можно легко узнать объем продаж каждого товара в течение года с детализацией до месяца или выбрать элементы справочников по определенному условию. Заметьте, что изменять данные с помощью запросов в 1С:Предприятии не разрешается.
Язык запросов 1С:Предприятия 8 основан на стандартном SQL, но при этом содержит значительное количество расширений, ориентированных на финансово-экономические задачи, и значительно облегчает разработку бизнес-приложений.
Для работы с запросами в системе "1С:Предприятие 8" предусмотрено несколько специальных объектов, а именно:
Общая схема выполнения запроса такова:
Графически это можно представить следующим образом:
Цифрами на схеме обозначены следующие действия:
1. Установка текста запроса
Объект "Запрос" имеет свойство "Текст", которое содержит строку с текстом запроса на языке запросов. Этому свойству, во-первых, можно явно присвоить значение или, во-вторых, воспользоваться конструктором объекта "Запрос". В последнем случае текст запроса передается в качестве параметра в конструктор объекта "Запрос" при его создании.
1-й вариант:
Копировать в буфер обменаНашЗапрос = Новый Запрос; НашЗапрос.Текст = " | ВЫБРАТЬ Ссылка, Наименование, Родитель КАК Группа | ИЗ Справочник.Номенклатура | ГДЕ Ссылка В ИЕРАРХИИ (&ВыбГруппа)";2-й вариант (с другим текстом запроса):
Копировать в буфер обменаНашЗапрос = Новый Запрос ("ВЫБРАТЬ * ИЗ Справочник.Номенклатура");
2. Установка параметров запроса
Объект "Запрос" имеет метод "УстановитьПараметр", с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком "&" (например, параметр "ВыбГруппа" в первом запросе).
В качестве параметров используются значения, которые указываются пользователем в диалоге или значения типов, для которых нет литералов, например, пустых ссылок на элементы справочников. Литералы же есть только у примитивных типов данных, а именно, число, строка, дата, булево, Null, Неопределено.
Копировать в буфер обмена//здесь: "ВыбГруппа" - параметр запроса, // а "ВыбраннаяГруппаТоваров" - переменная, содержащая ссылку на группу справочника "Номенклатура". НашЗапрос.УстановитьПараметр("ВыбГруппа", ВыбраннаяГруппаТоваров);
3. Выполнение запроса
После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода "Выполнить()" объекта "Запрос". Этот метод возвращает другой объект "РезультатЗапроса", содержащий выбранные данные из базы данных.
Копировать в буфер обменаРезультатЗапроса = НашЗапрос.Выполнить();Далее возможны три варианта:
4. Получение выборки из результата запроса
Объект "РезультатЗапроса" имеет метод "Выбрать()", который возвращает новый объект "ВыборкаИзРезультатаЗапроса". В зависимости от параметра <ТипОбхода> метода "Выбрать()" выборка будет линейной (по умолчанию), иерархической или по группировкам. Далее выборка обходится с помощью цикла "Пока Выборка.Следующий() Цикл", а в теле цикла производятся какие-то действия, например, вывод областей в табличный документ.
Копировать в буфер обменаВыборка = РезультатЗапроса.Выбрать(); //по умолчанию применяется прямой тип обхода //обход записей в выборке Пока Выборка.Следующий() Цикл //обращение к полям Сообщить(Выборка.Наименование); КонецЦикла;
5. Выгрузка результата запроса в таблицу или дерево значений
Копировать в буфер обменаОбъект "РезультатЗапроса" имеет метод "Выгрузить()", который возвращает таблицу значений или дерево значений, в зависимости от переданного параметра <Тип обхода>. Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица значений, иначе — дерево значений. Далее таблица значений (дерево значений) может быть обработана средствами встроенного языка или показана пользователю в табличном поле.
ТабЗнач = РезультатЗапроса.Выгрузить(); //по умолчанию прямой тип обхода ДеревоЗнач = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
6. Формирование сводной таблицы
Копировать в буфер обменаРезультат запроса может быть использован как источник данных для сводной таблицы. При этом итоги (см. предложение ИТОГИ в тексте запроса) становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями сводной таблицы. В качестве источника данных для сводной таблицы может быть также использован объект "ПостроительОтчета", но ему на вход тоже подается запрос, поэтому можно сказать, что основа любой сводной таблицы — это запрос к базе данных.
ТД = ЭлементыФормы.ПолеТабличногоДокумента1; СводнаяТаблица = ТД.ВстроенныеТаблицы.СводнаяТаблица1; СводнаяТаблица.ИсточникДанных = РезультатЗапроса; //<= вот здесь самое важное! СводнаяТаблица.ОтображатьПоля = Истина;
См. также
Сводные таблицы