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

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

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

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

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

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

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

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

Базовый вызов выглядит так:

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

"Обмен данными.Выгрузка", // Имя события

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

Метаданные.Справочники.Номенклатура, // Объект метаданных (необязательно)

СсылкаНаОбъект, // Данные (необязательно)

"Выгружено 150 позиций", // Комментарий

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

);

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

Параметр «Метаданные» привязывает запись к объекту конфигурации. Это удобно для фильтрации: в окне просмотра журнала можно отобрать события по конкретному виду документов или справочников. Если привязка не нужна, параметр опускают.

Уровни событий: какой выбрать

Уровень определяет визуальную маркировку записи и влияет на фильтрацию. Доступны четыре значения перечисления УровеньЖурналаРегистрации:

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

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

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

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

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

Типовой сценарий: запись ошибки из обработчика исключения

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

Попытка

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

Исключение

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

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

"Обмен данными.Загрузка",

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

,

,

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

ВызватьИсключение;

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

Функция ПодробноеПредставлениеОшибки даёт развёрнутое описание с местом возникновения — это заметно полезнее короткого текста из ОписаниеОшибки(). Пустые параметры «Метаданные» и «Данные» просто пропускаются запятыми.

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

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

Фиксация старта и завершения длительных операций

Для обменов, загрузок и массовых обработок полезно писать две записи: начало и результат. Это позволяет оценить длительность по меткам времени и быстро понять, завершилась ли операция вообще:

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

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

"Начата загрузка файла " + ИмяФайла);

// ... основная логика ...

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

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

"Загрузка завершена. Обработано строк: " + СчетчикСтрок);

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

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

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

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

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

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

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

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

Наличие записи в журнале по фильтру события
Норма

Строка с нужным именем события, уровнем и комментарием видна за ожидаемый период

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

Записи нет — код не выполнился, транзакция откачена или выбрана не та база

Содержимое комментария
Норма

В карточке события полный текст с деталями операции

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

Комментарий пустой или обрезанный — параметр не передан или слишком длинный

Привязка к данным
Норма

Из карточки открывается связанный объект

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

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

Транзакционный режим и производительность

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

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

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

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

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

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

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

Типичные ошибки
01
Писать ошибки с уровнем Информация — при фильтрации по ошибкам сбой не виден
02
Логировать каждую строку цикла — журнал раздувается, поиск замедляется
03
Использовать транзакционный режим для ошибок внутри транзакции — после отката запись исчезает
04
Дублировать ЗаписьЖурналаРегистрации и Сообщить одним текстом без разделения аудитории — пользователь видит технические детали, а администратор не получает контекста
05
Указывать имя события по-разному в разных местах кода — историю операции невозможно собрать одним фильтром

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

Можно ли сделать запись в журнал регистрации без программирования?

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

Где физически хранится журнал регистрации?

В файловой базе — в подкаталоге 1Cv8Log рядом с файлом базы, в формате LGD/LGP. В клиент-серверном варианте журнал хранится в служебных таблицах СУБД. Напрямую эти файлы редактировать не следует — только просмотр штатными средствами или выгрузка.

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

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

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

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

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

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

Работает ли метод на клиенте?

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

Итог

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

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