К статье
Практический материал

Разработка и Конфигурация · 9 мин

Где хранится временная таблица в 1С

Разбираемся, где хранятся временные таблицы в запросах 1С: менеджер временных таблиц, память сервера, время жизни, отладка и типичные ошибки разработчиков.

Временная таблица в 1С — это промежуточный набор данных, который создаётся внутри запроса с помощью конструкции «ПОМЕСТИТЬ» и существует только в рамках текущего сеанса выполнения. Понимание того, где физически размещаются эти данные, важно для оптимизации запросов, отладки сложных отчётов и диагностики проблем с производительностью.

Короткий ответ: временные таблицы не хранятся в базе данных как обычные объекты. В файловом варианте они размещаются в оперативной памяти процесса, а в клиент-серверном — в памяти рабочего процесса сервера 1С или во временных таблицах СУБД (например, tempdb в MS SQL Server), в зависимости от настроек и версии платформы.

Что такое временная таблица и зачем она нужна

Временная таблица создаётся оператором запроса «ПОМЕСТИТЬ ИмяТаблицы» и используется для разбиения сложных выборок на этапы. Типичные сценарии: отбор номенклатуры по сложному условию, а затем соединение с остатками; предварительная группировка данных перед финальным расчётом; передача таблицы значений из кода в запрос через параметр.

Ключевое свойство — временная таблица существует только внутри сеанса и не сохраняется в информационной базе. После завершения сеанса или явного удаления данные исчезают без следа. Это отличает её от таблиц значений, которые живут в памяти клиентского приложения, и от физических таблиц СУБД, хранящихся постоянно.

Где физически находятся данные временных таблиц

Место хранения зависит от режима работы информационной базы. В файловом варианте вся обработка выполняется в одном процессе, поэтому временные таблицы размещаются в оперативной памяти этого процесса — на компьютере пользователя или на сервере, если файловая база опубликована через веб-сервер.

В клиент-серверном варианте запросы выполняются на стороне СУБД. Платформа 1С формирует SQL-запрос, и временные таблицы материализуются средствами самой СУБД: в MS SQL Server это таблицы в служебной базе tempdb, в PostgreSQL — временные объекты внутри сессии, в Oracle и IBM DB2 — аналогичные механизмы. При этом часть промежуточных данных может обрабатываться в памяти рабочего процесса rphost сервера 1С.

Важно понимать: разработчик не управляет физическим размещением напрямую. Платформа сама решает, как материализовать временную таблицу, исходя из версии, настроек и объёма данных. Управлять можно логикой — через менеджер временных таблиц и структуру запроса.

Менеджер временных таблиц: как устроено управление

Каждый объект «Запрос» по умолчанию получает собственный менеджер временных таблиц. Если не назначить общий менеджер, временная таблица, созданная в одном запросе, будет недоступна в другом — платформа выдаст ошибку «Таблица не найдена».

Чтобы несколько запросов работали с одним набором временных таблиц, создают общий менеджер и присваивают его каждому запросу через свойство «МенеджерВременныхТаблиц». Это стандартный приём при построении сложных отчётов и обработок.

bsl
МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос1.Текст = "ВЫБРАТЬ Товары.Ссылка ПОМЕСТИТЬ ВТ_Товары ИЗ Справочник.Номенклатура КАК Товары";
Запрос1.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ * ИЗ ВТ_Товары";

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

Сколько живёт временная таблица

Время жизни временной таблицы ограничено тремя границами. Первая — время жизни менеджера временных таблиц: пока существует объект и не вызвано закрытие, таблица доступна. Вторая — сеанс пользователя: при завершении сеанса все временные данные уничтожаются. Третья — явное удаление через конструкцию «УНИЧТОЖИТЬ ИмяТаблицы» в тексте запроса.

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

Как создать и корректно удалить временную таблицу
  1. 1
    Создайте объект МенеджерВременныхТаблиц и назначьте его запросу.
  2. 2
    Выполните запрос с конструкцией ПОМЕСТИТЬ ВТ_Имя.
  3. 3
    Используйте ВТ в последующих запросах с тем же менеджером.
  4. 4
    Выполните запрос с текстом УНИЧТОЖИТЬ ВТ_Имя, когда таблица не нужна.
  5. 5
    Вызовите МенеджерВТ.Закрыть() в конце процедуры.

Как посмотреть содержимое при отладке

Временную таблицу нельзя открыть в конфигураторе или в списке таблиц СУБД как обычный справочник — она существует только в контексте выполнения. Для просмотра содержимого в отладчике используют приём: выполняют запрос «ВЫБРАТЬ * ИЗ ВТ_Имя» с тем же менеджером и выводят результат через «Выгрузить()» в таблицу значений.

Удобный способ — встроенные средства консоли запросов или функция «Рассчитать» в отладчике: создаёте запрос, присваиваете менеджер, выполняете выборку и смотрите результат. На СУБД-уровне в MS SQL Server временные таблицы можно увидеть в tempdb через представления sys.tables, но делать это стоит только администратору и только в тестовой среде.

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

Большие временные таблицы — частая причина роста потребления памяти рабочими процессами rphost и раздувания tempdb. Если в таблицу помещаются сотни тысяч строк без индексов, последующие соединения с ней выполняются полным сканированием, и запрос резко замедляется.

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

Контрольные точки

Как проверить, что временные таблицы не вредят

Потребление памяти rphost при выполнении отчёта
Норма

Память растёт умеренно и освобождается после выполнения

Тревожный признак

Память растёт постоянно, процессы не отпускают ресурсы

Размер tempdb в MS SQL Server
Норма

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

Тревожный признак

tempdb быстро растёт при запуске отчётов

Время выполнения запроса с ВТ
Норма

Соединения по индексированным полям выполняются быстро

Тревожный признак

Запрос висит на соединении больших временных таблиц

Типичные ошибки при работе с временными таблицами

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

Типичные ошибки
01
Использование ВТ без общего менеджера — ошибка «Таблица не найдена».
02
Отсутствие УНИЧТОЖИТЬ для больших таблиц — перерасход памяти сервера и tempdb.
03
Помещение в ВТ лишних полей и строк — замедление соединений и рост потребления ресурсов.
04
Индексация маленьких таблиц — лишние затраты времени без выигрыша.
05
Ожидание, что ВТ сохранится между сеансами — данные теряются при завершении сеанса.

Ещё одна ошибка — передача в запрос огромной таблицы значений через параметр «ВТ» без фильтрации. Перед помещением стоит отсечь лишние строки и колонки: чем меньше временная таблица, тем быстрее работает весь пакет запросов.

Часто задаваемые вопросы

Можно ли найти временную таблицу 1С в списке таблиц базы данных?

Нет. Временные таблицы не являются объектами информационной базы и не отображаются в конфигураторе. В клиент-серверном варианте их физическое воплощение живёт в tempdb или в памяти процесса и удаляется автоматически.

Сохранится ли временная таблица после перезапуска сервера 1С?

Нет. Перезапуск сервера или завершение сеанса уничтожает все временные таблицы. Если данные нужны между сеансами, их следует сохранять в объектах конфигурации или во внешних хранилищах.

Чем временная таблица отличается от таблицы значений?

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

Почему запрос выдаёт ошибку «Таблица не найдена», хотя я её создал?

Чаще всего причина в том, что второй запрос использует другой менеджер временных таблиц. Создайте один общий объект МенеджерВременныхТаблиц и назначьте его всем запросам, которые должны видеть общие таблицы.

Нужно ли явно удалять временные таблицы?

Для небольших таблиц в коротких процедурах явное удаление необязательно — платформа освободит ресурсы сама. Для больших таблиц в длительных серверных операциях рекомендуется использовать УНИЧТОЖИТЬ и закрывать менеджер, чтобы не накапливать нагрузку на память и tempdb.

Можно ли создать индекс на временной таблице?

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

Итог

Что важно запомнить

Временная таблица 1С хранится не в базе, а в памяти сервера или во временных структурах СУБД, управляется менеджером временных таблиц и живёт только в рамках сеанса. Используйте общий менеджер для связанных запросов, уничтожайте большие таблицы после использования и индексируйте поля соединений — это главные приёмы стабильной и быстрой работы.