Что такое параметры запроса в 1с
Перейти к содержимому

Что такое параметры запроса в 1с

  • автор:

1С 8.3 Параметры в запросе — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С

Параметры запроса в 1С 8.3 необходимы для оптимизации кода запроса. Параметры бывают простых типов, ссылочных типов, списочных типов, в виде таблиц значений. Чтобы объявить параметра в языке запроса используется символ «&» и название параметра, Например: &ДатаДокумента. Для вставки параметра в запрос, используется функция УстановитьПараметр().

Оглавление:
Передача параметров простых типов в запросе в 1С 8.3:

&НаСервере
Процедура ПередачаПараметровПростыхТиповВЗапросе ()

// Создание отбора по поступлению материала за 2020 год
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР» );

Запрос . УстановитьПараметр ( «НачДата» , ‘20200101000000’ );
Запрос . УстановитьПараметр ( «КонДата» , ‘20201231235959’ );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

Передача параметров ссылочных типов в запросе в 1С 8.3:

&НаСервере
Процедура ПередачаПараметровСсылочныхТиповВЗапросе ()

// Создание отбора по материалам с единицей измерения «Куб.см.»
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения = &ЕдинИзмер» );

Запрос . УстановитьПараметр ( «ЕдинИзмер» , Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.см.» ));

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

Передача параметров списочного типа в запросе в 1С 8.3:

&НаСервере
Процедура ПередачаПараметровСписочногоТипаВЗапросе ()

// Создание отбора по материалам, единицы измерения входят в переданный список
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения В (&СписокЕдиницИзмерения)» );

СписокЕИ = Новый Массив ;
СписокЕИ . Добавить ( Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.см.» ));
СписокЕИ . Добавить ( Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.дм.» ));
СписокЕИ . Добавить ( Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.м.» ));

Запрос . УстановитьПараметр ( «СписокЕдиницИзмерения» , СписокЕИ );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

Передача параметра в виде таблицы значений в запросе в 1С 8.3:

&НаСервере
Процедура ПередачаПараметраВВидеТаблицыЗначенийВЗапросе ()

// Создание отбора по материалам в соответствии с параметром в виде
// комбинированной таблицы значений: «Срок Использования» и «Производитель»
ТЗ_СрокИсп_Произв = новый ТаблицаЗначений ;
ТЗ_СрокИсп_Произв . Колонки . Добавить ( «СрокИспользования» , Новый ОписаниеТипов ( «СправочникСсылка.КлассификаторСроковПИ» ));
ТЗ_СрокИсп_Произв . Колонки . Добавить ( «Производитель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ));

// «12 месяцев» + «Гомелькабель»
СтрокаТЗ = ТЗ_СрокИсп_Произв . Добавить ();
СтрокаТЗ . СрокИспользования = Справочники . КлассификаторСроковПИ . НайтиПоНаименованию ( «12 месяцев» );
СтрокаТЗ . Производитель = Справочники . Контрагенты . НайтиПоНаименованию ( «Гомелькабель» );

// «18 месяцев» + «Гомельстекло»
СтрокаТЗ = ТЗ_СрокИсп_Произв . Добавить ();
СтрокаТЗ . СрокИспользования = Справочники . КлассификаторСроковПИ . НайтиПоНаименованию ( «18 месяцев» );
СтрокаТЗ . Производитель = Справочники . Контрагенты . НайтиПоНаименованию ( «Гомельстекло» );

Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Производитель
|ИЗ
| Справочник.Материалы
|ГДЕ
| (СрокИспользования, Производитель) В (&СписокСочетаний)» );

Запрос . УстановитьПараметр ( «СписокСочетаний» , ТЗ_СрокИсп_Произв );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

Использование таблицы значений переданной в запрос как параметр в 1С 8.3:

&НаСервере
Процедура ИспользованиеТаблицыЗначенийПереданнойВЗапросКакПараметр ()

