1С 8.3 Условия в запросе
Данные > Примеры кода 1С > 1С 8.3 Запросы
Условия в запросе 1С 8.3 необходимо грамотно располагать в коде и оптимально использовать, чтобы избежать падение производительности выполнения запроса. Условия в основном располагаются после служебного слова ГДЕ (до группировки). Но могут быть расположены и после служебного слова ИМЕЮЩИЕ (после группировки) и в параметрах виртуальных таблиц (свойство Условие) и в конструкции кода ВЫБОР КОГДА.
Для реализации различных условий, используются различные операторы:
- сравнения: больше >, меньше <, равно =, не равно <>
- отрицания: НЕ ставится в начале выражения через пробел, например: НЕ 5 = 10
- группировки: И, ИЛИ, () Например: (7 = 7) И (5<>10)
- булево: ИСТИНА, ЛОЖЬ, например: (5 = 10) = ЛОЖЬ
- ПОДОБНО <шаблон> для сравнения строковых значений
- ССЫЛКА <тип> проверка на совпадение ссылочным типом
- В() во вложенном запросе, массиве, параметре
- В ИЕРАРХИИ() в группе справочника, переданных в скобках, плана видов характеристик
Оглавление:
Условия в запросе на выбранные строки до группировки в 1С 8.3:
&НаСервере
Процедура УсловияВЗапросеНаВыбранныеСтрокиДоГруппировки()
// Выборка материалов с весом от 250 до 5000
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| Вес
| ИЗ
| Справочник.Материалы
| ГДЕ
| Вес > 250 И Вес < 5000");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура УсловияВЗапросеНаВыбранныеСтрокиДоГруппировки()
// Выборка материалов с весом от 250 до 5000
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| Вес
| ИЗ
| Справочник.Материалы
| ГДЕ
| Вес > 250 И Вес < 5000");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Условия в запросе на выбранные строки после группировки в 1С 8.3:
&НаСервере
Процедура УсловияВЗапросеНаВыбранныеСтрокиПослеГруппировки()
// Выборка материалов с весом до 50
Запрос = Новый Запрос("ВЫБРАТЬ
| СрокИспользования,
| МАКСИМУМ(Вес)
| ИЗ
| Справочник.Материалы
| СГРУППИРОВАТЬ ПО
| СрокИспользования
| ИМЕЮЩИЕ
| МАКСИМУМ(Вес) < 50");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура УсловияВЗапросеНаВыбранныеСтрокиПослеГруппировки()
// Выборка материалов с весом до 50
Запрос = Новый Запрос("ВЫБРАТЬ
| СрокИспользования,
| МАКСИМУМ(Вес)
| ИЗ
| Справочник.Материалы
| СГРУППИРОВАТЬ ПО
| СрокИспользования
| ИМЕЮЩИЕ
| МАКСИМУМ(Вес) < 50");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Условия в запросе если параметр не заполнен в 1С 8.3:
// На замену куску:
// ВЫБОР
// КОГДА &ВыбФирма <> Значение(Справочник.Фирмы.ПустаяСсылка)
// ТОГДА ВыбФирма = &ВыбФирма
// ИНАЧЕ Истина
// КОНЕЦ
// ВЫБОР
// КОГДА &ВыбФирма <> Значение(Справочник.Фирмы.ПустаяСсылка)
// ТОГДА ВыбФирма = &ВыбФирма
// ИНАЧЕ Истина
// КОНЕЦ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныПриходаИмпортера.Регистратор,
| ЦеныПриходаИмпортера.ВыбМатериал КАК ВыбМатериал,
| ЦеныПриходаИмпортера.ВыбФирма КАК ВыбФирма,
| ЦеныПриходаИмпортера.ЦенаПриходаВал,
| ЦеныПриходаИмпортера.ЦенаПрихода
|ИЗ
| РегистрСведений.ЦеныПриходаИмпортера КАК ЦеныПриходаИмпортера
|ГДЕ
| (ЦеныПриходаИмпортера.ВыбМатериал = &ВыбМатериал
| ИЛИ НЕ &ОтборПоВыбМатериал)
| И (ЦеныПриходаИмпортера.ВыбФирма = &ВыбФирма
| ИЛИ НЕ &ОтборПоФирме)
|
|УПОРЯДОЧИТЬ ПО
| ВыбМатериал,
| ВыбФирма
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("ВыбМатериал", ВыбМатериал);
Запрос.УстановитьПараметр("ВыбФирма", ВыбФирма);
Запрос.УстановитьПараметр("ОтборПоВыбМатериал", ЗначениеЗаполнено(ВыбМатериал));
Запрос.УстановитьПараметр("ОтборПоФирме", ЗначениеЗаполнено(ВыбФирма));
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Запросы:
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник