Работа с временными таблицами в 1С:Предприятие — неотъемлемая часть разработки сложных отчетов, обработок и интеграционных решений. Эти таблицы создаются на лету, хранят промежуточные данные и автоматически уничтожаются после завершения сеанса или транзакции. Но что делать, если нужно посмотреть их содержимое для отладки, анализа ошибок или оптимизации запросов? Стандартный интерфейс платформы не предоставляет прямого доступа к таким таблицам, что вызывает затруднения у новичков и даже опытных программистов.
В этой статье мы разберем все рабочие методы просмотра временных таблиц — от встроенных инструментов 1С до внешних обработок и SQL-запросов. Вы узнаете, как использовать Отладчик, Консоль запросов, а также специализированные обработки вроде "Универсальный просмотрщик временных таблиц". Особое внимание уделим нюансам работы с управляемыми формами и тонким клиентом, где доступ к временным данным ограничен технически.
Что такое временные таблицы в 1С и зачем их просматривать
Временные таблицы в 1С:Предприятие 8 — это объекты базы данных, которые создаются динамически во время выполнения кода и существуют только в рамках текущего сеанса или транзакции. Они широко используются для:
- 📊 Хранения промежуточных результатов сложных отчетов (например, в СКД или КД 2.0).
- 🔄 Оптимизации многократных обращений к одним и тем же данным (кеширование).
- 🔗 Обмена данными между разными процедурами или модулями без передачи параметров.
- 🛠️ Реализации сложной логики в обработках (например, при выгрузке данных в внешние системы).
Основная проблема временных таблиц — их невидимость в стандартном интерфейсе. В отличие от постоянных таблиц (справочников, документов), их нельзя открыть через Все функции или Объекты конфигурации. Это создает сложности при:
- 🐛 Поиске ошибок в запросах (например, когда результат не совпадает с ожидаемым).
- ⚡ Оптимизации производительности (анализ, какие данные попадают во временные таблицы).
- 🔍 Отладке интеграционных решений (проверка структуры передаваемых данных).
⚠️ Внимание: Временные таблицы в 1С не являются аналогом временных таблиц в SQL Server или PostgreSQL. Они управляются платформой и не имеют прямого представления в СУБД (за исключением режима Управляемое приложение + файловый вариант, где используются физические файлы).
Метод 1: Просмотр через отладчик (для программистов)
Самый надежный способ увидеть содержимое временной таблицы — использовать встроенный отладчик 1С:Предприятие. Этот метод подходит для разработчиков, так как требует доступа к конфигуратору и умения работать с кодом.
Алгоритм действий:
- Откройте конфигуратор в режиме
1С:Предприятие(или переключитесь на него из пользовательского режима). - Установите точку останова на строке кода, которая следует сразу после заполнения временной таблицы. Например:
Запрос.Выполнить();ТочкаОстанова(); // Здесь установите break-point
- Запустите код в режиме отладки (
F5или кнопкаОтладка). - Когда выполнение остановится, откройте окно
Вычисляемые выражения(Ctrl+Alt+W) и введите имя временной таблицы (например,РезультатыЗапроса). - Нажмите
Вычислить— платформа отобразит содержимое таблицы в виде коллекции.
Преимущества метода:
- ✅ Работает во всех версиях платформы (8.2, 8.3).
- ✅ Позволяет просматривать данные до и после модификаций.
- ✅ Поддерживает сложные структуры (вложенные таблицы, объекты).
⚠️ Внимание: В режимеТонкий клиентилиВеб-клиентотладчик может не показывать полную структуру временных таблиц из-за ограничений передачи данных между сервером и клиентом. В таких случаях используйтеТолстый клиент.
Убедиться, что код выполняется в режиме "1С:Предприятие" (не в конфигураторе)|Поставить точку останова после создания временной таблицы|Запустить отладку (F5)|Открыть окно "Вычисляемые выражения" (Ctrl+Alt+W)|Ввести имя переменной с таблицей и нажать "Вычислить"-->
Метод 2: Консоль запросов (для управляемых форм)
Если вы работаете в управляемом приложении (тонкий клиент, веб-клиент), где отладчик ограничен, на помощь придет Консоль запросов. Этот инструмент входит в стандартную поставку 1С и позволяет выполнять произвольные запросы, включая обращение к временным таблицам.
Инструкция:
- Откройте консоль запросов через меню
Все функции → Стандартные → Консоль запросов(или добавьте ее в панели инструментов). - В поле запроса введите команду для выборки данных из временной таблицы. Например:
ВЫБРАТЬ *ИЗ ВременноеХранилище.ВашаТаблица КАК Т
где
ВашаТаблица— имя временной таблицы, объявленной в коде. - Нажмите
Выполнить(F5). Результат отобразится в нижней части окна.
Особенности метода:
- 🔹 Работает только для таблиц, созданных через
ВЫБРАТЬ ... ПОМЕСТИТЬилиВременноеХранилище. - 🔹 Не показывает таблицы, созданные через
Новый ТаблицаЗначений(они хранятся в памяти, а не в СУБД). - 🔹 В файловом варианте может требовать прав администратора.
| Тип временной таблицы | Доступна в Консоли запросов? | Пример кода создания |
|---|---|---|
Таблица через ПОМЕСТИТЬ |
✅ Да | ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_Результаты |
| Временное хранилище | ✅ Да | ВременноеХранилище.Вставить("Ключ", Таблица) |
ТаблицаЗначений в памяти |
❌ Нет | ТЗ = Новый ТаблицаЗначений |
Таблица через REPLACE INTO (SQL) |
⚠️ Зависит от СУБД | ВыполнитьSQL("CREATE TEMP TABLE...") |
Если временная таблица не отображается в Консоли запросов, проверьте, что она создана в той же сессии. В управляемом приложении сессия может сбрасываться при переключении между окнами.
Метод 3: Внешние обработки для просмотра временных данных
Для пользователей, которые не хотят разбираться в отладчике или консоли запросов, существуют готовые внешние обработки. Они позволяют просматривать временные таблицы в удобном интерфейсе, подобном Списку значений или Табличному документу.
Популярные решения:
- 📌 "Универсальный просмотрщик временных таблиц" (доступен на Infostart и 1С-Галлерея). Поддерживает фильтрацию, сортировку и экспорт в
Excel. - 📌 "Debugger for 1C" — расширение с расширенными возможностями отладки, включая просмотр временных данных.
- 📌 "Таблица значений в JSON" — обработка для конвертации временных таблиц в читаемый формат.
Как использовать:
- Скачайте обработку с проверенного источника (например, Infostart.ru).
- Откройте ее в 1С через
Файл → Открыть. - В форме обработки укажите имя переменной с временной таблицей (например,
ТоварыОстатки). - Нажмите
Показать— данные отобразятся в табличном виде.
⚠️ Внимание: Внешние обработки могут содержать вредоносный код. Перед использованием проверьте их на тестовой базе или в песочнице. Особенно осторожно скачивайте файлы с форумов и непроверенных источников.
Отладчик (Ctrl+Alt+W)|Консоль запросов|Внешние обработки|SQL-запросы к СУБД|Не просматриваю-->
Метод 4: Прямой доступ через SQL (для опытных пользователей)
Если вы работаете с 1С на SQL-сервере (например, Microsoft SQL Server, PostgreSQL), можно подключиться к базе напрямую и выполнить запрос к временным таблицам. Этот метод требует знаний SQL и прав доступа к серверу.
Алгоритм:
- Узнайте имя временной таблицы в 1С. Оно обычно начинается с префикса:
#ТМП_— для таблиц, созданных черезПОМЕСТИТЬ.v81c_— для системных временных таблиц платформы.
- Подключитесь к базе данных через SQL Server Management Studio, pgAdmin или другой клиент.
- Выполните запрос:
SELECT * FROM tempdb..#ТМП_ВашаТаблицаили (для PostgreSQL):
SELECT * FROM pg_temp.v81c_вашатаблица; - 🔴 Не работает в файловом варианте 1С (нет SQL-сервера).
- 🔴 Временные таблицы видны только в текущей сессии. Если подключиться под другим пользователем, их не будет.
- 🔴 Структура таблиц может меняться между версиями платформы.
- 📊 Сравнения данных до и после изменений.
- 🔍 Передачи коллегам для совместной отладки.
- 📈 Построения графиков или диаграмм в внешних инструментах.
- 📄
JSON:ЗаписьJSON.Записать(ПутьКФайлу, ТЗ). - 📄
CSV: использоватьЗаписьТекстас разделителями. - 📄
HTML: сгенерировать таблицу черезТабличныйДокумент. - 🔹 Всегда проверяйте, что временная таблица существует перед обращением:
Если НЕ ЗначениеЗаполнено(ВременноеХранилище.Получить("Ключ")) Тогда// Обработка ошибки
КонецЕсли;
- 🔹 Для больших таблиц (>10 000 строк) используйте постраничную выборку, чтобы избежать переполнения памяти.
- 🔹 В управляемых формах временные таблицы могут не сохраняться между постбэками. Используйте
ХранилищеЗначения. - Через
Консоль запросов(если таблица создана черезПОМЕСТИТЬ). - С помощью внешних обработок, поддерживающих веб-клиент (например, "Debugger for 1C").
Ограничения метода:
Как найти имя временной таблицы в SQL-сервере?
В 1С временные таблицы часто имеют динамические имена, например #ТМП_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();
Альтернативные форматы:
Выгрузка в Excel удобна для визуального анализа, но требует установленного Microsoft Office. Для серверных решений лучше использовать JSON или CSV.
Типичные ошибки и как их избежать
При работе с временными таблицами разработчики часто сталкиваются с типичными проблемами. Вот самые распространенные из них и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Таблица не найдена (ВТ_Имя) |
Временная таблица создана в другой сессии или транзакции. | Проверьте область видимости таблицы. Используйте ВременноеХранилище для межсессионного доступа. |
Недостаточно прав для операции |
В SQL-сервере у пользователя нет прав на tempdb. |
Настройте права через SQL Server Management Studio или попросите администратора. |
| Данные не обновляются | Таблица кэширована или транзакция не зафиксирована. | Используйте ЗафиксироватьТранзакцию() или отключите кэширование. |
Ошибка при чтении временной таблицы |
Таблица удалена сборщиком мусора. | Увеличьте лимит памяти для сеанса в настройках сервера 1С. |
Дополнительные рекомендации:
FAQ: Частые вопросы о временных таблицах в 1С
Можно ли просматривать временные таблицы в веб-клиенте?
В веб-клиенте возможности отладки сильно ограничены. Просмотреть временные таблицы можно только:
Отладчик (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;
Почему временная таблица пустая, хотя запрос выполнился без ошибок?
Вероятные причины:
- Ошибка в условии отбора: проверьте секцию
ГДЕв запросе. - Транзакция не зафиксирована: если таблица заполняется в транзакции, которая потом откатывается (
ОтменитьТранзакцию()), данные не сохранятся. - Ограничения прав: в SQL-сервере у пользователя может не хватать прав на запись во временные таблицы.
- Очистка сборщиком мусора: если таблица создавалась давно и не использовалась, платформа могла ее удалить.
Для диагностики добавьте в код логирование:
Если ТЗ.Количество() = 0 Тогда
ЗаписатьЛог(УровеньЛога.Ошибка, "Временная таблица пуста! Запрос: " + ТекстЗапроса);
КонецЕсли;
Можно ли редактировать данные во временной таблице напрямую?
Да, но с оговорками:
- 🔹 В
ТаблицеЗначений(в памяти) — можно редактировать ячейки напрямую через код или отладчик. - 🔹 В таблицах на SQL-сервере (созданных через
ПОМЕСТИТЬ) — можно выполнитьUPDATEилиDELETEчерез SQL-запрос. - ⚠️ Изменения во временных таблицах не отражаются в исходных данных базы.
Пример редактирования через SQL:
UPDATE #ТМП_Товары SET Цена = Цена * 1.1 WHERE Склад = 'Основной';
Как передать временную таблицу между сеансами?
Временные таблицы по умолчанию существуют только в рамках одного сеанса. Чтобы передать данные между сеансами, используйте:
- 🔹
ВременноеХранилище:// Сеанс 1: сохранениеВременноеХранилище.Вставить("УникальныйКлюч", ТЗ);
// Сеанс 2: чтение
ТЗ = ВременноеХранилище.Получить("УникальныйКлюч");
- 🔹 Файловый обмен: выгрузите таблицу в
JSON/Excelи загрузите в другом сеансе. - 🔹 Общие реквизиты: если данные небольшие, можно сохранить их в реквизите справочника или документа.
Для SQL-сервера можно создать глобальную временную таблицу (с префиксом ##), но это требует прав администратора.