Быстрый способ удаления записей из журнала регистрации 1С

Публикация № 1264359

Администрирование - Администрирование данных 1С - Чистка базы

журнал perl

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

Без лишних слов привожу эту строку:

$ perl -w -i.bak -pe 'BEGIN {$/="},\r"} s/^\n\{[\d\D]+?,6,2,2,\d+,\d,I,"",(?:109|0),[\d\D]+\},\r$//' ./*.lgp

Кажется сложным только на первый взгляд. Давайте опишем назначение элементов этой команды. Для того, чтобы было проще понять описание, ниже приведён фрагмент журнал регистрации. В разборе его формата мне помогла эта статья: infostart.ru/1c/articles/182061/

 
 Журнал регистрации

 

  • perl -w Вызов интерпретатора Perl. С ключём -w он будет выводить предупреждения. Если Perl на вашем компьютере ещё не установлен, рекомендую установить Git Bash;
  • -i.bak Ключ -i[расширение] указывает на то что файлы, переданные в качестве аргумента командной строки, будут отредактированы. Если задать любое расширение (в нашем случае .bak), то после редактирования файлов на диске останутся их резервные копии с этим расширением;
  • -pe С ключём -p Perl генерирует простую программу: while (<>) { print; }. А то, что следует после ключа -e, эту программу дополняет. Фактически Perl исполнит следующий скрипт:
$/="},\r"
while (<>) {
   s/^\n\{[\d\D]+?,6,2,2,\d+,\d,I,"",(?:109|0),[\d\D]+\},\r$//;
   print;
}

Здесь требуются некоторые пояснения. В первой строке мы устанавливаем значение специальной переменной $/, которая хранит разделитель записей. В цикле while (<>) Perl читает переданные файлы построчно. По умолчанию разделителем записей является символ новой строки. Если мы посмотрим на формат журнала регистрации (выше), то увидим, что разделителем записей является комбинация символов },\r (где \r - возврат каретки), поэтому мы переопределяем $/.

Добавлю, что Perl имеет специальную опцию командной строки для установки разделителя записей: -0. Но, к сожалению, с помощью этой опции можно установить в качестве разделителя только один символ, поэтому нам приходится делать это в коде: BEGIN {$/="},\r"}.

Идём далее. Оператор s/[шаблон]/[замена]/ ищет совпадение с шаблоном и заменяет его. В нашем случае, если очередная запись совпадает с шаблоном ^\n\{[\d\D]+?,6,2,2,\d+,\d,I,"",(?:109|0),[\d\D]+\},\r$ , то эта запись исключается (заменяется пустой строкой).

Теперь разберём регулярное выражение:

Наша запись в журнале регистрации начинается с символа новой строки и фигурной скобки: ^\n\{ . Далее идет последовательность любых символов, включая символ новой строки: [\d\D]+? . Читаем любые символы до тех пор, пока не находим ,6,2,2,. Это идентификаторы, соответственно, пользователя, компьютера и приложения (см. разбор формата журнала). Далее идут два других числовых идентификатора, значения которых нас не интересуют. После них в записи к удалению мы ожидаем увидеть "I" (важность события журнала - "Информация"), пустой комментарий к событию и идентификатор метаданных, который может принимать значения 109 или 0. Заканчивается запись последовательностью любых символов, фигурной скобкой, запятой и возвратом каретки: [\d\D]+\},\r$.

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

У команды, приведенной в начале статьи, есть один недостаток. Если мы посмотрим на журнал регистрации, то увидим, что первая и последняя записи отличаются от остальных. Первая запись включает заголовок файла (1CV8LOG(ver 2.0)...), а последняя не заканчивается запятой. Эти записи не соответствуют регулярному выражению, а поэтому не будут удалены, даже если подходят по остальным параметрам. Если мы удалим эти записи, то нарушим формат файла журнала регистрации.

Если необходимо, чтобы были удалены абсолютно все заданные записи, даже если они находятся на первой или последней позициях в файле, придётся быть более многословным:

#!/usr/bin/perl -w
# Удаление записей из журнала регистрации

use strict; 

$^I = ".bak"; # С бэкапом файлов
#$^I = "";    # ... или без него

$/ = "},\r";

my $hdr; # Заголовок файла

while (<>) {
	my $m = /[\d\D]+?,6,2,2,\d+,\d,I,"",(?:109|0),[\d\D]+/;

	if ($. == 1 && $m) { # Совпадение в первой записи, будет нужно вернуть заголовок
		/[^{]*/;
		$hdr = $&;
	} elsif (!$m) {
		chomp;
		if (defined $hdr) {
			print $hdr . substr($_, 1); # Добавляем заголовок, удаляем пустую строку
			undef $hdr;
		} else {
			print $. == 1 ? $_ : $/ . $_;
		}
	} elsif (eof && $m) { # Последняя скобка в файле без запятой
		print "}";
	}
	
	close ARGV if eof; # Чтобы сбросить счетчик '$.'
}

Сохраняем этот скрипт в файл (например, clnlgp.plx), делаем файл исполняемым и выполняем, передавая в качестве аргумента маску файлов журнала регистрации:

$ chmod +x clnlgp.plx
$ clnlgp.plx D:/_1cv8log/*.lgp

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Dzenn 461 09.08.20 10:16 Сейчас в теме
После увиденного, могу только надеяться, что мне никогда не придётся работать с Perl'ом ;-)
2. Sedaiko 399 09.08.20 12:26 Сейчас в теме
(1) Вас скорее напугал не perl, а регулярные выражения.
3. Dzenn 461 09.08.20 19:10 Сейчас в теме
(2) ну, регулярка тут тоже огонь, да )
4. PerlAmutor 124 25.09.20 11:14 Сейчас в теме
Надеюсь, когда нибудь в регулярные выражения вдохнут новую жизнь и их убогий синтаксис станет человеческим, декларативным и понятным.
Желаю того же и языкам запросов SQL.
5. Sergik_D 18 05.02.21 13:00 Сейчас в теме
Кирилл, здравствуйте. У меня есть потребность очистить журнал для сокращения его объема. Может есть желание взять эту задачу?
6. DataReducer 281 05.02.21 15:03 Сейчас в теме
(5) Сергей, здравствуйте! К сожалению, нет свободного времени.
Оставьте свое сообщение

См. также

Хранилище версий объектов в условиях массовых изменений

Чистка базы Конфигурирование 1С v8 1cv8.cf Бесплатно (free)

Проблема хранения версий объектов при огромном количестве изменений.

08.11.2020    816    Punisher_1C    4    

Подсистема учета характеристик. Стремление к совершенству

Чистка базы Практика программирования v8 v8::ОУ v8::ПВХ УТ10 УУ Бесплатно (free)

Цель - почистить задвоенность характеристик и предотвратить дальнейшее ее появление.

16.12.2019    4265    Rustig    0    

ELK. Время изумительных историй!

Журнал регистрации Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Всем привет! Сегодня хочу рассказать вам несколько полезных историй про то как нам помог Elastic search в связке с Kibana. Про сам Elastic рассказывать не буду, уже все давным давно описали и до меня. Все обычно говорят что это полезно, это классно. В то же время, очень мало кто рассказывает про практические ситуации: когда и как помог Elastic. Итак, начнем.

31.10.2019    9186    slozhenikin_com    27    

Версионирование регистров сведений

Журнал регистрации Практика программирования v8 Бесплатно (free)

Моя реализация механизма мониторинга изменений регистра сведений.

17.09.2019    4093    KonS    10    

Хранение файлов - как уменьшить размер базы данных

Чистка базы Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 Россия Бесплатно (free)

Хранение файлов в базе 1С можно оптимизировать для уменьшения размера хранимых данных.

09.09.2019    9180    2tvad    17    

Удаление записей регистров и пересчет итогов в условиях нехватки места на диске

Чистка базы v8 1cv8.cf Россия Бесплатно (free)

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

17.04.2019    4291    semensemenbi4    8    

Переход на 64-х разрядный сервер 1С

Журнал регистрации Администрирование данных 1С v8 Бесплатно (free)

Переход с 32-х разрядной версии сервера 1С на 64-х разрядную с сохранением данных журналов регистрации информационных баз, используемых в 32-х разрядной версии.

05.04.2019    24360    ids79    18    

Мониторинг активности пользователя

Журнал регистрации v8 1cv8.cf Бесплатно (free)

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

11.10.2018    17283    postovalov    25    

Все, что вы хотели знать о журнале регистрации

Журнал регистрации v8 Бесплатно (free)

Исследование файла Журнала регистраций в формате lgd.

22.09.2018    25780    Fox-trot    25    

Как быстро "удалить все документы и движения" в базе (Альтернатива)

Чистка базы v8 Бесплатно (free)

Очень часто задают вопрос - как удалить все документы из базы, оставить только номенклатуру и настройки. Есть много различных вариантов (групповая обработка документов и справочников - да, работает, но медленно, у клиента в базе 460 000 документов проведенных - неделю будет удалять). Перенос данных - через ВыгрузкаЗагрузкаДанныхXML82.epf - можно, но тоже долго и требует определенных навыков.

06.03.2018    24799    Tatitutu    24    

Реально быстрая очистка документов через SQL

Чистка базы v8 УТ10 Россия Бесплатно (free)

Как делать нельзя, но если очень нужно, то можно!

21.02.2018    8598    Roman_SE    24    

Кто запустил анализ журнала регистрации?

Журнал регистрации v8 Бесплатно (free)

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

16.09.2017    19444    metmetmet    42    

Подробный журнал регистрации изменений

Журнал регистрации v8 Бесплатно (free)

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

24.07.2017    12552    user700035_6550355    16    

Сжатие журнала регистрации в формате SQLite (.lgd) с помощью программы "DB Browser for SQLite".

Журнал регистрации v8 Россия Бесплатно (free)

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

04.06.2017    27944    DrSender    6    

Запись в журнал регистрации изменений дополнительных сведений

Журнал регистрации v8 УТ11 УУ Бесплатно (free)

Небольшая доработка программы "Управление торговлей 11" для записи информации в журнал регистрации изменений дополнительных сведений (регистр сведений) по объектам. Должна работать на всех релизах.

04.05.2017    36782    Mortiferus    5    

Если при рассылке закончилось место

Чистка базы v8 Россия Бесплатно (free)

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

23.03.2017    8817    hydro2588_2015    19    

Удаление лишних данных

Чистка базы v8 Бесплатно (free)

Настало то время, когда на SSD винчестерах размером 120 Гб начало заканчиваться место.  В связи с этим, было принято решение проанализиривать возможность уменьшения занимаемого места БД. Без веского обоснования у нас никакие работы не производятся, просто так оптимизацией никто заниматься не даст. 1. Выявление таблиц БД, занимающих много места. 2. Очистка записей регистров накопления. 3. Тестирование.

25.11.2016    14837    HAMMER_59    10    

Загрузка логов журнала регистрации 1С из MS SQL в ElasticSearch

Журнал регистрации v8 Бесплатно (free)

Еще один инструмент хранения и визуализации логов журнала регистрации 1С

01.09.2016    36873    farukshin    9    

Версионирование объектов в 1С УПП 1.3. Фикс дублей

Чистка базы Производительность и оптимизация (HighLoad) v8 УПП1 Россия Бесплатно (free)

В 1С УПП 1.3 есть такой замечательный механизм "версионирование объектов", который позволяет узнать: кто, когда и что изменил в документах и справочниках. Но есть недочеты в этой системе, программа не проверяет, является ли текущая записываемая версия объекта дублем (аналогична предыдущей версии), что в итоге захламляет базу и существенно увеличивает её объем.

1 стартмани

16.11.2015    13692    tehas    4    

БГУ 1.0. Чистим отчётность

Чистка базы v8 БГУ Государственные, бюджетные структуры Россия БУ Бесплатно (free)

Временами встречается проблема с заполнением бюджетной (бухгалтерской) отчётности в БГУ 1.0. По разным причинам отчётность может заполняться неправильно или не заполняться совсем. В данной статье приведена методика быстрой «чистки» отчётности.

29.09.2015    16988    Sergey123321    8    

Ошибка формата файла журнала регистрации, database disk image is malformed

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Ошибка формата файла журнала регистрации по причине: sqlite3_step failed: database disk image is malformed db: C:\Program Files\1cv8\srvinfo\reg_1541\34eda2fe-bcf4-485e-ab47-4f302319f59a\1Cv8Log\1Cv8.lgd sql: SELECT severity, date, connectID, session, transactionStatus, transactionDate, transactionID, userCode, computerCode, appCode, eventCode, comment, metadataCodes, sessionDataSplitCode, dataType, data, dataPresentation, workServerCode, primaryPortCode, secondaryPortCode FROM EventLog WHERE date<3155378867999999 AND eventCode IN (1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42) ORDER BY date DESC

27.09.2015    91699    mrWatson    30    

Задвоение элементов плана счетов в базе на SQL.

Чистка базы v8 Бесплатно (free)

Иногда приходится разбираться с "грехами отцов", когда приходишь к клиенту, а до тебя наделали делов. Вот, собственно, проблема: Настраивали когда-то план обмена, все работало штатно. Потом обмен пошел не как надо и в справочниках появились задвоенные предопределенные элементы. В общем, на Инфостарте нашел кучу обработок, которые помогут. Но тут оказалось, что если работать с элементом "ПланСчетов", эти обработки бесполезны.

27.08.2015    8812    vasyalisk88    17    

Анализ журнала регистрации для автонастройки списка выгружаемых объектов в обработке ВыгрузкаЗагрузкаДанныхXML82.epf

Журнал регистрации Практика программирования Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Сказ о том, как с помощью слегка модифицированной обработки ВыгрузкаЗагрузкаДанныхXML82.epf решить задачу "Выгрузить из базы-источника все объекты, которые заданный пользователь изменил в указанный период". Данная публикация может быть интересна тем, кто хочет узнать: а) как программно анализировать журнал регистрации и б) как программно настраивать список выгружаемых объектов в обработке ВыгрузкаЗагрузкаДанныхXML82.epf.

06.08.2015    19363    q_i    2    

Журнал регистрации 1С: путь к пониманию процессов клиента

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Как понять процессы документооборота клиента, имея доступ к его базе и не общаясь с ним.

11.06.2015    16794    Kindman1980    23    

Облегчение вызовов журнала регистрации с отбором по объекту

Журнал регистрации v8 1cv8.cf Бесплатно (free)

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

24.03.2015    13453    tarassov    7    

Фоновое Задание "Удаление помеченных объектов" (не монопольно)

Чистка базы v8 1cv8.cf Россия Бесплатно (free)

Подробное описание немонопольного удаления помеченных объектов, реализованное как Фоновое Задание.

02.08.2013    21994    shvo65    10    

Как свертывать большую базу 1C 8 в максимально короткие сроки (1С 8.1, 8.2)

Производительность и оптимизация (HighLoad) Чистка базы Свертка базы v8 УТ10 Бесплатно (free)

Как свертывать большую базу 1C 8 в максимально короткие сроки (1С 8.1, 8.2). Любая база данных со временем разрастается до огромных размеров, что делает его более медлительным и работать в нем порой бывает очень тяжело. По этому периодически базу свертывают, т.е. до определенной даты все документы и движения удаляются и вводятся начальные остатки. Соответственно всегда есть архивная база за прошлые периоды. Пример свертки базы 1С на SQL приведен здесь.

14.06.2013    63072    setrak    21    

Формат файлов журнала регистрации 1С 8.1/8.2 - ELF/LOG/LGF/LGP

Журнал регистрации v8 1cv8.cf Бесплатно (free)

В статье детально описан формат текстовых файлов журнала регистрации 1С 8.1 - ELF/LOG и 1С 8.2 - LGF/LGP

09.04.2013    82267    Антон Ширяев    34    

Версионирование объектов в программе «Управление торговлей для Украины 3.0»

Журнал регистрации Администрирование данных 1С v8 УТ10 Украина Бесплатно (free)

Для выполнения административных обязанностей часто нужно выяснить, какие события происходили в определенный момент времени или какие действия выполнял тот или иной пользователь.

13.02.2013    26559    aharechko    21    

Шринк лога транзакций MS SQL 2008/2012 в экстренном случае или боремся с ошибкой HRESULT=80040E14

Чистка базы v8 Бесплатно (free)

Пошаговая инструкция по уменьшению лога транзакций (*.ldf) MS SQL 2008/2012.

15.01.2013    310207    Kserken    44    

Автоматизация укорачивания журнала регистрации

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Автоматизированная периодическая очистка разросшегося журнала регистрации на сервере с сохранением удаляемых частей на другом диске.

14.11.2012    31208    Stamper    8    

Контроль изменения документов

Журнал регистрации v8 1cv8.cf Россия Бесплатно (free)

Надоело ловить за руку тех кто изменяет документы задним числом, после их распечатывания? Постоянно мучают мысли, а все ли документы в БД правильно оформлены и подписаны? Если так, читайте дальше

17.11.2011    25468    pzu    14