Все проекты English Написать директору Вебинары
Импортозамещение
Выбор региона
Ваш город:Хабаровск

Ваш регион определился как:
Москва

или
Выбор региона
Выберите другой регион
Поиск

Методы отладки и оптимизация запросов 1С

Время чтения: ~8 мин.

Актуальность проверена: 22 . 08 . 2026

Работа с запросами — центральный элемент разработки в платформе 1С:Предприятие 8.3. От того, насколько грамотно построены запросы к базе данных, напрямую зависит скорость работы всей системы. Даже простые операции могут занимать минуты вместо секунд, если код написан без учета специфики платформы.

Как устроено выполнение запросов

Запрос проходит несколько этапов перед получением результата. Сервер приложений преобразует текст из терминов 1С в физические SQL-конструкции. Сервер СУБД обрабатывает полученный запрос и возвращает данные.

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

Объектная модель 1С создает неявные запросы при обращении к свойствам через точку. Циклы с запросами внутри генерируют десятки или сотни обращений к базе. Это первая причина медленной работы.

Повышение производительности и ускорение работы 1С

  • Устранение узких мест, влияющих на производительность;
  • Анализ соответствия параметров сервера текущей нагрузке;
  • Повышение стабильности работы 1С;
  • Фиксированная стоимость работ.

Инструменты для отладки запросов в 1С

Консоль запросов

Консоль запросов — внешняя обработка для работы с запросами в режиме 1С:Предприятие. Она позволяет выполнять запросы на реальных данных информационной базы, не открывая конфигуратор.

Основные возможности консоли:

  • Выполнение запросов с параметрами
  • Просмотр содержимого временных таблиц
  • Замер времени выполнения каждого пакета
  • Автоматическое заполнение параметров из текста
  • Выполнение выделенного фрагмента запроса

В типовых конфигурациях консоль часто уже встроена. Для УТ 11 она находится в разделе «НСИ и администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки». В других конфигурациях можно использовать внешнюю обработку.

Перенос запроса из отладчика в консоль выполняется через функцию ЗапросВСтрокуXML() из модуля ОбщегоНазначения. Эта функция сериализует объект запроса в XML вместе со всеми параметрами. Полученную строку можно вставить в консоль и восстановить запрос с сохранением всех условий выполнения.

Инструменты разработчика

Подсистема «Инструменты разработчика» предоставляет расширенные возможности для отладки. Обработка «Функции режима отладки» позволяет сохранять объекты для последующего анализа в общих настройках.

Консоль запросов из этого набора поддерживает прямой перехват запросов из точки останова. Функция Отладить(Запрос) или короткая форма От(Запрос) открывает консоль с сохранением параметров и временных таблиц.

Преимущества этого подхода:

  • Автоматическая передача всех типов параметров
  • Поддержка таблиц значений и списков
  • Индексация временных таблиц с учетом полей соединения
  • Конструктор запросов понимает типы полей временных таблиц

Замер производительности

Режим замера производительности встроен в платформу 1С. Он измеряет частоту выполнения конкретных строк кода и их длительность.

Для включения замера нужно запустить 1С:Предприятие в режиме конфигуратора и выбрать в меню «Отладка → Замер производительности». Замер начинается сразу после запуска отладки.

Критически важно: на сервере 1С:Предприятия должна быть включена отладка. По умолчанию она выключена. Без этого в результат попадет только клиентский код, что даст неполную картину.

Результат замера показывает:

  • Количество выполнений каждой строки
  • Абсолютное время выполнения
  • Процент от общего времени
  • Место выполнения (клиент/сервер)

Замер нужно включать непосредственно перед выполнением операции. Если запустить его слишком рано, в результат попадут строки кода, не относящиеся к анализируемой операции.

Для точной оценки производительности выполняйте 5-6 замеров. Одна и та же операция может работать долго только в первый раз, а затем выполняться значительно быстрее благодаря кешированию.

Технологический журнал

Технологический журнал — штатное средство платформы для сбора детальной информации о работе системы. Он фиксирует все SQL-запросы к СУБД с временем выполнения.

Для настройки технологического журнала создается файл logcfg.xml в директории \bin\conf на сервере. Событие DBMSSQL позволяет собрать все запросы к MS SQL Server. Тег добавляет в журнал планы запросов для анализа.

Внимание: при работе с СУБД Oracle не нужно собирать планы при сборе технологического журнала. Это приведет к значительному замедлению работы всей системы.

Технологический журнал показывает суммарное время выполнения всех запросов. Это помогает понять, на что именно уходит время операции: на код платформы, запросы или платформенные вызовы.

Типичные ошибки при разработке запросов 1С

Отборы через конструкцию ГДЕ в виртуальных таблицах

Это грубейшая ошибка с точки зрения оптимизации запросов 1С 8.3. Фильтры на реквизиты виртуальной таблицы накладываются только через параметры.

При использовании конструкции ГДЕ система получает ВСЕ записи виртуальной таблицы. Только после этого применяется отбор. Если в регистре миллион записей, все они будут загружены в память.

Правильный способ:

РегистрНакопления.ТоварыНаСкладах.Остатки(
    &ДатаОстатков,
    Номенклатура В (&СписокНоменклатуры))

Неправильный способ:

РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков)
ГДЕ Номенклатура В (&СписокНоменклатуры)

Разница в производительности может достигать сотен раз на больших объемах данных.

Разыменование полей составного типа через точку

При обращении к полям через точку платформа создает дополнительные запросы. Количество запросов равно количеству возможных типов поля.

Если поле «Регистратор» может содержать 21 тип документов, запрос с разыменованием Регистратор.Дата обратится к 21 таблице базы данных. Вместо одной таблицы.

Решение для оптимизации запросов в 1С — использование оператора ВЫРАЗИТЬ с явным указанием типа:

ВЫБОР
    КОГДА ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваров
        ТОГДА ВЫРАЗИТЬ(ТоварыНаСкладах.Регистратор КАК Документ.ПоступлениеТоваров).Дата
    КОГДА ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваров
        ТОГДА ВЫРАЗИТЬ(ТоварыНаСкладах.Регистратор КАК Документ.РеализацияТоваров).Дата
КОНЕЦ КАК ДатаДокумента

Этот код обращается только к нужным таблицам. Да, запрос становится длиннее. Но производительность запроса 1С возрастает кратно.

Подзапросы в условиях соединения

Подзапросы в условиях соединения замедляют выполнение. Они выполняются для каждой строки левой таблицы.

Вместо подзапросов используйте временные таблицы. Создайте временную таблицу с нужными данными, проиндексируйте по полям соединения. Затем соединяйте основную таблицу с временной.

Важно: 1С рекомендует индексировать временные таблицы по полям соединения. Это уменьшает количество итераций при соединении таблиц.

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

ВЫБРАТЬ
    Номенклатура,
    Склад,
    Количество
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, )
 
ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад

Использование оператора ИЛИ в отборах

Логическая связка ИЛИ в условиях отбора запроса загружает оба объекта. Оптимизатор СУБД не может эффективно использовать индексы.

Лучше разбить запрос на два отдельных и объединить результаты через ОБЪЕДИНИТЬ. Или использовать конструкцию Поле В (Значение1, Значение2).

Методы оптимизации запросов 1С

Работа с временными таблицами

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

МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
 
// Выполнение запросов
 
МенеджерВТ.Закрыть();

Без явного закрытия временные таблицы могут не уничтожиться на сервере базы. Этот мусор занимает место в памяти и на дисках, снижая скорость работы.

Временные таблицы хранятся на сервере базы данных. Это значит, что обработка данных происходит там же, где они физически находятся. Передача по сети минимальна.

Использование индексов

Индексы помогают не только уменьшить выборку данных, но и сократить количество итераций при соединении таблиц.

При добавлении индекса в конфигурацию учитывайте специфику запросов. Индекс должен покрывать поля, которые используются в условиях отбора чаще всего.

Если запрос использует несколько полей в условии, важно найти одно поле индекса, которое максимально снизит объем выборки. Это поле указывается в скобках виртуальной таблицы. Остальные условия помещаются в ГДЕ.

В сложных случаях оптимальное поле может быть разным для одного и того же запроса. Всё зависит от данных отбора. Главное — обеспечить минимальный набор данных на выходе.

Отказ от объектной модели в циклах

Объектная модель 1С удобна, но создает неявные запросы. В цикле это превращается в катастрофу для производительности.

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

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

Правильно — собрать все условия в один запрос:

СписокНоменклатуры = Документ.Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры);
Результат = Запрос.Выполнить();

Один запрос выполняется практически моментально. Сотня запросов в цикле может занять минуты.

Анализ плана запроса

План запроса показывает, как СУБД выполняет запрос. Он позволяет увидеть операции, потребляющие больше всего ресурсов.

Для получения плана запроса в консоли запросов используется специальная кнопка или команда. План показывает:

  • Порядок обращения к таблицам
  • Использование индексов
  • Количество обработанных строк
  • Стоимость каждой операции

Показатель Reads (количество логических чтений) не должен измеряться тысячами. Если видите большие значения, запрос требует оптимизации.

Duration (время выполнения) показывает реальное время работы запроса. Если запрос выполняется дольше секунды при небольшом объеме данных, проблема очевидна.

