РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
...
правильно:
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Показать
Подскажите, когда правильно использовать метод Пустой, результата запроса?
Всегда думал, что РезультатЗапроса.Выбрать(); это ресурсоёмкая операция.
И чтобы её не дёргать лишний раз, нужно вначале проверить на пустоту.
Если НЕ РезультатЗапроса.Пустой()
5.
krasnoshchekovpavel
1601.04.25 16:41 Сейчас в теме
Выбрать() вообще не ресурсоемкая операция. Легко проверить - создайте запрос который выдаст более миллиона записей и увидите, что Выбрать() выполняется за мгновение.
Стандарты, если их перефразировать на человеческий язык говорят следующее:
Проверку на Пустой() нужно делать когда нам нужен ответ на вопрос - пустой результат или нет. То есть например мы делаем запрос цель которого ответить на вопрос "да/нет?".
Пример:
ЕстьОстатки = Не РезультатЗапроса.Пустой();
Но если нам интересно само содержание результата запроса то эта проверка избыточна т.к. от нее мы ничего не выиграем, кроме захламления кода лишней проверкой.
Пример: Заполнение табличной части печатной формы. Нам же не интересно пустой результат или нет, мы просто его обходим и добавляем новые строки в табличный документ. Если выборка пустая - будет 0 строк т.к. цикл ни разу не пройдет, ну и ладно.
Всегда думал, что РезультатЗапроса.Выбрать(); это ресурсоёмкая операция.
Нууу, Выполнить() тоже ресурсоёмкая операция только для СУБД.
3. Выполнение запроса
После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода "Выполнить()" объекта "Запрос". Этот метод возвращает другой объект "РезультатЗапроса", содержащий выбранные данные из базы данных.
1. Проверку того, что результат выполнения запроса не содержит строк следует выполнять с помощью метода Пустой. Поскольку на получение выборки из результата запроса (выгрузка его в таблицу значений) будет затрачиваться дополнительное время.
Неправильно:
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Правильно:
Возврат НЕ Запрос.Выполнить().Пустой()
2. В то же время если требуется выбрать (или выгрузить) результат запроса, то предварительный вызов метода Пустой не требуется.
Например, вместо:
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
...
правильно:
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
...
5.
krasnoshchekovpavel
1601.04.25 16:41 Сейчас в теме
Выбрать() вообще не ресурсоемкая операция. Легко проверить - создайте запрос который выдаст более миллиона записей и увидите, что Выбрать() выполняется за мгновение.
Стандарты, если их перефразировать на человеческий язык говорят следующее:
Проверку на Пустой() нужно делать когда нам нужен ответ на вопрос - пустой результат или нет. То есть например мы делаем запрос цель которого ответить на вопрос "да/нет?".
Пример:
ЕстьОстатки = Не РезультатЗапроса.Пустой();
Но если нам интересно само содержание результата запроса то эта проверка избыточна т.к. от нее мы ничего не выиграем, кроме захламления кода лишней проверкой.
Пример: Заполнение табличной части печатной формы. Нам же не интересно пустой результат или нет, мы просто его обходим и добавляем новые строки в табличный документ. Если выборка пустая - будет 0 строк т.к. цикл ни разу не пройдет, ну и ладно.
Выбрать() вообще не ресурсоемкая операция. Легко проверить
Создай запрос, отдающий не плоскую таблицу, а несколько уровней итогов с дополнением периодов, например. На твой же миллион записей. Замерь. Подумай, почему так.