Аудит отчетов#
Аудит отчетов предназначен для фиксации факта формирования отчета или печатной формы в стандартном потоке построения отчетов.
Аудит позволяет отследить:
какой отчет или печатная форма были сформированы;
какая версия отчета использовалась;
для какого объекта выполнялось построение;
какой пользователь выполнил построение;
когда была сформирована печатная форма;
с какого IP-адреса выполнено действие;
из какой выборки и операции выполнено построение, если эти данные доступны.
В процессе построения отчетов используются два механизма:
Rpt_ReportAudit— фиксирует факт формирования отчета или печатной формы;Rpt_EntityExec— ведет рабочий журнал выполнения построения с параметрами, состояниями, ошибками и ссылкой на результат.
В этой статье описан аудит Rpt_ReportAudit.
Форма открывается по пути:
Аудит > Аудит отчетов.
Интерфейс аудита отчетов#
Интерфейс аудита отчетов используется для просмотра фактов формирования отчетов и печатных форм.
Форма работает в режиме просмотра. Создание, редактирование и удаление записей через пользовательский интерфейс не предусмотрены.
Для отбора записей используется универсальный фильтр.
Список записей аудита#
В основной таблице отображаются записи о формировании отчетов и печатных форм.
Колонка |
Описание |
|---|---|
Имя отчета |
Наименование отчета или печатной формы |
Имя версии отчета |
Наименование версии отчета |
gid объекта |
Глобальный идентификатор объекта, для которого выполнялось построение |
Дата и время формирования печатной формы |
Дата и время построения отчета или печатной формы |
Пользователь |
Пользователь, выполнивший построение |
IP-адрес клиента |
IP-адрес клиента, с которого выполнено построение |
Флаг распечатан для документов |
Признак того, что документ был распечатан |
Имя выборки |
Имя выборки, из которой выполнено построение |
Имя операции |
Имя операции, через которую выполнено построение |
Настройка аудита#
Аудит отчетов доступен только в режиме просмотра.
Через интерфейс недоступны:
создание записей;
редактирование записей;
удаление записей.
Аудит построения отчетов включается на уровне конкретного отчета.
Основной флаг:
Rpt_Report.bEnableAudit— поле Вести аудит построения.
При построении отчета Rpt_Pkg вызывает Rpt_ReportAuditApi.atInsertAudit(...). Метод Rpt_ReportAuditApi.insertAudit(...) сначала проверяет значение Rpt_Report.bEnableAudit. Если флаг выключен, запись в Rpt_ReportAudit не создается.
Для новых отчетов значение по умолчанию берется из настройки модуля rpt:
bEnableWriteAuditByDefault— включает аудит построения отчета по умолчанию для новых отчетов.
Практический порядок настройки:
Для новых отчетов включите настройку
rpt.bEnableWriteAuditByDefault, если аудит должен включаться по умолчанию.Для уже существующих отчетов откройте карточку отчета и включите поле Вести аудит построения.
При необходимости массового включения для существующих отчетов проставьте
bEnableAudit = 1осознанным скриптом.Постройте отчет и проверьте появление записи в
Rpt_ReportAudit.
Проверить настройку конкретного отчета можно запросом:
select id, sSystemName, bEnableAudit
from Rpt_Report
where sSystemName = '<код_отчета>';
Проверить появление записей аудита можно запросом:
select *
from Rpt_ReportAudit
order by dPrint desc;
События формирования записей#
Запись аудита создается автоматически в стандартном потоке Rpt_Pkg:
при одиночном построении — через
Rpt_Pkg._beforeCreateReport(...);при массовом построении — через
Rpt_Pkg._beforeCreateReports(...).
Из этих точек вызывается метод Rpt_ReportAuditApi.atInsertAudit(...), поэтому запись аудита формируется автоматически.
Перед сохранением система определяет:
идентификатор отчета;
идентификатор версии отчета;
системные имена отчета и версии;
объект построения;
пользователя;
дату и время операции;
IP-адрес клиента;
признак
bIsPrinted.
Если отчет формируется обходным способом, вне стандартного потока Rpt_Pkg, запись в аудите может не создаваться.
Хранение данных#
Rpt_ReportAudit реализован как отдельная сущность. Одна запись соответствует одному факту формирования отчета или печатной формы.
В аудите фиксируются:
отчет;
версия отчета;
пользователь;
объект построения;
дата и время формирования;
IP-адрес клиента;
признак печати документа;
выборка и операция, если построение было вызвано из интерфейса.
При удалении:
отчета — связанные записи аудита удаляются по
idReport;версии отчета — поле
idReportVersionустанавливается вnull.
Хранимые поля#
Основные поля Rpt_ReportAudit:
Поле |
Описание |
|---|---|
|
Идентификатор отчета |
|
Идентификатор версии отчета |
|
Системное имя отчета |
|
Системное имя версии отчета |
|
Дата и время формирования отчета или печатной формы |
|
Пользователь |
|
Глобальный идентификатор объекта построения |
|
IP-адрес клиента |
|
Признак режима печати |
В интерфейсе дополнительно могут отображаться данные о выборке и операции, из которых было выполнено построение.
Программная логика#
Основная логика реализована в Rpt_ReportAuditApi.
Ключевые методы:
Rpt_ReportAuditApi.insertAudit(...)— добавляет запись аудита;Rpt_ReportAuditApi.atInsertAudit(...)— добавляет запись аудита в автономной транзакции;Rpt_ReportAuditApi.beforeDeleteReport(...)— обслуживает записи аудита при удалении отчета;Rpt_ReportAuditApi.beforeDeleteReportVersion(...)— обслуживает записи аудита при удалении версии отчета.
Особенности эксплуатации#
Аудит отчетов ведется автоматически при использовании стандартного механизма построения отчетов.
Если отчет или печатная форма формируется через нестандартный сценарий, который не вызывает Rpt_Pkg._beforeCreateReport(...) или Rpt_Pkg._beforeCreateReports(...), запись аудита может отсутствовать.
Аудит Rpt_ReportAudit фиксирует сам факт формирования отчета или печатной формы. Для детального анализа процесса построения, параметров, состояний и ошибок используется отдельный рабочий журнал Rpt_EntityExec.
Объем аудита отчетов зависит от:
количества формирований отчетов;
частоты массового построения;
количества пользователей, работающих с печатными формами;
срока хранения записей.
Ключевой фактор роста — количество записей, а не размер отдельной строки.
Хранение и очистка#
Для аудита отчетов рекомендуется увеличенный срок хранения, так как записи могут использоваться как подтверждение факта формирования отчета или печатной формы.
Рекомендуемый срок хранения:
90–180 дней — рабочий ориентир;
более длительное хранение — при наличии требований к контролю или проверкам;
старые данные — через архивирование.
Для регламентной очистки старых записей рекомендуется использовать CleanupJob.
Рекомендуемая настройка:
spClass = "Rpt_ReportAudit";npDeleteType = DeleteType.sqlDelete;spAttrCreateDate = "dPrint";npDaysKeep— по регламенту;bpActive = 1.
Регулярная очистка необходима, так как аудит растет линейно по мере формирования отчетов и печатных форм.
Рекомендуется:
анализировать прирост записей по
dPrint;учитывать пики массового построения;
согласовывать срок хранения с требованиями к контролю формирования отчетов;
удалять или архивировать устаревшие записи.