Как настроить журнал регистрации 1С, писать в него из кода и находить причины сбоев

· 9 мин

Содержание

Журнал регистрации 1С включают в Конфигураторе: Администрирование → Настройка журнала регистрации, уровень «Регистрировать ошибки, предупреждения и информацию» подходит почти любой рабочей базе. Смотреть записи можно там же (Администрирование → Журнал регистрации) или в пользовательском режиме: в БП 3.0, ЗУП 3.1 и УТ 11 это Администрирование → Обслуживание → Журнал регистрации. Свою запись из кода добавляет метод ЗаписьЖурналаРегистрации().

Журнал — это лог платформы. Он фиксирует, кто и когда вошёл в базу, какие объекты изменил, где упала транзакция и какую ошибку получил пользователь. Работает одинаково в любой конфигурации на платформе 8.3, разница только в том, как открыть форму просмотра.

Какие события записывает журнал и как задать уровень

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

Уровень в настройкеЧто пишетсяКогда выбирать
Не регистрироватьНичегоНикогда для рабочей базы
Регистрировать ошибкиТолько ошибкиОгромные базы с жёсткой экономией диска
Ошибки и предупрежденияПлюс предупрежденияКомпромисс по объёму
Ошибки, предупреждения и информациюПлюс входы, изменения данных, запуск регламентных заданийРекомендуемый вариант
Регистрировать все событияПлюс примечания (служебные мелочи)Временно, на время отладки

Как поменять уровень:

  1. Откройте базу в Конфигураторе под пользователем с правами администратора.
  2. Выберите Администрирование → Настройка журнала регистрации.
  3. Отметьте нужный уровень и нажмите «ОК».

Настройка действует сразу, перезапускать сеансы пользователей не нужно.

Уровень «Регистрировать все события» быстро раздувает лог: в базе на 30–50 активных пользователей файлы растут на гигабайты в месяц. Включайте его на день-два, пока ловите проблему, потом возвращайте прежний.

В том же окне есть кнопка «Сократить» и настройка разделения журнала по периодам. О них — в разделе про хранение.

Как писать в журнал регистрации из кода

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

Метод глобального контекста:

ЗаписьЖурналаРегистрации(ИмяСобытия, Уровень, ОбъектМетаданных, Данные, Комментарий, РежимТранзакции);

Что передавать:

  • 📝 ИмяСобытия — строка, по ней потом фильтруют. Удобно группировать через точку: "ОбменСБанком.Загрузка", "ОбменСБанком.Ошибка".
  • ⚠️ Уровень — значение УровеньЖурналаРегистрации.Ошибка, .Предупреждение, .Информация или .Примечание.
  • 📦 ОбъектМетаданных — например, Метаданные.Документы.ПоступлениеНаРасчетныйСчет. Даёт отбор по объекту.
  • 🔗 Данные — ссылка на конкретный документ или элемент. В форме просмотра по ней можно открыть объект.
  • 💬 Комментарий — произвольный текст, сюда кладут описание ошибки.
  • 🔁 РежимТранзакции — РежимТранзакцииЗаписиЖурналаРегистрации.Независимая (по умолчанию) или .Транзакционная.

Типичная запись ошибки в обработке выгрузки:

Попытка
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
    ЗаписьЖурналаРегистрации("ЗагрузкаВыписки.Ошибка",
        УровеньЖурналаРегистрации.Ошибка,
        ДокументОбъект.Метаданные(),
        ДокументОбъект.Ссылка,
        ТекстОшибки);
КонецПопытки;

И итоговая информационная запись после цикла:

ЗаписьЖурналаРегистрации("ЗагрузкаВыписки.Итог",
    УровеньЖурналаРегистрации.Информация, , ,
    СтрШаблон("Загружено документов: %1, с ошибками: %2",
        Формат(Загружено, "ЧН=0; ЧГ=0"), Формат(Ошибок, "ЧН=0; ЧГ=0")));

Независимая или транзакционная запись

Разница важна при отладке. Независимая запись остаётся в журнале, даже если внешняя транзакция откатилась. Транзакционная попадёт в лог только при успешной фиксации транзакции.

Ошибки внутри транзакции пишите в независимом режиме — иначе запись исчезнет вместе с откатом, и вы не узнаете, что произошло.

Запись с клиента

