Рассылка событий журнала регистрации

07.02.19

База данных - Журнал регистрации

Отправка событий журнала регистрации на почту с возможностью группировки и фильтрации.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Рассылка событий журнала регистрации:
.cf 29,81Kb
14
14 Скачать (1 SM) Купить за 1 850 руб.

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

События фильтруются по принципу: (Условие1 ИЛИ Условие2 ИЛИ ....) И НЕ (Условие3 ИЛИ Условие4 ИЛИ ...).

Возможно создание нескольких настроек и расписания обработки для каждой по отдельности.

Во вложении файл конфигурации с подсистемой. Конфигурация писалась на платформе версии 8.3.6..

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

Основные объекты подсистемы:
1. Справочник Настройки оповещения
2. Регистр сведений ДатаПоследнегоОповещения
3. Регламентное задание ОтправкаОповещений

В справочнике "НастройкиОповещения" задаются Получатель оповещения и фильтр событий. В списке "Фильтр событий" вводятся строки - фрагмент сообщения об ошибке. В этом же списке отдельные события можно "Исключить".

Регистр сведений ДатаПоследнегоОповещения содержит дату и время последней обработки в разрезе НастройкиОповещения.

Регламентное задание ОтправкаОповещений запускается по своему расписанию для каждой НастройкиОповещения.

В текущей реализации анализ журнала регистрации выполняется только по "Ошибкам". При желании, список событий можно расширить.

Текст процедуры ниже.

Процедура ELN_ОтправкаОповещений(НастройкаОповещения) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = Новый Запрос;
	Запрос.УстановитьПараметр("НастройкаОповещения", НастройкаОповещения);
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ELN_НастройкиОповещения.АдресЭП,
	|	ELN_НастройкиОповещения.АдресЭПКопия,
	|	ELN_НастройкиОповещения.УчетнаяЗаписьЭлектроннойПочты,
	|	ELN_НастройкиОповещения.ФильтрСообщений.(
	|		Ссылка,
	|		НомерСтроки,
	|		Текст,
	|		Исключить
	|	),
	|	ЕСТЬNULL(ELN_ДатаПоследнегоОповещения.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПоследнегоОповещения
	|ИЗ
	|	Справочник.ELN_НастройкиОповещения КАК ELN_НастройкиОповещения
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ELN_ДатаПоследнегоОповещения КАК ELN_ДатаПоследнегоОповещения
	|		ПО (ELN_ДатаПоследнегоОповещения.НастройкаОповещения = ELN_НастройкиОповещения.Ссылка)
	|ГДЕ
	|	ELN_НастройкиОповещения.Ссылка = &НастройкаОповещения
	|	И ELN_НастройкиОповещения.Активная";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если НЕ Выборка.Следующий() Тогда
		Возврат;
	КонецЕсли;
	
	Отбор = Новый Структура;
	
	ДатаНачала = Выборка.ДатаПоследнегоОповещения;
	ДатаОкончания = ТекущаяДата();
	Если ДатаНачала = '00010101' Тогда
		ДатаНачала = НачалоДня(ТекущаяДата()); // первый раз с начала дня
	КонецЕсли; 
	Отбор.Вставить("ДатаНачала", ДатаНачала);
	Отбор.Вставить("ДатаОкончания", ДатаОкончания); 
	
	Уровень = Новый Массив;
	Уровень.Добавить(УровеньЖурналаРегистрации.Ошибка);
	Отбор.Вставить("Уровень", Уровень);

	тзДанныеЖР = Новый ТаблицаЗначений;
	ВыгрузитьЖурналРегистрации(тзДанныеЖР,Отбор,,,);
	
	тзВрем = Новый ТаблицаЗначений;
	тзВрем.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
	тзВрем.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(1000),));
	
	Для Каждого СтрокаЖР из тзДанныеЖР Цикл
		НоваяСтрока = тзВрем.Добавить();
		НоваяСтрока.Дата = СтрокаЖР.Дата;
		Если ПустаяСтрока(СтрокаЖР.Комментарий) Тогда
			НоваяСтрока.Комментарий = "" + СтрокаЖР.Данные;
		Иначе
			НоваяСтрока.Комментарий = СтрокаЖР.Комментарий;
		КонецЕсли;
	КонецЦикла;
	тзДанныеЖР = Неопределено;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("тзДанныеЖР", тзВрем);
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	тзДанныеЖР.Дата,
	|	тзДанныеЖР.Комментарий
	|ПОМЕСТИТЬ втДанныеЖР
	|ИЗ
	|	&тзДанныеЖР КАК тзДанныеЖР
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	втДанныеЖР.Дата КАК Дата,
	|	втДанныеЖР.Комментарий,
	|	ПОДСТРОКА(втДанныеЖР.Комментарий, 1, 300) КАК Комментарий0
	|ИЗ
	|	втДанныеЖР КАК втДанныеЖР
	|ГДЕ
	|	втДанныеЖР.Комментарий ПОДОБНО &Комментарий
	|ИТОГИ
	|	КОЛИЧЕСТВО(Дата)
	|ПО
	|	Комментарий0";
	
	ФильтрСообщений = Выборка.ФильтрСообщений.Выбрать();
	Если ФильтрСообщений.Количество() = 0 Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст,"втДанныеЖР.Комментарий ПОДОБНО &Комментарий", "ИСТИНА");
	Иначе
		ТекстУсловия = "";
		ТекстУсловияНЕ = "";
		Пока ФильтрСообщений.Следующий() Цикл
			Если НЕ ФильтрСообщений.Исключить Тогда
				ТекстУсловия = ТекстУсловия + ?(ПустаяСтрока(ТекстУсловия),"", Символы.ПС + "ИЛИ ");
				ТекстУсловия = ТекстУсловия + "втДанныеЖР.Комментарий ПОДОБНО " + """%" + ФильтрСообщений.Текст + "%""";
			Иначе
				ТекстУсловияНЕ = ТекстУсловияНЕ + ?(ПустаяСтрока(ТекстУсловияНЕ),"", Символы.ПС + "ИЛИ ");
				ТекстУсловияНЕ = ТекстУсловияНЕ + "втДанныеЖР.Комментарий ПОДОБНО " + """%" + ФильтрСообщений.Текст + "%""";				
			КонецЕсли;
		КонецЦикла;
		
		Если ПустаяСтрока(ТекстУсловия) Тогда 
			ТекстУсловия = "НЕ " + "(" + ТекстУсловияНЕ + ")";
		ИначеЕсли НЕ ПустаяСтрока(ТекстУсловияНЕ) Тогда
			ТекстУсловия = "(" + ТекстУсловия + ")"+ " И НЕ " + "(" + ТекстУсловияНЕ + ")";
		КонецЕсли;
		Запрос.Текст = СтрЗаменить(Запрос.Текст,"втДанныеЖР.Комментарий ПОДОБНО &Комментарий", ТекстУсловия);		
	КонецЕсли;
	
	ТекстОповещения = "";
	КоличествоОшибокВсего = 0;
	
	ВыборкаОшибки = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока ВыборкаОшибки.Следующий() Цикл
		
		ТекстОповещения = ТекстОповещения + ?(ПустаяСтрока(ТекстОповещения), "", Символы.ПС + Символы.ПС + Символы.ПС);
		ТекстОповещения = ТекстОповещения + "Текст ошибки:" + Символы.ПС;
		
		ВывестиОшибку = Истина;
		КоличествоОшибок = ВыборкаОшибки.Дата;
		КоличествоОшибокВсего = КоличествоОшибокВсего + КоличествоОшибок;
		
		ВыборкаДетальные = ВыборкаОшибки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		Пока ВыборкаДетальные.Следующий() Цикл
			
			Если ВывестиОшибку Тогда
				ТекстОповещения = ТекстОповещения + ВыборкаДетальные.Комментарий;
				ТекстОповещения = ТекстОповещения + Символы.ПС + Символы.ПС + "Количество ошибок: " + КоличествоОшибок;
				
				ВывестиОшибку = Ложь;
			КонецЕсли;
						
		КонецЦикла;
		
	КонецЦикла;
	
	Если НЕ ПустаяСтрока(ТекстОповещения) Тогда
		
		ПочтовыйПрофиль = ПолучитьПрофильИнтернетПочтовоеПодключения(Выборка.УчетнаяЗаписьЭлектроннойПочты);
		
		ТемаПисьма = "Оповещение об ошибках в ЖР за период " 
			+ Формат(ДатаНачала,"ДФ='dd.MM.yyyy hh:mm:ss'")
			+ " по "
			+ Формат(ДатаОкончания,"ДФ='dd.MM.yyyy hh:mm:ss'")
			+ ". Ошибок: " 
			+ КоличествоОшибокВсего;
		
		Получатель = Выборка.АдресЭП;
		Копии = Выборка.АдресЭПКопия;
		
		Если НЕ ОтправитьЭлектронноеПисьмо(ПочтовыйПрофиль, "" + Выборка.УчетнаяЗаписьЭлектроннойПочты, ТемаПисьма,ТекстОповещения,Получатель,Копии,) Тогда
			ДатаОкончания = '00010101'; // последнюю дату менять не будем
		КонецЕсли;
		
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ДатаОкончания) Тогда 
		
		НаборЗаписей = РегистрыСведений.ELN_ДатаПоследнегоОповещения.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.НастройкаОповещения.Установить(НастройкаОповещения);
		НоваяЗапись = НаборЗаписей.Добавить();
		НоваяЗапись.НастройкаОповещения = НастройкаОповещения;
		НоваяЗапись.Дата = ДатаОкончания;
		НаборЗаписей.Записать();
		
	КонецЕсли;
	
