ОповеститьОбИзмененииОбъекта (БСП)

Автор: 1С
ОбщийМодуль.ИнтеграцияОбъектовОбластейДанных
БСП

Оповестить об изменении объекта. Выполняет оповещение внешней учетной системы в соответствие с настройками оповещения.

// Выполняет оповещение внешней учетной системы в соответствие с настройками оповещения.
//
// Параметры:
//  УчетнаяСистема - ОпределяемыйТип.УчетныеСистемыИнтеграцииОбластейДанных - учетная система.
//  ИдентификаторОбъекта - Строка(50) - идентификатор объекта
//  ВызыватьИсключение - Булево - признак вызова исключения при неудачной отправке оповещения.
//
Процедура ОповеститьОбИзмененииОбъекта(УчетнаяСистема, ИдентификаторОбъекта, ВызыватьИсключение = Ложь) Экспорт
    
    ПривилегированныйРежимПриВызове = ПривилегированныйРежим();
    Если Не ПривилегированныйРежимПриВызове Тогда
        УстановитьОтключениеБезопасногоРежима(Истина);
        УстановитьПривилегированныйРежим(Истина);
    КонецЕсли;
    
    Словарь = ИнтеграцияОбъектовОбластейДанныхСловарь;
    Попытка
        Настройки = Настройки(УчетнаяСистема);
        Если Не Настройки.ОповещатьОбИзменениях Тогда
            ВызватьИсключение Словарь.ОповещенияОбИзмененияхНеИспользуются();
        КонецЕсли; 
        Запрос = Новый Запрос;
        Запрос.Текст = 
        	"ВЫБРАТЬ ПЕРВЫЕ 1
            |   ОбъектыКОтправке.ИдентификаторОбъекта КАК ИдентификаторОбъекта,
            |   ОбъектыКОтправке.Обработчик КАК Обработчик,
            |   ФайлыОбластейДанных.Идентификатор КАК ИдентификаторФайла,
            |   ФайлыОбластейДанных.ФайлCRC32 КАК Версия
            |ИЗ
            |   РегистрСведений.ОбъектыКОтправке КАК ОбъектыКОтправке
            |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ФайлыОбластейДанных КАК ФайлыОбластейДанных
            |       ПО ОбъектыКОтправке.ИдентификаторФайла = ФайлыОбластейДанных.Идентификатор
            |           И (НЕ ФайлыОбластейДанных.Временный)
            |ГДЕ
            |   ОбъектыКОтправке.УчетнаяСистема = &УчетнаяСистема
            |   И ОбъектыКОтправке.ИдентификаторОбъекта = &ИдентификаторОбъекта";
        
        Запрос.УстановитьПараметр("УчетнаяСистема", УчетнаяСистема);
        Запрос.УстановитьПараметр("ИдентификаторОбъекта", ИдентификаторОбъекта);
        Результат = Запрос.Выполнить();
        Если Результат.Пустой() Тогда
            ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                Словарь.ДанныеОбъектаНеУстановлены(), ИдентификаторОбъекта);
        КонецЕсли;
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        АдресОбъекта = СтрШаблон("%1/hs/dt/%2/%3/%4",
            ПолучитьНавигационнуюСсылкуИнформационнойБазы(),
            Словарь.ПолеХранилище(),
            ФайлыОбластейДанных.ИдентификаторХранилища(),
            Строка(Выборка.ИдентификаторФайла));
        СвойстваСообщения = Новый Структура;
        СвойстваСообщения.Вставить("url", АдресОбъекта);
        СвойстваСообщения.Вставить("tenant", РаботаВМоделиСервиса.ЗначениеРазделителяСеанса());
        СвойстваСообщения.Вставить(Словарь.ПолеХранилище(), ФайлыОбластейДанных.ИдентификаторХранилища());
        СвойстваСообщения.Вставить(Словарь.ПолеИдентификатор(), Строка(Выборка.ИдентификаторФайла));
        СвойстваОбъекта = СвойстваОбъекта(Выборка.ИдентификаторОбъекта, Выборка.Обработчик, Выборка.Версия);
        ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(СвойстваСообщения, СвойстваОбъекта); 
        Если Настройки.ПодписыватьДанные Тогда
            ПодписатьДанные(СвойстваСообщения, ПолучитьДвоичныеДанныеИзСтроки(Настройки.КлючПодписи));
        КонецЕсли;
        Данные = РаботаВМоделиСервисаБТС.СтрокаИзСтруктурыJSON(СвойстваСообщения);
        ОтправитьОповещение(Данные, Настройки);
        
    Исключение
        ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
        ЗаписьЖурналаРегистрации(Словарь.КорневоеСобытие() + "." + Словарь.ОповещениеОбИзменении(),
            УровеньЖурналаРегистрации.Предупреждение, УчетнаяСистема.Метаданные(), УчетнаяСистема, 
            СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Словарь.НеУдалосьОтправитьОповещение(), ОписаниеОшибки));
        Если ВызыватьИсключение Тогда
            ВызватьИсключение ОписаниеОшибки;
        КонецЕсли; 
    КонецПопытки;	
	
    Если Не ПривилегированныйРежимПриВызове Тогда
    	УстановитьПривилегированныйРежим(Ложь);
    	УстановитьОтключениеБезопасногоРежима(Ложь);
    КонецЕсли;
    
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОповеститьОбИзмененииОбъекта (БСП)

ОповеститьОбИзмененииОбъектов (БСП)

ОповеститьФормыОбИзменении (БСП)

ПриИзмененииНомера (БСП)

ПриИзмененииКода (БСП)

ОбработатьОповещениеОбИзменении (БСП)

ОповеститьОНехваткеПамяти (БСП)

ЗаписатьОбъект (БСП)

ОрганизацияОбъектаИзменена (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз