1С: Отслеживание обновления конфигурации
Задача: Необходимо уведомлять на почту заинтересованных лиц об обновлении конфигурации 1С
Решение: прочитаем журнал регистрации, и если находим в нём событие обновления, отправляем на почту уведомления. Код специально сделал «одной процедурой», не требующий каких-то регистров для хранения и прочего. Дату последнего уведомления пользователей, пишу в тот-же журнал. Т.е. получается «вещь в себе», что удобно для внедрения в любую конфигурацию. Ну и собственно остаётся только дергать эту функцию регламентным заданием с периодичностью например раз в час.
&НаСервере
Процедура ПроверкаОбновленияКонфигурации() экспорт
// получаем таблицу когда меняли конфигурацию
ЖурналОбновленияКонфигурации = Новый ТаблицаЗначений;
СтатусыТранзакций = Новый Массив;
СтатусыТранзакций.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.Зафиксирована);
СтатусыТранзакций.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.НетТранзакции);
МетаданныеМассив = Новый Массив;
МассивСобытий = Новый Массив;
МассивСобытий.Добавить("_$InfoBase$_.DBConfigUpdate");
ФильтрЗаполнения = Новый Структура;
ФильтрЗаполнения.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));
ФильтрЗаполнения.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));
ФильтрЗаполнения.Вставить("Метаданные", МетаданныеМассив);
ФильтрЗаполнения.Вставить("Событие", МассивСобытий);
ФильтрЗаполнения.Вставить("Комментарий", "Регистрация конфигурации изменена");
ВыгрузитьЖурналРегистрации(ЖурналОбновленияКонфигурации, ФильтрЗаполнения,"Дата, Событие, Метаданные, Данные, ПредставлениеДанных,Комментарий,Пользователь");
ДатаПоследнегоОбновления=неопределено;
Обновлятор=неопределено;
если ЖурналОбновленияКонфигурации.Количество()>0 тогда
Зап=ЖурналОбновленияКонфигурации[ЖурналОбновленияКонфигурации.Количество()-1];
ДатаПоследнегоОбновления=Зап[0];
УИНПользователя = Новый УникальныйИдентификатор(Зап[2]);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(УИНПользователя);
конецесли;
если ДатаПоследнегоОбновления<>неопределено тогда
//Получаем таблицу когда уведомляли об изменнии конфигурации
ЖурналУведомленийОбОбновленииКонфигурации = Новый ТаблицаЗначений;
СтатусыТранзакций = Новый Массив;
СтатусыТранзакций.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.Зафиксирована);
СтатусыТранзакций.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.НетТранзакции);
МетаданныеМассив = Новый Массив;
МассивСобытий = Новый Массив;
МассивСобытий.Добавить("UpdateConfigAlert");
ФильтрЗаполнения = Новый Структура;
ФильтрЗаполнения.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));
ФильтрЗаполнения.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));
ФильтрЗаполнения.Вставить("Метаданные", МетаданныеМассив);
ФильтрЗаполнения.Вставить("Событие", МассивСобытий);
ВыгрузитьЖурналРегистрации(ЖурналУведомленийОбОбновленииКонфигурации, ФильтрЗаполнения,"Дата, Событие, Метаданные, Данные, ПредставлениеДанных,Комментарий,Пользователь");
ДатаПоследнегоУведомления=неопределено;
если ЖурналУведомленийОбОбновленииКонфигурации.Количество()>0 тогда
Зап=ЖурналУведомленийОбОбновленииКонфигурации[ЖурналУведомленийОбОбновленииКонфигурации.Количество()-1];
ДатаПоследнегоУведомления=Зап[5];
конецесли;
// Писнем в журнал данные, когда последний раз уведомляли об изменениях заинтересованных лиц
если ДатаПоследнегоУведомления=неопределено или ДатаПоследнегоУведомления<>ДатаПоследнегоОбновления тогда
ЗаписьЖурналаРегистрации("UpdateConfigAlert", УровеньЖурналаРегистрации.Информация, ,ДатаПоследнегоОбновления, "Чуток обновили конфу", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
МассивЗаинтересованыхЛиц=Новый Массив();
МассивЗаинтересованыхЛиц.Добавить("ауцук@укацук.ru");
ИмяБазы = СоединенияИБКлиентСервер.ПутьКИнформационнойБазе();
ТелоПисьма="<b>Внимание!</b><br/>Наш коллега "+Строка(ПользовательИБ)+" успешно выполнил обновление конфигурации.<br/>База: "+ИмяБазы+"<br/>Дата: "+Строка(ДатаПоследнегоОбновления)+"<br/><br/>Ура товарищи!";
для каждого email из МассивЗаинтересованыхЛиц цикл
попытка
УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись();
ПараметрыПисьма = Новый Структура("Кому, Тема, Тело,ТипТекста", email, "Было обновление конфигурации 1С", ТелоПисьма,"HTML");
РаботаСПочтовымиСообщениями.ОтправитьСообщение(УчетнаяЗаписьПочты, ПараметрыПисьма);
исключение
ЗаписьЖурналаРегистрации("СК_ГР.МониторингИзмененияКонфигурации", УровеньЖурналаРегистрации.Ошибка,,ОписаниеОшибки(),);
конецпопытки;
конеццикла;
конецесли;
конецесли;
КонецПроцедуры


