Как отследить, какие именно объекты справочника открывал пользователь в 1С?

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

В типовых конфигурациях 1С, таких как «Управление производственным предприятием 1.3», стандартный Журнал регистрации фиксирует факт открытия формы списка справочника, но зачастую не дает детальной информации о том, в карточку какого конкретного контрагента, физического лица или сотрудника зашел пользователь. Это создает трудности для контроля безопасности и аудита доступа к конфиденциальным данным. Разберем по шагам, как решить эту задачу различными методами — от простого изменения кода до использования системных механизмов платформы.

Метод 1. Программная запись в Журнал регистрации при открытии формы

Проанализируем самый очевидный способ: внесение изменений непосредственно в форму объекта. Поскольку в 1С нет универсальной подписки на событие открытия формы, нам придется обратиться к конкретному справочнику (в нашем примере — «Физические лица»).

Рассмотрим порядок действий для обычных форм (характерных для УПП 1.3):

  1. Откроем конфигуратор и найдем нужный справочник.
  2. Перейдем в формы и откроем «ФормуЭлемента».
  3. В модуле формы найдем или создадим процедуру-обработчик события ПриОткрытии.
  4. Добавим код, который будет принудительно записывать событие в системный лог.

Пример программного кода для реализации этой задачи:


Процедура ПриОткрытии()
    // Укажем имя события для фильтрации в Журнале регистрации
    ИмяСобытия = "Доступ.ПросмотрОбъекта";
    
    // Сформируем описание, которое будет видно в колонке "Данные"
    ОписаниеСобытия = "Пользователь открыл карточку: " + Строка(ЭтотОбъект.Ссылка);
    
    // Записываем событие в журнал
    ЗаписатьСобытиеЖурналаРегистрации(ИмяСобытия,
        УровеньЖурналаРегистрации.Информация,
        ЭтотОбъект.Метаданные(),
        ЭтотОбъект.Ссылка,
        ОписаниеСобытия);
КонецПроцедуры

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

Метод 2. Создание собственного регистра для аудита просмотров

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

Выясним, как спроектировать такой механизм:

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

Посмотрим на пример кода для записи:


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

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

Метод 3. Использование механизма «Защита персональных данных» (ФЗ-152)

В современных релизах конфигураций 1С (включая обновленные версии УПП 1.3 на базе БСП) реализован встроенный аудит доступа к персональным данным. Это наиболее правильный путь с точки зрения методологии 1С.

Проанализируем, как активировать этот функционал:

  1. Перейдем в интерфейс «Администрирование» или «Настройки параметров учета».
  2. Найдем раздел «Защита персональных данных».
  3. Включим опцию «Регистрировать доступ к персональным данным».
  4. В списке объектов выберем справочник «Физические лица» и укажем поля, просмотр которых считается критичным (например, паспортные данные или ИНН).

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

Метод 4. Глобальный перехват через общие модули

Если справочников много и править форму каждого из них трудозатратно, мы можем использовать «точки входа» в общих модулях. В УПП 1.3 практически все формы при открытии вызывают стандартные процедуры оформления или проверки прав.

Разберем, как это реализовать:

  1. Найдем общий модуль, например РаботаСДиалогами или МеханизмыФорм.
  2. Найдем процедуру, которая вызывается в начале работы с формой (например, УстановитьОформлениеПриОткрытии).
  3. Добавим проверку: если тип основного реквизита формы соответствует интересующему нас справочнику — выполняем логирование.

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

Ограничения: что невозможно отследить программно в форме?

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

Для борьбы с этим рекомендуется использовать RLS (Record Level Security) — ограничение прав на уровне записей. Если у пользователя нет прав на чтение конкретных полей, он не увидит их ни в форме, ни в запросе.

Для абсолютного контроля за доступом на уровне СУБД специалисты используют Технологический журнал (ТЖ). Настроив сбор событий SDBL, можно увидеть, к каким таблицам и записям обращался сеанс пользователя, даже если запрос был выполнен через внешнюю обработку или консоль.

Таким образом, выбор метода зависит от целей: для простого контроля достаточно правки ПриОткрытии, а для полноценного аудита безопасности лучше использовать штатные механизмы защиты персональных данных или настройки RLS.

← На главную