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

07.02.19

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

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

Скачать файлы

Наименование Файл Версия Размер
Рассылка событий журнала регистрации:
.cf 29,81Kb
13
.cf 29,81Kb 13 Скачать

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

События фильтруются по принципу: (Условие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_ДатаПоследнегоОповещения.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.НастройкаОповещения.Установить(НастройкаОповещения);
		НоваяЗапись = НаборЗаписей.Добавить();
		НоваяЗапись.НастройкаОповещения = НастройкаОповещения;
		НоваяЗапись.Дата = ДатаОкончания;
		НаборЗаписей.Записать();
		
	КонецЕсли;
	
КонецПроцедуры

 

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

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

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

19200 руб.

15.05.2017    42522    10    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

Оптовая торговля Розничная торговля Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Управленческий учет Платные (руб)

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

4800 руб.

03.09.2016    42255    33    24    

37

LogManager - Внешний журнал регистрации в SQL

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

10000 руб.

23.05.2014    55472    52    16    

47

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    30955    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

5000 руб.

28.11.2018    19545    13    6    

36

Регламентное сокращение журнала регистрации

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

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

1 стартмани

29.12.2023    1245    12    dima_gsv    1    

12

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

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

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

1 стартмани

13.11.2023    2971    4    AlexSTAL    0    

42

Мониторинг состояния с отправкой в telegram

Журнал регистрации Инструменты администратора БД Мониторинг Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Абонемент ($m)

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

3 стартмани

26.09.2023    1753    11    doom2good    10    

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