Как отследить, кто и какие внешние отчеты использует в 1С?

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

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

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

Решение 1: Простое протоколирование в конфигурации

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

Вариант А: Фиксация выбора из списка

Самый быстрый способ — добавить код в форму списка справочника внешних отчетов. Мы можем отслеживать событие выбора элемента пользователем.

Порядок действий:

  1. Создайте регистр сведений (например, ПротоколИспользованияВнешнихОбъектов) с измерениями: Пользователь (тип СправочникСсылка.Пользователи), ВнешнийОтчет (тип СправочникСсылка.ВнешниеОтчетыИОбработки) и ресурсом ДатаПоследнегоИспользования (тип Дата).
  2. Откройте форму списка справочника ВнешниеОтчетыИОбработки.
  3. Найдите обработчик события СписокВыбор и добавьте в него код для записи в регистр.

Пример кода:


Процедура СправочникСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

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

КонецПроцедуры

Плюсы: Просто и быстро реализуется.

Минусы: Неточность. Событие сработает, даже если пользователь выбрал отчет, но передумал и не стал его открывать или формировать. Не отслеживаются программные вызовы.

Вариант Б: Фиксация открытия формы или формирования отчета

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

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

Решение 2: Пакетная модификация файлов внешних отчетов

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

Порядок действий:

  1. Выгрузите все элементы справочника ВнешниеОтчетыИОбработки во внешние файлы (.epf) на диск.
  2. Используйте специальные утилиты для разборки каждого .epf файла на составные части: тексты модулей, макеты, формы.
  3. Напишите скрипт (например, на OneScript, Python или PowerShell), который будет находить модуль объекта или модуль формы в разобранных файлах и добавлять в начало или в ключевую процедуру (например, ПриОткрытии) строку кода для логирования.
  4. Тем же скриптом соберите файлы обратно в формат .epf.
  5. Напишите обработку для загрузки измененных файлов обратно в справочник 1С.

Плюсы: Позволяет добиться высокой точности сбора статистики, так как код встраивается непосредственно в логику отчета.

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

Решение 3: Низкоуровневый мониторинг через Технологический журнал (ТЖ)

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

Порядок действий:

  1. Найдите внутреннее имя таблицы справочника в SQL Server (например, _Reference123).
  2. Настройте файл конфигурации ТЖ (logcfg.xml) для отслеживания событий DBMSSQL.
  3. Установите фильтр, чтобы в лог попадали только запросы, содержащие имя таблицы вашего справочника.

Пример настройки logcfg.xml:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\logs\1c" history="4">
        <event>
            <eq property="Name" value="DBMSSQL"/>
            <like property="Sql" value="%_Reference123%"/> <!-- Укажите имя вашей таблицы -->
        </event>
        <property name="all"/>
    </log>
</config>

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

Минусы: Логи ТЖ имеют большой объем и сложны для анализа. Потребуются специальные инструменты для парсинга логов. Сопоставить запись в логе с конкретным пользователем и его действием — нетривиальная задача.

Решение 4: Организационный подход

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

Порядок действий:

  1. Создайте в справочнике группу "Архив" и переместите туда все внешние отчеты, сделав ее недоступной для пользователей.
  2. Оповестите всех пользователей, что для получения нужного отчета им необходимо обратиться в IT-отдел с заявкой.
  3. При поступлении заявки вы выясняете у пользователя, для чего ему нужен отчет, как часто он его использует, и после этого возвращаете отчет в рабочую папку. Каждую заявку вы фиксируете.

Через некоторое время (например, месяц) у вас будет точный список действительно необходимых отчетов. Все, что осталось в архиве, — кандидаты на удаление.

Плюсы: Максимальная точность. Позволяет не только собрать статистику, но и пообщаться с пользователями и выявить их потребности.

Минусы: Может вызвать временные неудобства и негатив со стороны пользователей. Требует высокой оперативности от IT-службы.

В итоге, выбор метода зависит от ваших ресурсов и требуемой точности. Можно начать с простого логирования выбора из списка (Решение 1), чтобы получить общую картину, а затем применить организационный подход (Решение 4) для финальной "зачистки" и наведения идеального порядка.

← На главную