Этой статьей мы начинаем цикл, посвященный работе с запросами в системе 1С:Предприятие версии 8.1 и выше.
Оглавление:
- Основы работы.
- Параметры и операторы сравнения.
- Условия отбора.
- Группировки.
- Итоги.
- Вложенные запросы.
Запрос — это мощнейший инструмент, служащий для быстрого (по сравнению со всеми другими способами) получения и обработки данных, содержащихся в различных объектах информационной базы 1С.
Создание запроса
Запрос создается как отдельный объект, который имеет обязательный атрибут Текст, куда собственно и помещается сам запрос. Кроме этого, в запрос могут быть переданы различные параметры, необходимые для его выполнения. После того, как текст и параметры запроса заполнены, запрос необходимо выполнить и поместить результат выполнения в выборку или таблицу значений. Выглядит это все примерно так:
Запрос = новый Запрос;
//Заполняем текст запроса
Запрос.Текст="Тут пишем текст запроса";
//Передаем в запрос параметры
Запрос.УстановитьПараметр("ИмяПараметра", ЗначениеПараметра);
//Выполняем запрос
Результат=Запрос.Выполнить();
//Выгружаем результат запроса в выборку
Выборка=Результат.Выбрать();
//Выгружаем результат запроса в таблицу значений
Таблица=Результат.Выгрузить();
//Последние действия можно объединить
Выборка=Запрос.Выполнить().Выбрать();
//или
Таблица=Запрос.Выполнить().Выгрузить();
Основы языка запросов 1С
Простейшие и наиболее часто применяемые запросы служат для получения данных из какого-то источника. Источником могут являться практически все объекты, содержащие какие-либо данные: справочники, документы, регистры, константы, перечисления, планы видов характеристик и т.д.
Из этих объектов с помощью запроса можно получать значения реквизитов, табличных частей, реквизитов табличных частей, изменений, ресурсов и т.д.
Для получения текста запроса часто бывает удобно пользоваться Конструктором запроса. Он вызывается при щелчке правой кнопкой в любом месте программного модуля.
Например, если необходимо получить значения всех реквизитов справочника Контрагенты, то запрос будет выглядеть так:
| *
|ИЗ
| Справочник.Контрагенты";
Если же нужно получить только отдельные реквизиты, то — так:
| Код,
| Наименование,
| Родитель
|ИЗ
| Справочник.Контрагенты";
Для получения такого текста запроса в Конструкторе запроса нужно выбрать соответствующие поля на вкладке Таблицы и поля.
Выбираемым в запросе элементам и источникам можно присваивать псевдонимы и использовать их в дальнейшем как в самом запросе, так и при работе с результатом. Кроме того, в запросе могут присутствовать поля с заранее определенным конкретным значением, или с рассчитываемым значением:
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НомерКлиента = Выборка.Номер;
ИмяКлиента = Выборка.Имя;
Знач = Выборка.ПолеСоЗначением;
КонецЦикла;
Для задания псевдонимов служит вкладка Объединения/Псевдонимы в Конструкторе запросов.
А поле с фиксированным или рассчитываемым значением создается вручную на вкладке Таблицы и поля, в колонке Поля.
Все выбранные элементы можно упорядочивать как в прямом, так и в обратном порядке. При этом можно выбирать один или несколько полей для упорядочивания. Вместе с упорядочиванием иногда бывает полезно выбрать только один или несколько первых элементов.
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты
|УПОРЯДОЧИТЬ ПО
| Имя";
//Выберем самого последнего по алфавиту клиента
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты
|УПОРЯДОЧИТЬ ПО
| Имя УБЫВ";
Можно ограничить выборку элементов теми, на которые пользователь имеет права доступа. Или убрать из результата запроса повторяющиеся строки.
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты";
//Выборка неповторяющихся элементов
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты";
Порядок задается на вкладке Порядок в Конструкторе запросов, количество выбираемых элементов, параметры разрешенности и повторяемости — на вкладке Дополнительно.