Разбиение сложных запросов на пакеты

Большие запросы с множеством соединений трудно анализировать. Разбейте их на пакет последовательных запросов с временными таблицами.

Каждый запрос пакета решает отдельную задачу:

  1. Формирование базовой выборки с отборами
  2. Присоединение дополнительных данных
  3. Расчет итоговых показателей
  4. Формирование финального результата

Такая структура проще для понимания. Отладка каждого этапа выполняется отдельно. Временные таблицы можно просмотреть в консоли запросов.

Стандарты разработки запросов от 1С

Фирма «1С» описала стандарты работы с запросами в документе «Система стандартов и методик. Реализация обработки данных». Эти стандарты переводят различные упрощения написания текстов в разряд ошибок.

Первый проход оптимизации — проверка стандартов, исправление ошибок. Стандарты описывают, как избавиться от неявных запросов или структур в запросе. Они делают невидимое видимым.

Эффективные условия запросов

Условия в запросе должны использовать индексированные поля. Если условие применяется к полю без индекса, СУБД выполняет полное сканирование таблицы.

Сложные выражения в условиях препятствуют использованию индексов. Например, условие ГОД(Дата) = 2024 не использует индекс по полю Дата. Правильно: Дата >= &ДатаНачала И Дата <= &ДатаОкончания.

Соединение с виртуальными таблицами

При соединении обычных таблиц с виртуальными сначала выполняется соединение обычных таблиц. Затем результат соединяется с виртуальной.

Если виртуальная таблица строится долго, весь запрос работает медленно. Поместите результат виртуальной таблицы во временную таблицу с индексами. Затем соединяйте с ней.

Ограничение на количество записей

Используйте ключевое слово ПЕРВЫЕ, когда не нужны все записи. Это особенно важно для справочных запросов, где достаточно нескольких примеров.

ВЫБРАТЬ ПЕРВЫЕ 100
    Номенклатура,
    Количество
ИЗ
    РегистрНакопления.ТоварыНаСкладах

СУБД остановит выполнение после получения указанного количества записей.

Практические примеры оптимизации

Пример 1: Замена цикла с запросами

Было: запрос в цикле по документам, время выполнения 2 минуты

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

Стало: один запрос со списком документов, время выполнения менее 1 секунды

СписокДокументов = ВыборкаДокументов.ВыгрузитьКолонку("Ссылка");
Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Регистратор В (&СписокДокументов)";
Запрос.УстановитьПараметр("СписокДокументов", СписокДокументов);

Ускорение в 120 раз за счет одного изменения.

Пример 2: Работа с виртуальными таблицами остатков

Неоптимально:

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

Оптимально:

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

Отбор передается параметром виртуальной таблицы, а не применяется после получения всех данных.

Контроль производительности запросов

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

Ключевые метрики для контроля:

  • Время выполнения запроса (Duration)
  • Количество логических чтений (Reads)
  • Количество строк в результате
  • Использование индексов

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

График изменения производительности во времени выявляет корреляции. Например, связь скорости работы с количеством одновременно работающих пользователей указывает на очереди на оборудовании.

Анализ загруженности серверов показывает узкие места. Чаще всего это дисковая подсистема на серверах СУБД. Но не спешите покупать дорогое хранилище — сначала оптимизируйте запросы.

Инструменты для комплексного анализа

Существуют специализированные обработки для изучения методов оптимизации запросов. «Интерактивное изучение методов оптимизации запросов» работает в интерактивном режиме.

Открывается специальная информационная база с обработкой «Консоль изучения программ 1С:Предприятие». Она взаимодействует с интерактивным сервисом, предоставляя практические задачи по оптимизации.

Такие инструменты помогают освоить методы оптимизации на реальных примерах. Теория без практики малоэффективна. Интерактивный подход позволяет сразу видеть результаты оптимизации.

Заключение

Разработка и оптимизация запросов в 1С — навык, который приходит с опытом. Знание типичных ошибок и методов их исправления позволяет создавать эффективные решения с первого раза. Инструменты отладки делают процесс анализа быстрым и наглядным. А постоянный контроль производительности гарантирует, что система останется быстрой при росте объемов данных.

Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку

Нет времени читать? Пришлем вам на почту!

Я даю Согласие на обработку персональных данных в соответствии с Политикой Конфиденциальности
25
сентября
11:00-12:00
Второй оператор ЭПД: базовый минимум или необходимый максимум?
Что происходит с ЭПД сейчас: участники, востребованные документы и сценарии, риски и сложности внедрения. Когда второй оператор ЭПД становится необходимостью: как...

Подключите ЭПД до 1 сентября

Оставить заявку