Как просмотреть содержимое временных таблиц в отладчике 1С на сервере?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Способ 1. Использование коллекции «Таблицы» Менеджера временных таблиц

Начиная с определенных релизов платформы 8.3, у объекта МенеджерВременныхТаблиц появилась встроенная коллекция Таблицы. Это самый быстрый способ увидеть данные без написания дополнительного кода, используя только окно Вычислить выражение (Shift+F9).

Проанализируем алгоритм действий:

  1. Установим точку останова в коде сразу после того, как запрос, создающий временную таблицу, был выполнен (после метода Запрос.Выполнить()).
  2. Вызовем окно вычисления выражения и введем следующую конструкцию: Запрос.МенеджерВременныхТаблиц.Таблицы
  3. Нажмем клавишу F2 или кнопку «Показать значения в отдельном окне». Перед нами откроется список всех временных таблиц, которые в данный момент хранятся в менеджере.
  4. Каждая таблица имеет свой индекс (начиная с 0). Чтобы получить содержимое конкретной таблицы, используем метод ПолучитьДанные(). Например, для первой таблицы в списке выражение будет выглядеть так: Запрос.МенеджерВременныхТаблиц.Таблицы[0].ПолучитьДанные().Выгрузить()

Важный момент: если вы работаете в старых версиях платформы или в режиме совместимости с 8.2, коллекция Таблицы может быть недоступна. В этом случае перейдем к следующим вариантам.

Способ 2. Создание вспомогательного запроса в отладчике

Если нам нужно посмотреть содержимое таблицы по её имени, и мы находимся в контексте сервера, мы можем программно «подключиться» к существующему менеджеру временных таблиц. Разберем, как это сделать прямо в окне вычисления выражений.

Предположим, у нас есть объект МВТ (Менеджер Временных Таблиц), в котором должна лежать таблица с именем ВТ_Данные. Напишем и вычислим следующее выражение:


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

После вычисления переменная Результат будет содержать ТаблицаЗначений. Хотя на сервере мы не можем её визуализировать через Выбрать(), мы можем просмотреть её структуру и количество строк в окне отладки, или использовать приемы сериализации, описанные ниже.

Способ 3. Сериализация в XML или JSON для визуального анализа

Когда данных в таблице много, смотреть их через дерево свойств в отладчике неудобно. Выясним, как быстро преобразовать данные в текстовый вид, который можно скопировать в любой текстовый редактор (Notepad++, VS Code) и проанализировать.

Рассмотрим пример использования СериализаторXDTO для получения XML-представления таблицы:


ТЗ = Запрос.МенеджерВременныхТаблиц.Таблицы[0].ПолучитьДанные().Выгрузить();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТЗ);
РезультатСтрокой = ЗаписьXML.Закрыть();

Полученную переменную РезультатСтрокой можно скопировать из отладчика. Если таблица очень большая, и отладчик обрезает строку, можно воспользоваться методом ЗаписьJSON, так как JSON обычно компактнее XML.

Способ 4. Использование функций типовых конфигураций

Если вы ведете разработку в современных типовых конфигурациях (например, УТ 11, ERP 2, КА 2), разработчики фирмы 1С уже предусмотрели вспомогательные инструменты. В общем модуле ОбщегоНазначения (или специализированных модулях отладки) часто присутствуют экспортные функции для вывода таблиц.

Например, проанализируем функцию ПоказатьВременнуюТаблицу. В окне вычисления выражений вы можете написать:

ОбщегоНазначенияУТ.ПоказатьВременнуюТаблицу(МенеджерВТ, "ИмяВременнойТаблицы")

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

Способ 5. Программный вывод в Журнал регистрации или файл

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


ТекстЗапроса = "ВЫБРАТЬ * ИЗ ВТ_Данные";
ЗапросОтладки = Новый Запрос(ТекстЗапроса);
ЗапросОтладки.МенеджерВременныхТаблиц = МВТ;
ТаблицаДляАнализа = ЗапросОтладки.Выполнить().Выгрузить();

// Запись в файл на сервере
ТаблицаДляАнализа.Записать("C:\Debug\vt_dump.txt");

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

Использование метода Записать() для таблицы значений создаст файл во внутреннем формате 1С, который потом можно открыть в любом приложении 1С через Файл -> Открыть и увидеть полноценную таблицу с данными.

Важные рекомендации при отладке

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

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

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

← На главную