Запросы в системе «1С:Предприятие 8» предназначены для выборки информации из базы данных. По сути, запрос — это обращение к системе с просьбой выбрать определенную информацию из базы данных, а часто не только выбрать, но и произвести некоторую обработку: сгруппировать, отсортировать, вычислить. Например, с помощью запроса можно легко узнать объем продаж каждого товара в течение года с детализацией до месяца или выбрать элементы справочников по определенному условию. Заметьте, что изменять данные с помощью запросов в 1С:Предприятии не разрешается.
Язык запросов 1С:Предприятия 8 основан на стандартном SQL, но при этом содержит значительное количество расширений, ориентированных на финансово-экономические задачи, и значительно облегчает разработку бизнес-приложений.
Для работы с запросами в системе «1С:Предприятие 8» предусмотрено несколько специальных объектов, а именно:
- Запрос
- РезультатЗапроса
- ВыборкаИзРезультатаЗапроса.
Общая схема выполнения запроса такова:
- Создание объекта «Запрос» с нужным текстом запроса на специальном языке запросов.
- Установка параметров запроса с помощью метода УстановитьПараметр.
- Выполнение запроса, получение результата.
- Получение выборки из результата запроса или выгрузка результата в таблицу значений / дерево значений. Также есть возможность использовать результат запроса для формирования сводной таблицы.
- Обработка выборки или таблицы значений (например, перебор строк) и выполнение действий, для которых был нужен запрос, например, вывод области при формировании отчета
Графически это можно представить следующим образом:
Цифрами на схеме обозначены следующие действия:
1. Установка текста запроса
Объект «Запрос» имеет свойство «Текст», которое содержит строку с текстом запроса на языке запросов. Этому свойству, во-первых, можно явно присвоить значение или, во-вторых, воспользоваться конструктором объекта «Запрос». В последнем случае текст запроса передается в качестве параметра в конструктор объекта «Запрос» при его создании.
2-й вариант (с другим текстом запроса):
2. Установка параметров запроса
Объект «Запрос» имеет метод «УстановитьПараметр», с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком «&» (например, параметр «ВыбГруппа» в первом запросе).
В качестве параметров используются значения, которые указываются пользователем в диалоге или значения типов, для которых нет литералов, например, пустых ссылок на элементы справочников. Литералы же есть только у примитивных типов данных, а именно, число, строка, дата, булево, Null, Неопределено.
3. Выполнение запроса
После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода «Выполнить()» объекта «Запрос». Этот метод возвращает другой объект «РезультатЗапроса», содержащий выбранные данные из базы данных.
Далее возможны три варианта:
- во-первых, из результата запроса может быть получена выборка (линейная, иерархическая и т.д.),
- во-вторых, результат запроса может быть выгружен в таблицу или дерево значений,
- в-третьих, результат запроса может являться источником данных для сводной таблицы.
4. Получение выборки из результата запроса
Объект «РезультатЗапроса» имеет метод «Выбрать()», который возвращает новый объект «ВыборкаИзРезультатаЗапроса». В зависимости от параметра метода «Выбрать()» выборка будет линейной (по умолчанию), иерархической или по группировкам. Далее выборка обходится с помощью цикла «Пока Выборка.Следующий() Цикл», а в теле цикла производятся какие-то действия, например, вывод областей в табличный документ.
5. Выгрузка результата запроса в таблицу или дерево значений
Объект «РезультатЗапроса» имеет метод «Выгрузить()», который возвращает таблицу значений или дерево значений, в зависимости от переданного параметра . Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица значений, иначе — дерево значений. Далее таблица значений (дерево значений) может быть обработана средствами встроенного языка или показана пользователю в табличном поле.
6. Формирование сводной таблицы
Результат запроса может быть использован как источник данных для сводной таблицы. При этом итоги (см. предложение ИТОГИ в тексте запроса) становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями сводной таблицы. В качестве источника данных для сводной таблицы может быть также использован объект «ПостроительОтчета», но ему на вход тоже подается запрос, поэтому можно сказать, что основа любой сводной таблицы — это запрос к базе данных.
При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объекте ВыборкаИзРезультатаЗапроса предусмотрен третий параметр функции Выбрать().
Рассмотрим пример. Пусть нам необходимо получить кросс-отчет по остаткам номенклатуры на различных складах. Номенклатуру необходимо вывести в строках, склады — в колонках.
Запрос для получения остатков будет выглядеть так:
Код 1C v 8.х
Для обхода номенклатуры воспользуемся выборкой из результата запроса:
Код 1C v 8.х
Для обхода внутри номенклатуры всех складов, присутствующих в результате запроса, получим вложенную выборку от выборки номенклатуры, с указанием третьего параметра «ВСЕ»:
Код 1C v 8.х
В случае если необходимо построить несколько отдельных кросс-таблиц для каждого значения некой группировки, необходимо в качестве третьего параметра выборки указать имя группировки, внутри которой необходимо получить все значения, вошедшие в запрос.
Пример:
Код 1C v 8.х
В данном примере будут получены все значения складов, присутствующие в ранее выбранной организации.
Выборка в 1С 8.2 и 8.3- специализированный способ перебора записей таблиц информационной базы. Рассмотрим подробно, что такое выборка и как её использовать.
Что такое выборка в 1С?
Выборка — способ перебора информации в 1С, который заключается в последовательной установки курсора на последующей записи. Выборку в 1С можно получить из результата запроса и из менеджера объектов , например, документов или справочников.
Пример получения и перебора из менеджера объекта:
Пример получения выборки из запроса:
Получите 267 видеоуроков по 1С бесплатно:
Оба перечисленных выше примера получают одинаковые наборы данных для перебора.
Методы Выборки 1С 8.3
Выборка имеет большое количество методов, рассмотрим их подробней:
- Выбрать() — метод, с помощью которого получают непосредственно выборку. Из выборки можно получить еще одну, подчиненную, выборку если указан тип обхода «по группировкам».
- Владелец() — метод, обратный Выбрать(). Позволяет получить «родительскую» выборка запроса.
- Следующий() — метод, производящий перевод курсора на следующую запись. Если запись существует, возвращает Истина, если записи закончились — Ложь.
- НайтиСледующий() — очень полезный метод, с помощью которого можно выполнять перебор только нужных поле по значению отбора (отбор — структура полей).
- СледующийПоЗначениюПоля() — позволяет получить следующую запись с отличным от текущего положения значения. Например, необходимо перебрать все записи с уникальный значением поля «Контрагент»: Выборка.СледующийПоЗначениюПоля(«Контрагент»).
- Сбросить() — позволяет сбросить текущее расположение курсора и установить его в первоначальное положение.
- Количество() — возвращает количество записей в выборке.
- Получить() — с помощью метода можно можно установить курсор на нужной записи по значению индекса.
- Уровень() — уровень в иерархии текущей записи (число).
- ТипЗаписи() — отображает тип записи — ДетальнаяЗапись, ИтогПоГруппировке, ИтогПоИерархии или ОбщийИтог
- Группировка() — возвращает имя текущей группировки, если запись не является группировкой — пустую строку.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.