ОбработатьДанные (БСП)

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

Обработать данные. Обработчик задания очереди заданий.

// Обработчик задания очереди заданий.
//
// Параметры:
//  УчетнаяСистема - ОпределяемыйТип.УчетныеСистемыИнтеграцииОбластейДанных - учетная система
//                   по которой готовятся данные.
//  ИдентификаторФайла - Строка(36) - идентификатор файла для обработки.
//
Процедура ОбработатьДанные(УчетнаяСистема, ИдентификаторФайла) Экспорт
    
    Словарь = ИнтеграцияОбъектовОбластейДанныхСловарь;
    СловарьОчередь = ОчередьЗаданийВнешнийИнтерфейсСловарь;
    КлючЗадания = КлючЗаданияОбработкиДанных(УчетнаяСистема, ИдентификаторФайла);
    ИдентификаторЗадания = ОчередьЗаданийВнешнийИнтерфейс.ИдентификаторЗадания(КлючЗадания);
    КаталогРаспаковки = ПолучитьИмяВременногоФайла();
    МенеджерУчетнойСистемы = ОбщегоНазначения.МенеджерОбъектаПоСсылке(УчетнаяСистема);
    Попытка
        ОписаниеФайла = ФайлыОбластейДанных.ОписаниеФайла(ИдентификаторФайла);
        Если ЗначениеЗаполнено(ОписаниеФайла.ПолноеИмя) Тогда
            ПотокДанных = ФайловыеПотоки.ОткрытьДляЧтения(ОписаниеФайла.ПолноеИмя);
        Иначе
            ПотокДанных = ОписаниеФайла.Данные.ОткрытьПотокДляЧтения();
        КонецЕсли;
        Архиватор = Новый ЧтениеZipФайла(ПотокДанных);
        Попытка
            Архиватор.ИзвлечьВсе(КаталогРаспаковки);
        Исключение
            ОчередьЗаданийВнешнийИнтерфейс.УстановитьОшибкуДанных(ИдентификаторЗадания, Словарь.ФайлПоврежден());
            Возврат;
        КонецПопытки;
        ПоискМанифеста = НайтиФайлы(КаталогРаспаковки, Словарь.ИмяФайлаМанифеста(), Истина);
        Если ПоискМанифеста.Количество() = 0 Тогда
            ОчередьЗаданийВнешнийИнтерфейс.УстановитьОшибкуДанных(ИдентификаторЗадания, Словарь.МанифестНеЗадан());
            Возврат;
        КонецЕсли;
        Попытка
            ЧтениеJSON = Новый ЧтениеJSON;
            ЧтениеJSON.ОткрытьФайл(ПоискМанифеста[0].ПолноеИмя);
            Манифест = ПрочитатьJSON(ЧтениеJSON);
            ЧтениеJSON.Закрыть();
        Исключение
            ОчередьЗаданийВнешнийИнтерфейс.УстановитьОшибкуДанных(ИдентификаторЗадания, Словарь.МанифестНеВерногоФормата());
            Возврат;
        КонецПопытки;
        Порядок = Словарь.ИмяПоляСоставаДанных();
        Если Не Манифест.Свойство(Порядок) Тогда
            ОчередьЗаданийВнешнийИнтерфейс.УстановитьОшибкуДанных(ИдентификаторЗадания, 
                СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Словарь.ОтсутствуетСвойствоМанифеста(), Порядок));
            Возврат;
        КонецЕсли;
        Результаты = Новый Массив;
        Для Каждого Элемент Из Манифест[Порядок] Цикл
            ИмяФайла = Элемент[Словарь.ПолеФайл()];
            ПоискФайла = НайтиФайлы(КаталогРаспаковки, ИмяФайла);
            Если Элемент.Свойство(Словарь.ПолеВерсия()) Тогда
                Версия = Элемент[Словарь.ПолеВерсия()];
            Иначе 
                Версия = "";
            КонецЕсли; 
            Если ПоискФайла.Количество() = 0 Тогда
                ОчередьЗаданийВнешнийИнтерфейс.УстановитьОшибкуДанных(ИдентификаторЗадания, 
                    СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Словарь.ФайлНеНайден(), ИмяФайла));
                Возврат;
            КонецЕсли;
            ИдентификаторОбъекта = ИмяФайла;
            ПотокДанных = ФайловыеПотоки.ОткрытьДляЧтения(ПоискФайла[0].ПолноеИмя);
            Обработчик = Элемент[Словарь.ПолеОбработчик()];
            КодВозвратаОбработчика = СловарьОчередь.КодСостоянияВыполнено();
            ОшибкаОбработчика = Ложь;
            СообщениеОбОшибкеОбработчика = "";
                
            МенеджерУчетнойСистемы.ОбработатьДанные(УчетнаяСистема, ИдентификаторОбъекта, ПотокДанных, Обработчик, 
                КодВозвратаОбработчика, ОшибкаОбработчика, СообщениеОбОшибкеОбработчика);
            ПотокДанных.Закрыть();
            
            РезультатОбработчика = Новый Структура;
            РезультатОбработчика.Вставить(Словарь.ПолеФайл(), ИмяФайла);
            РезультатОбработчика.Вставить(Словарь.ПолеВерсия(), Версия);
            РезультатОбработчика.Вставить(Словарь.ПолеОбработчик(), Обработчик);
            РезультатОбработчика.Вставить(Словарь.ПолеКодВозврата(), КодВозвратаОбработчика);
            РезультатОбработчика.Вставить(Словарь.ПолеОшибка(), ОшибкаОбработчика);
            РезультатОбработчика.Вставить(Словарь.ПолеСообщениеОбОшибке(), СообщениеОбОшибкеОбработчика);
            Результаты.Добавить(РезультатОбработчика);
            
            ФайлыОбластейДанных.УстановитьПризнакВременного(Новый УникальныйИдентификатор(ИдентификаторФайла));                
        КонецЦикла;
        Попытка
            Если ФайлСуществует(КаталогРаспаковки) Тогда
                УдалитьФайлы(КаталогРаспаковки);
            КонецЕсли; 
		Исключение
			Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
			ЗаписьЖурналаРегистрации(Словарь.КорневоеСобытие(), УровеньЖурналаРегистрации.Ошибка, , , Комментарий);
        КонецПопытки;
    Исключение
        ОчередьЗаданийВнешнийИнтерфейс.УстановитьВнутреннююОшибку(
            ИдентификаторЗадания, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
    КонецПопытки;

    Свойства = РегистрыСведений.СвойстваЗаданий.НовыйСвойстваЗадания();
    Свойства.КодСостояния = СловарьОчередь.КодСостоянияВыполнено();
    Свойства.Результат = РаботаВМоделиСервисаБТС.СтрокаИзСтруктурыJSON(Результаты);
    
    РегистрыСведений.СвойстваЗаданий.Установить(ИдентификаторЗадания, Свойства);
    
КонецПроцедуры

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

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

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

ОбработкаДанныхЗавершена (БСП)

ЗагрузитьИОбработатьДанные (БСП)

ОбработатьПолученныеДанныеОбласти (БСП)

ОбработатьНовыеДанные (БСП)

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