Часто при программном добавлении записей в Журнал регистрации (ЖР) с помощью метода ЗаписьЖурналаРегистрации разработчики сталкиваются с непонятным поведением системы: если в параметр передать ссылку на объект (например, документ или элемент справочника), то колонка «Представление данных» заполняется корректно, а вот колонка «Данные» визуально остается пустой. Давайте подробно разберем эту ситуацию, выясним причину такого поведения платформы и посмотрим, как правильно фиксировать сложные и информативные данные в ЖР.
Основная причина, по которой мы не видим заполненную колонку «Данные», заключается в том, откуда именно мы просматриваем Журнал регистрации. Проанализируем, как система работает "под капотом":
Что касается поля «Представление данных» — это простая текстовая строка, которая формируется в момент генерации события. Платформа сохраняет ее "как есть" в текстовом виде, поэтому представление без проблем читается и в Конфигураторе, и в Предприятии.
Часто возникает необходимость зафиксировать в ЖР не просто ссылку, а сложную информацию. Например, при поиске дублей пользователей хочется вывести красивую таблицу совпадений. Посмотрим на ограничения метода ЗаписьЖурналаРегистрации.
Согласно синтаксис-помощнику, параметр может принимать только строго определенные типы: Любая ссылка, Число, Строка, Дата, Булево, Неопределено, Null, Тип. Передать туда напрямую ТаблицуЗначений, Структуру или Массив напрямую нельзя.
Рассмотрим рабочие способы обойти это ограничение и сформировать красивый вывод:
Символы.ПС и табуляцию Символы.Таб. Эту текстовую таблицу затем передаем в параметры записи.Посмотрим на пример кода, как можно записать структуру в Журнал регистрации через JSON:
// Формируем структуру с важными данными
ДанныеОшибки = Новый Структура;
ДанныеОшибки.Вставить("Пользователь", ИмяПользователя());
ДанныеОшибки.Вставить("НайденныеДубли", МассивДублей);
ДанныеОшибки.Вставить("Описание", "Попытка создания дублирующей записи");
// Сериализуем структуру в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОшибки);
СтрокаДанныхJSON = ЗаписьJSON.Закрыть();
// Записываем событие в Журнал регистрации
ЗаписьЖурналаРегистрации(
"Пользователи.Попытка создания дубля",
УровеньЖурналаРегистрации.Предупреждение,
,
,
СтрокаДанныхJSON // Передаем нашу JSON-строку в комментарий или данные
);
Проанализируем стандарты разработки фирмы 1С, чтобы наши логи были не только информативными, но и соответствовали архитектурным правилам. Соблюдение этих правил гарантирует, что Журнал регистрации не будет тормозить и по нему будут корректно работать отборы.
"Удаление дубля Иванов И.И.". Имя события должно быть общим и сгруппированным, например: "Пользователи.Попытка создания дубля".Подводя итог: если вы программно записали ссылку в лог и не видите её в Конфигураторе — это нормальное поведение системы. Откройте Журнал регистрации в режиме Предприятия, и вы увидите нужную информацию. А для записи сложных коллекций используйте предварительную сериализацию в строку или формат JSON.