Запросы. Два способа решения задачи

Содержание

Слайд 2

Два способа решения задачи

1-й способ. Используется язык программирования:
Выборка = Справочники.Сотрудники.Выбрать();
Пока Выборка.Следующий()

Два способа решения задачи 1-й способ. Используется язык программирования: Выборка = Справочники.Сотрудники.Выбрать();
Цикл
Если Выборка.Оклад > 10000 Тогда
Сообщить (Выборка.Наименование + " имеет оклад " + Выборка.Оклад); КонецЕсли;
КонецЦикла;
2-й способ. Используется механизм запросов:
Запрос = Новый Запрос("
| ВЫБРАТЬ * ИЗ Справочник.Сотрудники
| ГДЕ Оклад > 10000");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " имеет оклад " + Выборка.Оклад);
КонецЦикла;

Слайд 3

Объекты для работы с запросами

Запрос,
РезультатЗапроса,
ВыборкаИзРезультатаЗапроса

Объекты для работы с запросами Запрос, РезультатЗапроса, ВыборкаИзРезультатаЗапроса

Слайд 4

Общая схема выполнения запроса

Общая схема выполнения запроса

Слайд 5

Пример запроса

//создание объекта Запрос
Запрос = Новый Запрос("
|ВЫБРАТЬ Код, Наименование
|ИЗ Справочник.Номенклатура");
//выполнение запроса

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

Слайд 6

Язык запросов

ВЫБРАТЬ <Список полей | *>
[ИЗ <Список таблиц-источников>]
[ГДЕ <Список условий>]
[УПОРЯДОЧИТЬ ПО <Список

Язык запросов ВЫБРАТЬ [ИЗ ] [ГДЕ ] [УПОРЯДОЧИТЬ ПО ] | [АВТОУПОРЯДОЧИВАНИЕ]
полей >] | [АВТОУПОРЯДОЧИВАНИЕ]
[СГРУППИРОВАТЬ ПО <Список полей>]
[ИТОГИ [<агрегатные функции>] ПО <Список полей> [,ОБЩИЕ]]

Слайд 7

Предложение ВЫБРАТЬ / SELECT

Синтаксическая диаграмма
ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>] <Список полей выборки |

Предложение ВЫБРАТЬ / SELECT Синтаксическая диаграмма ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ ] Примеры: ВЫБРАТЬ
*>
Примеры:
ВЫБРАТЬ Наименование, Цена ИЗ Справочник.Товары
ВЫБРАТЬ * ИЗ Справочник.Сотрудники
ВЫБРАТЬ Номер, Дата, Представление ИЗ Документ.РасходнаяНакладная
ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи

Слайд 8

Псевдонимы полей (КАК/ AS)

ВЫБРАТЬ Наименование КАК Товар, Цена, ЕдИзм КАК ЕдиницаИзмерения
ИЗ Справочник.Товары
УПОРЯДОЧИТЬ

Псевдонимы полей (КАК/ AS) ВЫБРАТЬ Наименование КАК Товар, Цена, ЕдИзм КАК ЕдиницаИзмерения
ПО Товар

Слайд 9

Ключевое слово РАЗЛИЧНЫЕ / DISTINCT

ВЫБРАТЬ Контрагент ИЗ Документ.РасходнаяНакладная
Контрагент
ООО «Новый мир»
ЗАО «Стройметмаш»
ООО «Новый

Ключевое слово РАЗЛИЧНЫЕ / DISTINCT ВЫБРАТЬ Контрагент ИЗ Документ.РасходнаяНакладная Контрагент ООО «Новый
мир»
ООО «Механика»
ВЫБРАТЬ РАЗЛИЧНЫЕ Контрагент ИЗ Документ.РасходнаяНакладная
Контрагент
ООО «Новый мир»
ЗАО «Стройметмаш»
ООО «Механика»

Слайд 10

Ключевое слово ПЕРВЫЕ / ТОР

ВЫБРАТЬ ПЕРВЫЕ 3 Наименование, Цена ИЗ Справочник.Номенклатура УПОРЯДОЧИТЬ

Ключевое слово ПЕРВЫЕ / ТОР ВЫБРАТЬ ПЕРВЫЕ 3 Наименование, Цена ИЗ Справочник.Номенклатура УПОРЯДОЧИТЬ ПО Цена УБЫВ
ПО Цена УБЫВ

Слайд 11

Псевдонимы источников КАК/AS

ВЫБРАТЬ Спр.Наименование,
Спр.Цена,
Спр.Страна ИЗ Справочник.Номенклатура КАК Спр

Псевдонимы источников КАК/AS ВЫБРАТЬ Спр.Наименование, Спр.Цена, Спр.Страна ИЗ Справочник.Номенклатура КАК Спр

Слайд 12

Запросы к табличным частям

ВЫБРАТЬ Товар, Цена, Количество, Сумма ИЗ Документ.РасходнаяНакладная.Состав

Запросы к табличным частям ВЫБРАТЬ Товар, Цена, Количество, Сумма ИЗ Документ.РасходнаяНакладная.Состав

Слайд 13

Запросы к табличным частям

ВЫБРАТЬ Ссылка.Дата, Ссылка.Номер,
Номенклатура, Цена, Количество, Сумма ИЗ Документ.РасходнаяНакладная.Состав

Запросы к табличным частям ВЫБРАТЬ Ссылка.Дата, Ссылка.Номер, Номенклатура, Цена, Количество, Сумма ИЗ Документ.РасходнаяНакладная.Состав

Слайд 14

Вложенные запросы в списке источников

ВЫБРАТЬ Товары.Номенклатура КАК Товар,
Товары.Номенклатура.ЗакупочнаяЦена КАК Цена
ИЗ (

Вложенные запросы в списке источников ВЫБРАТЬ Товары.Номенклатура КАК Товар, Товары.Номенклатура.ЗакупочнаяЦена КАК Цена
ВЫБРАТЬ Номенклатура ИЗ Документ.РасходнаяНакладная.Состав
ОБЪЕДИНИТЬ
ВЫБРАТЬ Номенклатура ИЗ Документ.ПриходнаяНакладная.Состав
) КАК Товары
СГРУППИРОВАТЬ ПО Товары.Номенклатура

Слайд 15

Конструкция СОЕДИНЕНИЕ...ПО/ JOIN...ON

ВЫБРАТЬ Док.Номенклатура,
Спр.ЗакупочнаяЦена КАК Цена, Спр.Родитель КАК Группа
ИЗ Документ.РасходнаяНакладная.Состав КАК Док

Конструкция СОЕДИНЕНИЕ...ПО/ JOIN...ON ВЫБРАТЬ Док.Номенклатура, Спр.ЗакупочнаяЦена КАК Цена, Спр.Родитель КАК Группа ИЗ

СОЕДИНЕНИЕ Справочник. Номенклатура КАК Спр
ПО Док.Номенклатура = Спр.Ссылка

Слайд 16

Левое внешнее соединение

ВЫБРАТЬ Спр.Наименование, Peг.Курс
ИЗ Справочник.Валюты КАК Спр
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
РегистрСведений.КурсыВалют.СрезПоследних

Левое внешнее соединение ВЫБРАТЬ Спр.Наименование, Peг.Курс ИЗ Справочник.Валюты КАК Спр ЛЕВОЕ ВНЕШНЕЕ
КАК Peг
ПО Спр.Ссылка = Peг.Валюта

Слайд 17

Правое внешнее соединение

ВЫБРАТЬ Спр.Наименование, Peг.Курс
ИЗ РегистрСведений.КурсыВалют.СрезПоследних КАК Peг ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты

Правое внешнее соединение ВЫБРАТЬ Спр.Наименование, Peг.Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних КАК Peг ПРАВОЕ ВНЕШНЕЕ
КАК Спр ПО Спр.Ссылка = Peг.Валюта

Слайд 18

Полное внешнее соединение

ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ
В результат запроса будут включены все записи из

Полное внешнее соединение ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ В результат запроса будут включены все
обоих источников; они будут соединены друг с другом при выполнении указанного условия

Слайд 19

Предложение ГДЕ / WHERE

ВЫБРАТЬ Наименование, ЗакупочнаяЦена КАК Цена
ИЗ Справочник.Номенклатура ГДЕ ЗакупочнаяЦена

Предложение ГДЕ / WHERE ВЫБРАТЬ Наименование, ЗакупочнаяЦена КАК Цена ИЗ Справочник.Номенклатура ГДЕ ЗакупочнаяЦена >= 1300
>= 1300

Слайд 20

Логические операторы И, ИЛИ, НЕ

ВЫБРАТЬ Наименование,
ЗакупочнаяЦена КАК Цена,
СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура

Логические операторы И, ИЛИ, НЕ ВЫБРАТЬ Наименование, ЗакупочнаяЦена КАК Цена, СтранаПроисхождения КАК
ГДЕ СтранаПроисхождения = "Россия" И ЗакупочнаяЦена < 1000

Слайд 21

Параметры в языке запросов

ВЫБРАТЬ Наименование, ЗакупочнаяЦена
ИЗ Справочник.Номенклатура
ГДЕ ЗакупочнаяЦена >= &МинЦена
Запрос.УстановитьПараметр("МинЦена",1000);
//выполнение запроса с

Параметры в языке запросов ВЫБРАТЬ Наименование, ЗакупочнаяЦена ИЗ Справочник.Номенклатура ГДЕ ЗакупочнаяЦена >=
установленными параметрами
Результат = Запрос.Выполнить();

Слайд 22

Предложение УПОРЯДОЧИТЬ ПО / ORDER BY

ВЫБРАТЬ Код, Наименование ИЗ Справочник.Номенклатура
УПОРЯДОЧИТЬ ПО

Предложение УПОРЯДОЧИТЬ ПО / ORDER BY ВЫБРАТЬ Код, Наименование ИЗ Справочник.Номенклатура УПОРЯДОЧИТЬ
Наименование ВОЗР
Ключевое слово ПЕРВЫЕ
ВЫБРАТЬ ПЕРВЫЕ 5 Код, Наименование, ЗакупочнаяЦена КАК Цена
ИЗ Справочник.Номенклатура
УПОРЯДОЧИТЬ ПО Цена УБЫВ

Слайд 23

Агрегатные функции в запросе

СУММА (SUM)
Вычисляет сумму всех значений, содержащихся в столбце.
МАКСИМУМ (МАХ)
Находит

Агрегатные функции в запросе СУММА (SUM) Вычисляет сумму всех значений, содержащихся в
наибольшее значение в столбце.
МИНИМУМ (MIN)
Находит наименьшее значение в столбце.
СРЕДНЕЕ (AVG)
Вычисляет среднее арифметическое значение по столбцу.
КОЛИЧЕСТВО (COUNT)
Подсчитывает количество значений, содержащихся в столбце. Если в качестве параметра данной функции передать звездочку («*»), то функция подсчитает количество строк в таблице результата запроса.

Слайд 24

Пример запроса

ВЫБРАТЬ
СУММА(Оклад) КАК ФондОплатыТруда,
МИНИМУМ(Оклад) КАК МинОклад,
МАКСИМУМ(Оклад) КАК МаксОклад,
СРЕДНЕЕ(Оклад) КАК СреднийОклад,
КОЛИЧЕСТВО(*) КАК Количество

Пример запроса ВЫБРАТЬ СУММА(Оклад) КАК ФондОплатыТруда, МИНИМУМ(Оклад) КАК МинОклад, МАКСИМУМ(Оклад) КАК МаксОклад,
ИЗ Справочник.Сотрудники

Слайд 25

Пример запроса

Сколько сотрудников, у которых оклад больше заданной величины?
ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество

Пример запроса Сколько сотрудников, у которых оклад больше заданной величины? ВЫБРАТЬ КОЛИЧЕСТВО(*)
ИЗ Справочник.Сотрудники ГДЕ Оклад > &ВыбОклад
Сколько различных клиентов купили хоть что-нибудь за заданный период?
ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент) КАК Количество ИЗ Документ.РасходнаяНакладная ГДЕ Дата МЕЖДУ &НачДата И &КонДата

Слайд 26

Предложение СГРУППИРОВАТЬ ПО / GROUP BY

ВЫБРАТЬ Номенклатура, СУММА(Сумма) КАК ОбъемПродаж
ИЗ Документ.РасходнаяНакладная.Состав

Предложение СГРУППИРОВАТЬ ПО / GROUP BY ВЫБРАТЬ Номенклатура, СУММА(Сумма) КАК ОбъемПродаж ИЗ
КАК ДокСостав
ГДЕ ДокСостав.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
СГРУППИРОВАТЬ ПО Номенклатура АВТОУПОРЯДОЧИВАНИЕ

Слайд 27

Пример запроса

