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

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

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

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

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

Для этого во встроенном языке 1С существует метод ЗаписьЖурналаРегистрации(). Он доступен на сервере, в толстом клиенте и во внешнем соединении, работает как в файловых, так и в клиент-серверных базах. Метод не требует дополнительных настроек конфигурации: достаточно вызвать его с нужными параметрами, и запись появится в журнале вместе с датой, пользователем и сеансом.

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

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

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

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

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

УровеньЖурналаРегистрации.Информация,

,

,

"Выгружено заказов: 12");

Параметры метода:

  • Событие — строка, имя события. Именно по нему удобно фильтровать журнал. Принятая практика — иерархические имена через точку: «Обмен с сайтом.Выгрузка заказов».
  • Уровень — значение системного перечисления УровеньЖурналаРегистрации: Ошибка, Предупреждение, Информация, Примечание. Если не указан, используется Информация.
  • Метаданные — объект описания метаданных, к которому относится событие (например, Метаданные.Документы.ЗаказКлиента). Помогает при отборе в журнале.
  • Данные — ссылка на объект базы (документ, элемент справочника), с которым связано событие. В журнале появится возможность перейти к объекту.
  • Комментарий — произвольный текст сообщения, который видит администратор.
  • РежимТранзакции — значение перечисления РежимТранзакцииЗаписиЖурналаРегистрации: Транзакционная или Независимая. О нём подробно ниже.

Минимальный и полный примеры кода

Самый простой вариант — зафиксировать информационное событие с одним текстом:

ЗаписьЖурналаРегистрации("Загрузка курсов валют",

УровеньЖурналаРегистрации.Информация, , ,

"Курсы успешно загружены");

Полный пример с привязкой к метаданным и конкретному документу:

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

"Отправка счёта по e-mail",

УровеньЖурналаРегистрации.Примечание,

Метаданные.Документы.СчетНаОплатуПокупателю,

ДокументСсылка,

"Счёт отправлен контрагенту " + Контрагент);

Такая запись в журнале будет содержать ссылку на документ: администратор сможет открыть его прямо из события. Учтите, что в параметр Данные можно передать только ссылку, а не объект — если у вас объект, используйте его свойство Ссылка.

Как записать ошибку из конструкции Попытка...Исключение

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

Попытка

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

Исключение

ИнфоОшибки = ИнформацияОбОшибке();

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

"Обмен данными.Выполнение",

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

, ,

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

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

Используйте ПодробноеПредставлениеОшибки(), а не КраткоеПредставлениеОшибки(): подробный вариант включает стек вызовов и модуль, в котором возникла ошибка. Для диагностики это критично — краткое сообщение вида «Ошибка при вызове метода контекста» не позволит найти место сбоя.

bsl
ЗаписьЖурналаРегистрации("Обмен.Ошибка", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

Уровни важности и когда какой выбирать

Уровень влияет на то, как запись отображается в журнале (цвет и пиктограмма) и как её фильтровать. Правильный выбор уровня избавляет администратора от «шума» и не даёт потерять реальные ошибки среди информационных сообщений.

УровеньКогда использоватьПример
ОшибкаОперация не выполнена, требуется вмешательствоОбмен завершился с исключением
ПредупреждениеОперация выполнена, но с отклонениямиЧасть строк файла не загружена
ИнформацияШтатное завершение значимой операцииВыгружено 250 документов
ПримечаниеТехнические детали, отладочные сведенияПараметры запуска фонового задания

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

Маршрут решения

Как выбрать уровень

Операция прервана и данные не обработаныУровеньЖурналаРегистрации.Ошибка
Операция завершена, но часть данных пропущенаУровеньЖурналаРегистрации.Предупреждение
Регламентная операция отработала штатноУровеньЖурналаРегистрации.Информация
Нужны отладочные детали на время внедренияУровеньЖурналаРегистрации.Примечание

Режим транзакции: независимая и транзакционная запись

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

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

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

"Проведение документов.Ошибка",

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

, ДокументСсылка,

ТекстОшибки,

РежимТранзакцииЗаписиЖурналаРегистрации.Независимая);

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

Как проверить, что запись появилась в журнале

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

Проверьте ключевые поля записи: дата и время соответствуют моменту вызова, пользователь — тот, под которым выполнялся код (для фоновых заданий это пользователь, указанный при создании задания), уровень совпадает с заданным, а в поле «Данные» присутствует ссылка, если вы её передавали.

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

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

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

Наличие события в журнале с вашим именем
Норма

Запись видна с корректными датой и уровнем

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

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

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

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

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

Пусто, хотя ссылка передавалась — проверьте порядок параметров

Пользователь события
Норма

Совпадает с учётной записью, под которой работал код

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

Другой пользователь — код выполнялся в фоновом задании с иной учётной записью

Типичные ошибки и ограничения

Первая частая ошибка — перепутанный порядок параметров. Параметры Метаданные и Данные идут третьим и четвёртым, и если передать ссылку третьим параметром, компилятор не сообщит об ошибке заранее во всех случаях, а запись окажется некорректной. Всегда явно пропускайте неиспользуемые параметры запятыми.

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

Третья — ожидание, что запись появится мгновенно в клиент-серверном режиме. На сервере 1С журнал буферизуется, и в редких случаях (аварийное завершение рабочего процесса) последние записи могут не сохраниться. Для критичного аудита используйте дополнительные механизмы — например, собственные регистры сведений.

Типичные ошибки
01
Передача ссылки третьим параметром вместо четвёртого — в поле «Данные» ничего не попадает
02
Логирование ошибки в транзакционном режиме — при откате транзакции запись об ошибке исчезает
03
Запись в журнал на каждой итерации большого цикла — рост журнала и просадка производительности
04
Краткое представление ошибки вместо подробного — невозможно найти место сбоя
05
Пароли и ключи в комментарии — утечка через выгрузку журнала

Альтернативы и дополнение: собственное логирование

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

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

Куда писать события

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

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

Регистр сведений

Структурированные данные событий, отчёты и отборы. Требует разработки и самостоятельной очистки

Сообщить() / отладчик

Отладка на этапе разработки. Не сохраняется и недоступно администратору базы

Итог

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

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

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

Можно ли вызвать ЗаписьЖурналаРегистрации на клиенте?

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

Почему запись в журнале появилась, а связанный документ не сохранился?

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

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

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

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

Да, метод ВыгрузитьЖурналРегистрации() позволяет выгрузить события в таблицу значений или файл с отбором по датам, событиям, уровням и пользователям. Это используют для автоматического мониторинга ошибок: например, фоновое задание выгружает ошибки за час и отправляет уведомление ответственному.

Что передать в параметр Событие, если событий много?

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

Видна ли программная запись внешним системам мониторинга?

Напрямую — нет, журнал регистрации хранится внутри инфраструктуры 1С. Для внешнего мониторинга журнал выгружают программно или настраивают технологический журнал и логи СУБД. Если нужна интеграция с системой мониторинга, типовое решение — регламентное задание, читающее новые ошибки и передающее их во внешний сервис.