- •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. Запросы к регистрам накопления
- •Основная таблица регистра накопления
- •Сводные таблицы
Выполнение запроса
Для работы с запросами в системе 1С:Предприятие 8 предусмотрено несколько специальных объектов, а именно:
• Запрос,
• РезультатЗапроса,
• ВыборкаИзРезультатаЗапроса.
Общая схема выполнения запроса такова:
1. Создание объекта типа Запрос с текстом запроса на специальном языке запросов.
2. Установка параметров запроса с помощью метода УстановитьПараметр.
3. Выполнение запроса, получение результата.
4. Получение выборки из результата запроса или выгрузка результата в таблицу значений / дерево значений. Также есть возможность использовать результат запроса как источник данных для сводной таблицы.
5. Обработка выборки или таблицы значений (например, перебор строк) и выполнение действий, для которых был нужен запрос, например, вывод области при формировании отчета
Приведем простой пример, иллюстрирующий выполнение типичного запроса:
//создание объекта Запрос
Запрос = Новый Запрос("
|ВЫБРАТЬ Код, Наименование
|ИЗ Справочник.Номенклатура");
//выполнение запроса и получение результата
РезультатЗапроса = 3апрос.Выполнить ();
//получение выборки из результата запроса
Выборка = РезультатЗапроса.Выбрать();
//обход записей в выборке
Пока Выборка.Следующий() Цикл
//обращение к полям
Сообщить(Выборка.Наименование);
КонецЦикла;
Два основных элемента механизма запросов - это язык запросов и обход выборки из результата запроса. Именно в них заключена основная мощь механизма запросов, поэтому ниже они будут рассмотрены более подробно.
В системе 1С:Предприятие 8 существует Конструктор запросов, который рекомендуется начинающим пользователям для быстрого создания запросов. При использовании Конструктора вы застрахованы от синтаксических ошибок в запросе, и это превращает его в очень удобное средство для первоначального изучения языка запросов.
Конструктор запросов может быть вызван как в режиме «Предприятие», так и в режиме «Конфигуратор».
– изучить самостоятельно
8.2. Язык запросов
Для выполнения запроса необходимо составить текст на специальном языке запросов, который сильно отличается от обычного языка программирования по синтаксису и назначению.
Замечание. Язык запросов системы 1 C:Предприятие 8 очень похож на стандартный SQL*, но имеет некоторые отличия.
Все ключевые слова языка запросов 1С:Предприятие 8 имеют английские эквиваленты, совпадающие там, где это возможно, со стандартным SQL. Например, ключевое слово ВЫБРАТЬ может быть заменено на SELECT, а ключевое слово ИЗ на FROM.
В общем случае текст запроса строится по следующей схеме:
ВЫБРАТЬ <Список полей | *>
[ИЗ <Список таблиц-источников>]
[ГДЕ <Список условий>]
[УПОРЯДОЧИТЬ ПО <Список полей > ] |
[АВТОУПОРЯДОЧИВАНИЕ]
[СГРУППИРОВАТЬ ПО <Список полей>]
[ИТОГИ [<агрегатные функции>] ПО <Список полей> [ОБЩИЕ]]
В квадратных скобках приведены необязательные конструкции. Вертикальной чертой разделены конструкции, предполагающие выбор одного из нескольких элементов. Все конструкции языка запросов с примерами их использования приведены ниже.
Предложение ВЫБРАТЬ / SELECT
Предложение ВЫБРАТЬ позволяет указать список полей для выборки. Если вместо перечня полей указана звездочка («*»), тогда это означает, что нужно выбрать все поля таблицы. Указание конкретных полей позволяет выбрать только заданные колонки из исходной таблицы-источника запроса.
В качестве источника данных для запроса можно использовать справочники, документы, журналы документов, регистры и другие таблицы-источники (см. дальше).
Синтаксическая диаграмма конструкции ВЫБРАТЬ такова:
ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>] <Список полей выборки | *>
Примеры:
ВЫБРАТЬ Наименование, Цена ИЗ Справочник.Товары
ВЫБРАТЬ * ИЗ Справочник.Сотрудники
ВЫБРАТЬ Номер, Дата, Представление ИЗ Документ.РасходнаяНакладная
ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи
В системе 1C:Предприятие 8 можно построить запрос без указания ключевого слова ИЗ, тогда список полей должен содержать полные имена таблиц, например:
ВЫБРАТЬ Справочник.Товары.Наименование, Справочник.Товары.Цена
ВЫБРАТЬ Справочник.Сотрудники.*
Псевдонимы полей (КАК/ AS)
Для поля может быть назначен псевдоним с помощью ключевого слова КАК. Это позволяет обращаться к полю по псевдониму при указании итогов и порядка сортировки, а также в результате запроса.
В следующем запросе для полей Наименование и ЕдИзм назначаются псевдонимы:
ВЫБРАТЬ Наименование КАК Товар, Цена, ЕдИзм КАК ЕдиницаИзмерения ИЗ Справочник.Товары
УПОРЯДОЧИТЬ ПО Товар
Результат запроса будет следующий:
Товар |
Цена |
ЕдиницаИзмерения |
Бумага |
130 |
Пачка |
Вилы |
1000 |
Шт |
Грабли |
1500 |
Шт |
Ключевое слово КАК необязательно и может быть опущено, но для повышения наглядности его рекомендуется указывать, особенно на первых порах.
Ниже приведен пример того же запроса без ключевого слова КАК:
ВЫБРАТЬ Наименование Товар, Цена, ЕдИзм ЕдиницаИзмерения
ИЗ Справочник.Товары
УПОРЯДОЧИТЬ ПО Товар
Ключевое слово РАЗЛИЧНЫЕ/DISTINCT
Ключевое слово РАЗЛИЧНЫЕ позволяет оставить в результате запроса только отличающиеся строки. Например, если мы выбираем контрагентов из документа РасходнаяНакладная, то вполне вероятно, что один и тот же контрагент, может встретиться в нескольких накладных, поэтому без ключевого слова РАЗЛИЧНЫЕ он будет присутствовать в результате запроса несколько раз.
Например, в результате приведенного ниже запроса несколько раз встречается контрагент ООО «Новый мир»:
ВЫБРАТЬ Контрагент ИЗ Документ.РасходнаяНакладная
Контрагент |
ООО «Новый мир» |
ЗАО «Стройметмаш» |
ООО «Новый мир» |
ООО «Механика» |
Если же указать ключевое слово РАЗЛИЧНЫЕ, то повторяющиеся записи из результата запроса будут удалены:
ВЫБРАТЬ РАЗЛИЧНЫЕ Контрагент ИЗ Документ.РасходнаяНакладная
Контрагент |
ООО «Новый мир» |
ЗАО «Стройметмаш» |
ООО «Механика» |
Ключевое слово ПЕРВЫЕ / ТОР
Данное ключевое слово позволяет ограничить выборку несколькими первыми записями. Часто это ключевое слово применяется в комбинации с сортировкой (см. предложение УПОРЯДОЧИТЬ ПО).
Допустим, требуется выбрать 3 самых дорогих товара. Это реализуется следующим запросом:
ВЫБРАТЬ ПЕРВЫЕ 3 Наименование, Цена
ИЗ Справочник.Номенклатура
УПОРЯДОЧИТЬ ПО Цена УБЫВ
Результат запроса будет такой:
Наименование |
Цена |
ЖК-Монитор LG Flatron 21" |
1500 |
Компьютер Formoza |
1450 |
ЖК-Монитор LG Flatron 17" |
1200 |
