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

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

  • автор:

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

Оглавление (нажмите, чтобы раскрыть)

  • Как передать в запрос параметры простых типов
  • Как передать в запрос параметры ссылочных типов
  • Как передать в запрос параметр списочного типа
  • Как передать в запрос таблицу значений в качестве параметра
  • Как использовать таблицу переданную в запрос в качестве источника
  • Скачать и выполнить эти примеры на компьютере
/// Как передать в запрос параметры простых типов в 1с 8.3, 8.2 &НаСервере Процедура КакПередатьВЗапросПараметрыПростыхТиповНаСервере() // Сделаем отбор продаж за 1 квартал 2014 года. Запрос = Новый Запрос( "ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПродажаЕды |ГДЕ | Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода |УПОРЯДОЧИТЬ ПО | Дата ВОЗР" ); Запрос.УстановитьПараметр("НачалоПериода", '20140101000000'); Запрос.УстановитьПараметр("ОкончаниеПериода", '20140331235959'); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как передать в запрос параметры ссылочных типов в 1с 8.3, 8.2 &НаСервере Процедура КакПередатьВЗапросПараметрыСсылочныхТиповНаСервере() // Сделаем отбор продуктов со сладким вкусом. Запрос = Новый Запрос( "ВЫБРАТЬ | Наименование, | Вкус |ИЗ | Справочник.Номенклатура |ГДЕ | Вкус = &ВыбВкус" ); Запрос.УстановитьПараметр("ВыбВкус", Справочники.Вкусы.НайтиПоНаименованию("Сладкий") ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как передать в запрос параметр списочного типа в 1с 8.3, 8.2 &НаСервере Процедура КакПередатьВЗапросПараметрСписокНаСервере() // Сделаем отбор продуктов, вкусы которых входят в переданный // нами список. Запрос = Новый Запрос( "ВЫБРАТЬ | Наименование, | Вкус |ИЗ | Справочник.Номенклатура |ГДЕ | Вкус В (&СписокВкусов)" ); Список = Новый Массив; Список.Добавить( Справочники.Вкусы.НайтиПоНаименованию("Сладкий") ); Список.Добавить( Справочники.Вкусы.НайтиПоНаименованию("Солёный") ); Запрос.УстановитьПараметр("СписокВкусов", Список ); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как передать в запрос таблицу значений в качестве /// параметра в 1с 8.3, 8.2 &НаСервере Процедура КакПередатьТаблицуЗначенийВКачествеПараметраНаСервере() // Сделаем отбор продуктов в соответствии с переданной // в запрос таблицей сочетания цвета и вкуса. СочетанияЦветаИВкуса = новый ТаблицаЗначений; СочетанияЦветаИВкуса.Колонки.Добавить("Цвет", Новый ОписаниеТипов("СправочникСсылка.Цвета")); СочетанияЦветаИВкуса.Колонки.Добавить("Вкус", Новый ОписаниеТипов("СправочникСсылка.Вкусы")); // красный + сладкий Стр = СочетанияЦветаИВкуса.Добавить(); Стр.Цвет = Справочники.Цвета.НайтиПоНаименованию("Красный"); Стр.Вкус = Справочники.Вкусы.НайтиПоНаименованию("Сладкий"); // жёлтый + солёный Стр = СочетанияЦветаИВкуса.Добавить(); Стр.Цвет = Справочники.Цвета.НайтиПоНаименованию("Жёлтый"); Стр.Вкус = Справочники.Вкусы.НайтиПоНаименованию("Солёный"); Запрос = Новый Запрос( "ВЫБРАТЬ | Наименование, | Цвет, | Вкус |ИЗ | Справочник.Номенклатура |ГДЕ | (Цвет, Вкус) В (&СписокСочетаний)" ); Запрос.УстановитьПараметр("СписокСочетаний", СочетанияЦветаИВкуса); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Как использовать таблицу переданную в запрос в качестве /// источника в 1с 8.3, 8.2 &НаСервере Процедура КакИспользоватьТаблицуПараметрВКачествеИсточникаНаСервере() // Создадим и заполним таблицу значений в коде, а затем // передадим её в запрос. Страны = новый ТаблицаЗначений; Страны.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка")); Страны.Колонки.Добавить("Численность", Новый ОписаниеТипов("Число")); НоваяСтрока = Страны.Добавить(); НоваяСтрока.Название = "Россия"; НоваяСтрока.Численность = 144000000; НоваяСтрока = Страны.Добавить(); НоваяСтрока.Название = "Австралия"; НоваяСтрока.Численность = 23000000; НоваяСтрока = Страны.Добавить(); НоваяСтрока.Название = "Новая зеландия"; НоваяСтрока.Численность = 4400000; // Сначала выбираем переданные значения во временную // таблицу, а уже затем работаем с временной таблицей // как с обычной. Запрос = Новый Запрос( "ВЫБРАТЬ | Название, | Численность |ПОМЕСТИТЬ | ВременнаяТаблица |ИЗ | &ТаблицаСтран КАК Страны |; |ВЫБРАТЬ | Название, | Численность |ИЗ | ВременнаяТаблица |УПОРЯДОЧИТЬ ПО | Численность УБЫВ" ); Запрос.УстановитьПараметр("ТаблицаСтран", Страны); ВыполнитьЗапросИВывестиНаФорму(Запрос); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Параметры в запросах в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 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С:Предприятие 8. Параметры запроса и операторы сравнения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметры запроса и работа с ними. Типы равенствнеравенств равно, В, В ИЕРАРХИИ и др.

