Как визуализировать структуру и связи сложного запроса в 1С

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

При сопровождении и доработке типовых конфигураций 1С разработчики регулярно сталкиваются с объемными пакетными запросами на десятки подзапросов и тысячи строк текста. Читать такой код линейно крайне трудоемко: сложно отследить цепочки передачи данных между временными таблицами, порядок наложения левых и внутренних соединений, а также структуру условий. Разберем практические способы решения этой задачи — от штатных средств платформы до программного построения графов зависимостей.

Способ 1. Визуализация соединений через штатный конструктор запроса

Штатный конструктор запросов платформы 1С предоставляет встроенные визуальные средства для отображения связей между источниками данных в рамках одного подзапроса.

Разберем по шагам, как получить наглядную схему связей:

  1. Откроем текст запроса в управляемом приложении (в пользовательском режиме или в расширенной консоли запросов).
  2. Нажмем правой кнопкой мыши в поле редактирования запроса и выберем пункт Конструктор запроса.
  3. Перейдем на вкладку Связи (доступна, если в запросе задействовано две или более таблицы).
  4. Платформа отобразит графическую панель со списком выбранных таблиц и соединительными линиями, отражающими типы связей (полное, левое или внутреннее соединение), а также условия связи по полям.

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

Способ 2. Структурный анализ через режим «Дерево запроса» в инструментах разработчика

Для детального разбора сложных пакетов запросов активно применяется режим структурного редактирования в специализированных консолях (например, в подсистеме «Инструменты разработчика»).

Рассмотрим, как работает этот подход:

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

Способ 3. Программный разбор структуры через объект «СхемаЗапроса»

Если требуется построить полноценную сквозную карту движения данных (Data Lineage) между всеми временными таблицами пакета, оптимально использовать встроенный объект платформы СхемаЗапроса. Он выполняет синтаксический разбор текста запроса на объектную модель без необходимости применения сложных регулярных выражений.

Проанализируем пример кода на языке 1С, который обходит пакет запросов и собирает граф зависимостей (какой подзапрос создает таблицу и какие подзапросы используют ее в качестве источника):


Схема = Новый СхемаЗапроса;
Схема.УстановитьТекстЗапроса(ТекстЗапросаДляАнализа);

// Обходим все подзапросы пакета
Для НомерПодзапроса = 0 По Схема.ПакетЗапросов.Количество() - 1 Цикл
    ЭлементПакета = Схема.ПакетЗапросов[НомерПодзапроса];
    
    Если ТипЗнч(ЭлементПакета) = Тип("ЗапросВыбораСхемыЗапроса") Тогда
        // Проверяем, помещается ли результат во временную таблицу
        ИмяВременнойТаблицы = ЭлементПакета.ТаблицаДляПомещения;
        Если ЗначениеЗаполнено(ИмяВременнойТаблицы) Тогда
            Сообщить("Подзапрос №" + НомерПодзапроса + " создает временную таблицу: " + ИмяВременнойТаблицы);
        КонецЕсли;
        
        // Анализируем используемые источники данных
        Для Каждого ОператорВыбора Из ЭлементПакета.Операторы Цикл
            Для Каждого Источник Из ОператорВыбора.Источники Цикл
                Сообщить("   Использует источник: " + Источник.Источник.Имя);
            КонецЦикла;
        КонецЦикла;
        
    ИначеЕсли ТипЗнч(ЭлементПакета) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
        Сообщить("Подзапрос №" + НомерПодзапроса + " уничтожает таблицу: " + ЭлементПакета.ИмяТаблицы);
    КонецЕсли;
КонецЦикла;

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

  1. ПакетЗапросов — упорядоченный список всех подзапросов пакета.
  2. Операторы — секции выборки, включая объединения (ОБЪЕДИНИТЬ ВСЕ).
  3. Источники и Соединения — физические и виртуальные таблицы, типы соединений и предикаты условий связей.
  4. Колонки, Группировка, УсловияОтбора — детальный состав полей и агрегатных выражений.

Способ 4. Построение интерактивных графических схем через «ПолеHTMLДокумента»

Полученные в результате обхода СхемаЗапроса данные об узлах (таблицы) и связях (соединения, потоки данных) можно визуализировать непосредственно в интерфейсе управляемой формы 1С. Для этого используется элемент формы Поле HTML документа в связке с JavaScript-библиотеками визуализации графов или разметкой диаграмм.

Рассмотрим порядок реализации:

  1. Формируется структура данных в формате JSON или текстовая разметка графа (например, в формате Mermaid или PlantUML).
  2. В разметке узлы графа соответствуют физическим объектам конфигурации и создаваемым временным таблицам, а направленные стрелки — потокам передачи данных от одного подзапроса к другому.
  3. Сформированный HTML/JS-код загружается в ПолеHTMLДокумента на форме обработки, предоставляя интерактивную масштабируемую диаграмму связей.

Способ 5. Навигация по запросу в среде 1C:Enterprise Development Tools (EDT)

При разработке в среде 1C:EDT доступен специализированный инструментарий для ориентации в больших текстах запросов:

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

Сравнение инструментов анализа

Выбор конкретного инструмента зависит от решаемой задачи:

  1. Для быстрого понимания связей между 2–4 таблицами внутри одной выборки достаточно открыть Конструктор запроса на закладке связей.
  2. Для отладки и проверки промежуточных данных по шагам оптимально использовать режим Дерево запроса в консолях запросов.
  3. Для создания постоянных автоматических схем движения данных и документации сложных алгоритмов подходит программный разбор через СхемаЗапроса с экспортом графа в визуальные форматы.
← На главную