Как определить, из каких регистров и таблиц собирается отчет в 1С?

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

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

Анализ схемы компоновки данных (СКД)

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

  1. Откроем отчет в Конфигураторе.
  2. Перейдем на вкладку Основные данные и откроем Основную схему компоновки данных.
  3. В окне конструктора СКД выберем вкладку Наборы данных.
  4. Здесь мы увидим один или несколько наборов данных. Если это НаборДанныхЗапрос, то в правой части окна будет отображен текст запроса.

Проанализируем текст запроса. Нам нужно искать конструкции, начинающиеся с имен метаданных, например: РегистрНакопления.Продажи.Обороты или РегистрСведений.ЦеныНоменклатуры.СрезПоследних. Именно эти таблицы являются первичными источниками информации для вашего отчета. Если запрос сложный и содержит много вложенных запросов и объединений, рекомендуем воспользоваться кнопкой Конструктор запроса, где на закладке Таблицы и поля наглядно представлены все задействованные объекты базы данных.

Системный поиск ссылок в Конфигураторе

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

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

Использование глобального поиска (Ctrl+Shift+F)

Глобальный поиск — это мощный инструмент, который позволяет искать вхождения текста во всей конфигурации, включая тексты запросов в СКД, модули объектов и справочную информацию. Для поиска регистров в отчете выполним следующие действия:

  1. Нажмем Ctrl+Shift+F.
  2. В строке поиска введем имя регистра, например ВзаиморасчетыСКлиентами.
  3. В области поиска укажем Конфигурация.
  4. Проанализируем результаты. Нас интересуют строки вида РегистрНакопления.ВзаиморасчетыСКлиентами, встречающиеся в объектах типа Отчет.

Программный анализ схемы компоновки

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


// Пример получения текста запроса из СКД отчета
ОтчетОбъект = Отчеты.Продажи.Создать();
Схема = ОтчетОбъект.СхемаКомпоновкиДанных;

Для Каждого НаборДанных Из Схема.НаборыДанных Цикл
    Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
        Сообщить("Набор данных: " + НаборДанных.Имя);
        Сообщить("Текст запроса: ");
        Сообщить(НаборДанных.Запрос);
    КонецЕсли;
КонецЦикла;

После получения текста запроса можно использовать парсер запросов или простую проверку на вхождение подстрок, чтобы автоматически составить список всех используемых регистров РегистрНакопления., РегистрБухгалтерии. и т.д.

Использование внешних инструментов: Консоль СКД

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

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

Отладка и замер производительности

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

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

Важный момент: использование инструмента Замер производительности также может быть полезным. В результатах замера мы увидим, на каких строках кода программа проводит больше всего времени. Часто это именно те строки, где происходит обращение к виртуальным таблицам регистров (обороты, остатки).

Технологический журнал и SQL-трассировка

Для самых сложных случаев, когда исходный код закрыт или запрос генерируется динамически настолько сложно, что отладка не помогает, мы можем обратиться к Технологическому журналу (ТЖ). Настроив ТЖ на событие DBMSSQL, мы перехватим реальный запрос, который 1С отправляет на SQL-сервер.

В тексте SQL-запроса вы увидите физические имена таблиц, например _AccumReg123. Чтобы сопоставить это имя с понятным названием регистра в 1С, используйте функцию ПолучитьСтруктуруХраненияБазыДанных(). Это "тяжелая артиллерия" разработчика, позволяющая на 100% точно определить источник данных в любой ситуации.

Подсистема «Варианты отчетов» в БСП

Проанализируем еще одну возможность современных систем на базе БСП. Если вы работаете в пользовательском режиме (1С:Предприятие), загляните в справочник Варианты отчетов. Часто разработчики заполняют поле Описание или добавляют теги (ключевые слова), где прямо указано: "Отчет строится по данным регистра Продажи". Это самый быстрый, хотя и не всегда доступный (зависит от добросовестности разработчика) способ получить информацию.

Подводя итог, можно сказать, что системного метода "одной кнопки", который бы сразу выдал список всех регистров для любого отчета, в 1С не существует. Однако комбинация анализа СКД, использования Консоли запросов и Глобального поиска позволяет решить эту задачу быстро и эффективно в 99% случаев.

← На главную