// Программное создание Таблицы Значений и передача её в запрос
ДрагМеталл = новый ТаблицаЗначений ;
ДрагМеталл . Колонки . Добавить ( «Название» , Новый ОписаниеТипов ( «Строка» ));
ДрагМеталл . Колонки . Добавить ( «РынЦена» , Новый ОписаниеТипов ( «Число» ));

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Золото» ;
НоваяСтрока . РынЦена = 127.29 ;

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Серебро» ;
НоваяСтрока . РынЦена = 1.30 ;

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Платина» ;
НоваяСтрока . РынЦена = 62. 00 ;

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Родий» ;
НоваяСтрока . РынЦена = 568.27 ;

// Сперва выбираем данные во временную таблицу, а потом работаем как с обычной таблицей
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Название,
| РынЦена
|ПОМЕСТИТЬ
| ВременнаяТаблица
|ИЗ
| &ТаблицаДрагМеталлов КАК ДрагМеталлы
|;
|ВЫБРАТЬ
| Название,
| РынЦена
|ИЗ
| ВременнаяТаблица
|УПОРЯДОЧИТЬ ПО
| РынЦена УБЫВ» );

Запрос . УстановитьПараметр ( «ТаблицаДрагМеталлов» , ДрагМеталл );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

Что такое параметры запроса в 1с

Подскажите отличие методов :
Запрос.Параметры.Вставить(«Код», Код);
Запрос.УстановитьПараметр(«Код», Код));

Есть ли рекомендация какой нужно использовать ?

допустим есть. используй первый
(0) Разницы не знаю, использую первый.
Почему первый?
(1)(2) В типовых модулях всегда Запрос.УстановитьПараметр();
Хтя нет. И так и так.
но 1 метод встречается гораздо реже 2 го
Сам всегда использовал Запрос.УстановитьПараметр(«Код», Код)), но вопрос открыт
2(7) так ответили ведь.

2 метод отрабатывает быстрей по результатам замера производительности. Странно почему тогда 1С ники используют 2 метод?

ой. 1 метод отрабатывает быстрей

Запрос.Параметры — это структура, поэтому 1-й метод использует обращение к параметрам.
А второй метод сразу же обращается к параметрам более коротким путём. Точек меньше, например.

(6)конструктор запроса с обходом втыкает второй вариант, поэтому он и чаще

>Разницы не знаю, использую первый.

Извините, сплю, ))) второй всегда использую. Смотрел на предыдущий ответ ну и написал.

разницы особой нет, в обоих случаях выполняется аналогичная работа.
«Вставить» не проверяет на дубли?

(15) оба способа при существовании параметра с таким именем тупо заменят его значение (согласно справки)

(15)+ хотя, нет. Если это структура, то проверяет
(17) структура!

Оба метода равнозначны. Просто метод УстановитьПараметр был с самого начала, а свойство Параметры появилось из-за пожеланий разработчиков прикладных решений (я тоже руку приложил 🙂 иметь возможность анализировать уже установленные параметры запроса.

(19) спасибо, инофрмативно

Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn

Запросы 1С:Предприятие 8. Параметры запроса и операторы сравнения

Параметры в запросах 1С служат для передачи в запрос данных, которые могут изменяться в зависимости от условий выполнения запроса и поэтому не могут быть жестко зафиксированы в самом запросе.

Параметры выделяются в тексте запроса символом &.

В качестве параметра можно передавать любой фрагмент текста запроса. Обычно в качестве параметров передаются значения для сравнений, операторы сравнений и источники запросов.

Использование в качестве источника передаваемой в запрос таблицы значений мы рассмотрим в отдельной статье. В остальных случаях синтаксис использования параметров в запросе 1С выглядит так:

Запрос . Текст = «ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых КАК КурсыВалютСрезПервых
|ГДЕ
| КурсыВалютСрезПервых.Курс &ТипСравнения &ЗначениеСравнения» ;
Запрос . УстановитьПараметр ( «ТипСравнения» , «>=» ) ;
Запрос . УстановитьПараметр ( «ЗначениеСравнения» , 40 ) ;

В этом примере в запрос передается и знак сравнения и значение, с которым нужно сравнивать курс валюты.

Задавая условия в запросах 1С, мы сравниваем одно значение с другим(и). В платформе 1С:Предприятие предусмотрены следующие виды сравнений:

  • Равно — обозначается знаком = ;
  • Не равно — обозначается знаком <> ;
  • Больше — обозначается знаком > ;
  • Больше или равно — обозначается знаком >= ;
  • Меньше — обозначается знаком < ;
  • Меньше или равно — обозначается знаком
  • Между — используется, когда нужно одновременно применить условия Больше или равно и Меньше или равно, то есть задаются две границы значений.

Запрос . Текст = «ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых (, Курс МЕЖДУ 30 И 40) КАК КурсыВалютСрезПервых»

  • % — любое количество произвольных символов;
  • _ — один произвольный символ;
  • [abc] — любой из символов, перечисленных в квадратных скобках (можно указывать диапазоны, например [0-9]);
  • [^abc] — любой из символов, кроме перечисленных в квадратных скобках.

Если в шаблон необходимо включить один из символов, перечисленных выше, то перед ним должен идти спецсимвол. Этим спецсимволом может быть любой символ, главное чтобы он не применяется в шаблоне по прямому назначению и не был одним из символов, перечисленных выше. При этом после условия пишется слово СПЕЦСИМВОЛ и в кавычках приводится сам спецсимвол.

Запрос . Текст = «ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых КАК КурсыВалютСрезПервых
|ГДЕ
| КурсыВалютСрезПервых.Валюта ПОДОБНО » «%\_» » СПЕЦСИМВОЛ » «» «»

Такой запрос показал бы курсы валют, названия которых заканчивается на знак подчеркивания.

Запрос . Текст = «ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых КАК КурсыВалютСрезПервых
|ГДЕ
| КурсыВалютСрезПервых.Валюта В (&ПереченьВалют)

Синтаксис для сравнения с результатом вложенного запроса:

Запрос . Текст = «ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых КАК КурсыВалютСрезПервых
|ГДЕ
| КурсыВалютСрезПервых.Валюта В (ВЫБРАТЬ
| Валюты.Ссылка,
| ИЗ
| Справочник.Валюты КАК Валюты)

Запрос . Текст = «ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Регистратор ССЫЛКА Документ.ПоступлениеТоваров

Раздел: Программирование Статьи по 1С Метки: язык запросов 1С

Добавить комментарий Отменить ответ

Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.

Заполнить параметры запроса из структуры

  • Кусок кода с заполнением параметров запроса из структуры с именами полей равных именам параметров. Позволяет заполнять запроса с неизвестным составом параметров из структуры, где добавлены все возможные параметры

    //пПараметрыЗапроса - структура с данными для запроса ПараметрыЗапроса=Запрос.НайтиПараметры(); Для Каждого ПараметрЗапроса Из пПараметрыЗапроса Цикл Если ПараметрыЗапроса.Найти(ПараметрЗапроса.Ключ)<>Неопределено Тогда Запрос.УстановитьПараметр(ПараметрЗапроса.Ключ, ПараметрЗапроса.Значение) КонецЕсли КонецЦикла;
    //пПараметрыЗапроса - структура с данными для запроса ПараметрыЗапроса=Запрос.НайтиПараметры(); Для Каждого ПараметрЗапроса Из пПараметрыЗапроса Цикл Если ПараметрыЗапроса.Найти(ПараметрЗапроса.Ключ)<>Неопределено Тогда Запрос.УстановитьПараметр(ПараметрЗапроса.Ключ, ПараметрЗапроса.Значение) КонецЕсли КонецЦикла; 

    4 4 0 0 0 Скопировано.

    3 года назад

    Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *