5 марта 2022 г.

1С Кастомная функция сообщений

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

Первый раз мне такая мысль пришла в расширении для Фреша, т.к. есть ошибки проявляющиеся только там (например в БП какое-то время не работали твои ПодпискиНаСобытия). А каждое изменение требует аудита, представь, отправлять повторно на аудит из-за отключения вывода?


// Процедура - Сообщения отладки
//
// Параметры:
//  Сообщение	 - Строка - Текст сообщения
//  Отладка		 - Булево - Истина - выводит все сообщения. Ложь - только ошибки 
//  Уровень		 - Число - Числовое определение уровня ошибки
//							0 - INFO	- информационные сообщения - значение по-умолчанию
//                          1 - DEBUG	- сообщения отладки
//                          2 - ERROR	- сообщения ошибки, выводятся всегда
//  Поле		 - ЭлементФормы, строка - используется, если есть связка сообщения и элемента формы
//  ОбъектДанных - Объект - используется для определения объекта, вызвавшего процедуру 
//
&НаСервере
Процедура СообщенияОтладки(Сообщение="",Отладка=Неопределено,Уровень=0,Поле="",ОбъектДанных=Неопределено) Экспорт	
	Если Отладка=Неопределено Тогда
		Если РеквизитФормыВЗначение("Объект").метаданные().Реквизиты.Найти("Отладка") Тогда 
			Отладка=ЭтотОбъект.Отладка;
		Иначе
			Отладка=Ложь;
		КонецЕсли;
	КонецЕсли;
			
	Если Отладка ИЛИ Уровень=2 Или Поле="Отладка" Тогда
		Если Уровень=1 Тогда
			УровеньТекст="INFO";
		ИначеЕсли Уровень=2 Тогда
			УровеньТекст="ERROR";
		Иначе
			УровеньТекст="DEBUG";
		КонецЕсли;
		нСообщение = Новый СообщениеПользователю;
		ЗнакТабуляции=Символы.Таб;
		нСообщение.Текст = СтрШаблон("%1 %2 %3 %4 %5 %6 %7",ТекущаяДата(),ЗнакТабуляции,УровеньТекст,ЗнакТабуляции,Сообщение,ЗнакТабуляции,Поле);
		
		Если Уровень=2 тогда
			нСообщение.Поле = Поле;
		КонецЕсли;
		Если ОбъектДанных <> Неопределено Тогда
			нСообщение.УстановитьДанные(ОбъектДанных);
		КонецЕсли;
		нСообщение.Сообщить(); 		
	КонецЕсли;
КонецПроцедуры




Комментариев нет:

Отправить комментарий