Что делать, если журнал регистрации 1С не сокращается и выдает ошибку sqlite3_step failed

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

При работе с крупными информационными базами системные администраторы и программисты часто сталкиваются с тем, что журнал регистрации (ЖР) разрастается до огромных размеров (100, 200 ГБ и более). В таких случаях стандартная процедура сокращения журнала через Конфигуратор может завершиться критическим сбоем с текстом ошибки: sqlite3_step failed: callback requested query abort. Это происходит из-за того, что движок SQLite, на котором построен современный журнал регистрации (формат .lgd), не справляется с объемом операций в рамках установленных таймаутов или из-за нехватки ресурсов дисковой подсистемы.

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

Выясним причину ошибки sqlite3_step failed

Прежде чем переходить к активным действиям, проанализируем ситуацию. Ошибка callback requested query abort буквально означает, что внешнее приложение (в данном случае платформа 1С) принудительно прервало выполнение SQL-запроса к файлу журнала. Основные причины:

  1. Нехватка места для временных файлов: При выполнении команды DELETE или VACUUM в SQLite системе требуется свободное место, сопоставимое с размером самого файла. Если ваш журнал занимает 200 ГБ, а на диске осталось менее 200 ГБ, операция гарантированно прервется.
  2. Блокировки антивирусом: Длительные операции записи в огромный файл привлекают внимание антивирусного ПО, которое может заблокировать доступ к файлу на время сканирования, вызвав ошибку в 1С.
  3. Таймауты сессии: Если операция удаления записей длится слишком долго, внутренние механизмы платформы могут решить, что процесс «завис», и прервать его.

Способ 1: Принудительная ротация журнала («Кража» файла)

Если стандартное сокращение через интерфейс не работает, мы применим метод ручной ротации. Рассмотрим этот процесс по шагам:

  1. Остановим сервер 1С:Предприятия. Это критически важно, так как файл 1Cv8.lgd постоянно открыт процессом rphost. Попытка копирования «на горячую» может привести к повреждению структуры базы данных SQLite.
  2. Перейдем в каталог информационной базы на сервере. Путь обычно выглядит так: C:\Program Files\1cv8\srvinfo\<ID_базы>\1Cv8Log\.
  3. Найдем файл 1Cv8.lgd (это и есть наш журнал на 200 ГБ).
  4. Переместим (не скопируем, а именно переместим) этот файл в архивную папку на другом диске. Можно переименовать его, например, в 2023_archive.lgd.
  5. Запустим службу сервера 1С.

После запуска платформа увидит, что в папке 1Cv8Log отсутствует файл журнала, и автоматически создаст новый, пустой файл 1Cv8.lgd. С этого момента база начнет летать, а запись событий будет происходить мгновенно.

Способ 2: Просмотр архивного журнала в управляемых формах

Теперь разберем ситуацию: руководство просит узнать, кто изменил документ месяц назад, а эти данные остались в том самом старом файле на 200 ГБ. В современных конфигурациях (на управляемых формах) реализован удобный механизм просмотра внешних логов.

Проанализируем алгоритм действий:

  1. Откроем 1С в режиме «Предприятие».
  2. Перейдем в меню «Функции для технического специалиста» (в старых версиях — «Все функции»).
  3. Найдем раздел «Стандартные» и выберем «Журнал регистрации».
  4. В открывшемся окне нажмем кнопку «Ещё» и выберем пункт «Посмотреть из файла...».
  5. Укажем путь к нашему архивному файлу 2023_archive.lgd.

Платформа подгрузит данные из файла без необходимости импорта их в основную базу. Стоит помнить, что открытие файла в 200 ГБ может занять длительное время, поэтому рекомендуется использовать фильтры по периоду или объекту сразу при возможности.

Способ 3: Работа в обычных формах (УТ 10.3)

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

Рассмотрим вариант использования внешней обработки. Фирма 1С предоставляет специальную обработку для работы с журналом регистрации, которую можно найти на диске ИТС или в составе методической поддержки. Данная обработка позволяет открывать произвольные файлы .lgd и работать с ними в привычном интерфейсе 1С.

Если же доступ к 1С ограничен, можно воспользоваться сторонними утилитами для работы с SQLite, такими как DB Browser for SQLite. Поскольку формат журнала — это стандартная реляционная база данных, мы можем выполнить прямой SQL-запрос к таблице событий:


SELECT 
    datetime(date/10000 - 62135596800, 'unixepoch') as EventDate,
    userName,
    presentation
FROM EventLog
WHERE presentation LIKE '%НомерДокумента%'
LIMIT 100;

Этот метод работает значительно быстрее встроенных средств 1С, так как позволяет использовать всю мощь индексов SQLite без накладных расходов платформы.

Рекомендации по профилактике: как не допустить разрастания ЖР

Чтобы в будущем не сталкиваться с проблемой 200-гигабайтных файлов, проанализируем настройки системы:

  1. Переход на новый формат хранения: Начиная с версии платформы 8.3.5.1068, появилась возможность использовать «новый формат журнала». Вместо одного файла .lgd создается папка с множеством мелких файлов, разделенных по времени. Это позволяет удалять старые записи простым удалением файлов из папки, что исключает ошибки SQLite.
  2. Настройка состава событий: Зайдем в Конфигуратор -> Администрирование -> Настройка журнала регистрации. Проверим, не записывается ли туда избыточная информация. Часто для большинства объектов достаточно уровня Регистрация изменений, а Информацию (просмотр, открытие) можно отключить для некритичных справочников.
  3. Регламентное сокращение: Настроим еженедельное сокращение журнала. Рассмотрим пример: храним в рабочем журнале данные за последние 3 месяца, а всё, что старше — выгружаем во внешние файлы. Это позволит поддерживать размер файла в пределах 5–10 ГБ, что гарантирует стабильную работу sqlite3_step.

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

Важное замечание: Если после удаления большого количества записей размер файла .lgd на диске не уменьшился — это нормальное поведение SQLite. Чтобы физически сжать файл, необходимо выполнить команду VACUUM. В 1С это происходит автоматически при завершении процедуры сокращения, если она прошла успешно. Если же вы работаете с файлом через сторонние утилиты, выполните команду вручную, но помните о необходимости двойного запаса свободного места на диске.

← На главную