При работе с незнакомой конфигурацией или при поддержке существующих систем часто возникает задача: понять, откуда именно отчет берет данные. Это необходимо для проверки корректности цифр, оптимизации запросов или внесения изменений в логику формирования. В этой статье мы подробно разберем системные и экспертные методы, которые помогут вам быстро найти все источники данных отчета.
В современных конфигурациях 1С большинство отчетов строится на Системе компоновки данных. Это первый и самый важный объект для изучения. Разберем по шагам, как найти нужную информацию в схеме:
НаборДанныхЗапрос, то в правой части окна будет отображен текст запроса.Проанализируем текст запроса. Нам нужно искать конструкции, начинающиеся с имен метаданных, например: РегистрНакопления.Продажи.Обороты или РегистрСведений.ЦеныНоменклатуры.СрезПоследних. Именно эти таблицы являются первичными источниками информации для вашего отчета. Если запрос сложный и содержит много вложенных запросов и объединений, рекомендуем воспользоваться кнопкой Конструктор запроса, где на закладке Таблицы и поля наглядно представлены все задействованные объекты базы данных.
Если нам нужно действовать от обратного — например, выяснить, в каких отчетах используется конкретный регистр, — мы можем применить встроенный механизм поиска ссылок. Рассмотрим этот процесс:
В дереве метаданных найдем интересующий нас объект (например, РегистрНакопления.Закупки). Нажмем на него правой кнопкой мыши и выберем пункт Поиск ссылок на объект. Программа проанализирует всю конфигурацию и выдаст список всех объектов, где упоминается данный регистр. В этом списке мы увидим и отчеты. Однако стоит учитывать, что если регистр используется внутри текста запроса СКД как строка, такой поиск может его не обнаружить, поэтому данный метод лучше комбинировать с глобальным поиском.
Глобальный поиск — это мощный инструмент, который позволяет искать вхождения текста во всей конфигурации, включая тексты запросов в СКД, модули объектов и справочную информацию. Для поиска регистров в отчете выполним следующие действия:
Ctrl+Shift+F.ВзаиморасчетыСКлиентами.РегистрНакопления.ВзаиморасчетыСКлиентами, встречающиеся в объектах типа Отчет.Иногда отчетов слишком много, и ручной анализ каждого занимает недопустимо много времени. В таких случаях мы можем написать небольшую обработку, которая программно переберет все наборы данных отчета и выведет список таблиц. Рассмотрим пример кода, который позволяет извлечь текст запроса из основной схемы компоновки отчета:
// Пример получения текста запроса из СКД отчета
ОтчетОбъект = Отчеты.Продажи.Создать();
Схема = ОтчетОбъект.СхемаКомпоновкиДанных;
Для Каждого НаборДанных Из Схема.НаборыДанных Цикл
Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
Сообщить("Набор данных: " + НаборДанных.Имя);
Сообщить("Текст запроса: ");
Сообщить(НаборДанных.Запрос);
КонецЕсли;
КонецЦикла;
После получения текста запроса можно использовать парсер запросов или простую проверку на вхождение подстрок, чтобы автоматически составить список всех используемых регистров РегистрНакопления., РегистрБухгалтерии. и т.д.
Разберем ситуацию, когда отчет имеет сложную структуру с множеством внешних наборов данных или вычисляемых полей. В этом случае чтение кода в конфигураторе становится затруднительным. Профессионалы используют Консоль системы компоновки данных. Это внешняя обработка (ее можно найти на диске ИТС или в составе инструментов разработчика), которая позволяет:
Это самый наглядный способ понять логику сбора данных, не запуская сам отчет в тяжеловесном режиме предприятия.
Если отчет старый (на обычных формах) или формируется полностью программно в модуле объекта (через ПостроительОтчета или заполнение таблиц значений), нам поможет Отладчик. Выясним причину появления тех или иных цифр следующим образом:
ПриКомпоновкеРезультата (для СКД) или Сформировать (для обычных отчетов).Важный момент: использование инструмента Замер производительности также может быть полезным. В результатах замера мы увидим, на каких строках кода программа проводит больше всего времени. Часто это именно те строки, где происходит обращение к виртуальным таблицам регистров (обороты, остатки).
Для самых сложных случаев, когда исходный код закрыт или запрос генерируется динамически настолько сложно, что отладка не помогает, мы можем обратиться к Технологическому журналу (ТЖ). Настроив ТЖ на событие DBMSSQL, мы перехватим реальный запрос, который 1С отправляет на SQL-сервер.
В тексте SQL-запроса вы увидите физические имена таблиц, например _AccumReg123. Чтобы сопоставить это имя с понятным названием регистра в 1С, используйте функцию ПолучитьСтруктуруХраненияБазыДанных(). Это "тяжелая артиллерия" разработчика, позволяющая на 100% точно определить источник данных в любой ситуации.
Проанализируем еще одну возможность современных систем на базе БСП. Если вы работаете в пользовательском режиме (1С:Предприятие), загляните в справочник Варианты отчетов. Часто разработчики заполняют поле Описание или добавляют теги (ключевые слова), где прямо указано: "Отчет строится по данным регистра Продажи". Это самый быстрый, хотя и не всегда доступный (зависит от добросовестности разработчика) способ получить информацию.
Подводя итог, можно сказать, что системного метода "одной кнопки", который бы сразу выдал список всех регистров для любого отчета, в 1С не существует. Однако комбинация анализа СКД, использования Консоли запросов и Глобального поиска позволяет решить эту задачу быстро и эффективно в 99% случаев.