Запрос установить параметр 1с

Обновлено: 02.07.2024

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

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

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

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

image001

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

image002

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

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

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

image003

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

Функции языка запросов 1С v 8
«ССЫЛКА»

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

image004

«МЕЖДУ»

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

image005

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

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

image006

«ПОДРОБНО»

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

image007

«ЕСТЬ NULL »

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

image008

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

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


// Создание отбора по поступлению материала за 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:

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

// Звездочка используется, когда нужно выбрать все столбцы из таблицы
Запрос = Новый Запрос ( "ВЫБРАТЬ
| *
|ИЗ
| Справочник.Материалы" );

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Например: Сообщить("Данные отсутствуют!");
КонецЕсли;

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

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

// У каждого столбца в таблице есть своё соответствующее имя
Запрос = Новый Запрос ( "ВЫБРАТЬ
| Наименование,
| Производитель,
| СрокИспользования
|ИЗ
| Справочник.Материалы" );

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

Использование псевдонимов для столбцов и таблиц в запросах в 1С 8.3:

&НаСервере
Процедура ИспользованиеПсевдонимовДляСтолбцовИТаблицВЗапросах ()

// Для каждого столбца может быть назначен Псевдоним. Запрос станет более понятным
Запрос = Новый Запрос ( "ВЫБРАТЬ
| Запчасти.Наименование КАК НаименованиеМатериала,
| Запчасти.СрокИспользования КАК СрокИспМатериала,
| Запчасти.Производитель КАК ПроизводительМатериала
| ИЗ
| Справочник.Материалы КАК Запчасти" );

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

&НаСервере
Процедура УдалениеДубликатовИзРезультатаЗапроса ()

// В справочнике КлассификаторСроковПИ есть элементы-дубли. Строим запрос так,
// чтобы в результат попали только различные сроки использования
Запрос = Новый Запрос ( "ВЫБРАТЬ РАЗЛИЧНЫЕ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ" );

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

Ограничение количества строк в результате запроса в 1С 8.3:

&НаСервере
Процедура ОграничениеКоличестваСтрокВРезультатеЗапроса ()

// Создание выборки первых 30 самых тяжелых материалов
Запрос = Новый Запрос ( "ВЫБРАТЬ ПЕРВЫЕ 30
| Наименование,
| Вес
|ИЗ
| Справочник.Материалы
|УПОРЯДОЧИТЬ ПО
| Вес УБЫВ" );

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

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

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

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

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

Выборка записей запроса только на которые имеются пользовательские права в 1С 8.3:

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

// Необходимо только для баз, в которых ограничение прав доступа работает на уровне записей (RLS)
// Данная реализация кода дает возможность выполнить запрос без ошибки
// и выбрать только те данные, на которые у пользователя есть права
Запрос = Новый Запрос ( "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов" );

РезультатЗапроса = Запрос . Выполнить ();
Если Не РезультатЗапроса . Пустой () Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

Читайте также: