← База знаний

Оптимизация запросов 1С: как избавиться от циклов и вложенных выборок

90% проблем с производительностью 1С связаны с неоптимальными запросами. Самая частая причина — запросы внутри цикла. Разбираю главные антипаттерны и как их исправить.

❌ Антипаттерн #1: Запрос в цикле

Проблема: При обработке 1000 строк документа код делает 1000 обращений к базе данных.

❌ Плохо:
Для каждой строки ТЧ цикла →
  Запрос.Текст = "ВЫБРАТЬ Цену ИЗ РегистрЦен ГДЕ...";
  Запрос.Выполнить(); // 1000 запросов!
КонецЦикла;
✅ Правильно:
// Один запрос для всей номенклатуры из ТЧ
Запрос.Текст = "ВЫБРАТЬ Цену ИЗ РегистрЦен ГДЕ Номенклатура В (&СписокНоменклатуры)";
// Результат помещаем в соответствие, потом обходим ТЧ

Эффект: Ускорение в 10–100 раз.

❌ Антипаттерн #2: Не используются виртуальные таблицы

Проблема: Запрос обращается напрямую к таблице регистра накопления, а не к виртуальной таблице Остатки/Обороты.

❌ Плохо:
ВЫБРАТЬ Сумма(Количество) ИЗ РегистрНакопления.ТоварыНаСкладах
ГДЕ ВидДвижения = Приход... // Вся история!
✅ Правильно:
ВЫБРАТЬ КоличествоОстаток ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура = &Номенклатура)

Медленные отчёты или зависания при проведении?

Найду и оптимизирую проблемные запросы. Гарантированное ускорение — или бесплатно переделаю. Стоимость от 8 000 ₽.

Заказать оптимизацию запросов →

❌ Антипаттерн #3: Выборка лишних полей

ВЫБРАТЬ * вместо конкретных полей — приводит к передаче избыточных данных по сети и из СУБД.

❌ Антипаттерн #4: Вложенные запросы вместо временных таблиц

Вложенный запрос выполняется для каждой строки внешнего запроса. Временная таблица выполняется один раз.

Нужен комплексный аудит производительности 1С?

Анализирую все запросы, блокировки, код — даю приоритизированный список улучшений.

Подробнее об аудите →