Top.Mail.Ru

Журнал регистраций 1С. Альтернатива

В этой статье расскажу про свой регистр сведений, который служит для логирования событий. Свой регистр сведений может потребоваться для логирования обменов и алгоритмов, логирования ошибок с дальнейшей рассылкой, а также для каких-то своих нужд. Например, мне такой регистр понадобился, когда потребовалось отследить проблемное место в алгоритме. Проблема возникала редко, поймать ее отладкой не удавалось.

Структура простая:

Событие – может быть справочник или перечисление, некий идентификатор для отбора отдельных алгоритмов.

Объект – ссылка на объект или любой идентификатор для отбора отдельного объекта.

Описание – текстовое поле. То, что произошло в этом событии.

Ошибка – флаг ошибки.

ОписаниеОшибки – описание ошибки, если установлен флаг Ошибка.

Комментарий – поле для комментария.

В модуле менеджера Регистра сведений процедура новой записи:

Процедура ДобавитьЗапись(Событие, Объект, Описание, Ошибка = Ложь, ОписаниеОшибки = "") Экспорт
	
	НоваяЗапись 				= РегистрыСведений.СвойЖурналРегистрации.СоздатьМенеджерЗаписи();
	НоваяЗапись.Период 			= ТекущаяДата();
	НоваяЗапись.Событие 		= Событие;
	НоваяЗапись.Объект 			= Объект;
	НоваяЗапись.Описание 		= Описание;
	НоваяЗапись.Ошибка 			= Ошибка;
	НоваяЗапись.ОписаниеОшибки 	= ОписаниеОшибки;
	НоваяЗапись.Записать();
	
КонецПроцедуры

Далее вставляем запись комментария в нужные места своего кода. Примеры:

Процедура ВыполнениеАлгоритма1(ИдОбъекта) 
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм1, ИдОбъекта, "Начало"); 
	
	ПервоеДействиеАлгоритма(ИдОбъекта);
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм1, ИдОбъекта, "Выполнено 1 действие"); 
	
	ВтороеДействиеАлгоритма(ИдОбъекта);
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм1, ИдОбъекта, "Выполнено 2 действие"); 
	
	ТретьеДействиеАлгоритма(ИдОбъекта);
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм1, ИдОбъекта, "Конец"); 
	
КонецПроцедуры

Процедура ВыполнениеАлгоритма2(ИдОбъекта) 
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм2, ИдОбъекта, "Начало"); 
	
	Результат = ДействиеАлгоритма2(ИдОбъекта);
	
	Если Результат.Выполнен Тогда 
		РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм2, ИдОбъекта, "Выполнено действие"); 
	Иначе 
		РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм2, ИдОбъекта, "Выполнено действие", Истина, Результат.ОписаниеОшибки); 
	КонецЕсли;
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.Алгоритм2, ИдОбъекта, "Конец"); 
	
КонецПроцедуры

Процедура ВыполнениеОбмена(ИдОбъекта) 
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.ОбменСБазой1, ИдОбъекта, "Начало"); 
	
	Попытка
		ВыполнениеОбмена(ИдОбъекта);
		РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.ОбменСБазой1, ИдОбъекта, "Обмен " + ИдОбъекта); 
	Исключение 
		ТекстОшибки = ОписаниеОшибки();
		РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.ОбменСБазой1, ИдОбъекта, "Обмен " + ИдОбъекта, Истина, ТекстОшибки); 
	КонецПопытки;
	
	РегистрыСведений.СвойЖурналРегистрации.ДобавитьЗапись(Перечисления.СобытиеЖурнала.ОбменСБазой1, ИдОбъекта, "Конец"); 
	
КонецПроцедуры

Преимущества:

  1. логирование только нужных событий, а не все подряд,
  2. можно изменить структуру под себя,
  3. можно строить отчеты по ошибкам и рассылать их на почту,
  4. можно быстро организовать архивирование и очистку старых записей регистра.

Недостатки: нужно дорабатывать конфигурацию.

Используйте этот полезный инструмент в решении своих задач, делитесь в комментариях своими решениями.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar