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

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

Что такое временные таблицы в 1С и зачем их просматривать

Временные таблицы в 1С:Предприятие 8 — это объекты базы данных, которые создаются динамически во время выполнения кода и существуют только в рамках текущего сеанса или транзакции. Они широко используются для:

  • 📊 Хранения промежуточных результатов сложных отчетов (например, в СКД или КД 2.0).
  • 🔄 Оптимизации многократных обращений к одним и тем же данным (кеширование).
  • 🔗 Обмена данными между разными процедурами или модулями без передачи параметров.
  • 🛠️ Реализации сложной логики в обработках (например, при выгрузке данных в внешние системы).

Основная проблема временных таблиц — их невидимость в стандартном интерфейсе. В отличие от постоянных таблиц (справочников, документов), их нельзя открыть через Все функции или Объекты конфигурации. Это создает сложности при:

  • 🐛 Поиске ошибок в запросах (например, когда результат не совпадает с ожидаемым).
  • ⚡ Оптимизации производительности (анализ, какие данные попадают во временные таблицы).
  • 🔍 Отладке интеграционных решений (проверка структуры передаваемых данных).
⚠️ Внимание: Временные таблицы в не являются аналогом временных таблиц в SQL Server или PostgreSQL. Они управляются платформой и не имеют прямого представления в СУБД (за исключением режима Управляемое приложение + файловый вариант, где используются физические файлы).

Метод 1: Просмотр через отладчик (для программистов)

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

Алгоритм действий:

  1. Откройте конфигуратор в режиме 1С:Предприятие (или переключитесь на него из пользовательского режима).
  2. Установите точку останова на строке кода, которая следует сразу после заполнения временной таблицы. Например:
    Запрос.Выполнить();
    

    ТочкаОстанова(); // Здесь установите break-point

  3. Запустите код в режиме отладки (F5 или кнопка Отладка).
  4. Когда выполнение остановится, откройте окно Вычисляемые выражения (Ctrl+Alt+W) и введите имя временной таблицы (например, РезультатыЗапроса).
  5. Нажмите Вычислить — платформа отобразит содержимое таблицы в виде коллекции.

Преимущества метода:

  • ✅ Работает во всех версиях платформы (8.2, 8.3).
  • ✅ Позволяет просматривать данные до и после модификаций.
  • ✅ Поддерживает сложные структуры (вложенные таблицы, объекты).
⚠️ Внимание: В режиме Тонкий клиент или Веб-клиент отладчик может не показывать полную структуру временных таблиц из-за ограничений передачи данных между сервером и клиентом. В таких случаях используйте Толстый клиент.

Убедиться, что код выполняется в режиме "1С:Предприятие" (не в конфигураторе)|Поставить точку останова после создания временной таблицы|Запустить отладку (F5)|Открыть окно "Вычисляемые выражения" (Ctrl+Alt+W)|Ввести имя переменной с таблицей и нажать "Вычислить"-->

Метод 2: Консоль запросов (для управляемых форм)

Если вы работаете в управляемом приложении (тонкий клиент, веб-клиент), где отладчик ограничен, на помощь придет Консоль запросов. Этот инструмент входит в стандартную поставку и позволяет выполнять произвольные запросы, включая обращение к временным таблицам.

Инструкция:

  1. Откройте консоль запросов через меню Все функции → Стандартные → Консоль запросов (или добавьте ее в панели инструментов).
  2. В поле запроса введите команду для выборки данных из временной таблицы. Например:
    ВЫБРАТЬ *
    

    ИЗ ВременноеХранилище.ВашаТаблица КАК Т

    где ВашаТаблица — имя временной таблицы, объявленной в коде.

  3. Нажмите Выполнить (F5). Результат отобразится в нижней части окна.

Особенности метода:

  • 🔹 Работает только для таблиц, созданных через ВЫБРАТЬ ... ПОМЕСТИТЬ или ВременноеХранилище.
  • 🔹 Не показывает таблицы, созданные через Новый ТаблицаЗначений (они хранятся в памяти, а не в СУБД).
  • 🔹 В файловом варианте может требовать прав администратора.
Тип временной таблицы Доступна в Консоли запросов? Пример кода создания
Таблица через ПОМЕСТИТЬ ✅ Да ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_Результаты
Временное хранилище ✅ Да ВременноеХранилище.Вставить("Ключ", Таблица)
ТаблицаЗначений в памяти ❌ Нет ТЗ = Новый ТаблицаЗначений
Таблица через REPLACE INTO (SQL) ⚠️ Зависит от СУБД ВыполнитьSQL("CREATE TEMP TABLE...")
💡

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

Метод 3: Внешние обработки для просмотра временных данных

Для пользователей, которые не хотят разбираться в отладчике или консоли запросов, существуют готовые внешние обработки. Они позволяют просматривать временные таблицы в удобном интерфейсе, подобном Списку значений или Табличному документу.

