
Параметры запроса в 1С позволяют передавать значения в запрос без изменения его структуры, обеспечивая повторное использование одного текста запроса с разными данными. Например, вместо жесткой подстановки конкретной даты или контрагента в выражение ГДЕ Дата >= ‘01.01.2025’ можно использовать параметр &ДатаНачала, задавая его значение при выполнении запроса.
Использование параметров повышает безопасность: исключается риск SQL-инъекций при работе с пользовательским вводом. В 1С параметры могут быть скалярами, списками или таблицами значений. Для передачи списка используют конструкцию СписокЗначений, что позволяет фильтровать несколько элементов без дублирования текста запроса.
Оптимизация запросов также зависит от правильного применения параметров. Прямое включение больших объемов данных в текст запроса снижает производительность, тогда как использование параметров позволяет серверу 1С кэшировать план выполнения и минимизировать повторную компиляцию. Рекомендуется задавать параметры перед вызовом метода Выполнить или ВыполнитьВыборку, чтобы система могла сразу корректно интерпретировать тип данных.
Для динамического формирования фильтров параметры можно комбинировать с условиями Если…Тогда внутри запроса. Например, при условной фильтрации по подразделениям можно задать параметр &Подразделения как список значений и использовать его в конструкции ГДЕ Подразделение В &Подразделения. Это позволяет писать универсальные запросы, которые подстраиваются под набор переданных данных без изменения текста запроса.
Создание параметров запроса через объект Query

В 1С объект Query позволяет создавать запросы с параметрами, обеспечивая динамическое формирование условий. Параметры задаются методом Параметры.Добавить() и связываются с конкретными значениями перед выполнением запроса.
Пример создания запроса с параметром для фильтрации по дате:
Запрос = Новый Query(«ВЫБРАТЬ * ИЗ Документ.Продажа ГДЕ Дата >= &ДатаНачала»);
Для добавления значения параметра используется:
Запрос.Параметры.Добавить(«ДатаНачала», Тип(«Дата»)).Значение = ‘2025-01-01’;
Важно: имя параметра должно совпадать с указанным в тексте запроса, тип данных – соответствовать полю базы. Несоответствие вызывает ошибку выполнения.
Параметры можно использовать многократно в одном запросе. Например, фильтр по диапазону дат:
Запрос = Новый Query(«ВЫБРАТЬ * ИЗ Документ.Продажа ГДЕ Дата МЕЖДУ &ДатаНачала И &ДатаКонца»);
Добавление параметров для диапазона:
Запрос.Параметры.Добавить(«ДатаНачала», Тип(«Дата»)).Значение = ‘2025-01-01’;
Запрос.Параметры.Добавить(«ДатаКонца», Тип(«Дата»)).Значение = ‘2025-03-31’;
Рекомендуется использовать параметры вместо прямой подстановки значений в текст запроса. Это повышает безопасность, снижает риск ошибок преобразования типов и ускоряет повторное выполнение запросов с разными значениями.
Для сложных условий можно создавать параметры с типом Булево, Число, Строка и использовать их в конструкции ЕСЛИ или ВЫБОР, обеспечивая гибкую настройку выборки.
Метод Выполнить() автоматически учитывает заданные параметры и подставляет их значения в момент выполнения запроса:
Результат = Запрос.Выполнить();
Практика показывает, что правильное использование параметров через объект Query значительно облегчает поддержку запросов и позволяет строить динамические отчеты без изменения текста запроса.
Присвоение значений параметрам перед выполнением запроса

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

В 1С параметры запроса могут передаваться не только в основной запрос, но и в подзапросы и объединения (UNION). Это позволяет фильтровать данные на разных уровнях выборки без дублирования условий.
Основные правила передачи параметров в подзапросы:
- Параметры объявляются в основном запросе с помощью конструкции
Параметр = <ИмяПараметра>. - Подзапросы используют те же параметры, что и основной запрос. Нет необходимости повторно объявлять их в подзапросе.
- При фильтрации данных через подзапрос рекомендуется использовать явное указание параметра, например:
WHERE Сумма > &ПорогСуммы. - Параметры типа «Дата» должны передаваться в формате 1С, чтобы избежать ошибок сравнения.
Пример использования параметра в подзапросе:
ВЫБРАТЬ Контрагент, (ВЫБРАТЬ МАКСИМУМ(Сумма) ИЗ Документы.ЗаказПокупателя AS Подзапрос ГДЕ Подзапрос.Контрагент = Основной.Контрагент И Подзапрос.Дата > &ДатаНачала) КАК МаксимальнаяСумма ИЗ Справочник.Контрагенты AS Основной ГДЕ Основной.Группа = &ГруппаКонтрагентов
Передача параметров в объединения выполняется следующим образом:
- Все части объединения должны использовать одинаковые параметры.
- Параметры объявляются в начале запроса и применяются во всех SELECT блоках.
- Рекомендуется явно указывать условия в каждом SELECT для исключения ошибок логики.
Пример объединения с параметром:
ВЫБРАТЬ Номенклатура, Количество ИЗ Документы.ПриходнаяНакладная ГДЕ Дата > &ДатаНачала ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Номенклатура, Количество ИЗ Документы.РасходнаяНакладная ГДЕ Дата > &ДатаНачала
Рекомендации по эффективности:
- Использовать параметры вместо жестко заданных значений для упрощения поддержки запросов.
- Передавать параметры в подзапросы и объединения для сокращения объема данных, обрабатываемых на сервере.
- Избегать повторного вычисления одного и того же параметра в разных подзапросах – лучше объявить один параметр и использовать его везде.
Использование параметров для динамических условий выборки

Параметры запроса позволяют создавать условия выборки, которые меняются без изменения текста самого запроса. В 1С это особенно актуально при фильтрации документов, справочников или регистров по датам, контрагентам и статусам.
Пример использования параметров для даты:
ВЫБРАТЬ
Документы.Ссылка,
Документы.Дата
ИЗ
Документ.Продажи КАК Документы
ГДЕ
Документы.Дата >= &ДатаНачала
И Документы.Дата <= &ДатаОкончания
Рекомендации по применению:
- Использовать параметры для любых изменяемых значений, чтобы избежать жесткой привязки к конкретным данным.
- Определять параметры через метод
УстановитьПараметробъекта запроса перед выполнением запроса. - Присваивать параметрам точный тип данных, соответствующий полю в запросе, чтобы исключить ошибки приведения типов.
- Для условий с множественными значениями применять массивы или списки:
&Контрагентыможет быть списком ИД контрагентов.
Пример динамической фильтрации по списку контрагентов:
ВЫБРАТЬ
Документы.Ссылка,
Документы.Контрагент
ИЗ
Документ.Продажи КАК Документы
ГДЕ
Документы.Контрагент В (&Контрагенты)
При комбинировании нескольких условий важно использовать проверку наличия значения параметра:
ГДЕ
(&ДатаНачала IS NULL ИЛИ Документы.Дата >= &ДатаНачала)
И (&ДатаОкончания IS NULL ИЛИ Документы.Дата <= &ДатаОкончания)
Это позволяет формировать универсальные запросы, которые подстраиваются под переданные параметры и минимизируют необходимость изменения кода при изменении условий выборки.
Обработка пустых и необязательных параметров в запросах
При работе с запросами в 1С часто возникает необходимость использовать параметры, которые могут быть пустыми или необязательными. Игнорирование этой ситуации может привести к ошибкам выполнения или неверным результатам.
Для корректной обработки пустых параметров рекомендуется применять конструкцию ЕСЛИ в блоке фильтрации:
ГДЕ (Поле = &Параметр ИЛИ &Параметр ПУСТО)
Эта формулировка позволяет запросу возвращать все записи, если параметр не задан, и фильтровать данные только при наличии значения. Альтернативно, можно использовать функцию ВЫБОР:
ГДЕ Поле = ВЫБОР КОГДА &Параметр ПУСТО ТОГДА Поле ИНАЧЕ &Параметр КОНЕЦ
Для числовых параметров применяют проверку ПУСТО(&Параметр) ИЛИ Поле = &Параметр. Для строковых параметров – ПУСТО(&Параметр) ИЛИ СОДЕРЖИТ(Поле, &Параметр). Это обеспечивает гибкость запроса без дублирования условий.
Ниже приведен пример структуры запроса с несколькими необязательными параметрами:
| Параметр | Тип | Использование |
|---|---|---|
| &ДатаНачала | Дата | ГДЕ (Дата >= &ДатаНачала ИЛИ &ДатаНачала ПУСТО) |
| &ДатаОкончания | Дата | ГДЕ (Дата <= &ДатаОкончания ИЛИ &ДатаОкончания ПУСТО) |
| &Контрагент | СправочникСсылка.Контрагенты | ГДЕ (Контрагент = &Контрагент ИЛИ &Контрагент ПУСТО) |
| &Статус | Строка | ГДЕ (ПУСТО(&Статус) ИЛИ Статус = &Статус) |
При сложных фильтрах рекомендуется использовать объединение условий через ИЛИ &Параметр ПУСТО, чтобы избежать генерации пустых наборов данных. Для динамических параметров целесообразно задавать значения по умолчанию и проверять их перед выполнением запроса, минимизируя нагрузку на сервер.
Отладка и проверка значений параметров в режиме 1С