20 сентября, 2013 — Программирование, Статьи — Метки: Язык запросов — нет комментариев

param

Для построения грамотного и эффективного запроса, нужно разбираться в его параметрах. Запрос 1С к базе данных – это конструкция, позволяющая извлечь актуальную информацию из набора таблиц и предоставить её пользователю для принятия обоснованного управленческого решения в наиболее оптимальной форме. Поскольку Запрос 1С является объектом с набором параметров, то определённые приёмы языка запросов позволяют повысить его читабельность, увеличить быстродействие, получить только уникальные записи. Чтобы уметь пользоваться преимуществами встроенного языка, нужно следовать рекомендациям профессионалов.

Что такое параметры запроса 1С и как они используются?

Параметры запроса необходимы для того, чтобы можно было придать конструкции требуемую гибкость и быстродействие. Для объявления нужного параметра в языке запроса используется символ «&». Расшифровывается это следующим образом: &ТаблицаЦен (в данном случае именем параметра является значение «ТаблицаЦен»). Чтобы запрос «понял» присваиваемый ему параметр, необходима следующая конструкция:

image001

Рассмотрим на примере присвоения Запросу 1С параметра Текущая дата – выглядеть на языке запросов это будет следующим образом:

image002

Это примитивный тип конструкции, есть и более интересные.

Списочные параметры – работаем с операторами В/В ИЕРАРХИИ

Массив данных и список значений могут быть переданы в качестве параметров языка запроса 1С. К примеру, конструкция может выглядеть следующим образом:

image003

Рассмотрим подробнее значимые отличия операторов «В» и «В ИЕРАРХИИ» и другие функции языка запросов 1С v 8.

Функции языка запросов 1С v 8

Язык запросов программы 1С 8-ой версии предполагает, что к полям запроса будут применены специальные функции, которые усилят его эффективность и оптимизируют работу.

«ССЫЛКА»

Ссылочный тип логического оператора «ССЫЛКА» даёт возможность проверить поле составного вида на наличие в нём конкретного типа. Задаётся следующей конструкцией:

image004

«МЕЖДУ»

Функция, которая позволяет конструкции проверить поле по параметру «вхождение значения в указанный диапазон». Синтаксическое выражение:

image005

«В», «В ИЕРАРХИИ»

Конструкция служит для того, чтобы выявлять наличие определённых значений в передаваемых списках. Поиск производится также в подчинённых значениях после разворачивания иерархии элементов вниз. На практике это выглядит следующим образом:

image006

«ПОДРОБНО»

Функция языка запросов 1С даёт возможность провести сравнение выбранной строки с шаблонным вариантом. Параметр применяется в том случае, если строка, по которой производится поиск, чётко не закреплена. Шаблонное решение выстраивается по следующим правилам:

  • Если указан символ «%» — последующий набор значений содержит любое число произвольных элементов;
  • Нижнее подчёркивание означает единственный произвольный символ (_);
  • Элемент (группа элементов), заключённый в квадратные скобки – любой одиночный элемент, являющийся символом внутри скобок;
  • «[^…]» — любой из одиночных элементов, но не те, что перечисляются следующими за знаком отрицания.

image007

«ЕСТЬ NULL »

Данный параметр работает следующим образом: в том случае, если значение поля не определено, то оно равно указанному выражению. С учётом синтаксиса языка запросов 1С получаем:

image008

Относительно NULL существует особое правило: этот параметр требует дополнительной обработки. Для программы 1С 8-я версия определён особый NULL , у которого один элемент. NULL появляется в следующих случаях:

  • В результате применения конструкции для соединения данных таблиц, если это не тип внутреннего соединения таблиц;
  • Если произошёл выбор реквизитов, значения которых предопределены исключительно для групп справочников;
  • По итогам выбора графы, находящейся в журнале документа, если у конкретного используемого документа отсутствуют реквизиты, являющиеся составной частью данной графы.

Все эти параметры – лишь краткий перечень эффективных функций языка Запросов 1С. Для грамотной работы в конфигураторе программы необходимо тщательно изучить все параметры языка запросов. Это не просто позволит получать нужные отчёты из базы данных 1С, но и увеличит быстродействие их обработки.

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

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