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