Программирование в 1С

Журнал регистрации 1С программно: запись, выгрузка и чтение

Коротко

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

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

Запись в журнал регистрации 1С 8.3 программно

Процедура ЗаписьЖурналаРегистрации() добавляет прикладное событие. Имя события задавайте в формате Подсистема.Действие: так записи проще отличить от платформенных и отобрать по префиксу.

ДанныеСобытия = Новый Структура;
ДанныеСобытия.Вставить("УзелОбмена", "ГлавныйУзел");
ДанныеСобытия.Вставить("КоличествоОбъектов", 125);

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

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

События и уровни журнала регистрации

Уровень выбирают по назначению записи, а не по удобству последующего поиска:

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

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

Выгрузить журнал регистрации 1С программно

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

НачалоПериода = ТекущаяДата() - 3600;
КонецПериода = ТекущаяДата();
ИмяФайла = ПолучитьИмяВременногоФайла("xml");

Фильтр = Новый Структура;
Фильтр.Вставить("Уровень", Новый Массив);
Фильтр.Уровень.Добавить(УровеньЖурналаРегистрации.Ошибка);
Фильтр.Уровень.Добавить(УровеньЖурналаРегистрации.Предупреждение);

ВыгрузитьЖурналРегистрации(
    ИмяФайла,
    Фильтр,
    НачалоПериода,
    КонецПериода);

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

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

Фильтр структуры для ВыгрузитьЖурналРегистрации

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

Фильтр = Новый Структура;

События = Новый Массив;
События.Добавить("ОбменДанными.ОшибкаЗагрузки");
Фильтр.Вставить("Событие", События);

Уровни = Новый Массив;
Уровни.Добавить(УровеньЖурналаРегистрации.Ошибка);
Фильтр.Вставить("Уровень", Уровни);

Пользователи = Новый Массив;
Пользователи.Добавить(ИмяПользователя());
Фильтр.Вставить("Пользователь", Пользователи);

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

Чтение выгрузки журнала регистрации

Результат выгрузки — XML, поэтому для потоковой обработки подходит ЧтениеXML. Такой вариант не требует загружать весь файл в память:

Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);

Пока Чтение.Прочитать() Цикл
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
        И Чтение.Имя = "Event" Тогда
        // Здесь разбираются только поля нужной записи.
    КонецЕсли;
КонецЦикла;

Чтение.Закрыть();

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

Журнал для диагностики собственного кода

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

ИдентификаторЗапуска = Строка(Новый УникальныйИдентификатор());
ДополнительныеДанные = Новый Структура;
ДополнительныеДанные.Вставить("ИдентификаторЗапуска", ИдентификаторЗапуска);
ДополнительныеДанные.Вставить("Этап", "ЗагрузкаПакета");

ЗаписьЖурналаРегистрации(
    "ОбменДанными.ОшибкаЗагрузки",
    УровеньЖурналаРегистрации.Ошибка,
    Метаданные.Обработки.ОбменДанными,
    ДополнительныеДанные,
    "Пакет не обработан",
    РежимТранзакцииЗаписиЖурналаРегистрации.Независимая);

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

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

Производительность и безопасность

  • Сужайте период. Для оперативной проверки начинайте с 15–60 минут, а не с полной истории.
  • Фильтруйте до выгрузки. Отбор после создания огромного XML тратит диск, память и время сервера.
  • Не логируйте в цикле. Соберите счётчики и запишите итог либо ограниченное число ошибок.
  • Контролируйте размер текста. Представление должно объяснять проблему, но не дублировать payload.
  • Не пишите секреты. Маскируйте токены, пароли, cookies, персональные данные и параметры подключения.
  • Удаляйте временные файлы. Делайте это после успешного чтения и после обработанной ошибки.

Частые ошибки при программной работе с журналом

  • Слишком широкий период. Выгрузка за месяцы может занять диск и заметно нагрузить сервер.
  • Неверное поле структуры. Опечатка или неподходящий тип значения приводит к пустому результату.
  • Все события имеют уровень «Ошибка». Мониторинг теряет смысл, потому что штатные случаи создают шум.
  • Независимая запись для каждого шага. Журнал быстро растёт, а основная операция замедляется.
  • Секреты в представлении данных. Токен или пароль остаётся в журнале и резервных копиях.
  • Ожидание записи после отката. В транзакционном режиме событие может откатиться вместе с транзакцией.
  • Жёсткая привязка к XML-узлам. Формат нужно проверять на целевой версии платформы.

Частые вопросы о журнале регистрации 1С

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

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

Как выгрузить только ошибки за последний час?

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

Можно ли записывать пароль или токен для последующей диагностики?

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

Тарифы

ИИ Консоль кода 1С

Лайт

Бесплатно
≈ 1,5 млн токенов

Для ознакомления с возможностями

  • Все функции бесплатно на 2 дня +2 дня за подписку на Telegram или Max
  • Полный набор инструментов без урезаний
  • Без ввода карты
Начать бесплатно

Старт

1990 руб. в месяц
≈ 10 млн токенов

Для индивидуального использования

Выбрать тариф

Продвинутый

Популярный выбор
3990 руб. в месяц
≈ 25 млн токенов

Для интенсивного использования или команд

  • До 15 конфигураций
  • Встроенный агент запросов 1С
  • Свои подписки Codex, Claude и любые OpenAI-совместимые
  • Внешние обработки без Конфигуратора
  • Приоритетная техническая поддержка
Выбрать тариф