ВЫБРАТЬ
Подразделение,
СУММА(Оклад) КАК ФондОплатыТруда
МИНИМУМ(Оклад) КАК МинОклад,
МАКСИМУМ(Оклад) КАК МаксОклад,
СРЕДНЕЕ(Оклад) КАК СреднийОклад,
КОЛИЧЕСТВО(*) КАК КоличествоЧеловек

Пример запроса ВЫБРАТЬ Подразделение, СУММА(Оклад) КАК ФондОплатыТруда МИНИМУМ(Оклад) КАК МинОклад, МАКСИМУМ(Оклад) КАК
ИЗ Справочник.Сотрудники СГРУППИРОВАТЬ ПО Подразделение

Слайд 28

Предложение ИТОГИ / TOTALS

Общие итоги

ВЫБРАТЬ Номенклатура, Сумма ИЗ РегистрНакопления.Продажи ИТОГИ СУММА(Сумма) ПО

Предложение ИТОГИ / TOTALS Общие итоги ВЫБРАТЬ Номенклатура, Сумма ИЗ РегистрНакопления.Продажи ИТОГИ СУММА(Сумма) ПО Общие
Общие

Слайд 29

Пример

Запрос = Новый Запрос("
| ВЫБРАТЬ Номенклатура, Сумма
| ИЗ РегистрНакопления.Продажи ИТОГИ

Пример Запрос = Новый Запрос(" | ВЫБРАТЬ Номенклатура, Сумма | ИЗ РегистрНакопления.Продажи
СУММА(Сумма) ПО Общие");
Выборка = Запрос.Выполнить().Выбрать ();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ОбщийИтог Тогда
Сообщить("ОБЩИЙ ИТОГ: " +Выборка.СуммаПродажи);
Иначе
Сообщить("Товар/услуга: " + Выборка.Номенклатура +
"Сумма: " + Выборка.СуммаПродажи);
КонецЕсли;
КонецЦикла;

Слайд 30

Предложение ИТОГИ / TOTALS

Итоги по группировкам
ВЫБРАТЬ Номенклатура, Период, Сумма ИЗ РегистрНакопления.Продажи ИТОГИ

Предложение ИТОГИ / TOTALS Итоги по группировкам ВЫБРАТЬ Номенклатура, Период, Сумма ИЗ
СУММА(Сумма) ПО Номенклатура АВТОУПОРЯДОЧИВАНИЕ

Слайд 31

Обработка результата запроса

1 вариант:
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.Сотрудники";
Запрос.Текст

Обработка результата запроса 1 вариант: Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ
= ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаИзРезультатаЗапроса = РезультатЗапроса.Выбрать();
2 вариант:
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Сотрудники");
ВыборкаИзРезультатаЗапроса = Запрос.Выполнить().Выбрать());

Слайд 32

Выборка из результата запроса

ВЫБРАТЬ Номенклатура, Количество
из Документ.РасходнаяНакладная.Состав
УПОРЯДОЧИТЬ ПО Номенклатура
ИТОГИ Сумма(Количество) ПО Номенклатура,

Выборка из результата запроса ВЫБРАТЬ Номенклатура, Количество из Документ.РасходнаяНакладная.Состав УПОРЯДОЧИТЬ ПО Номенклатура
Номенклатура Иерархия

Слайд 33

Обход по группировкам

Запрос = Новый Запрос("
|ВЫБРАТЬ Товар, Количество
|ИЗ Документ.РасходнаяНакладная.Состав
|УПОРЯДОЧИТЬ

Обход по группировкам Запрос = Новый Запрос(" |ВЫБРАТЬ Товар, Количество |ИЗ Документ.РасходнаяНакладная.Состав
ПО Товар ИТОГИ СУММА(Количество) ПО Товар,
|Товар ИЕРАРХИЯ");
РезультатЗапроса = Запрос.Выполнить();
СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам;
Выборка = РезультатЗапроса.Выбрать(СпособВыборки);
Пока Выборка.Следующий() Цикл
//выведем в окно сообщений поля из результата
Сообщить("Группа товаров: " + СокрЛП(Выборка.Наименование) + "Количество: " + СокрЛП(Выборка.Количество));
//выберем дочерние записи линейным способом
ВыборкаДочерних = Выборка.Выбрать();
Пока ВыборкаДочерних.Следующий() Цикл
Сообщить(" Товар: " + СокрЛП(Выборка.Наименование) +
" Количество: " + СокрЛП(Выборка.Количество));
КонецЦикла;
КонецЦикла;