Популярные решения:

  • 📌 "Универсальный просмотрщик временных таблиц" (доступен на Infostart и 1С-Галлерея). Поддерживает фильтрацию, сортировку и экспорт в Excel.
  • 📌 "Debugger for 1C" — расширение с расширенными возможностями отладки, включая просмотр временных данных.
  • 📌 "Таблица значений в JSON" — обработка для конвертации временных таблиц в читаемый формат.

Как использовать:

  1. Скачайте обработку с проверенного источника (например, Infostart.ru).
  2. Откройте ее в через Файл → Открыть.
  3. В форме обработки укажите имя переменной с временной таблицей (например, ТоварыОстатки).
  4. Нажмите Показать — данные отобразятся в табличном виде.
⚠️ Внимание: Внешние обработки могут содержать вредоносный код. Перед использованием проверьте их на тестовой базе или в песочнице. Особенно осторожно скачивайте файлы с форумов и непроверенных источников.

Отладчик (Ctrl+Alt+W)|Консоль запросов|Внешние обработки|SQL-запросы к СУБД|Не просматриваю-->

Метод 4: Прямой доступ через SQL (для опытных пользователей)

Если вы работаете с на SQL-сервере (например, Microsoft SQL Server, PostgreSQL), можно подключиться к базе напрямую и выполнить запрос к временным таблицам. Этот метод требует знаний SQL и прав доступа к серверу.

Алгоритм:

  1. Узнайте имя временной таблицы в . Оно обычно начинается с префикса:
    • #ТМП_ — для таблиц, созданных через ПОМЕСТИТЬ.
    • v81c_ — для системных временных таблиц платформы.
  2. Подключитесь к базе данных через SQL Server Management Studio, pgAdmin или другой клиент.
  3. Выполните запрос:
    SELECT * FROM tempdb..#ТМП_ВашаТаблица

    или (для PostgreSQL):

    SELECT * FROM pg_temp.v81c_вашатаблица;
  4. Ограничения метода:

    • 🔴 Не работает в файловом варианте (нет SQL-сервера).
    • 🔴 Временные таблицы видны только в текущей сессии. Если подключиться под другим пользователем, их не будет.
    • 🔴 Структура таблиц может меняться между версиями платформы.
    Как найти имя временной таблицы в SQL-сервере?

    В временные таблицы часто имеют динамические имена, например #ТМП_12345678. Чтобы их найти, выполните запрос к системным таблицам SQL-сервера:

    SELECT name FROM tempdb.sys.tables
    

    WHERE name LIKE '#ТМП_%'

    Это вернет список всех временных таблиц, созданных платформой в текущей сессии.

    Метод 5: Выгрузка временных данных в файл

    Если временную таблицу нужно не только посмотреть, но и сохранить для анализа, можно выгрузить ее содержимое в файл (Excel, JSON, CSV). Это полезно для:

    • 📊 Сравнения данных до и после изменений.
    • 🔍 Передачи коллегам для совместной отладки.
    • 📈 Построения графиков или диаграмм в внешних инструментах.

    Пример кода для выгрузки в Excel:

    // Предполагаем, что у нас есть временная таблица ТЗ
    

    Если НЕ ЗначениеЗаполнено(ТЗ) Тогда

    Возврат;

    КонецЕсли;

    // Создаем объект Excel

    Excel = Новый COMОбъект("Excel.Application");

    Книга = Excel.Workbooks.Add();

    Лист = Книга.Worksheets(1);

    // Заполняем заголовки

    Для Каждого Колонка Из ТЗ.Колонки Цикл

    Лист.Cells(1, Колонка.Индекс + 1).Value = Колонка.Имя;

    КонецЦикла;

    // Заполняем данные

    Для i = 0 По ТЗ.Количество() - 1 Цикл

    Для Каждого Колонка Из ТЗ.Колонки Цикл

    Лист.Cells(i + 2, Колонка.Индекс + 1).Value = ТЗ[i][Колонка.Имя];

    КонецЦикла;

    КонецЦикла;

    // Сохраняем файл

    ПутьКФайлу = "C:\Temp\ВременнаяТаблица.xlsx";

    Книга.SaveAs(ПутьКФайлу);

    Excel.Quit();

    Альтернативные форматы:

    • 📄 JSON: ЗаписьJSON.Записать(ПутьКФайлу, ТЗ).
    • 📄 CSV: использовать ЗаписьТекста с разделителями.
    • 📄 HTML: сгенерировать таблицу через ТабличныйДокумент.
    💡

    Выгрузка в Excel удобна для визуального анализа, но требует установленного Microsoft Office. Для серверных решений лучше использовать JSON или CSV.

    Типичные ошибки и как их избежать

    При работе с временными таблицами разработчики часто сталкиваются с типичными проблемами. Вот самые распространенные из них и способы их решения:

    Ошибка Причина Решение
    Таблица не найдена (ВТ_Имя) Временная таблица создана в другой сессии или транзакции. Проверьте область видимости таблицы. Используйте ВременноеХранилище для межсессионного доступа.
    Недостаточно прав для операции В SQL-сервере у пользователя нет прав на tempdb. Настройте права через SQL Server Management Studio или попросите администратора.
    Данные не обновляются Таблица кэширована или транзакция не зафиксирована. Используйте ЗафиксироватьТранзакцию() или отключите кэширование.
    Ошибка при чтении временной таблицы Таблица удалена сборщиком мусора. Увеличьте лимит памяти для сеанса в настройках сервера .

    Дополнительные рекомендации:

    • 🔹 Всегда проверяйте, что временная таблица существует перед обращением:
      Если НЕ ЗначениеЗаполнено(ВременноеХранилище.Получить("Ключ")) Тогда
      

      // Обработка ошибки

      КонецЕсли;

    • 🔹 Для больших таблиц (>10 000 строк) используйте постраничную выборку, чтобы избежать переполнения памяти.
    • 🔹 В управляемых формах временные таблицы могут не сохраняться между постбэками. Используйте ХранилищеЗначения.

    FAQ: Частые вопросы о временных таблицах в 1С

    Можно ли просматривать временные таблицы в веб-клиенте?

    В веб-клиенте возможности отладки сильно ограничены. Просмотреть временные таблицы можно только:

    • Через Консоль запросов (если таблица создана через ПОМЕСТИТЬ).
    • С помощью внешних обработок, поддерживающих веб-клиент (например, "Debugger for 1C").

Отладчик (Ctrl+Alt+W) в веб-клиенте не работает.

Как узнать, сколько памяти занимает временная таблица?

Для оценки размера таблицы в памяти используйте:

Сообщить("Размер таблицы: " + ПолучитьИнформациюОЗанятостиПамяти(ТЗ));

Для SQL-сервера выполните запрос:

SELECT

t.name AS TableName,

s.name AS SchemaName,

p.rows AS RowCounts,

SUM(a.total_pages) * 8 AS TotalSpaceKB

FROM

tempdb.sys.tables t

INNER JOIN

tempdb.sys.indexes i ON t.object_id = i.object_id

INNER JOIN

tempdb.sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id

INNER JOIN

tempdb.sys.allocation_units a ON p.partition_id = a.container_id

LEFT OUTER JOIN

tempdb.sys.schemas s ON t.schema_id = s.schema_id

WHERE

t.name LIKE '#ТМП_%'

AND t.is_ms_shipped = 0

AND i.object_id > 255

GROUP BY

t.name, s.name, p.rows;

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

Вероятные причины:

  1. Ошибка в условии отбора: проверьте секцию ГДЕ в запросе.
  2. Транзакция не зафиксирована: если таблица заполняется в транзакции, которая потом откатывается (ОтменитьТранзакцию()), данные не сохранятся.
  3. Ограничения прав: в SQL-сервере у пользователя может не хватать прав на запись во временные таблицы.
  4. Очистка сборщиком мусора: если таблица создавалась давно и не использовалась, платформа могла ее удалить.

Для диагностики добавьте в код логирование:

Если ТЗ.Количество() = 0 Тогда

ЗаписатьЛог(УровеньЛога.Ошибка, "Временная таблица пуста! Запрос: " + ТекстЗапроса);

КонецЕсли;

Можно ли редактировать данные во временной таблице напрямую?

Да, но с оговорками:

  • 🔹 В ТаблицеЗначений (в памяти) — можно редактировать ячейки напрямую через код или отладчик.
  • 🔹 В таблицах на SQL-сервере (созданных через ПОМЕСТИТЬ) — можно выполнить UPDATE или DELETE через SQL-запрос.
  • ⚠️ Изменения во временных таблицах не отражаются в исходных данных базы.

Пример редактирования через SQL:

UPDATE #ТМП_Товары SET Цена = Цена * 1.1 WHERE Склад = 'Основной';
Как передать временную таблицу между сеансами?

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

  • 🔹 ВременноеХранилище:
    // Сеанс 1: сохранение
    

    ВременноеХранилище.Вставить("УникальныйКлюч", ТЗ);

    // Сеанс 2: чтение

    ТЗ = ВременноеХранилище.Получить("УникальныйКлюч");

  • 🔹 Файловый обмен: выгрузите таблицу в JSON/Excel и загрузите в другом сеансе.
  • 🔹 Общие реквизиты: если данные небольшие, можно сохранить их в реквизите справочника или документа.

Для SQL-сервера можно создать глобальную временную таблицу (с префиксом ##), но это требует прав администратора.