Запрос, проверка Пустой, когда правильно?

1. user-z99999 78 01.04.25 15:54 Сейчас в теме
Ниже, информация из справки по 1с
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
  Выборка = РезультатЗапроса.Выбрать(); 
  Пока Выборка.Следующий() Цикл
  ...

правильно:

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

Показать


Подскажите, когда правильно использовать метод Пустой, результата запроса?

Всегда думал, что РезультатЗапроса.Выбрать(); это ресурсоёмкая операция.
И чтобы её не дёргать лишний раз, нужно вначале проверить на пустоту.
Если НЕ РезультатЗапроса.Пустой()
По теме из базы знаний
Найденные решения
5. krasnoshchekovpavel 16 01.04.25 16:41 Сейчас в теме
Выбрать() вообще не ресурсоемкая операция. Легко проверить - создайте запрос который выдаст более миллиона записей и увидите, что Выбрать() выполняется за мгновение.

Стандарты, если их перефразировать на человеческий язык говорят следующее:
Проверку на Пустой() нужно делать когда нам нужен ответ на вопрос - пустой результат или нет. То есть например мы делаем запрос цель которого ответить на вопрос "да/нет?".

Пример:
ЕстьОстатки = Не РезультатЗапроса.Пустой();


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

Пример: Заполнение табличной части печатной формы. Нам же не интересно пустой результат или нет, мы просто его обходим и добавляем новые строки в табличный документ. Если выборка пустая - будет 0 строк т.к. цикл ни разу не пройдет, ну и ладно.
lone_mayson; Sashares; starik-2005; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. paulwist 01.04.25 16:01 Сейчас в теме
(1)
Всегда думал, что РезультатЗапроса.Выбрать(); это ресурсоёмкая операция.


Нууу, Выполнить() тоже ресурсоёмкая операция только для СУБД.

3. Выполнение запроса

После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода "Выполнить()" объекта "Запрос". Этот метод возвращает другой объект "РезультатЗапроса", содержащий выбранные данные из базы данных.
3. user-z99999 78 01.04.25 16:13 Сейчас в теме
(2) почему выше, в коде написано - "избыточный вызов"?
и когда он таковым не является?
4. antz 01.04.25 16:39 Сейчас в теме
(3) Не является - когда не нужна выборка, очевидно.
7. spacecraft 01.04.25 16:56 Сейчас в теме
(1)
Подскажите, когда правильно использовать метод Пустой, результата запроса?

Когда нужно выполнить действия при пустом результате запроса.
9. SlavaKron 01.04.25 21:07 Сейчас в теме
(1) Но ведь в той же справке, из которой вы привели код, содержится исчерпывающее объяснение. https://its.1c.ru/db/v8std#content:438:hdoc

1. Проверку того, что результат выполнения запроса не содержит строк следует выполнять с помощью метода Пустой. Поскольку на получение выборки из результата запроса (выгрузка его в таблицу значений) будет затрачиваться дополнительное время.
Неправильно:
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
  Возврат Истина;
Иначе
  Возврат Ложь;
КонецЕсли;

Правильно:
Возврат НЕ Запрос.Выполнить().Пустой()

2. В то же время если требуется выбрать (или выгрузить) результат запроса, то предварительный вызов метода Пустой не требуется.
Например, вместо:
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
  Выборка = РезультатЗапроса.Выбрать(); 
  Пока Выборка.Следующий() Цикл
...

правильно:
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
...
10. user-z99999 78 02.04.25 09:06 Сейчас в теме
(9) Иногда нужно объяснение объяснения. Я его получил.
5. krasnoshchekovpavel 16 01.04.25 16:41 Сейчас в теме
Выбрать() вообще не ресурсоемкая операция. Легко проверить - создайте запрос который выдаст более миллиона записей и увидите, что Выбрать() выполняется за мгновение.

Стандарты, если их перефразировать на человеческий язык говорят следующее:
Проверку на Пустой() нужно делать когда нам нужен ответ на вопрос - пустой результат или нет. То есть например мы делаем запрос цель которого ответить на вопрос "да/нет?".

Пример:
ЕстьОстатки = Не РезультатЗапроса.Пустой();


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

Пример: Заполнение табличной части печатной формы. Нам же не интересно пустой результат или нет, мы просто его обходим и добавляем новые строки в табличный документ. Если выборка пустая - будет 0 строк т.к. цикл ни разу не пройдет, ну и ладно.
lone_mayson; Sashares; starik-2005; +3 Ответить
6. starik-2005 3170 01.04.25 16:46 Сейчас в теме
(5)
мы просто его обходим и добавляем новые строки в табличный документ.
Это избыточно. Есть же СКД )))
8. user1936660 01.04.25 20:22 Сейчас в теме
(5)
Выбрать() вообще не ресурсоемкая операция. Легко проверить
Создай запрос, отдающий не плоскую таблицу, а несколько уровней итогов с дополнением периодов, например. На твой же миллион записей. Замерь. Подумай, почему так.
VyacheslavShilov; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот