← Назад к вопросам

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

2.8 Senior🔥 171 комментариев
#Запросы и оптимизация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Оптимизация производительности 1С

1. Оптимизация запросов

Избегай лишних полей:

❌ ВЫБРАТЬ * ИЗ Справочник.Товары
✅ ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Товары

Используй РАЗЛИЧНЫЕ и ГРУППИРОВКУ:

// Вместо получения всех и фильтрации на клиенте
ВЫБРАТь РАЗЛИЧНЫЕ Товар  // ← на уровне БД

Используй СрезПоследних вместо ручного MAX:

✅ РегистрСведений.История.СрезПоследних(&Дата, ) КАК История
❌ МАКСИМУМ(История.Период) — медленнее на больших данных

Индексируй правильно:

  • По всем измерениям регистров
  • По полям в WHERE
  • Порядок полей в индексе = порядок фильтрации

2. Оптимизация логики на сервере

Кэширование результатов:

// Если один запрос выполняется много раз
Ключ = "Товары_" + Формат(Сегодня(), "ДФ=yyyymmdd");
Результат = ПолучитьИзКэша(Ключ);

Если Результат = Неопределено Тогда
    Результат = ВыполнитьДорогойЗапрос();
    СохранитьВКэш(Ключ, Результат);
КонецЕсли;

Пакетная обработка вместо цикла:

❌ Для Каждого Товар Из Товары Цикл
    ОбновитьТовар(Товар); // N обращений к БД
КонецЦикла;

✅ ОбновитьВсеТоварыЗаРаз(Товары); // 1 обращение

Используй TEMP таблицы для сложных расчётов:

ВЫБРАТь ... ПОМЕСТИТЬ ВремТабл;
ВЫБРАТь ВремТабл ГДЕ ... // быстро на уже заполненной таблице

3. Оптимизация клиентской части

Ленивая загрузка данных:

// На открытии формы загружай только видимые на экране
// Остальное по скроллу
Элементы.ТаблицаДанных.НачислениеСтрок = 100; // выводим по 100

Отключай расчёты при редактировании:

&НаКлиенте
Процедура КоличествоПриИзменении()
    // Пересчитываем сумму
    // Но БЕЗ затратных операций
КонецПроцедуры

4. Оптимизация БД

Архивирование старых данных:

// Перемещай данные > 2 лет в архив
// Текущая таблица остаётся меньше и быстрее

Регулярное обслуживание:

  • Перестроение индексов
  • Анализ статистики
  • Дефрагментация

5. Мониторинг

План выполнения запроса: Меню: Отчёты → План запроса

Профилирование:

Меню: Администрирование → Профилирование

Лог ошибок и медленных операций:

Логировать время выполнения:
НачалоВремени = ТекущееВремя();
ВыполнитьОперацию();
Время = ТекущееВремя() - НачалоВремени;
Если Время > 1000 Тогда // > 1 сек
    ЗаписатьВЛог(Время);
КонецЕсли;

Чеклист оптимизации

  1. ✅ Индексы по всем измерениям регистров
  2. ✅ РАЗЛИЧНЫЕ и ГРУППИРОВКА в запросах
  3. ✅ СрезПоследних для историй
  4. ✅ Кэширование результатов
  5. ✅ Пакетная обработка вместо циклов
  6. ✅ TEMP таблицы для сложности
  7. ✅ Ленивая загрузка на клиенте
  8. ✅ Регулярное обслуживание БД
  9. ✅ Мониторинг плана запросов
  10. ✅ Логирование медленных операций

Практический результат

Применение этих техник обычно дает 5-100x ускорение в зависимости от проблемы. Начни с анализа плана запроса — это покажет, в какой области искать узкое место.

Как вы оптимизируете производительность 1С и запросов? | PrepBro