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

Перейти к контенту

1С 8.3 Параметры в запросе

Данные > Примеры кода 1С > 1С 8.3 Запросы
Параметры запроса в 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С 8.3:
// Вместо параметров можно применять обращение к предопределенным данным конфигурации с помощью литерала ЗНАЧЕНИЕ
// (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться
// предопределенные данные справочников, планов видов характеристик,
// планов счетов, планов видов расчета, значение перечислений, пустые ссылки,
// значения точек маршрута, значения системных перечислений. Пример:

|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.Гвоздь)
|
|ГДЕ НашаНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Продукция)
|
|ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|
|ГДЕ ТочкаМаршрута = ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие)

2
комментарии
бр
31 окт 2021
Спасибо конечно, но вообще-то нас больше интересует запрос, в котором параметр должен выбирать пользователь, в этом их основная суть как бэ
Иннокентий
28 окт 2021
чупапи муняню
____________________
Copyright©, «Программист 1С в г.Минске», 14.06.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому