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

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 Платные (руб)

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

9000 руб.

28.08.2019    34138    22    21    

75

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

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

6000 руб.

28.11.2018    20892    17    7    

42

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

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

20.11.2024    1159    user1913000    11    

19

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

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

21.10.2024    3095    leemuar    8    

23

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

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

1 стартмани

29.12.2023    2227    31    dima_gsv    3    

13

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

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

1 стартмани

19.11.2023    1501    5    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    4878    9    AlexSTAL    0    

47

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

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

3 стартмани

26.09.2023    2903    19    doom2good    16    

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