К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как писать в журнал регистрации 1С

Как программно записывать события в журнал регистрации 1С: метод ЗаписьЖурналаРегистрации, уровни событий, отладка, типичные ошибки и рекомендации для разработчиков.

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

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

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

Синтаксис метода ЗаписьЖурналаРегистрации

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

ЗаписьЖурналаРегистрации(

"Обмен с сайтом.Выгрузка заказов",

УровеньЖурналаРегистрации.Ошибка,

Метаданные.Документы.ЗаказПокупателя,

СсылкаНаЗаказ,

"Не удалось выгрузить заказ: " + ОписаниеОшибки());

Первый параметр — строка с именем события. Принято строить её иерархически через точку: «Обмен с сайтом.Выгрузка заказов». Такие имена удобно фильтровать в просмотре журнала. Второй параметр — уровень важности из системного перечисления УровеньЖурналаРегистрации. Третий — объект метаданных, к которому относится запись; он попадает в колонку «Метаданные» и упрощает анализ.

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

Выбор уровня события

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

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

Не записывайте всё подряд с уровнем «Информация»: в рабочей базе журнал растёт быстро, и поиск реальных ошибок среди тысяч информационных записей превращается в проблему. Разумный баланс — ошибки и предупреждения всегда, информационные записи только о ключевых точках процесса.

Типовые сценарии использования

Логирование ошибок в обработчиках исключений

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

Попытка

ВыполнитьОбмен();

Исключение

ЗаписьЖурналаРегистрации("Обмен.Основной",

УровеньЖурналаРегистрации.Ошибка, , ,

ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

КонецПопытки;

Фоновые и регламентные задания

Регламентные задания выполняются без интерфейса, и журнал регистрации — единственный способ понять, что происходило. Записывайте старт задания, его результат и длительность. Если задание завершилось с исключением, платформа сама пишет запись об ошибке, но она содержит минимум деталей — собственная запись с контекстом (параметры запуска, объём данных) сильно упрощает диагностику.

Интеграции и обмены данными

При обменах фиксируйте три точки: начало сеанса обмена, итог (сколько объектов загружено, сколько с ошибками) и каждую ошибку по конкретному объекту со ссылкой в параметре «Данные». Тогда администратор из журнала сможет открыть проблемный документ одним кликом.

Как добавить запись в журнал из своего кода
  1. 1
    Определите место в коде, где нужна фиксация: обработчик исключения, начало/конец операции, точка принятия решения
  2. 2
    Сформулируйте имя события в формате «Подсистема.Действие», например «ЗагрузкаКурсов.ПолучениеОтвета»
  3. 3
    Выберите уровень: Ошибка для сбоев, Предупреждение для отклонений, Информация для штатных этапов
  4. 4
    Вызовите ЗаписьЖурналаРегистрации() с метаданными, ссылкой на объект и информативным комментарием
  5. 5
    Выполните код и проверьте запись через «Администрирование — Журнал регистрации» с отбором по вашему событию

Где смотреть записи и как проверить результат

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

Проверяйте не только факт появления записи, но и заполнение колонок: «Метаданные», «Данные», «Комментарий». Пустые колонки означают, что соответствующие параметры не переданы, и ценность записи для расследования снижается.

Контрольные точки

Как проверить результат

Запись появилась в журнале
Норма

Видна при отборе по событию с нужным уровнем

Тревожный признак

Записи нет — код не выполнился или вызван на клиенте, где метод недоступен

Колонка «Данные»
Норма

Содержит ссылку, по которой открывается объект

Тревожный признак

Пусто — параметр «Данные» не передан

Текст комментария
Норма

Содержит причину и контекст ошибки

Тревожный признак

Только «Ошибка» без деталей — разбор инцидента невозможен

Ограничения и нюансы платформы

Метод ЗаписьЖурналаРегистрации недоступен в контексте тонкого и веб-клиента. Если код общего модуля может выполняться на клиенте, выносите запись в серверную процедуру. В мобильной платформе и внешних соединениях также есть свои ограничения — проверяйте контекст исполнения.

Второй нюанс — транзакции. По умолчанию запись журнала выполняется в той же транзакции, и при её откате запись теряется. Для ошибок это критично: вы фиксируете исключение, откатываете транзакцию — и записи нет. Решение — шестой параметр метода, РежимТранзакцииЗаписиЖурналаРегистрации.Независимая, который записывает событие вне текущей транзакции.

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

Типичные ошибки разработчиков

Наиболее распространённая ошибка — запись только текста «Ошибка» без деталей. Такая запись бесполезна: через неделю никто не вспомнит, что именно произошло. Всегда включайте описание исключения, имя процедуры и ключевые параметры вызова.

Вторая ошибка — использование Сообщить() вместо записи в журнал в серверном коде. Сообщения в фоновом задании никто не увидит, они теряются. Третья — отсутствие имени события с пространством имён: записи «Ошибка» от десятка подсистем перемешиваются, и фильтрация становится невозможной.

Типичные ошибки
01
Запись в транзакции без независимого режима — при откате запись об ошибке исчезает
02
Вызов метода на тонком клиенте — исключение «Метод не доступен»
03
Пустые параметры «Метаданные» и «Данные» — невозможно перейти к проблемному объекту
04
Запись в цикле на каждой итерации — раздувание журнала и лишняя нагрузка
05
Уровень «Информация» для реальных ошибок — сбой не виден при фильтрации ошибок

Альтернативы и дополнительные инструменты

Журнал регистрации не всегда оптимален. Для длительного хранения истории обменов с деталями по объектам удобнее собственный регистр сведений «Лог обмена» — его можно показать пользователям в интерфейсе и строить по нему отчёты, чего с журналом регистрации делать нельзя. Для расследования производительности используйте технологический журнал платформы, а для трассировки запросов — замеры через отладчик или консоль кода.

Сравнение вариантов логирования

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

Штатно, без доработок, надёжно. Ограничение: нет отчётов, просмотр только администратором

Регистр сведений для логов

Гибкие отборы, доступ пользователям, отчёты. Ограничение: нужна разработка и контроль объёма данных

Технологический журнал

Детальная трассировка платформы, запросы, блокировки. Ограничение: сложная настройка, большие объёмы, не для бизнес-событий

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

Итог

Что важно запомнить

Запись выполняется методом ЗаписьЖурналаРегистрации на сервере. Давайте событиям иерархические имена, выбирайте уровень по важности, передавайте ссылку на объект и подробный комментарий. Для ошибок внутри транзакций используйте независимый режим записи и никогда не логируйте пароли и токены.

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

Можно ли писать в журнал регистрации с клиента?

Нет, на тонком и веб-клиенте метод недоступен. Оборачивайте вызов в серверную процедуру общего модуля с флагом «Сервер» и вызывайте её из клиентского кода.

Почему моя запись не появилась в журнале?

Чаще всего запись выполнялась внутри транзакции, которая была отменена. Используйте шестой параметр метода — независимый режим записи. Также проверьте, что код вообще выполнился и не отсечён более ранним исключением.

Как записать полный текст ошибки со стеком вызовов?

В свежих версиях платформы используйте ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()). В старых — функцию ОписаниеОшибки(), но она даёт меньше деталей.

Влияют ли записи на производительность базы?

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

Можно ли автоматически оповещать об ошибках из журнала?

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

Как долго хранятся записи журнала?

Срок зависит от настроек: в файловой базе журнал — файл, который можно разделять по периодам; в клиент-серверном варианте хранение регулируется настройками сокращения. Администратор может настроить автоматическое удаление старых записей, поэтому для долгосрочной истории используйте собственные регистры.