При разработке и сопровождении сложных конфигураций 1С (таких как ERP, ЗУП 3.1 или УТ 11) программисты часто сталкиваются с необходимостью анализа данных во временных таблицах. Типовые механизмы, особенно в кадровом учете или расчете себестоимости, активно используют МенеджерВременныхТаблиц (МВТ). Стандартный подход в отладчике — каждый раз прописывать путь к конкретной таблице по имени — отнимает много времени и сил. В этой статье мы подробно рассмотрим, как автоматизировать этот процесс и сделать отладку МВТ максимально быстрой.
Обычно для просмотра данных используется конструкция в табло отладчика:
МенеджерВременныхТаблиц.Таблицы.Найти("ИмяТаблицы").ПолучитьДанные().Выгрузить()
Разберем ситуацию: если в запросе используется 10–15 временных таблиц с длинными именами, программисту приходится постоянно копировать их названия из кода в табло. Это замедляет работу и увеличивает риск ошибок. Выясним, какие существуют альтернативы.
Один из самых эффективных способов — написать вспомогательную функцию, которую можно разместить в общем модуле или в расширении. Эта функция соберет все таблицы из МВТ и поместит их в одну Структура, где ключом будет имя таблицы, а значением — ТаблицаЗначений.
Рассмотрим пример кода для такой функции:
Функция ПолучитьВсеТаблицыМВТ(МенеджерВременныхТаблиц) Экспорт
РезультатСтруктура = Новый Структура;
Для Каждого ТекущаяТаблица Из МенеджерВременныхТаблиц.Таблицы Цикл
// Получаем данные конкретной таблицы
ТЗ = ТекущаяТаблица.ПолучитьДанные().Выгрузить();
КоличествоСтрок = ТЗ.Количество();
// Формируем имя ключа с подсказкой о количестве строк для удобства
ИмяКлюча = ТекущаяТаблица.ПолноеИмя + "_Строк_" + Формат(КоличествоСтрок, "ЧГ=0");
РезультатСтруктура.Вставить(ИмяКлюча, ТЗ);
КонецЦикла;
Возврат РезультатСтруктура;
КонецФункции
Теперь в отладчике достаточно написать один раз: ИмяМодуля.ПолучитьВсеТаблицыМВТ(МенеджерВременныхТаблиц). Развернув полученную структуру, мы сразу увидим список всех таблиц и их содержимое. Обратим внимание на полезный лайфхак: добавление количества строк в имя ключа позволяет мгновенно понять, какие таблицы пустые, а какие содержат данные, не открывая их.
Если нет возможности править код или добавлять расширения, проанализируем способ работы через индексы коллекции. Коллекция Таблицы менеджера временных таблиц позволяет обращаться к элементам по номеру.
Вместо поиска по имени используйте в табло выражения:
МенеджерВременныхТаблиц.Таблицы[0].ПолучитьДанные().Выгрузить()МенеджерВременныхТаблиц.Таблицы[1].ПолучитьДанные().Выгрузить()Этот способ гораздо быстрее, так как для просмотра следующей таблицы достаточно просто поменять одну цифру в табло, не занимаясь копипастом имен. Однако стоит помнить, что порядок таблиц определяется порядком их создания в запросе.
В современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) уже существуют готовые инструменты для упрощения жизни разработчика. Посмотрим на примеры встроенных функций в конфигурациях УТ 11, ERP 2 или КА 2:
В общем модуле ОбщегоНазначенияУТ (или аналогичных модулях для отладки) часто присутствуют методы:
ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, "ИмяТаблицы") — открывает форму с данными таблицы.ЗапросВыполнитьВыгрузить(Запрос) — выполняет запрос и сразу выгружает результат.Если вы работаете в среде EDT (Enterprise Development Tools), выясним преимущество: там предусмотрено специальное окно для просмотра временных таблиц в режиме реального времени, что практически избавляет от необходимости ручного написания кода в табло.
Начиная с версии платформы 8.3.8, у объекта Запрос появился мощный метод ВыполнитьПакетСПромежуточнымиДанными(). Рассмотрим его работу:
Этот метод возвращает массив результатов. Каждый элемент массива соответствует либо результату выборки, либо содержимому временной таблицы. Если вы отлаживаете конкретный запрос, в табло можно написать:
Запрос.ВыполнитьПакетСПромежуточнымиДанными()
Вы получите массив со всеми данными «в одном флаконе». Это особенно удобно при работе с длинными пакетами запросов, где данные последовательно преобразуются из одной таблицы в другую.
Подведем итог и выберем оптимальный путь:
Отладка или Тестирование.Использование этих техник позволяет программисту 1С сфокусироваться на логике данных, а не на рутинных операциях в интерфейсе отладчика.