На тонком клиенте и в веб-клиенте метод ЗаписьЖурналаРегистрации недоступен: журнал ведётся на сервере. Варианты:

  • вызвать серверную процедуру общего модуля, которая сделает запись;
  • в типовых конфигурациях на БСП — накопить сообщения через ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(), библиотека сама передаст их на сервер.

Не пишите в журнал в каждой итерации цикла на 100 тысяч строк. Одна запись на ошибку и одна итоговая — этого достаточно. Иначе лог раздуется, а нужное событие утонет среди служебных.

Как открыть журнал регистрации 1С и читать записи

Форма просмотра одна и та же — меняется только путь к ней.

Где открываетеПуть
КонфигураторАдминистрирование → Журнал регистрации
БП 3.0, ЗУП 3.1, УТ 11, КА 2Администрирование → Обслуживание → Журнал регистрации
Любая конфигурация, режим 1С:ПредприятиеВсе функции → Стандартные → Журнал регистрации

Команда «Все функции» по умолчанию скрыта. Включите её через главное меню (кнопка с тремя полосками слева вверху): Сервис → Параметры, флажок «Отображать команду „Все функции“».

Что видно в списке:

  • 🕒 Дата — время события на сервере.
  • 👤 Пользователь и компьютер — кто работал и откуда.
  • 🖥 Приложение — тонкий клиент, Конфигуратор, фоновое задание, COM-соединение, веб-клиент.
  • 🏷 Событие — например, «Сеанс. Начало», «Данные. Изменение», «Транзакция. Отмена».
  • 📄 Метаданные и данные — какой объект и какой именно документ.
  • 💬 Комментарий — сюда платформа кладёт текст ошибки.

Двойной щелчок по строке открывает карточку события с полным текстом. По ссылке в поле «Данные» можно перейти к самому документу.

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

Отбор событий: как быстро найти нужную запись

Журнал рабочей базы за месяц — это сотни тысяч строк. Листать его бесполезно, работают только отборы. В форме просмотра нажмите «Отбор» (или «Установить отбор» — название кнопки зависит от вида формы).

Поля отбора, которыми пользуются чаще всего:

  1. Период — всегда сужайте до часов вокруг сбоя. Это и ускоряет открытие.
  2. Уровень — для поиска сбоя оставьте только «Ошибка».
  3. Пользователи — если жалуется конкретный сотрудник.
  4. События — дерево событий: можно выбрать только «Данные. Удаление» или свои события вроде ЗагрузкаВыписки.Ошибка.
  5. Метаданные — например, все изменения документов «Реализация товаров и услуг».
  6. Данные — история одного конкретного документа.
  7. Комментарий — поиск по фрагменту текста ошибки.

Три частых сценария:

ЗадачаКак настроить отбор
Кто удалил документМетаданные — нужный вид документа, событие «Данные. Удаление», период
Почему пользователь не может войтиПользователь, события группы «Сеанс», уровень «Ошибка»
Упал ли ночной обменПриложение «Фоновое задание», уровень «Ошибка», период — ночь

Отбор по полю «Данные» работает только для записей, где ссылка была передана. Если документ уже удалён, ищите по метаданным и периоду.

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

Как анализировать ошибки по журналу

Журнал отвечает на вопросы «что, когда, кто». Порядок работы при разборе сбоя:

  1. Узнайте точное время ошибки у пользователя — хотя бы с точностью до 10–15 минут.
  2. Поставьте отбор по периоду и уровню «Ошибка».
  3. Откройте событие и прочитайте комментарий целиком. Там есть текст исключения и, часто, модуль со строкой: {ОбщийМодуль.ИмяМодуля.Модуль(245)}.
  4. Посмотрите соседние записи без отбора по уровню: что этот же сеанс делал за минуту до ошибки.
  5. Проверьте поле «Сеанс»: номер сеанса связывает все события одного подключения.

Номер строки в комментарии сразу ведёт к месту в коде: откройте модуль в Конфигураторе и перейдите к строке через Ctrl+G.

Пример разбора. Бухгалтер говорит: «утром не провелась реализация, выдало ошибку и всё». Ставим отбор на 9:00–10:00 и пользователя. Видим три записи подряд: «Данные. Проведение» с уровнем «Ошибка», затем «Транзакция. Отмена». В комментарии первой — текст про недостаток остатков и ссылка на документ. Причина найдена за пару минут, без переписки скриншотами.

Если ошибка воспроизводится, её можно поймать ещё точнее. Временно включите уровень «Регистрировать все события», повторите действие и сразу верните прежний уровень. Так в журнал попадут примечания, которые обычно отсекаются.

Диагностика: выберите симптом

Когда журнала мало: технологический журнал

Журнал регистрации не показывает тексты запросов, длительность вызовов и блокировки СУБД. Для этого есть технологический журнал платформы. Его включают файлом logcfg.xml в каталоге conf установленной платформы, и он пишет логи в указанный там каталог.

Это инструмент для медленной работы и взаимоблокировок. Для вопросов «кто изменил» и «почему не провёлся» хватает журнала регистрации.

Где хранится журнал регистрации и как его чистить

Физически журнал лежит в каталоге 1Cv8Log:

  • файловая база — внутри каталога базы, рядом с 1Cv8.1CD;
  • клиент-серверная — в каталоге кластера: srvinfo\reg_1541\<идентификатор базы>\1Cv8Log. По умолчанию srvinfo находится в каталоге установки сервера 1С.

Идентификатор базы покажет команда rac infobase summary list --cluster=<id кластера>, а id кластера — rac cluster list.

Форматы файлов

ФорматФайлыОсобенности
Последовательный1Cv8.lgf + много *.lgpБыстрая запись, файлы легко архивировать по одному
SQLite1Cv8.lgdОдин большой файл, при росте до десятков гигабайт форма просмотра заметно тормозит

Формат видно по расширению файлов в каталоге.

Сокращение журнала

В Конфигураторе: Администрирование → Настройка журнала регистрации → Сократить. Укажите дату — всё, что раньше, удалится. Удалённые события можно сохранить в отдельный файл: отметьте эту опцию и задайте путь.

Сокращение необратимо. Перед ним скопируйте каталог 1Cv8Log целиком. Журнал часто нужен для разбора спорных ситуаций: кто провёл документ задним числом, кто удалил контрагента.

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

Сколько хранить — решает регламент компании. Ориентир: держать в рабочей базе 3–6 месяцев, старое — в архиве.

Если журнал повреждён

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

  1. Попросите пользователей завершить работу — следующий шаг затрагивает активные сеансы.
  2. Для клиент-серверной базы остановите службу агента сервера 1С в нерабочее время.
  3. Переименуйте каталог 1Cv8Log (например, в 1Cv8Log_old).
  4. Запустите службу — платформа создаст пустой журнал.

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

Особенности журнала в разных режимах работы

РежимЧто учесть
Файловая базаЖурнал пишет клиентское приложение в каталог базы. Нужны права на запись в 1Cv8Log у каждого пользователя Windows
Клиент-серверЖурнал ведёт рабочий процесс кластера. Права на запись нужны пользователю, от которого запущена служба 1С
Веб-клиент и публикация на веб-сервереСобытия пишутся так же, как у кластера или файловой базы; в поле «Приложение» видно веб-клиент
Фоновые и регламентные заданияПользователь может быть пустым, если задание запущено без указания пользователя
Внешнее соединение (COM)Приложение — «COM-соединение», удобно отбирать интеграции
КонфигураторВходы в Конфигуратор и обновление конфигурации тоже фиксируются в журнале

Если в файловой базе журнал перестал пополняться у части пользователей — первым делом проверьте их права на каталог 1Cv8Log.

Частые вопросы

Можно ли отредактировать или удалить одну запись из журнала регистрации?
Нет. Платформа не даёт править отдельные записи. Можно только сократить журнал целиком до выбранной даты.
Видно ли в журнале, какие именно реквизиты документа поменяли?
Нет, журнал фиксирует сам факт изменения. Для истории значений реквизитов используют версионирование объектов, оно есть в типовых конфигурациях на БСП.
Почему время событий в журнале не совпадает с часами пользователя?
Время берётся с сервера, где ведётся журнал. Для клиент-серверной базы это часы сервера 1С. Сверьте часовой пояс и время на нём.
Можно ли выгрузить журнал программно?
Да, методом ВыгрузитьЖурналРегистрации(). Он принимает таблицу значений или имя файла и структуру отбора с полями вроде ДатаНачала, ДатаОкончания, Уровень.
Влияет ли журнал на скорость работы базы?
При уровне «Все события» и большом SQLite-файле — заметно. При рекомендуемом уровне и регулярном сокращении влияние минимальное.