Основные объекты: Запросы. Часть 4. Запросы с параметрами

В системе 1С запросу можно передавать необходимые пользователю параметры. Чаще всего такими параметрами является период расчета (начало и конец периода).

Рассмотрим подробнее шаблон кода запроса с параметром, который нам рекомендует система 1С (Сервис – Шаблоны текста – Прочие – Запрос с параметром) и сравним его с шаблоном запроса, описанным в предыдущем разделе:

Запрос = Новый Запрос;
Запрос.Текст = "<?"", ТекстЗапроса>";
Запрос.УстановитьПараметр("<?>", );
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;

Нетрудно видеть, что шаблон запроса с параметром отличается от шаблона запроса без параметра строкой передачи параметра в запрос (она также выделена в тексте шаблона красным цветом):
Запрос.УстановитьПараметр("<?>", );

Рассмотрим практический пример запроса с параметрами из книги С.А. Митичкина “Разработка в системе "1С:Предприятие 8.0"” (М.: ООО “1С-Паблишинг”, 2003) (особенности кода, связанные с параметрами запроса выделены красным цветом):

//создание объекта Запрос с текстом запроса
Запрос = Новый Запрос("Выбрать Наименование, Цена

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

Попробуем в нашей информационной базе сформировать простой пример запроса с одним параметром (параметр будет передавать запросу значение флажка, задающего включение в перечень номенклатуры названий групп товаров). В предыдущих разделах мы сформировали такой запрос:

ВЫБРАТЬ

Номенклатура.Код,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ

Немного изменим этот запрос:

ВЫБРАТЬ

Номенклатура.Код,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ или Номенклатура.ЭтоГруппа = &ВключитьГруппы

Если параметр &ВключитьГруппы имеет значение ИСТИНА, то наименования групп товаров включаются в перечень номенклатуры. Если же параметр &ВключитьГруппы имеет значение ЛОЖЬ, то наименования групп товаров не включаются в указанный перечень.

Кроме того, добавим в процедуру КнопкаСформироватьНажатие оператор установки параметра запроса:
Запрос.УстановитьПараметр("ВключитьГруппы",
ВключитьГруппы);

Полный текст процедуры КнопкаСформироватьНажатие теперь будет выглядеть так:

Процедура КнопкаСформироватьНажатие(Кнопка)

// Вставить содержимое обработчика.
Запрос = Новый Запрос;
ТекстЗапроса = ЭтаФорма.ЭлементыФормы.ТекстЗапроса;
// Выделение всего текста.
ВсегоСтрок = ТекстЗапроса.КоличествоСтрок();
ТекстЗапроса.УстановитьГраницыВыделения(1, 1, ВсегоСтрок, 100);
Текст1 = ТекстЗапроса.ВыделенныйТекст;
Запрос.Текст = (Текст1);
// Передача параметров в запрос.
Запрос.УстановитьПараметр("ВключитьГруппы", ВключитьГруппы);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
//Сообщить("Товар " + Выборка.Наименование + " имеет код " + Выборка.Код);
Сообщить("" + Выборка[0] + " " + Выборка[1]);
КонецЦикла;
КонецПроцедуры

Теперь создадим условия для ввода пользователем значения параметра &ВключитьГруппы.

Откроем в конфигураторе форму отчета “НашПервыйЗапрос” на закладке “Параметры”:

Панель “Параметры” пока является пустой. Установим на ней флажок “ВключитьГруппы”. Это будет удобно сделать, добавив реквизит “ВключитьГруппы” типа Булево на закладке “Данные”:

Установим на закладке “Параметры” формы отчета флажок “ВключитьГруппы”. В поле Данные свойств флажка установим значение реквизита “ВключитьГруппы”:

Затем запустим программу 1С в пользовательском режиме, откроем отчет “НашПервыйЗапрос” и скопируем в поле текстового документа “ТекстЗапроса” текст запроса из предыдущего раздела:

ВЫБРАТЬ

Номенклатура.Код,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ или Номенклатура.ЭтоГруппа = &ВключитьГруппы

Нажмем на кнопку “Сформировать” при различных состояниях флажка “Включить группы” и проверим правильность работы созданного нами механизма.

Упражнение. Напишите две отдельные процедуры с именами ПримерЗапроса и ПримерЗапросаСПараметрами, которые будут включать в себя приведенные в данном разделе запросы. Указанные процедуры можно разместить в модуле формы отчета “НашПервыйЗапрос”. Создать кнопки для запуска этих процедур и проверить их работу в пользовательском режиме.