Для проверки значений параметров запроса в 1С используйте режим Отладка. Откройте конфигурацию и запустите обработку или отчет с включенной точкой останова перед выполнением запроса.
В панели Отладка перейдите к строке, где задаются параметры: переменные, используемые через Запрос.УстановитьПараметр. На этом этапе важно проверить тип данных: Строка, Число, Дата. Несоответствие типа вызывает ошибки при выполнении запроса.
Используйте окно Переменные для прямого контроля значения параметра. Обратите внимание на точность даты и формат чисел: в 1С Дата хранится с временем, а Число – с разделителем десятичной части в зависимости от локали.
Для динамических проверок добавляйте временные строки Сообщить("Параметр: " + Параметр) перед вызовом Выполнить. Это позволяет увидеть, что передается в запрос и избежать пустых или некорректных значений.
Если запрос использует массивы или табличные значения, проверяйте каждый элемент через Для Каждого. Пропуск элемента или неправильный тип внутри массива приводит к исключению при выполнении запроса.
После проверки значений параметров выполните запрос с ограничением ОграничениеПараметров, чтобы убедиться, что фильтрация работает корректно. Сравнивайте результаты с ожидаемыми, это позволяет выявить ошибки логики или неправильное сопоставление типов данных.
Регулярно используйте Тестовые данные, включая граничные значения: пустые строки, нули, максимальные даты. Это повышает надежность проверки параметров перед внедрением запроса в рабочую базу.
Вопрос-ответ:
Что такое параметры запроса в 1С и для чего они применяются?
Параметры запроса в 1С — это специальные переменные, которые позволяют подставлять значения в запрос без изменения текста самого запроса. Они упрощают фильтрацию данных, делают код более читаемым и безопасным, так как снижают риск SQL-инъекций. С помощью параметров можно формировать запросы, которые адаптируются под разные условия, например, выбирать документы за конкретный период или по определённой организации.
Какие типы значений можно передавать через параметры запроса?
Через параметры запроса можно передавать различные типы данных: числа, строки, даты, булевы значения, а также ссылки на объекты справочников или документы. Для каждого типа важно указывать корректный тип параметра в коде, чтобы 1С правильно обрабатывала значение при выполнении запроса. Например, дата должна передаваться как значение типа Дата, иначе запрос может вернуть пустой результат.
Как использовать параметры запроса для фильтрации по диапазону дат?
Чтобы фильтровать записи по диапазону дат, создаются два параметра: начальная и конечная дата. В тексте запроса вместо конкретных дат используются эти параметры через конструкцию Параметр. Затем в коде 1С этим параметрам присваиваются значения. Такой подход позволяет многократно выполнять один и тот же запрос с разными периодами, не меняя его структуру. Например, можно выбрать все документы поступления между 01.01.2025 и 31.01.2025.
Можно ли использовать параметры запроса для передачи списка значений?
Да, в 1С можно передавать списки значений через параметры запроса. Для этого создается массив или таблица значений, которые затем подставляются в условие запроса с оператором В. Такой подход удобен для выбора данных по нескольким объектам справочника или нескольким организациям одновременно. Это сокращает количество кода, так как не нужно строить длинное условие ИЛИ для каждого значения.
Влияет ли использование параметров на производительность запроса?
Использование параметров запроса обычно не снижает производительность. Наоборот, в некоторых случаях параметры помогают серверу базы данных оптимизировать выполнение запроса, так как план запроса остаётся одинаковым при разных значениях. Основное влияние на скорость оказывает структура самого запроса, наличие индексов и количество обрабатываемых данных, а не использование параметров.
Для чего используются параметры запроса в 1С и в чем их преимущества?
Параметры запроса позволяют передавать значения в запрос без изменения текста самого запроса. Это повышает безопасность, поскольку исключается риск SQL-инъекций, и упрощает поддержку кода: вместо постоянного редактирования запроса достаточно менять значения параметров. Кроме того, использование параметров делает запросы более читаемыми и удобными для повторного использования, так как один и тот же шаблон запроса можно применять с разными данными.
Как правильно передавать несколько параметров в запросе 1С и какие типы данных поддерживаются?
Передача нескольких параметров осуществляется через объект запроса: для каждого параметра создается отдельное свойство, которое затем связывается с соответствующей переменной в тексте запроса. 1С поддерживает различные типы данных для параметров, включая строки, числа, даты, булевы значения, а также ссылки на справочники и документы. При работе с коллекциями объектов параметры можно задавать в виде массивов, что позволяет выполнять фильтрацию по нескольким значениям одновременно. Важно следить за соответствием типов данных, иначе запрос может возвращать ошибки или некорректные результаты.
