Многократное выполнение однотипных запросов

#std436

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. Рекомендуется получать все необходимые однотипные данные одним запросом, вместо выполнения серии запросов. Это ускоряет исполнение запроса к базе данных. Для объединения запросов в один используются, например, условия В, ключевое слово ОБЪЕДИНИТЬ ВСЕ и пакет запросов.

Правильно:

ОбщийЗапрос = Новый Запрос("
  |ВЫБРАТЬ
  | БанковскиеСчета.Ссылка КАК Счет
  |ИЗ
  | Справочник.БанковскиеСчета КАК БанковскиеСчета
  |ГДЕ
  | БанковскиеСчета.Банк В(&БанкиДляОбработки)");

ОбщийЗапрос.УстановитьПараметр("БанкиДляОбработки", БанкиДляОбработки);
ВыборкаСчетов = ОбщийЗапрос.Выполнить().Выбрать();
Пока ВыборкаСчетов.Следующий() Цикл
  ОбработатьСчетаВБанке(ВыборкаСчетов.Счет);
КонецЦикла;

Неправильно:

ЧастныйЗапрос = Новый Запрос("
  |ВЫБРАТЬ
  | БанковскиеСчета.Ссылка КАК Счет
  |ИЗ
  | Справочник.БанковскиеСчета КАК БанковскиеСчета
  |ГДЕ
  | БанковскиеСчета.Банк = &Банк");

Для каждого Банк Из БанкиДляОбработки Цикл
  ЧастныйЗапрос.УстановитьПараметр("Банк", Банк);
  ВыборкаСчетов = ЧастныйЗапрос.Выполнить().Выбрать();
  Пока ВыборкаСчетов.Следующий() Цикл
    ОбработатьСчетаВБанке(ВыборкаСчетов.Счет);
  КонецЦикла;
КонецЦикла;

При использовании Библиотеки стандартных подсистем (БСП) правильно вызывать программный интерфейс, предназначенный для работы со списками объектов, например, однократно вызывать функцию ОбщегоНазначения.ЗначениеРеквизитаОбъектов вместо ЗначениеРеквизитаОбъекта в цикле, УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов вместо КонтактнаяИнформацияОбъекта в цикле. 

2. Допускается разделение запроса на серию запросов в следующих случаях:

В этих случаях запросы в цикле:

3. Запросы к разным таблицам также рекомендуется объединять в один с помощью ОБЪЕДИНИТЬ ВСЕ или пакета запросов. Однако, выигрыш во времени исполнения может оказаться незначительным.