Как упростить просмотр содержимого Менеджера Временных Таблиц при отладке?

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

При разработке и сопровождении сложных конфигураций 1С (таких как ERP, ЗУП 3.1 или УТ 11) программисты часто сталкиваются с необходимостью анализа данных во временных таблицах. Типовые механизмы, особенно в кадровом учете или расчете себестоимости, активно используют МенеджерВременныхТаблиц (МВТ). Стандартный подход в отладчике — каждый раз прописывать путь к конкретной таблице по имени — отнимает много времени и сил. В этой статье мы подробно рассмотрим, как автоматизировать этот процесс и сделать отладку МВТ максимально быстрой.

Проблема стандартного подхода

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

МенеджерВременныхТаблиц.Таблицы.Найти("ИмяТаблицы").ПолучитьДанные().Выгрузить()

Разберем ситуацию: если в запросе используется 10–15 временных таблиц с длинными именами, программисту приходится постоянно копировать их названия из кода в табло. Это замедляет работу и увеличивает риск ошибок. Выясним, какие существуют альтернативы.

Решение 1: Выгрузка всех таблиц в структуру (универсальный метод)

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

Рассмотрим пример кода для такой функции:


Функция ПолучитьВсеТаблицыМВТ(МенеджерВременныхТаблиц) Экспорт
    
    РезультатСтруктура = Новый Структура;
    
    Для Каждого ТекущаяТаблица Из МенеджерВременныхТаблиц.Таблицы Цикл
        
        // Получаем данные конкретной таблицы
        ТЗ = ТекущаяТаблица.ПолучитьДанные().Выгрузить();
        КоличествоСтрок = ТЗ.Количество();
        
        // Формируем имя ключа с подсказкой о количестве строк для удобства
        ИмяКлюча = ТекущаяТаблица.ПолноеИмя + "_Строк_" + Формат(КоличествоСтрок, "ЧГ=0");
        
        РезультатСтруктура.Вставить(ИмяКлюча, ТЗ);
        
    КонецЦикла; 
    
    Возврат РезультатСтруктура;
    
КонецФункции

Теперь в отладчике достаточно написать один раз: ИмяМодуля.ПолучитьВсеТаблицыМВТ(МенеджерВременныхТаблиц). Развернув полученную структуру, мы сразу увидим список всех таблиц и их содержимое. Обратим внимание на полезный лайфхак: добавление количества строк в имя ключа позволяет мгновенно понять, какие таблицы пустые, а какие содержат данные, не открывая их.

Решение 2: Использование индексов в табло

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

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

  1. МенеджерВременныхТаблиц.Таблицы[0].ПолучитьДанные().Выгрузить()
  2. МенеджерВременныхТаблиц.Таблицы[1].ПолучитьДанные().Выгрузить()

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

Решение 3: Штатные методы в типовых конфигурациях (БСП и УТ)

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

В общем модуле ОбщегоНазначенияУТ (или аналогичных модулях для отладки) часто присутствуют методы:

Если вы работаете в среде EDT (Enterprise Development Tools), выясним преимущество: там предусмотрено специальное окно для просмотра временных таблиц в режиме реального времени, что практически избавляет от необходимости ручного написания кода в табло.

Решение 4: Метод ВыполнитьПакетСПромежуточнымиДанными()

Начиная с версии платформы 8.3.8, у объекта Запрос появился мощный метод ВыполнитьПакетСПромежуточнымиДанными(). Рассмотрим его работу:

Этот метод возвращает массив результатов. Каждый элемент массива соответствует либо результату выборки, либо содержимому временной таблицы. Если вы отлаживаете конкретный запрос, в табло можно написать:

Запрос.ВыполнитьПакетСПромежуточнымиДанными()

Вы получите массив со всеми данными «в одном флаконе». Это особенно удобно при работе с длинными пакетами запросов, где данные последовательно преобразуются из одной таблицы в другую.

Рекомендации по выбору метода

Подведем итог и выберем оптимальный путь:

  1. Если вы часто занимаетесь разработкой в одной базе — создайте расширение с функцией из Решения №1. Это сэкономит часы времени в долгосрочной перспективе.
  2. Если нужно «здесь и сейчас» проверить пару таблиц — используйте доступ по индексу (Решение №2).
  3. Если вы отлаживаете пакетный запрос в месте его формирования — используйте метод платформы (Решение №4).
  4. Всегда проверяйте наличие методов для отладки в самой конфигурации (Решение №3). Вендоры часто оставляют «пасхалки» в виде общих модулей с префиксом Отладка или Тестирование.

Использование этих техник позволяет программисту 1С сфокусироваться на логике данных, а не на рутинных операциях в интерфейсе отладчика.

← На главную