Как в консоли СКД просмотреть временные таблицы и обеспечить работу расширений языка запросов?

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

Разработка сложных отчетов на базе Системы компоновки данных (СКД) часто сопряжена с использованием расширений языка запросов — тех самых конструкций в фигурных скобках {}, которые позволяют гибко управлять отборами, параметрами и полями. Однако стандартные инструменты не всегда позволяют наглядно увидеть, что происходит внутри временных таблиц (ВТ) в процессе компоновки. В этой статье мы подробно разберем, как эффективно отлаживать такие запросы, какие инструменты использовать и на какие технические нюансы обратить внимание.

Проблема игнорирования фигурных скобок в консолях запросов

Типичная ситуация: разработчик копирует запрос из схемы СКД в обычную консоль запросов, чтобы проверить содержимое временных таблиц. Если в запросе присутствуют директивы компоновки, такие как {ГДЕ ...} или {ВЫБРАТЬ ...}, консоль может просто проигнорировать установленные пользователем отборы. Это происходит потому, что обычный механизм выполнения запроса не умеет интерпретировать метаданные СКД. Рассмотрим пример запроса, который может вести себя некорректно:


ВЫБРАТЬ
    КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК КоличествоКонтрагентов
ИЗ
    Справочник.Контрагенты КАК Контрагенты
{ГДЕ
    Контрагенты.Ссылка.* КАК Контрагент}

Проанализируем ситуацию: если в настройках компоновки мы зададим конкретный ИНН, ожидая получить одну запись, некорректно работающая консоль выдаст общее количество записей в справочнике (например, 3000), полностью проигнорировав условие внутри {}. Это критично при работе с временными таблицами, так как некорректный объем данных в промежуточных расчетах искажает итоговый результат.

Решение через «Инструменты разработчика» (ИР)

Одним из наиболее мощных инструментов для решения данной задачи является пакет «Инструменты разработчика». Выясним, как правильно настроить консоль для корректной работы:

  1. Использование режима «Построитель»: Как показывает практика, при возникновении проблем с типом запроса «Компоновка», стоит переключить тип запроса в консоли на Построитель. Механизм построителя отчета (предшественник СКД) более прямолинейно обрабатывает фигурные скобки. После переключения на закладку «Построитель» и заполнения отборов, консоль корректно модифицирует текст запроса и выводит правильный результат, позволяя при этом просматривать временные таблицы.
  2. Консоль компоновки данных: В составе ИР есть отдельная «Консоль компоновки данных». Мы рекомендуем использовать именно её для анализа исполнения схемы. Из неё можно вызвать исполняемый запрос, который будет содержать уже все подставленные параметры и развернутые условия.
  3. Обновление версии: Важно убедиться, что вы используете актуальную версию инструментов. В версиях выше 5.97 многие ошибки, связанные с игнорированием отборов в режиме компоновки, были исправлены.

Альтернативные специализированные консоли

Существуют инструменты, специально созданные для глубокого анализа СКД, которые «из коробки» умеют работать с временными таблицами:

Консоль СКД от С. Болькунова. Это профессиональное решение, которое перехватывает процесс компоновки. Рассмотрим подробнее, как она работает:

Расширенная консоль с ИТС. Стандартная консоль от фирмы 1С часто дорабатывается сообществом. В модифицированных версиях реализована возможность выгрузки временных таблиц в ТаблицаЗначений. Для этого в коде обработки обычно используется метод ПолучитьТекст() менеджера временных таблиц с последующим выполнением каждого пакета запроса по отдельности.

Технический разбор: почему ВТ сложно увидеть?

Разберем внутреннее устройство процесса. Когда выполняется запрос в СКД, объект КомпоновщикМакетаКомпоновкиДанных генерирует исполняемый код. Временные таблицы существуют только в рамках сеанса выполнения конкретного менеджера. Чтобы их просмотреть программно, необходимо выполнить следующие действия в коде (например, при отладке в модуле отчета):


// Пример перехвата данных в отладчике
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

// Здесь должен быть текст запроса, полученный из макета компоновки
Запрос.Текст = "ВЫБРАТЬ ... ПОМЕСТИТЬ ВТ_Данные ..."; 
Запрос.Выполнить();

// Чтобы посмотреть результат ВТ:
Запрос.Текст = "ВЫБРАТЬ * ИЗ ВТ_Данные";
ТЗ = Запрос.Выполнить().Выгрузить();

Именно этот алгоритм автоматизируют продвинутые консоли. Основная сложность заключается в том, что СКД может динамически менять текст запроса в зависимости от настроек пользователя (свойство Автозаполнение). Если автозаполнение включено, система сама добавляет поля в секции ВЫБРАТЬ и ГДЕ, что может привести к непредсказуемому поведению в обычных консолях.

Практические советы по диагностике

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

Подведем итог: для корректной работы с временными таблицами и расширениями языка {} лучше всего подходят специализированные консоли СКД (например, консоль Болькунова или актуальные версии ИР). Использование режима Построитель в консоли запросов является отличным «быстрым» способом (workaround), если специализированный инструмент недоступен.

← На главную