Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Общая схема выполнения запросов          
Batchir Подменю пользователя
сообщение 08.02.09, 19:29
Сообщение #1

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

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

Язык запросов 1С:Предприятия 8 основан на стандартном SQL, но при этом содержит значительное количество расширений, ориентированных на финансово-экономические задачи, и значительно облегчает разработку бизнес-приложений.

Для работы с запросами в системе "1С:Предприятие 8" предусмотрено несколько специальных объектов, а именно:
- Запрос
- РезультатЗапроса
- ВыборкаИзРезультатаЗапроса.

Общая схема выполнения запроса такова:
1. Установка текста запроса

Объект "Запрос" имеет свойство "Текст", которое содержит строку с текстом запроса на языке запросов. Этому свойству, во-первых, можно явно присвоить значение или, во-вторых, воспользоваться конструктором объекта "Запрос". В последнем случае текст запроса передается в качестве параметра в конструктор объекта "Запрос" при его создании.

1-й вариант:


НашЗапрос = Новый Запрос;
НашЗапрос.Текст = "
| ВЫБРАТЬ Ссылка, Наименование, Родитель КАК Группа
| ИЗ Справочник.Номенклатура
| ГДЕ Ссылка В ИЕРАРХИИ (&ВыбГруппа)";


2-й вариант (с другим текстом запроса):


НашЗапрос = Новый Запрос ("ВЫБРАТЬ * ИЗ Справочник.Номенклатура");
 

2. Установка параметров запроса

Объект "Запрос" имеет метод "УстановитьПараметр", с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком "&" (например, параметр "ВыбГруппа" в первом запросе).

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


//здесь: "ВыбГруппа" - параметр запроса,
// а "ВыбраннаяГруппаТоваров" - переменная, содержащая ссылку на группу справочника "Номенклатура".
НашЗапрос.УстановитьПараметр("ВыбГруппа", ВыбраннаяГруппаТоваров);


3. Выполнение запроса

После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода "Выполнить()" объекта "Запрос". Этот метод возвращает другой объект "РезультатЗапроса", содержащий выбранные данные из базы данных.


РезультатЗапроса = НашЗапрос.Выполнить();
 

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

4. Получение выборки из результата запроса

Объект "РезультатЗапроса" имеет метод "Выбрать()", который возвращает новый объект "ВыборкаИзРезультатаЗапроса". В зависимости от параметра <ТипОбхода> метода "Выбрать()" выборка будет линейной (по умолчанию), иерархической или по группировкам. Далее выборка обходится с помощью цикла "Пока Выборка.Следующий() Цикл", а в теле цикла производятся какие-то действия, например, вывод областей в табличный документ.


Выборка = РезультатЗапроса.Выбрать(); //по умолчанию применяется прямой тип обхода
//обход записей в выборке
Пока Выборка.Следующий() Цикл
//обращение к полям
Сообщить(Выборка.Наименование);
КонецЦикла;


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

Объект "РезультатЗапроса" имеет метод "Выгрузить()", который возвращает таблицу значений или дерево значений, в зависимости от переданного параметра <Тип обхода>. Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица значений, иначе — дерево значений. Далее таблица значений (дерево значений) может быть обработана средствами встроенного языка или показана пользователю в табличном поле.


ТабЗнач = РезультатЗапроса.Выгрузить(); //по умолчанию прямой тип обхода
ДеревоЗнач = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);


6. Формирование сводной таблицы

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


ТД = ЭлементыФормы.ПолеТабличногоДокумента1;
СводнаяТаблица = ТД.ВстроенныеТаблицы.СводнаяТаблица1;
СводнаяТаблица.ИсточникДанных = РезультатЗапроса; //<= вот здесь самое важное!
СводнаяТаблица.ОтображатьПоля = Истина;



Резюме
- Язык запросов 1С:Предприятия 8 значительно изменился по сравнению с версией 7.7 и стал похож на стандартный SQL.
- Для работы с запросами применяются программные объекты типа Запрос, РезультатЗапроса и ВыборкаИзРезультатаЗапроса.
- В запросе могут быть использованы параметры, которые нужно явно передавать в запрос с помощью метода УстановитьПараметр() объекта "Запрос".
- При выполнении запроса мы получаем объект типа "РезультатЗапроса", из которого обычно производится выборка.
- Результат запроса может быть также выгружен в таблицу / дерево значений или использован для формирования сводной таблицы.

Спасибо сказали: Romio,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 12:54
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!