1С 8.3 Параметры в запросе
Данные > Примеры кода 1С > 1С 8.3 Запросы
Параметры запроса в 1С 8.3 необходимы для оптимизации кода запроса. Параметры бывают простых типов, ссылочных типов, списочных типов, в виде таблиц значений. Чтобы объявить параметра в языке запроса используется символ "&" и название параметра, Например: &ДатаДокумента. Для вставки параметра в запрос, используется функция УстановитьПараметр().
Оглавление:
Передача параметров простых типов в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметровПростыхТиповВЗапросе()
// Создание отбора по поступлению материала за 2020 год
Запрос = Новый Запрос("ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР");
Запрос.УстановитьПараметр("НачДата", '20200101000000');
Запрос.УстановитьПараметр("КонДата", '20201231235959');
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ПередачаПараметровПростыхТиповВЗапросе()
// Создание отбора по поступлению материала за 2020 год
Запрос = Новый Запрос("ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР");
Запрос.УстановитьПараметр("НачДата", '20200101000000');
Запрос.УстановитьПараметр("КонДата", '20201231235959');
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Передача параметров ссылочных типов в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметровСсылочныхТиповВЗапросе()
// Создание отбора по материалам с единицей измерения "Куб.см."
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения = &ЕдинИзмер");
Запрос.УстановитьПараметр("ЕдинИзмер",Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.см."));
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ПередачаПараметровСсылочныхТиповВЗапросе()
// Создание отбора по материалам с единицей измерения "Куб.см."
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения = &ЕдинИзмер");
Запрос.УстановитьПараметр("ЕдинИзмер",Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.см."));
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Передача параметров списочного типа в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметровСписочногоТипаВЗапросе()
// Создание отбора по материалам, единицы измерения входят в переданный список
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения В (&СписокЕдиницИзмерения)");
СписокЕИ = Новый Массив;
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.см."));
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.дм."));
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.м."));
Запрос.УстановитьПараметр("СписокЕдиницИзмерения",СписокЕИ);
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ПередачаПараметровСписочногоТипаВЗапросе()
// Создание отбора по материалам, единицы измерения входят в переданный список
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения В (&СписокЕдиницИзмерения)");
СписокЕИ = Новый Массив;
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.см."));
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.дм."));
СписокЕИ.Добавить(Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("Куб.м."));
Запрос.УстановитьПараметр("СписокЕдиницИзмерения",СписокЕИ);
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Передача параметра в виде таблицы значений в запросе в 1С 8.3:
&НаСервере
Процедура ПередачаПараметраВВидеТаблицыЗначенийВЗапросе()
// Создание отбора по материалам в соответствии с параметром в виде
// комбинированной таблицы значений: "Срок Использования" и "Производитель"
ТЗ_СрокИсп_Произв = новый ТаблицаЗначений;
ТЗ_СрокИсп_Произв.Колонки.Добавить("СрокИспользования", Новый ОписаниеТипов("СправочникСсылка.КлассификаторСроковПИ"));
ТЗ_СрокИсп_Произв.Колонки.Добавить("Производитель", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
// "12 месяцев" + "Гомелькабель"
СтрокаТЗ = ТЗ_СрокИсп_Произв.Добавить();
СтрокаТЗ.СрокИспользования = Справочники.КлассификаторСроковПИ.НайтиПоНаименованию("12 месяцев");
СтрокаТЗ.Производитель = Справочники.Контрагенты.НайтиПоНаименованию("Гомелькабель");
// "18 месяцев" + "Гомельстекло"
СтрокаТЗ = ТЗ_СрокИсп_Произв.Добавить();
СтрокаТЗ.СрокИспользования = Справочники.КлассификаторСроковПИ.НайтиПоНаименованию("18 месяцев");
СтрокаТЗ.Производитель = Справочники.Контрагенты.НайтиПоНаименованию("Гомельстекло");
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Производитель
|ИЗ
| Справочник.Материалы
|ГДЕ
| (СрокИспользования, Производитель) В (&СписокСочетаний)");
Запрос.УстановитьПараметр("СписокСочетаний", ТЗ_СрокИсп_Произв);
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ПередачаПараметраВВидеТаблицыЗначенийВЗапросе()
// Создание отбора по материалам в соответствии с параметром в виде
// комбинированной таблицы значений: "Срок Использования" и "Производитель"
ТЗ_СрокИсп_Произв = новый ТаблицаЗначений;
ТЗ_СрокИсп_Произв.Колонки.Добавить("СрокИспользования", Новый ОписаниеТипов("СправочникСсылка.КлассификаторСроковПИ"));
ТЗ_СрокИсп_Произв.Колонки.Добавить("Производитель", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
// "12 месяцев" + "Гомелькабель"
СтрокаТЗ = ТЗ_СрокИсп_Произв.Добавить();
СтрокаТЗ.СрокИспользования = Справочники.КлассификаторСроковПИ.НайтиПоНаименованию("12 месяцев");
СтрокаТЗ.Производитель = Справочники.Контрагенты.НайтиПоНаименованию("Гомелькабель");
// "18 месяцев" + "Гомельстекло"
СтрокаТЗ = ТЗ_СрокИсп_Произв.Добавить();
СтрокаТЗ.СрокИспользования = Справочники.КлассификаторСроковПИ.НайтиПоНаименованию("18 месяцев");
СтрокаТЗ.Производитель = Справочники.Контрагенты.НайтиПоНаименованию("Гомельстекло");
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Производитель
|ИЗ
| Справочник.Материалы
|ГДЕ
| (СрокИспользования, Производитель) В (&СписокСочетаний)");
Запрос.УстановитьПараметр("СписокСочетаний", ТЗ_СрокИсп_Произв);
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Использование таблицы значений переданной в запрос как параметр в 1С 8.3:
&НаСервере
Процедура ИспользованиеТаблицыЗначенийПереданнойВЗапросКакПараметр()
// Программное создание Таблицы Значений и передача её в запрос
ДрагМеталл = новый ТаблицаЗначений;
ДрагМеталл.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка"));
ДрагМеталл.Колонки.Добавить("РынЦена", Новый ОписаниеТипов("Число"));
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Золото";
НоваяСтрока.РынЦена = 127.29;
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Серебро";
НоваяСтрока.РынЦена = 1.30;
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Платина";
НоваяСтрока.РынЦена = 62.00;
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Родий";
НоваяСтрока.РынЦена = 568.27;
// Сперва выбираем данные во временную таблицу, а потом работаем как с обычной таблицей
Запрос = Новый Запрос("ВЫБРАТЬ
| Название,
| РынЦена
|ПОМЕСТИТЬ
| ВременнаяТаблица
|ИЗ
| &ТаблицаДрагМеталлов КАК ДрагМеталлы
|;
|ВЫБРАТЬ
| Название,
| РынЦена
|ИЗ
| ВременнаяТаблица
|УПОРЯДОЧИТЬ ПО
| РынЦена УБЫВ");
Запрос.УстановитьПараметр("ТаблицаДрагМеталлов", ДрагМеталл);
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ИспользованиеТаблицыЗначенийПереданнойВЗапросКакПараметр()
// Программное создание Таблицы Значений и передача её в запрос
ДрагМеталл = новый ТаблицаЗначений;
ДрагМеталл.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка"));
ДрагМеталл.Колонки.Добавить("РынЦена", Новый ОписаниеТипов("Число"));
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Золото";
НоваяСтрока.РынЦена = 127.29;
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Серебро";
НоваяСтрока.РынЦена = 1.30;
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Платина";
НоваяСтрока.РынЦена = 62.00;
НоваяСтрока = ДрагМеталл.Добавить();
НоваяСтрока.Название = "Родий";
НоваяСтрока.РынЦена = 568.27;
// Сперва выбираем данные во временную таблицу, а потом работаем как с обычной таблицей
Запрос = Новый Запрос("ВЫБРАТЬ
| Название,
| РынЦена
|ПОМЕСТИТЬ
| ВременнаяТаблица
|ИЗ
| &ТаблицаДрагМеталлов КАК ДрагМеталлы
|;
|ВЫБРАТЬ
| Название,
| РынЦена
|ИЗ
| ВременнаяТаблица
|УПОРЯДОЧИТЬ ПО
| РынЦена УБЫВ");
Запрос.УстановитьПараметр("ТаблицаДрагМеталлов", ДрагМеталл);
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Обращение с помощью литерала ЗНАЧЕНИЕ (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ) в запросе в 1С 8.3:
// Вместо параметров можно применять обращение к предопределенным данным конфигурации с помощью литерала ЗНАЧЕНИЕ
// (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться
// предопределенные данные справочников, планов видов характеристик,
// планов счетов, планов видов расчета, значение перечислений, пустые ссылки,
// значения точек маршрута, значения системных перечислений. Пример:
// (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться
// предопределенные данные справочников, планов видов характеристик,
// планов счетов, планов видов расчета, значение перечислений, пустые ссылки,
// значения точек маршрута, значения системных перечислений. Пример:
|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.Гвоздь)
|
|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Продукция)
|
|ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|
|ГДЕ ТочкаМаршрута = ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие)
|
|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Продукция)
|
|ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|
|ГДЕ ТочкаМаршрута = ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие)
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Запросы:
2
комментарии
бр
31 окт 2021
Спасибо конечно, но вообще-то нас больше интересует запрос, в котором параметр должен выбирать пользователь, в этом их основная суть как бэ
Иннокентий
28 окт 2021
чупапи муняню
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник