Вопрос о возможности избирательного отключения записи в журнал регистрации (ЖР) часто возникает у разработчиков и администраторов 1С при выполнении регламентных операций, массовой загрузке данных или в ситуациях, когда необходимо скрыть активность определенной учетной записи (например, сервисного администратора). Штатными средствами платформы "из коробки" нельзя просто нажать одну галочку в карточке пользователя "Не писать в ЖР". Журнал регистрации предназначен для обеспечения безопасности и аудита, поэтому механизмы его обхода требуют понимания архитектуры системы.
В этой статье мы подробно разберем, как можно реализовать подобную задачу, проанализируем различные подходы — от легальных настроек метаданных до манипуляций на уровне файловой системы и SQL-запросов.
Рассмотрим первый и самый "чистый" с точки зрения платформы способ. Мы можем полностью отключить автоматическую регистрацию событий и перевести управление журналом в ручной режим. Разберем этот алгоритм по шагам:
Не записывать.После этого платформа перестанет автоматически фиксировать любые действия пользователей (вход, изменение документов, справочников). Теперь, чтобы журнал не остался пустым, нам нужно программно прописать условия записи. В общем модуле (например, в обработчиках ПередЗаписью или через подписки на события) мы можем реализовать следующую логику:
Процедура ПередЗаписьюОбъекта(Источник, Отказ)
ТекущийПользовательИмя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
// Проверяем, нужно ли игнорировать данного пользователя
Если ТекущийПользовательИмя <> "Админ" Тогда
ЗаписатьВЖурналРегистрации(
"Данные.Изменение",
УровеньЖурналаРегистрации.Информация,
Источник.Метаданные(),
Источник.Ссылка,
"Объект изменен пользователем " + ТекущийПользовательИмя
);
КонецЕсли;
КонецПроцедуры
Этот метод требует значительных трудозатрат, так как придется покрыть кодом все важные события системы, но он дает 100% контроль над тем, чьи действия попадают в лог.
Начиная с версии 8.3.5, 1С по умолчанию использует новый формат журнала регистрации — файл с расширением .lgd, который по сути является базой данных SQLite. Это открывает перед нами возможность прямого редактирования данных в обход интерфейса 1С.
Разберем ситуацию: действия уже совершены и записаны. Как их "подчистить"?
srvinfo на сервере 1С в подпапке конкретной информационной базы (путь вида reg_1541/ID_базы/1Cv8Log/).Users, а затем удалим строки из EventLogData.Пример запроса для очистки:
DELETE FROM EventLogData
WHERE UserCode IN (SELECT UserCode FROM Users WHERE UserName = 'Админ');
Важный момент: перед выполнением таких операций необходимо остановить службу сервера 1С или временно заблокировать доступ к файлу, иначе база данных может быть заблокирована процессом rphost.
Проанализируем еще один способ, который предложили участники форума: "фокус" с подменой файлов. Это полезно, когда нужно выполнить большой объем работы под определенным пользователем и сделать так, чтобы за этот период в журнале вообще не было следов.
Алгоритм действий следующий:
1Cv8.lgd в другую директорию.Таким образом, в истории ЖР возникнет временной разрыв (дыра), но конкретных действий пользователя зафиксировано не будет. Это значительно быстрее, чем парсить и чистить огромные файлы логов.
Если задача стоит не в том, чтобы скрыть пользователя "вообще", а в том, чтобы не фиксировать работу с конкретными секретными данными, можно воспользоваться свойствами метаданных. В Конфигураторе для каждого объекта (например, справочника Контрагенты или документа НачислениеЗарплаты) существует свойство Журнал регистрации.
Если установить его в значение Не записывать, то никакие стандартные действия (создание, изменение, удаление) по этому объекту не будут попадать в журнал. Это глобальная настройка для всех пользователей, но она позволяет снизить объем логов и скрыть манипуляции с конкретными сущностями.
Выясним причину, по которой администраторы часто игнорируют записи фоновых заданий. В крупных системах фоновые процессы генерируют тысячи записей в минуту, создавая так называемый "системный шум". Если выполнять действия не напрямую в сеансе пользователя, а инициировать фоновое задание, то в журнале это будет выглядеть как активность технического пользователя Фоновое задание.
Для реализации этого метода можно использовать следующий код:
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(НужныеПараметры);
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ВыполнитьДействиеБезЛога", ПараметрыЗадания);
Администратор, просматривающий журнал, увидит стандартную системную запись, которая не привлечет внимания так, как прямая правка документа пользователем Admin.
Рассмотрим экзотический, но рабочий метод, связанный с разделением журнала по периодам. Если в настройках базы выбрано хранение журнала "по дням", 1С создает файлы типа 20231024000000.lgp (для старого формата) или хранит периоды внутри SQLite. Если перевести системное время сервера на год назад, выполнить действия и вернуть время обратно, записи попадут в файл за прошлый год. Вероятность того, что кто-то будет проверять архивные логи за прошлые периоды в поисках свежих изменений, крайне мала.
Резюме: Полностью "легального" способа отключить ЖР для одного пользователя не существует, так как это противоречит концепции аудита. Однако, используя комбинацию программных методов (ЗаписатьВЖурналРегистрации) и административных манипуляций (редактирование SQLite, подмена файлов), можно добиться того, что действия пользователя не будут зафиксированы или будут скрыты среди системных процессов.