Разработка и Конфигурация · 11 мин
Как сделать запись в журнал регистрации 1С
Как программно сделать запись в журнал регистрации 1С: метод ЗаписьЖурналаРегистрации, уровни событий, примеры кода, типичные ошибки и проверка результата.
Журнал регистрации в 1С — это встроенный механизм протоколирования, куда платформа автоматически пишет действия пользователей, ошибки и системные события. Разработчику часто нужно добавить туда собственные записи: зафиксировать запуск обработки, сохранить текст ошибки из фонового задания, отметить успешный обмен данными. Делается это одним методом встроенного языка — ЗаписьЖурналаРегистрации.
Метод доступен и на толстом, и на тонком клиенте, и на сервере, поэтому один и тот же код работает в модулях объектов, общих модулях и внешних обработках. Запись сохраняется платформой в служебную базу журнала и видна в стандартном интерфейсе просмотра — через меню «Администрирование — Журнал регистрации» в режиме 1С:Предприятие.
Ниже разобраны сигнатура метода, значения параметров, примеры для типовых сценариев, способы проверить результат и ограничения, о которых стоит помнить, чтобы не замусорить журнал и не потерять важные события.
Метод ЗаписьЖурналаРегистрации: синтаксис и параметры
Базовый вызов выглядит так:
ЗаписьЖурналаРегистрации(
"Обмен данными.Выгрузка", // Имя события
УровеньЖурналаРегистрации.Информация, // Уровень важности
Метаданные.Справочники.Номенклатура, // Объект метаданных (необязательно)
СсылкаНаОбъект, // Данные (необязательно)
"Выгружено 150 позиций", // Комментарий
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная
);
Обязателен только первый параметр — имя события. Остальные можно опускать, но на практике комментарий почти всегда нужен: именно его читает администратор при разборе ситуации. Параметр «Данные» принимает значение любого типа — ссылку, число, строку; платформа сохранит его представление и позволит открыть объект из журнала.
Параметр «Метаданные» привязывает запись к объекту конфигурации. Это удобно для фильтрации: в окне просмотра журнала можно отобрать события по конкретному виду документов или справочников. Если привязка не нужна, параметр опускают.
Уровни событий: какой выбрать
Уровень определяет визуальную маркировку записи и влияет на фильтрацию. Доступны четыре значения перечисления УровеньЖурналаРегистрации:
- Ошибка — операция не выполнена, требуется вмешательство. Используйте в обработчиках исключений.
- Предупреждение — операция завершилась, но с отклонениями: не найден объект, пропущена строка, применено значение по умолчанию.
- Информация — штатное событие: старт и завершение обмена, успешная загрузка, выполнение регламентного задания.
- Примечание — отладочные и второстепенные детали, которые не нужны при обычном просмотре.
Правильный выбор уровня экономит время при расследовании инцидентов: администратор сначала фильтрует журнал по уровню «Ошибка», и если реальная ошибка записана как «Информация», её легко пропустить. Обратная крайность — помечать всё подряд ошибками — приводит к тому, что критичные события тонут в шуме.
Как выбрать уровень
Типовой сценарий: запись ошибки из обработчика исключения
Самая частая задача — зафиксировать ошибку, которая возникла в фоновом задании или при обмене, где пользователь не видит сообщений. Внутри блока Попытка/Исключение текст ошибки получают через ОписаниеОшибки() или ИнформацияОбОшибке():
Попытка
ВыполнитьОбменДанными();
Исключение
ИнфоОшибки = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
"Обмен данными.Загрузка",
УровеньЖурналаРегистрации.Ошибка,
,
,
ПодробноеПредставлениеОшибки(ИнфоОшибки));
ВызватьИсключение;
КонецПопытки;
Функция ПодробноеПредставлениеОшибки даёт развёрнутое описание с местом возникновения — это заметно полезнее короткого текста из ОписаниеОшибки(). Пустые параметры «Метаданные» и «Данные» просто пропускаются запятыми.
Оператор ВызватьИсключение в конце пробрасывает ошибку дальше, чтобы вызывающий код или планировщик заданий узнал о сбое. Если исключение глотать без проброса, ошибка останется только в журнале, а регламентное задание будет выглядеть успешно завершённым — это частая причина «тихих» сбоев.
ЗаписьЖурналаРегистрации("Обмен.Загрузка", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));Фиксация старта и завершения длительных операций
Для обменов, загрузок и массовых обработок полезно писать две записи: начало и результат. Это позволяет оценить длительность по меткам времени и быстро понять, завершилась ли операция вообще:
ЗаписьЖурналаРегистрации("Загрузка прайсов",
УровеньЖурналаРегистрации.Информация, , ,
"Начата загрузка файла " + ИмяФайла);
// ... основная логика ...
ЗаписьЖурналаРегистрации("Загрузка прайсов",
УровеньЖурналаРегистрации.Информация, , ,
"Загрузка завершена. Обработано строк: " + СчетчикСтрок);
Имя события в обеих записях должно совпадать — тогда по одному фильтру в журнале видна вся история операции. Принято давать событиям иерархические имена через точку: «Обмен данными.Загрузка», «Обмен данными.Выгрузка». Так проект проще сопровождать, а в фильтре журнала можно отбирать целую группу событий.
- 1Определите имя события — короткое, говорящее, желательно с иерархией через точку
- 2Выберите уровень: Ошибка, Предупреждение, Информация или Примечание
- 3При необходимости укажите объект метаданных и ссылку на данные
- 4Сформируйте комментарий с конкретикой: что сделано, сколько записей, какой файл
- 5Вставьте вызов ЗаписьЖурналаРегистрации в нужную точку кода
- 6Откройте Администрирование — Журнал регистрации и проверьте, что запись появилась
Как проверить, что запись появилась
Откройте журнал в режиме 1С:Предприятие: раздел «Администрирование» → «Обслуживание» → «Журнал регистрации» (в некоторых конфигурациях путь немного отличается). Установите отбор по имени события или по пользователю и периоду — по умолчанию журнал может показывать большой объём записей, и без фильтра нужную строку найти трудно.
Двойной щелчок по строке открывает карточку события с полным комментарием, данными и привязкой к метаданным. Если в параметре «Данные» передана ссылка, из карточки можно перейти к самому объекту.
Если записи нет, проверьте три вещи: действительно ли выполнилась ветка кода с вызовом метода (поставьте точку останова), не откатилась ли транзакция при транзакционном режиме записи и не смотрите ли вы журнал не той базы — при отладке на копии это случается часто.
Как проверить результат
Строка с нужным именем события, уровнем и комментарием видна за ожидаемый период
Записи нет — код не выполнился, транзакция откачена или выбрана не та база
В карточке события полный текст с деталями операции
Комментарий пустой или обрезанный — параметр не передан или слишком длинный
Из карточки открывается связанный объект
Поле данных пустое — ссылка не передавалась в параметре
Транзакционный режим и производительность
Последний параметр метода управляет поведением записи внутри транзакции. РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная означает: если транзакция, в которой выполняется код, откатится, запись в журнале тоже исчезнет. Режим Независимая фиксирует запись независимо от исхода транзакции — это важно для логирования ошибок, которые как раз и приводят к откату.
Практическое правило: для записей об ошибках внутри транзакции используйте независимый режим, иначе после отката вы не найдёте в журнале никаких следов сбоя. Для информационных записей о результате успешной операции транзакционный режим логичнее — не будет «сиротских» записей о событиях, которых фактически не произошло.
По производительности: вызов метода недорогой, но массовая запись в цикле по тысячам строк создаёт заметную нагрузку и раздувает журнал. Если нужно протоколировать пакетную операцию, накапливайте сводку в переменной и пишите одну итоговую запись, а не по записи на каждую строку данных.
Типичные ошибки и ограничения
Первая ошибка — слишком длинные комментарии. Платформа ограничивает длину комментария, и очень длинный текст будет обрезан. Если нужно сохранить большой объём диагностики (например, XML-ответ сервиса), пишите в журнал краткую выжимку, а полные данные складывайте в файлы или регистр сведений.
Вторая — запись в журнал вместо сообщения пользователю. Метод ЗаписьЖурналаРегистрации ничего не показывает на экране: для интерактивных сценариев используйте Сообщить() или объект СообщениеПользователю, а журнал оставьте для аудита и диагностики. Часто нужны оба действия одновременно.
Третья — неинформативные имена событий вроде «Ошибка» или «Тест». Через месяц по такому событию невозможно понять, какой механизм его создал. Имя должно отвечать на вопрос «где и что произошло».
Частые вопросы
Можно ли сделать запись в журнал регистрации без программирования?
Нет, собственные события добавляются только кодом на встроенном языке. Однако платформа сама пишет многие действия автоматически: вход и выход пользователей, изменение данных, ошибки СУБД. Если нужно просто видеть, кто изменил документ, достаточно стандартных записей — свой код не требуется.
Где физически хранится журнал регистрации?
В файловой базе — в подкаталоге 1Cv8Log рядом с файлом базы, в формате LGD/LGP. В клиент-серверном варианте журнал хранится в служебных таблицах СУБД. Напрямую эти файлы редактировать не следует — только просмотр штатными средствами или выгрузка.
Почему запись не появляется в журнале, хотя код выполняется?
Чаще всего транзакция, внутри которой сделан вызов, откатилась, а режим записи был транзакционным. Также проверьте, что смотрите журнал той же базы, где выполнялся код, и что фильтр по дате/пользователю не отсекает нужную строку.
Можно ли программно прочитать журнал регистрации?
Да, для этого существует метод ВыгрузитьЖурналРегистрации — он выгружает события в таблицу значений или XML по заданному отбору. Это используют для автоматического мониторинга ошибок и построения отчётов по событиям.
Как ограничить рост журнала регистрации?
Настройте периодическое сокращение журнала: в конфигураторе через «Администрирование — Настройка журнала регистрации» либо штатной регламентной операцией сокращения. Сокращение удаляет старые записи и уменьшает файл журнала. Перед сокращением при необходимости сделайте выгрузку в файл.
Работает ли метод на клиенте?
Да, ЗаписьЖурналаРегистрации доступен и на тонком, и на толстом клиенте, и на сервере. Но в клиент-серверной архитектуре записи о бизнес-операциях логичнее делать в серверном коде — там доступен полный контекст данных и не создаётся лишних обращений.
Что важно запомнить
Запись создаётся методом ЗаписьЖурналаРегистрации: обязателен только первый параметр — имя события. Выбирайте уровень осознанно, для ошибок внутри транзакций используйте независимый режим записи, не пишите в журнал чувствительные данные и не логируйте каждую строку цикла. Проверяйте результат через «Администрирование — Журнал регистрации» с фильтром по имени события.