КонецПроцедуры

 

Спасибо за внимание.

оповещение журнал регистрации

См. также

Журнал регистрации Системный администратор Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

История изменений реквизитов и табличных частей справочников, документов, независимых регистров сведений, возможность отката изменения, восстановление удаленных объектов, сбор статистики использования базы 1С. Альтернативный журнал регистрации.

22800 руб.

22.02.2018    35953    59    54    

57

Журнал регистрации Системный администратор Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

6000 руб.

28.11.2018    21323    18    7    

44

Журнал регистрации Программист Россия Бесплатно (free)

В материале рассматривается сравнение двух инструментов для работы с журналом регистрации 1С: утилиты ibcmd и платформы Vector. Описаны их функциональные возможности, тестирование производительности и практическое применение для преобразования логов в формат JSON.

20.11.2024    1949    user1913000    13    

20

Журнал регистрации Тестирование QA Программист Бесплатно (free)

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

21.10.2024    3987    leemuar    8    

24

Инструменты администратора БД Журнал регистрации Системный администратор Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    2631    42    dima_gsv    3    

14

Журнал регистрации Мониторинг Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

19.11.2023    1834    6    AlexSTAL    0    

8

Мониторинг Журнал регистрации Технологический журнал Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    5634    11    AlexSTAL    0    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 3soft 10 26.04.22 17:07 Сейчас в теме
Добрый день! Спасибо за статью! Реализовал данное как внешнюю обработку для БсП (чтобы можно было подключить как регл.задание) + хранение настроек не в справочнике, а в нашем механизме "Псевдо-предопределенные". И то и другое хочу выложить как опенсорс на гитхабе.
Код из Вашей статьи лёг в основу обработки. Можете, пожалуйста, дать разрешение его использовать в OpenSource, например под лицензией MIT?
2. Just4Fun 36 12.05.22 12:16 Сейчас в теме
(1) Добрый день.
Используйте на здоровье.
Оставьте свое сообщение