Тормозит запрос к регистру бухгалтерии 1С: пять мест, где теряется время, и как их починить | infolimp.ru

Тормозит запрос к регистру бухгалтерии 1С: пять мест, где теряется время, и как их починить

12 мая 2026 · infolimp.ru

Автор: 1С Инсайдер · роль: практик 1С · проверка: типовые конфигурации и рабочие сценарии · 0 комментариев

Разбираем пять типовых мест, где тормозит запрос к регистру бухгалтерии 1С: фильтры в параметрах виртуальных таблиц, индексы временных таблиц, актуальные итоги, запросы в цикле и работа со списком субконто. С чек-листом диагностики через технологический журнал и примером кода. Знакомая ситуация — открыли отчёт по оборотам, ждёте минуту, две, уходите за кофе: в большинстве случаев узкое место попадает в одну из этих пяти точек, и с них стоит начать. Параллельно есть отдельный класс проблем уровня СУБД (блокировки, устаревшая статистика, конкуренция за ресурсы) — туда лезть стоит, только когда пять точек проверены.

Почему регистр бухгалтерии — особый случай

Регистр бухгалтерии хранит проводки с корреспонденцией счетов. Каждое движение — это сразу пара «дебет-кредит» плюс набор субконто по обеим сторонам. Виртуальные таблицы платформы (Обороты, Остатки, ОстаткиИОбороты, ДвиженияССубконто) собирают результат из реальных таблиц БД, разворачивая корреспонденцию. Чем больше счетов и субконто вы тащите за раз — тем шире промежуточный набор, и тем дольше всё это считается.

Пять точек, где обычно теряется время

1. Фильтр счёта в условии ГДЕ, а не в параметре виртуальной таблицы

Самая частая ошибка: виртуальная таблица собирает обороты по всем счетам, и только потом результат отфильтровывается в условии ГДЕ. Платформа уже потратила время на счета, которые вам не нужны. Правильно — передать фильтр в параметры самой виртуальной таблицы: у Оборотов / Остатков / ОстаткиИОбороты есть отдельные параметры для счёта и для произвольного условия (последний по позиции). Точную сигнатуру и порядок аргументов смотрите в конструкторе запроса в Конфигураторе — он подставляет именованные параметры сам, и риск перепутать позицию исчезает.

2. Чтение лишних видов субконто

Если регистр бухгалтерии хранит данные с тремя видами субконто, а вам в отчёте нужны только два, и при этом вы не указали конкретные виды субконто в параметрах виртуальной таблицы — платформа развернёт все три. Особенно дорого это на счетах с тяжёлыми субконто типа «Документ расчётов с контрагентом» (там миллионы значений). Передавайте только нужные виды субконто — это часто даёт лучший выигрыш по времени.

3. Соединение временной таблицы без индекса

Поместили промежуточный результат в ВТ, потом соединяете с другой таблицей по контрагенту, и удивляетесь, почему запрос стал медленнее. Платформа делает полный перебор по ВТ, потому что у неё нет индекса. Добавьте ИНДЕКСИРОВАТЬ ПО к ВТ — на ВТ от сотен тысяч строк выигрыш заметный. На маленьких ВТ (несколько тысяч строк) разница может оказаться нулевой или даже отрицательной — индекс строится дольше, чем экономит.

// ВТ с явным индексом по полю соединения
ВЫБРАТЬ
    Реализация.Контрагент КАК Контрагент,
    Реализация.СуммаДокумента КАК СуммаДок
ПОМЕСТИТЬ ВТ_Реализации
ИЗ
    Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
    Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И Реализация.Проведен = ИСТИНА

ИНДЕКСИРОВАТЬ ПО
    Контрагент
;

// Теперь соединение по Контрагенту работает быстро
ВЫБРАТЬ
    ВТ_Реализации.Контрагент,
    ВТ_Реализации.СуммаДок,
    Контрагенты.Наименование
ИЗ
    ВТ_Реализации КАК ВТ_Реализации
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО ВТ_Реализации.Контрагент = Контрагенты.Ссылка

4. Запрос в цикле

Классика: цикл по списку контрагентов, внутри — запрос «дай мне остаток на счёте 62 на дату». Тысяча контрагентов — тысяча запросов. Это убивает производительность любой базы, не только 1С. Перепишите как один запрос со списком контрагентов в параметре виртуальной таблицы — и тысяча обращений к серверу превратятся в одно.

5. Чтение по движениям вместо итогов

Платформа поддерживает итоги регистра бухгалтерии — это таблицы с предрассчитанными остатками на конец каждого периода. Если ваш отчёт показывает остаток на 1-е число месяца — он должен читать итог, а не пересчитывать сумму движений с начала эксплуатации. Виртуальные таблицы Остатки / ОстаткиИОбороты используют итоги, если они актуальны. Если регламентное задание «Пересчёт итогов» не успевает или вообще не настроено — итоги не актуальны, и платформа честно перебирает движения. На крупной базе с многолетней историей разница между чтением по актуальным итогам и пересчётом движений может достигать одного-двух порядков; точная величина зависит от глубины истории и СУБД.

Сравнение подходов на одну и ту же задачу

ЗадачаЧто обычно делаютЧто лучше работает
Обороты по группе счетов за период Обороты(...) с пустыми параметрами + ГДЕ Счёт В (...) после Передать фильтр счёта прямо в параметры виртуальной таблицы (точную позицию подставит конструктор запроса)
Остаток на дату по контрагенту Запрос в цикле по контрагентам Один запрос с массивом контрагентов в параметре Условие
Соединение оборотов с реквизитами контрагента Прямое соединение виртуальной таблицы со справочником Виртуальную таблицу — в ВТ с индексом, потом соединение
Остаток на 1-е число месяца Сумма движений с начала эксплуатации Виртуальная таблица Остатки + актуальные итоги
Прежде чем оптимизировать — измерьте. На клиент-серверной базе включите технологический журнал на событие DBMSSQL (или DBPOSTGRS, в зависимости от СУБД) с фильтром по своему сеансу, выполните отчёт один раз и посмотрите, какой именно SQL-запрос платформа отправила в базу и сколько он шёл. На файловой базе используйте замер производительности в Конфигураторе. В обоих случаях это сразу покажет, где время теряется — и часто вы поймёте, что оптимизировали не ту часть.

Чек-лист диагностики тяжёлого запроса

  1. Найдите сам запрос: для отчётов — кнопка «Структура запроса» в конструкторе СКД; для произвольных модулей — текст запроса в коде.
  2. Проверьте, что все известные ограничения (период, счёт, организация, контрагент) переданы в параметры виртуальной таблицы, а не в ГДЕ.
  3. Если есть ВТ — убедитесь, что у неё ИНДЕКСИРОВАТЬ ПО по полям, по которым она потом соединяется.
  4. Удалите из выборки все колонки и измерения, которые вам не нужны для конечного результата.
  5. Убедитесь, что виды субконто перечислены явно — иначе платформа разворачивает все.
  6. Проверьте актуальность итогов регистра: если запрос идёт по остаткам и итоги не актуальны — сначала разберитесь с регламентным заданием их пересчёта.
  7. Если запрос работает с большим количеством сущностей — нет ли его внутри цикла? Перепишите цикл в массив-параметр.
  8. Повторите замер. Если время почти не изменилось — скорее всего, вы оптимизировали не то место: вернитесь к технологическому журналу и найдите реальное узкое место.

Типичные ошибки

Профессиональные решения для 1С и marketplace-интеграций — каталог отчётов и инструментов на витрине НОПи.

Перейти в каталог решений →