- •8.1. Назначение. Основные объекты , предназначенные для организации запросов
- •Выполнение запроса
- •8.2. Язык запросов
- •Поля из вложенных таблиц
- •Псевдонимы источников как/as
- •Запросы к табличным частям
- •Вложенные запросы в списке источников
- •Конструкция соединение...По/join...On
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Логические операторы и, или, не
- •Параметры в языке запросов
- •Проверка вхождения значения в список (в/in)
- •Проверка ссылочного значения (ссылка/ref)
- •Проверка пустых значений (есть null / is null)
- •Сравнение строк (подобно / like)
- •Упорядочивание по иерархии
- •Упорядочивание во вложенных таблицах
- •Автоупорядочивание /autoorder
- •Агрегатные функции в запросе
- •Общие итоги
- •Итоги по группировкам
- •Итоги по иерархии
- •Несколько итогов в запросе
- •Встроенные функции языка запросов
- •Операции выбора в языке запросов (выбор / case)
- •Приведение типов в языке запросов
- •Литералы и параметры в языке запросов
- •8.4. Обработка результата запроса
- •8.5. Выборка из результата запроса
- •Линейный обход
- •Иерархический обход
- •Обход по группировкам
- •Другие полезные методы
- •8.6. Выгрузка результата запроса
- •8.7. Запросы к регистрам сведений
- •Основная таблица регистра сведений
- •8.8. Запросы к регистрам накопления
- •Основная таблица регистра накопления
- •Сводные таблицы
8.4. Обработка результата запроса
Напомним общую схему выполнения запроса:
1. Создание объекта Запрос и передача ему текста запроса.
2. Установка параметров запроса с помощью метода
УстановитьПараметр.
3. Выполнение запроса, получение результата запроса.
4. Получение выборки из результата запроса или выгрузка результата запроса в таблицу значений / дерево значений. Также есть возможность использовать результат запроса в качестве источника данных для сводной таблицы.
5. Обход выборки из результата запроса или обработка таблицы значений/дерева значений.
Ниже приведен пример выполнения простого запроса и получения выборки из результата запроса:
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.Сотрудники";
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = 3апрос.Выполнить ();
ВыборкаИзРезультатаЗапроса = РезультатЗапроса.Выбрать();
Тот же самый фрагмент можно записать короче. В приведенном ниже примере используется конструктор объекта Запрос с параметром, через который передается текст запроса. Далее запрос выполняется, и сразу же производится выборка из результата запроса:
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Сотрудники"); ВыборкаИзРезультатаЗапроса = Запрос.Выполнить().Выбрать();
Перед получением выборки можно проверить результат запроса на наличие хотя бы одной записи. Для этого предназначен метод Пустой:
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Сотрудники");
Результат = 3апрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
ВыборкаИзРезультатаЗапроса = Результат.Выбрать();
КонецЕсли;
В некоторых случаях до получения выборки необходимо определить, какие сведения содержатся в результате. Для решения этой задачи у объекта РезультатЗапроса есть свойство Колонки, через которое можно обратиться к коллекции колонок результата запроса.
Например, выведем имена всех колонок результата запроса с указанием их типа и ширины:
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Сотрудники");
Результат = Запрос.Выполнить();
Для каждого Колонка ИЗ Результат.Колонки Цикл
Сообщить("Колонка: " + Колонка.Имя + " типа " + Колонка.Тип +
" имеет ширину " + Колонка.Ширина);
КонецЦикла;
8.5. Выборка из результата запроса
Выборка из результата запроса предназначена для обхода его записей. Можно представить себе выборку как некоторый объект, который содержит указатель на текущую запись в результате запроса и предоставляет программе доступ ко всем полям текущей записи. Обход выборки может быть линейный, иерархический или по группировкам.
Возьмем результат простого запроса и продемонстрируем на его примере все варианты обхода выборки:
ВЫБРАТЬ Номенклатура, Количество
ИЗ Документ.РасходнаяНакладная.Состав
УПОРЯДОЧИТЬ ПО Номенклатура
ИТОГИ СУММА(Количество) ПО Номенклатура,Номенклатура Иерархия
Результат запроса показан в следующей таблице:
№ |
Номенклатура |
Количество |
||
|
|
|
||
1 |
Сантехника |
104 |
||
2 |
Кран |
84 |
||
3 |
Кран |
10 |
||
4 |
Кран |
8 |
||
5 |
Кран |
44 |
||
6 |
Кран |
22 |
||
7 |
Смеситель |
20 |
||
8 |
Смеситель |
5 |
||
9 |
Смеситель |
1 |
||
10 |
Смеситель |
14 |
||
11 |
Мебель |
134 |
||
12 |
Стол |
26 |
||
13 |
Стол |
1 |
||
14 |
Стол |
15 |
||
15 |
Стол |
10 |
||
16 |
Стул |
108 |
||
17 |
Стул |
55 |
||
18 |
Стул |
5 |
||
19 |
Стул |
32 |
||
20 |
Стул |
16 |
||
В этой таблице добавлен столбец №1, которого нет в результате запроса, но который будет использоваться нами в дальнейшем для идентификации записи в результате. Итоговые записи для уровней иерархии справочника выделены жирным шрифтом.
