Почему в 1С не отображается журнал регистрации при способе отбора Отобрать сразу

Системный администратор IT и автоматизация бизнеса
← На главную

При администрировании информационных баз 1С:Предприятия версии 8.2 и баз с классическим форматом хранения журнала регистрации можно столкнуться с ситуацией, когда в режиме «Отобрать сразу» окно журнала остается пустым или выдает ошибку, в то время как при выборе режима «Фильтровать динамически» записи успешно выводятся на экран. Разберем причины возникновения этой проблемы, особенности структуры файлов журнала регистрации и способы восстановления корректной работы.

Причины сбоя и механизм работы режимов отбора

Для понимания сути проблемы рассмотрим, как устроен текстовый журнал регистрации формата 1С 8.2, состоящий из файлов в каталоге 1Cv8Log:

  1. Файл 1Cv8.lgf представляет собой словарь идентификаторов. В нем регистрируются все уникальные системные и прикладные события, метаданные, имена пользователей, компьютеров и приложений. Каждому элементу сопоставляется внутренний числовой индекс.
  2. Файлы с расширением *.lgp содержат непосредственные строки событий. Чтобы экономить дисковое пространство, в них вместо полных названий сохраняются числовые ссылки на словарь из файла 1Cv8.lgf.
  3. В клиент-серверном варианте базы данных рядом с файлами данных формируются индексные файлы *.lgx, ускоряющие выборку и сопоставление.

Чаще всего повреждение структуры журнала происходит при попытке вручную объединить журналы регистрации (например, после переноса информационной базы). Если администратор просто копирует файлы *.lgp и вставляет строки из одного файла 1Cv8.lgf в конец другого, возникают критические коллизии:

  1. Дублирование системных идентификаторов: в файле 1Cv8.lgf появляются одинаковые системные события с разными числовыми кодами (например, строчки {4,"_$Session$_.Start",1} и {4,"_$Session$_.Start",2}).
  2. Рассинхронизация ссылочной целостности: числовые индексы событий в перенесенных файлах *.lgp перестают соответствовать индексам в общем файле 1Cv8.lgf или начинают указывать на другие объекты.

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

  1. Режим «Фильтровать динамически»: платформа считывает данные из файлов *.lgp порционно, последовательно отображая строки по мере прокрутки. Ошибки сопоставления индексов обрабатываются мягко или подменяются системным сообщением «Повреждение журнала», не приводя к аварийному завершению всей выборки.
  2. Режим «Отобрать сразу»: платформа пытается загрузить и связать весь массив данных за указанный интервал времени в оперативной памяти, выполняя полную валидацию со словарем 1Cv8.lgf. Обнаружив дублирующиеся дескрипторы системных событий или битые связи, алгоритм выборки прерывает обработку, возвращая пустую таблицу.

Способ 1. Ручное исправление словаря и переиндексация файлов

Если требуется сохранить объединенную историю событий, разберем по шагам, как исправить структуру словаря и восстановить согласованность данных:

  1. Остановим службу сервера 1С:Предприятия (или закроем все клиентские сеансы в случае файловой базы) для снятия файловых блокировок с каталога 1Cv8Log.
  2. Создадим резервную копию всей папки 1Cv8Log.
  3. Откроем файл 1Cv8.lgf в текстовом редакторе с поддержкой UTF-8 (например, Notepad++).
  4. Найдем и удалим дублирующиеся строки для стандартных системных событий (таких как _$Session$_.Start, _$Transaction$_.Begin, _$Transaction$_.Commit и др.). Каждое системное событие должно встречаться в словаре строго один раз с минимальным присвоенным номером.
  5. Если в скопированных файлах *.lgp использовались удаленные индексы событий, выполним пакетную замену номеров в файлах данных на актуальные индексы из файла 1Cv8.lgf.
  6. В каталоге журнала регистрации удалим все индексные файлы с расширением *.lgx. При следующем обращении к журналу сервер перестроит индексы автоматически на основании исправленного словаря.
  7. Запустим службу сервера 1С и проверим работу отбора в режиме «Отобрать сразу».

Способ 2. Корректное программное объединение журналов

Чтобы избежать коллизий словарей идентификаторов при переносе или объединении баз, не следует копировать текстовые файлы напрямую. Рассмотрим программный способ слияния журналов средствами встроенного языка 1С:

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

// Пример программного чтения и выгрузки событий журнала
ФильтрЖурнала = Новый Структура;
ФильтрЖурнала.Вставить("ДатаНачала", НачалоДня(ТекущаяДата() - 86400 * 30));
ТаблицаЖурнала = Новый ТаблицаЗначений;

ВыгрузитьЖурналРегистрации(
    ТаблицаЖурнала,
    ФильтрЖурнала,
    "Дата, ИмяПользователя, Компьютер, Событие, ПредставлениеСобытия"
);

Способ 3. Просмотр старых файлов журнала как архивных

Если ручное исправление и перекодирование тысяч строк в файлах *.lgp является слишком трудоемким, а старые события требуются только для периодического аудита, применим раздельный просмотр:

  1. Оставим в рабочей информационной базе только оригинальный журнал регистрации, созданный платформой после переноса базы.
  2. Архивные файлы *.lgp со старым файлом 1Cv8.lgf перенесем в отдельный каталог архива.
  3. Для просмотра исторических данных в режиме 1С:Предприятие или Конфигуратор выберем в главном меню Файл -> Открыть и укажем нужный файл *.lgp. Платформа откроет его в режиме архивного журнала регистрации без объединения с текущей базой.
← На главную