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

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

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"
);

   
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
    Пока
Записи.Следующий() Цикл
       
// Обход результата запроса по каждой записи в полученной выборке
   
КонецЦикла;

КонецПроцедуры
Условия в запросе на выбранные строки после группировки в 1С 8.3:
&НаСервере
Процедура УсловияВЗапросеНаВыбранныеСтрокиПослеГруппировки()

   
// Выборка  материалов с весом до 50
   
Запрос = Новый Запрос("ВЫБРАТЬ
    |   СрокИспользования,
    |   МАКСИМУМ(Вес)
    | ИЗ
    |   Справочник.Материалы
    | СГРУППИРОВАТЬ ПО
    |   СрокИспользования
    | ИМЕЮЩИЕ
    |   МАКСИМУМ(Вес) < 50"
);

   
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
    Пока
Записи.Следующий() Цикл
       
// Обход результата запроса по каждой записи в полученной выборке
   
КонецЦикла;

КонецПроцедуры
Условия в запросе если параметр не заполнен в 1С 8.3:
// На замену куску:
// ВЫБОР
// КОГДА &ВыбФирма <> Значение(Справочник.Фирмы.ПустаяСсылка)
// ТОГДА ВыбФирма = &ВыбФирма
// ИНАЧЕ Истина
// КОНЕЦ

Процедура
КнопкаСформироватьНажатие(Кнопка)

   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
     |    ЦеныПриходаИмпортера.Регистратор,
     |    ЦеныПриходаИмпортера.ВыбМатериал КАК ВыбМатериал,
     |    ЦеныПриходаИмпортера.ВыбФирма КАК ВыбФирма,
     |    ЦеныПриходаИмпортера.ЦенаПриходаВал,
     |    ЦеныПриходаИмпортера.ЦенаПрихода
     |ИЗ
     |    РегистрСведений.ЦеныПриходаИмпортера КАК ЦеныПриходаИмпортера
     |ГДЕ
     |    (ЦеныПриходаИмпортера.ВыбМатериал = &ВыбМатериал
     |            ИЛИ НЕ &ОтборПоВыбМатериал)
     |    И (ЦеныПриходаИмпортера.ВыбФирма = &ВыбФирма
     |            ИЛИ НЕ &ОтборПоФирме)
     |
     |УПОРЯДОЧИТЬ ПО
     |    ВыбМатериал,
     |    ВыбФирма
     |АВТОУПОРЯДОЧИВАНИЕ";

   Запрос.УстановитьПараметр("ВыбМатериал", ВыбМатериал);
   Запрос.УстановитьПараметр("ВыбФирма", ВыбФирма);
   Запрос.УстановитьПараметр("ОтборПоВыбМатериал", ЗначениеЗаполнено(ВыбМатериал));
   Запрос.УстановитьПараметр("ОтборПоФирме", ЗначениеЗаполнено(ВыбФирма));

   РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
   Пока Записи.Следующий() Цикл
       // Обход результата запроса по каждой записи в полученной выборке
   КонецЦикла;

КонецПроцедуры

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