При администрировании информационных баз 1С:Предприятия версии 8.2 и баз с классическим форматом хранения журнала регистрации можно столкнуться с ситуацией, когда в режиме «Отобрать сразу» окно журнала остается пустым или выдает ошибку, в то время как при выборе режима «Фильтровать динамически» записи успешно выводятся на экран. Разберем причины возникновения этой проблемы, особенности структуры файлов журнала регистрации и способы восстановления корректной работы.
Для понимания сути проблемы рассмотрим, как устроен текстовый журнал регистрации формата 1С 8.2, состоящий из файлов в каталоге 1Cv8Log:
1Cv8.lgf представляет собой словарь идентификаторов. В нем регистрируются все уникальные системные и прикладные события, метаданные, имена пользователей, компьютеров и приложений. Каждому элементу сопоставляется внутренний числовой индекс.*.lgp содержат непосредственные строки событий. Чтобы экономить дисковое пространство, в них вместо полных названий сохраняются числовые ссылки на словарь из файла 1Cv8.lgf.*.lgx, ускоряющие выборку и сопоставление.Чаще всего повреждение структуры журнала происходит при попытке вручную объединить журналы регистрации (например, после переноса информационной базы). Если администратор просто копирует файлы *.lgp и вставляет строки из одного файла 1Cv8.lgf в конец другого, возникают критические коллизии:
1Cv8.lgf появляются одинаковые системные события с разными числовыми кодами (например, строчки {4,"_$Session$_.Start",1} и {4,"_$Session$_.Start",2}).*.lgp перестают соответствовать индексам в общем файле 1Cv8.lgf или начинают указывать на другие объекты.Проанализируем, почему при этом динамический отбор продолжает функционировать, а полный отбор блокируется:
*.lgp порционно, последовательно отображая строки по мере прокрутки. Ошибки сопоставления индексов обрабатываются мягко или подменяются системным сообщением «Повреждение журнала», не приводя к аварийному завершению всей выборки.1Cv8.lgf. Обнаружив дублирующиеся дескрипторы системных событий или битые связи, алгоритм выборки прерывает обработку, возвращая пустую таблицу.Если требуется сохранить объединенную историю событий, разберем по шагам, как исправить структуру словаря и восстановить согласованность данных:
1Cv8Log.1Cv8Log.1Cv8.lgf в текстовом редакторе с поддержкой UTF-8 (например, Notepad++)._$Session$_.Start, _$Transaction$_.Begin, _$Transaction$_.Commit и др.). Каждое системное событие должно встречаться в словаре строго один раз с минимальным присвоенным номером.*.lgp использовались удаленные индексы событий, выполним пакетную замену номеров в файлах данных на актуальные индексы из файла 1Cv8.lgf.*.lgx. При следующем обращении к журналу сервер перестроит индексы автоматически на основании исправленного словаря.Чтобы избежать коллизий словарей идентификаторов при переносе или объединении баз, не следует копировать текстовые файлы напрямую. Рассмотрим программный способ слияния журналов средствами встроенного языка 1С:
СкопироватьЖурналРегистрации() или ВыгрузитьЖурналРегистрации() для получения записей из исходных файлов.
// Пример программного чтения и выгрузки событий журнала
ФильтрЖурнала = Новый Структура;
ФильтрЖурнала.Вставить("ДатаНачала", НачалоДня(ТекущаяДата() - 86400 * 30));
ТаблицаЖурнала = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(
ТаблицаЖурнала,
ФильтрЖурнала,
"Дата, ИмяПользователя, Компьютер, Событие, ПредставлениеСобытия"
);
Если ручное исправление и перекодирование тысяч строк в файлах *.lgp является слишком трудоемким, а старые события требуются только для периодического аудита, применим раздельный просмотр:
*.lgp со старым файлом 1Cv8.lgf перенесем в отдельный каталог архива.Файл -> Открыть и укажем нужный файл *.lgp. Платформа откроет его в режиме архивного журнала регистрации без объединения с текущей базой.