Как настроить мониторинг формирования отчетов в 1С: кто, когда и какой отчет открывал

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

В процессе администрирования и оптимизации работы крупных баз данных 1С часто возникает задача: понять, какие отчеты наиболее востребованы пользователями, а какие — создают избыточную нагрузку на систему. Стандартный Журнал регистрации не всегда предоставляет детальную информацию о факте формирования отчета, особенно если речь идет о сложных схемах компоновки данных (СКД). В этой статье мы подробно разберем, как реализовать «отчет по отчетам» и автоматизировать сбор статистики использования метаданных.

Метод 1. Создание регистра сведений для хранения истории

Первым делом нам необходимо подготовить место, где будут храниться данные. Простая запись в текстовый лог неудобна для последующего анализа, поэтому мы создадим Регистр сведений (например, ЛогФормированияОтчетов).

Разберем структуру регистра:

  1. Период (Дата и время) — стандартное измерение для фиксации момента события.
  2. Пользователь (СправочникСсылка.Пользователи) — кто именно запустил отчет.
  3. Отчет (Строка или СправочникСсылка.ИдентификаторыОбъектовМетаданных) — имя или ссылка на отчет.
  4. ВариантОтчета (Строка) — если используются различные варианты в рамках одного отчета.
  5. Параметры (ХранилищеЗначения) — опционально, если нужно сохранять настройки, с которыми был запущен отчет.

Метод 2. Использование расширений для централизованного перехвата

Чтобы не модифицировать каждый отчет в системе (что трудозатратно и неудобно при обновлениях), мы воспользуемся механизмом Расширений конфигурации. Это наиболее современный и «чистый» подход.

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

Рассмотрим пример кода для расширения общего модуля ОтчетыСервер (или аналогичного в вашей конфигурации), где происходит вызов компоновки:


&После("СкомпоноватьРезультат")
Процедура Лог_СкомпоноватьРезультат(КонтекстОтчета, Результат)
    
    ИмяОтчета = КонтекстОтчета.ИмяОтчета;
    ТекущийПользователь = Пользователи.АвторизованныйПользователь();
    
    // Записываем данные в наш регистр сведений
    МенеджерЗаписи = РегистрыСведений.ЛогФормированияОтчетов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Период = ТекущаяДата();
    МенеджерЗаписи.Пользователь = ТекущийПользователь;
    МенеджерЗаписи.Отчет = ИмяОтчета;
    МенеджерЗаписи.Записать();
    
КонецПроцедуры

Метод 3. Перехват через событие СКД «ПриКомпоновкеРезультата»

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

Выясним причину, почему это эффективно: событие ПриКомпоновкеРезультата срабатывает непосредственно перед тем, как сервер 1С начнет выполнять запросы к базе данных. Это идеальное место для фиксации факта запуска.


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Логика записи в регистр
    ЗаписьЛога = РегистрыСведений.ЛогФормированияОтчетов.СоздатьМенеджерЗаписи();
    ЗаписьЛога.Период = ТекущаяДата();
    ЗаписьЛога.Отчет = ЭтотОбъект.Метаданные().Имя;
    ЗаписьЛога.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    ЗаписьЛога.Записать();
    
КонецПроцедуры

Метод 4. Мониторинг через механизмы БСП (статистика использования)

Если вы работаете в современной конфигурации (например, ERP 2.5, КА 2.5 или БП 3.0), то функционал логирования уже частично встроен в БСП. Подсистема «Варианты отчетов» автоматически собирает статистику посещений.

Рассмотрим, как найти эти данные:

  1. Перейдите в раздел Администрирование — Обслуживание.
  2. Найдите пункт Отчеты и формы или Анализ работы пользователей.
  3. В типовых решениях часто доступен отчет «Использование вариантов отчетов», который строится на основе регистра сведений ИспользованиеСрезов или внутренних таблиц метрик производительности.

Важный нюанс: Статистика БСП часто фиксирует только факт открытия формы отчета, но не всегда — факт нажатия кнопки «Сформировать». Если вам нужна точность до исполнения запроса, лучше использовать комбинацию расширения и ручного логирования.

Метод 5. Работа с обычными формами

Для конфигураций на обычных формах (например, УПП 1.3 или старые редакции УТ 10.3) событие ОбработкаПолученияФормы или расширения могут работать иначе. В этом случае мы рекомендуем использовать подписку на события. Однако, как было замечено в обсуждении, для ОтчетМенеджер доступно мало событий.

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

Профессиональный подход: Технологический журнал

Если стоит задача собрать данные за прошедший период или без внесения изменений в конфигурацию, проанализируем возможности Технологического журнала (ТЖ). Настроив сбор событий SCOM и CALL, можно отследить обращения к объектам метаданных типа Report.

Пример настройки logcfg.xml для мониторинга отчетов:


<log location="C:\LOGS\Reports" history="72">
    <event>
        <eq property="Name" value="SCOM"/>
        <like property="Context" value="Report.*"/>
    </event>
    <property name="All"/>
</log>

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

Итоги и рекомендации

Мы рассмотрели несколько способов решения задачи. Выбор зависит от вашей инфраструктуры:

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

← На главную