Как очистить журнал регистрации в 1С по определенному пользователю?

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

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

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

Понимание архитектуры Журнала регистрации: LGD против LGP

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

  1. Формат SQLite (файл 1Cv8.lgd): Появился в платформе начиная с версии 8.3.5. Все события записываются в один файл базы данных SQLite. В версиях платформы начиная с 8.3.22 поддержка этого формата была полностью прекращена из-за проблем с блокировками в высоконагруженных системах.
  2. Классический формат (файлы .lgf и .lgp): Это текстовый последовательный формат, который сейчас используется по умолчанию на всех современных версиях платформы. Данные здесь разделены по периодам на множество мелких файлов с расширением .lgp, а структура описывается файлом 1Cv8.lgf. Также создаются файлы индексов .lgx для быстрого поиска.

Рассмотрим детальные инструкции для каждого из этих форматов.

---

Вариант №1: Программная очистка методом ОчиститьЖурналРегистрации() (только для формата SQLite / LGD)

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

Для выполнения этой процедуры напишем и запустим обработку со следующим кодом:


// Создаем структуру фильтра для очистки
ФильтрОчистки = Новый Структура;

// Находим целевого пользователя информационной базы
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");

Если ПользовательИБ <> Неопределено Тогда
    // Заполняем фильтр объектом пользователя
    ФильтрОчистки.Вставить("Пользователь", ПользовательИБ);
    
    // Вызываем метод очистки журнала регистрации
    ОчиститьЖурналРегистрации(ФильтрОчистки);
    ВызватьИсключение "Журнал успешно очищен для пользователя ИвановИИ";
Иначе
    Сообщить("Пользователь не найден в системе!");
КонецЕсли;

Важное примечание: Если пользователь уже был физически удален из списка пользователей ИБ, то передать объект ПользовательИнформационнойБазы не получится. В таком случае в фильтр нужно передать строковое имя пользователя:


ФильтрОчистки = Новый Структура;
ФильтрОчистки.Вставить("Пользователь", "УдаленныйПользователь");
ОчиститьЖурналРегистрации(ФильтрОчистки);

Помните, что данный метод выбросит исключение (вызовет ошибку), если база данных использует современный текстовый формат .lgp.

---

Вариант №2: Прямая очистка файла SQLite (для формата LGD) через сторонние утилиты

Если программный метод по какой-то причине не подходит, мы можем отредактировать файл базы данных журнала регистрации 1Cv8.lgd напрямую через СУБД SQLite. Для этого нам понадобится бесплатная графическая утилита, например, DB Browser for SQLite.

Выполним процедуру зачистки по шагам:

  1. Выясним, где хранится файл журнала регистрации. По умолчанию в файловом варианте он находится в каталоге базы данных в папке 1Cv8Log. В клиент-серверном варианте путь к нему выглядит следующим образом: C:\Program Files\1cv8\srvinfo\reg_1541\<Идентификатор_Базы>\1Cv8Log\.
  2. Обязательно остановим службу сервера 1С:Предприятия (1C:Enterprise 8.3 Server Agent). Если этого не сделать, файл журнала будет заблокирован процессами rphost, и мы не сможем сохранить изменения. При работе с файловой базой — просто закроем все сеансы пользователей и конфигуратор.
  3. Сделаем резервную копию файла 1Cv8.lgd в безопасное место. Это критически важно на случай повреждения файла базы данных!
  4. Запустим утилиту *DB Browser for SQLite* и откроем наш файл 1Cv8.lgd.
  5. Перейдем на вкладку "Выполнить SQL" и определим внутренний идентификатор нужного нам пользователя. Для этого выполним следующий запрос:

SELECT code, name FROM Users WHERE name LIKE '%Иванов%';

Допустим, в результате выполнения запроса мы выяснили, что пользователь "Иванов" имеет числовой код (code) равный 15.

  1. Теперь удалим все записи, связанные с этим кодом пользователя, из основной таблицы событий EventLog. Выполним следующий SQL-запрос:

DELETE FROM EventLog WHERE userCode = 15;

Утилита сообщит о количестве удаленных строк. Однако на этом этапе размер файла на диске не изменится, так как SQLite лишь пометила удаленные страницы базы данных как свободные.

  1. Чтобы сжать файл физически и вернуть свободное место операционной системе, выполним команду оптимизации:

VACUUM;

Обратите внимание: выполнение команды VACUUM на больших базах (более 10–20 ГБ) может занять длительное время (вплоть до нескольких часов) и потребует свободного дискового пространства на сервере, равного текущему размеру файла журнала регистрации, так как SQLite создает временный файл в процессе перестроения структуры.

  1. Сохраним изменения (запишем транзакцию), закроем утилиту DB Browser и запустим службу сервера 1С обратно. Пользователи могут продолжить работу.

---

Вариант №3: Выборочное удаление в классическом текстовом формате (LGF / LGP)

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

Каждая запись в файле формата .lgp представляет собой структурированный текст в формате сериализации 1С, заключенный в фигурные скобки. Мы можем распарсить эти файлы скриптом (например, на PowerShell или Python), вырезать записи с UUID удаляемого пользователя и перезаписать файлы.

Разберем по шагам логику и правила этой процедуры:

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

{20231027120000,N,
{0,0},1,1,2,1,I,"",0,
{"U"},"ИмяПользователя",1,2,3,4,5
}

Скрипт должен в потоковом режиме читать файлы .lgp, определять границы блоков {...} и исключать те блоки, в которых встречается идентификатор или имя очищаемого пользователя.

  1. Самый важный шаг для текстового формата: После изменения файлов .lgp на диске обязательно нужно удалить все файлы индексов с расширением .lgx, которые находятся в той же папке 1Cv8Log.

Дело в том, что файлы .lgx содержат строго структурированные бинарные индексы для быстрого поиска по файлам данных. Если мы изменим текстовые файлы .lgp вручную, но оставим старые индексы .lgx, возникнет рассинхронизация данных. При попытке открыть журнал регистрации в 1С система либо выдаст критическую ошибку, либо процессы rphost аварийно завершатся.

После удаления файлов .lgx и последующего запуска службы сервера 1С платформа автоматически перестроит индексы заново на основании наших измененных файлов .lgp при первом же обращении к журналу регистрации. Этот процесс полностью безопасен и прозрачен для пользователей, хотя само первое открытие ЖР может занять чуть больше времени.

---

Резюме и правила безопасности

Выборочное удаление данных из Журнала регистрации — это нештатная операция, требующая аккуратности и четкого понимания структуры хранения данных 1С.

Давайте зафиксируем ключевые правила, которые уберегут вашу систему от сбоев:

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

← На главную