Как установить параметры запроса и вывести результаты в сообщение?

Установка параметров запроса и вывод результатов в сообщение — одна из базовых задач при работе с языком запросов в 1С. Она позволяет гибко управлять выборкой данных из базы и выводить эти данные для анализа, отладки или отображения пользователю. Ниже подробно описаны все шаги: от создания запроса до вывода результата.

1. Создание объекта запроса

Запрос = Новый Запрос;

Создаётся новый объект типа Запрос, через который выполняется обращение к данным. Объект запроса может быть локальным или глобальным, в зависимости от контекста использования (внешняя обработка, форма, общий модуль и т.д.).

2. Задание текста запроса

Запрос.Текст =
"ВЫБРАТЬ
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.Наименование КАК Наименование
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Наименование ПОДОБНО &Имя";

Здесь используется параметр &Имя, который будет передан в запрос позднее. В тексте запроса параметры обозначаются через амперсанд (&), чтобы 1С понимала, где использовать внешние значения.

3. Установка параметров

Запрос.УстановитьПараметр("Имя", "%ООО%");

Метод УстановитьПараметр передаёт значение параметру, определённому в запросе (&Имя). В этом примере ищутся все контрагенты, в названии которых есть "ООО". Используется оператор ПОДОБНО, поддерживающий подстановочные знаки (%).

Можно передать и другие типы значений: дату, число, ссылку и т.д.:

Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Запрос.УстановитьПараметр("СсылкаДок", ДокументСсылка);

4. Выполнение запроса

Результат = Запрос.Выполнить();

Метод Выполнить() возвращает объект РезультатЗапроса, содержащий выборку строк, соответствующих условиям.

5. Получение выборки

Выборка = Результат.Выбрать();

Теперь можно обойти результат запроса построчно. Выборка — это итератор, возвращающий записи по очереди. В каждой записи можно обратиться к полям, которые были указаны в ВЫБРАТЬ.

6. Обход выборки и формирование текста сообщения

Сообщение = "";
Пока Выборка.Следующий() Цикл
Сообщение = Сообщение + Выборка.Наименование + " (" + Строка(Выборка.Ссылка) + ")" + Символы.ПС;
КонецЦикла;

Создаётся строка Сообщение, куда добавляются строки из результата запроса. В примере добавляются наименования контрагентов и их ссылки. Символы.ПС — перевод строки.

7. Вывод сообщения

Сообщить(Сообщение);

Команда Сообщить() выводит текст в окно сообщений 1С:Предприятие. Она особенно полезна при отладке или простом выводе информации пользователю.

Пример целиком

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

Поддержка разных типов параметров

1С автоматически приводит параметры к нужным типам в большинстве случаев, но можно указать тип явно, например:

Параметр = Новый Структура;
Параметр.Вставить("Имя", ЗначениеПеременной);
Запрос.УстановитьПараметры(Параметр);

Параметры с множественным выбором

В некоторых случаях можно передавать массивы или списки в &Параметр В (... список ...):

СписокКонтрагентов = Новый Массив;
СписокКонтрагентов.Добавить(Справочники.Контрагенты.НайтиПоКоду("001"));
СписокКонтрагентов.Добавить(Справочники.Контрагенты.НайтиПоКоду("002"));
Запрос.Текст =
"ВЫБРАТЬ
Контрагенты.Наименование
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Ссылка В (&Список)";
Запрос.УстановитьПараметр("Список", СписокКонтрагентов);

Этот механизм параметров позволяет эффективно и безопасно работать с данными, не прибегая к конкатенации SQL-строк, и уменьшает риск SQL-инъекций и других ошибок при формировании запросов.