По описанию формата журнала //infostart.ru/1c/articles/182061/#message3287208 создал простенький скрипт удаления части событий из журнала регистрации по примитивному текстовому фильтру, накладываемому на кадр журнала регистрации (запись).
Выкладываю код формального серверного метода ПолучитьПутьКопииФайлаЖурналаРегистрацииСЗаписямиТолькоПрошедшимиУСловие() и фильтрующего кадр метода ПолучитьСтрокуПоУсловию(). Если потребуется фильтровать по более сложному условия, например, по конкретному событию, то придется делать методы чтения файла .lgf, где они хранятся и сопоставлять. Пока этим не занимался. Если есть идеи, пишите.
Перед использованием метода необходимо убедиться (Условия использования метода**):
-в наличии свободного места на диске для сохранения копии файла журнала ПутьКФайлуЖурналаНаСервере
-в том, что ПутьКФайлуЖурналаНаСервере НЕ является текущим файлом, в который платформа пишет данные, то есть разделение журнала регистрации по периодам должно быть включено, и чем меньше период разделения, тем меньше файлы и их проще обрабатывать.
Приложил обработку.
Обработка - интерфейс для использования описанных методов пакетно: указываем путь к каталогу файлов журнала, нажимаем "Заполнить файлы журнала из каталога". Выбираем нужные файлы (строго по (Условия использования метода**)) , жмем "Обработать выбранные файлы".
Обработка будет длительной. Длительность зависит от размера файла. Я обрабатывал файлы и по 1 ГБ размером - не проблема.
После завершения обработки, если исходный файл требуется удалить, нужно нажать "Удалить выбранные исходные(только обработанные)" - это действие необратимо.
// Считывает последовательно текст из файла ПутьКФайлуЖурнала и последовательно записывает в новый файл с суффиксом "_1"
// Параметры:
// ПутьКФайлуЖурнала - Строка: путь к файлу журнала регистрации относительно сервера приложения
Функция ПолучитьПутьКопииФайлаЖурналаРегистрацииСЗаписямиТолькоПрошедшимиУСловие(ПутьКФайлуЖурналаНаСервере="")
Разделитель = "},"+символы.ПС;
ПутьКФайлуЗаписи = СтрЗаменить(ПутьКФайлуЖурналаНаСервере,".lgp","_1.lgp");
Поток = Новый ФайловыйПоток(ПутьКФайлуЗаписи, РежимОткрытияФайла.Создать);
ЗаписьТекста = новый ЗаписьТекста(Поток,,"");
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуЖурналаНаСервере,,Разделитель,,);
СтрокаЧтенияПерваяИлиРазделитель = ЧтениеТекста.ПрочитатьСтроку();
Если СтрокаЧтенияПерваяИлиРазделитель = Неопределено Тогда
ПолныйТекст = ЧтениеТекста.Прочитать();
Если ПолныйТекст <> Неопределено Тогда
ЗаписьТекста.Записать(ПолныйТекст);
КонецЕсли;
ЗаписьТекста.Закрыть();
Возврат ПутьКФайлуЗаписи;
КонецЕсли;
ПрошлаяСтрока = "";
Пока Истина Цикл //читаем по две строки за цикл, чтобы проверять не конец ли файла, если конец, не ппишем разделительв конец
СтрокаЧтения = ЧтениеТекста.ПрочитатьСтроку();
Если СтрокаЧтения = Неопределено Тогда
ЗаписьТекста.Закрыть();
ЗаписьТекста = Неопределено;
Поток.Закрыть();
Поток = Неопределено;
Прервать;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаЧтенияПерваяИлиРазделитель) тогда //первый обход
СтрокаЧтенияПерваяИлиРазделитель = СтрокаЧтенияПерваяИлиРазделитель + Разделитель;
Иначе
СтрокаЧтенияПерваяИлиРазделитель = Разделитель;
КонецЕсли;
СтрокаЧтенияСледующая = ЧтениеТекста.ПрочитатьСтроку();
Если СтрокаЧтенияСледующая = Неопределено Тогда //разделитель не добавляем, строку вторую не пишем
СтрокаЧтения = ПолучитьСтрокуПоУсловию(СтрокаЧтенияПерваяИлиРазделитель + СтрокаЧтения);
Иначе //пишем также как и первую и добавляем разделитель к первой
СтрокаЧтения = ПолучитьСтрокуПоУсловию(СтрокаЧтенияПерваяИлиРазделитель + СтрокаЧтения) + ПолучитьСтрокуПоУсловию(Разделитель + СтрокаЧтенияСледующая);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаЧтения) Тогда //<<--УСЛОВИЕ
ЗаписьТекста.ЗаписатьСтроку(СтрокаЧтения);
КонецЕсли;
СтрокаЧтенияПерваяИлиРазделитель = "";//Очищается после первого цикла
ПрошлаяСтрока = СтрокаЧтения;
КонецЦикла;
возврат ПутьКФайлуЗаписи;
КонецФункции
// <Описание функции>
//
// Параметры:
// <Параметр1> - <Тип.Вид> - <описание параметра>
// <продолжение описания параметра>
// <Параметр2> - <Тип.Вид> - <описание параметра>
// <продолжение описания параметра>
//
// Возвращаемое значение:
// <Тип.Вид> - <описание возвращаемого значения>
//
Функция ПолучитьСтрокуПоУсловию(СтрокаЧтения)
Результат = "";
Если СтрНайти(СтрокаЧтения,"{""U""}") = 0 Тогда //<<--УСЛОВИЕ Можно здесь определить свой текстовый фильтр на запись журнала
Результат = СтрокаЧтения;
Иначе
КонецЕсли;
Возврат Результат;
КонецФункции // ПолучитьСтрокуПоУсловию()
Проверено на следующих конфигурациях и релизах:
- 1С:Управление холдингом 3.2 (русский и английский интерфейсы), релизы 3.2.6.113
Вступайте в нашу телеграмм-группу Инфостарт