Как отследить, кто открывал документы и справочники в 1С:Управление торговлей 10.3

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с информационными системами часто возникает задача аудита действий пользователей. Типовые конфигурации 1С, такие как «Управление торговлей» редакции 10.3, по умолчанию фиксируют в журнале регистрации только события изменения или проведения документов. Однако бывают ситуации, когда необходимо выяснить, кто именно просматривал конфиденциальную информацию, не внося в неё никаких правок. Разберем подробно, как реализовать механизм контроля просмотров, учитывая технические особенности платформы 8.3 и специфику обычных форм.

Метод 1. Программное логирование через событие ПриОткрытии

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

В этом регистре стоит создать следующие измерения и ресурсы:

  1. Период (Дата и время) — стандартный реквизит для периодических регистров.
  2. Пользователь (СправочникСсылка.Пользователи) — кто открыл документ.
  3. Объект (ЛюбаяСсылка) — ссылка на сам документ или элемент справочника.

После создания регистра, мы можем прописать в формах документов следующий код:


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

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

Метод 2. Использование расширений конфигурации (для платформы 8.3)

Несмотря на то что УТ 10.3 использует «обычные формы», работа на современной платформе 8.3.13 и выше позволяет нам применить механизм расширений. Это избавляет нас от необходимости снимать основную конфигурацию с поддержки. Мы можем создать расширение и использовать аннотацию &После для перехвата события открытия.

Разберем по шагам создание такого перехватчика:

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

Пример кода в расширении будет выглядеть так:


&После("ПриОткрытии")
Процедура Расш1_ПриОткрытии(Отказ)
    Если Не ЭтотОбъект.ЭтоНовый() Тогда
        // Вызываем процедуру из общего модуля, чтобы не дублировать код
        ОбщийМодульЛогирования.ЗафиксироватьПросмотр(ЭтотОбъект.Ссылка);
    КонецЕсли;
КонецПроцедуры

Этот метод гораздо технологичнее, так как позволяет централизованно управлять логикой аудита, не затрагивая основной код поставщика.

Метод 3. Ограничение прав доступа (RLS) как превентивная мера

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

Проанализируем ситуацию: если мы запретим чтение документов по определенным условиям (например, только «свои» организации или подразделения), то вопрос о том, кто «лезет в ненужные места», отпадет сам собой. В УТ 10.3 настройка прав доступа находится в меню «Сервис» — «Пользователи» — «Настройка прав доступа на уровне записей».

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

Метод 4. Настройка Технологического журнала (ТЖ)

Для продвинутых администраторов существует низкоуровневый способ — использование Технологического журнала самой платформы 1С. ТЖ позволяет фиксировать любые обращения к базе данных. Мы можем настроить фильтр так, чтобы логировались события DBMSSQL (или DBPOSTGRS) при выполнении запросов к определенным таблицам.

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

Пример фрагмента файла logcfg.xml для отслеживания обращений к таблицам:


<log location="C:\1C_Logs\Audit" history="24">
    <event>
        <eq property="Name" value="DBMSSQL"/>
        <like property="Sql" value="%_Document150%"/> 
    </event>
</log>

Здесь _Document150 — это имя таблицы документа в СУБД, которое можно узнать через функцию ПолучитьСтруктуруХраненияБазыДанных().

Метод 5. Просмотр списка последних открытых файлов

Рассмотрим ситуацию, когда нужно быстро проверить конкретного пользователя без программирования. Платформа 1С сохраняет историю последних действий в файлах настроек пользователя (v8user.config и подобные в папке %AppData%). Хотя это не полноценный аудит, в меню «Файл» — «Недавние файлы» (или через программный интерфейс работы с настройками) можно увидеть последние открытые объекты.

Также в УТ 10.3 часто используется подсистема «Дополнительные сведения и свойства». Если доработать её, можно выводить историю прямо в карточке документа. Но помните: любой программный метод логирования просмотров увеличивает размер базы данных, так как каждая запись в лог — это новая строка в таблице _InfoReg.

Юридический аспект контроля

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

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

← На главную