ВыполнитьКоманду (БСП)

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

Выполнить команду. Обработчик задания очереди заданий.

// Обработчик задания очереди заданий.
//
// Параметры:
//  УчетнаяСистема - ОпределяемыйТип.УчетныеСистемыИнтеграцииОбластейДанных - учетная система.
//  ИдентификаторПараметров - Строка(36) - идентификатор файла параметров выполнения команды.
//
Процедура ВыполнитьКоманду(УчетнаяСистема, ИдентификаторПараметров) Экспорт
	
	Словарь = ИнтеграцияОбъектовОбластейДанныхСловарь;
    СловарьОчередь = ОчередьЗаданийВнешнийИнтерфейсСловарь;
    
    Параметры = ФайлыОбластейДанных.ДвоичныеДанныеФайла(ИдентификаторПараметров);
    КлючЗадания = КлючЗаданияВыполненияКоманды(УчетнаяСистема, Параметры);
    ИдентификаторЗадания = ОчередьЗаданийВнешнийИнтерфейс.ИдентификаторЗадания(КлючЗадания);
    ПотокДанных = Параметры.ОткрытьПотокДляЧтения();
    
    Попытка
        МенеджерУчетнойСистемы = ОбщегоНазначения.МенеджерОбъектаПоСсылке(УчетнаяСистема);
        КодВозвратаОбработчика = СловарьОчередь.КодСостоянияВыполнено();
        ОшибкаОбработчика = Ложь;
        СообщениеОбОшибкеОбработчика = "";
                
        Результат = МенеджерУчетнойСистемы.ВыполнитьКоманду(
            УчетнаяСистема, 
            ПотокДанных, 
            КодВозвратаОбработчика, 
            ОшибкаОбработчика, 
            СообщениеОбОшибкеОбработчика);
            
        СвойстваЗадания = РегистрыСведений.СвойстваЗаданий.НовыйСвойстваЗадания();
        СвойстваЗадания.КодСостояния = КодВозвратаОбработчика;
        СвойстваЗадания.Ошибка = ОшибкаОбработчика;
        СвойстваЗадания.СообщениеОбОшибке = СообщениеОбОшибкеОбработчика;
        
        ШаблонРезультата = НовыйРезультатыВыполненияКоманды();
        Если ЗначениеЗаполнено(Результат) И ТипЗнч(Результат) <> ТипЗнч(ШаблонРезультата) Тогда
            ВызватьИсключение СтрШаблон(Словарь.ПереданРезультатНекорректногоТипа(), ТипЗнч(ШаблонРезультата), ТипЗнч(Результат));
        КонецЕсли;
        
        Если ЗначениеЗаполнено(Результат) 
           И Результат.Колонки.Найти("ИдентификаторОбъекта") <> Неопределено 
           И Результат.Колонки.Найти("Обработчик") <> Неопределено Тогда
           
            Запрос = Новый Запрос;
            Запрос.Текст = 
            	"ВЫБРАТЬ
                |   РезультатыВыполненияКоманды.ИдентификаторОбъекта КАК ИдентификаторОбъекта,
                |   РезультатыВыполненияКоманды.Обработчик КАК Обработчик
                |ПОМЕСТИТЬ РезультатыВыполненияКоманды
                |ИЗ
                |   &РезультатыВыполненияКоманды КАК РезультатыВыполненияКоманды
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |   ОбъектыКОтправке.ИдентификаторОбъекта КАК ИдентификаторОбъекта,
                |   ОбъектыКОтправке.Обработчик КАК Обработчик,
                |   ФайлыОбластейДанных.Идентификатор КАК ИдентификаторФайла
                |ИЗ
                |   РегистрСведений.ОбъектыКОтправке КАК ОбъектыКОтправке
                |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РезультатыВыполненияКоманды КАК РезультатыВыполненияКоманды
                |       ПО ОбъектыКОтправке.ИдентификаторОбъекта = РезультатыВыполненияКоманды.ИдентификаторОбъекта
                |           И ОбъектыКОтправке.Обработчик = РезультатыВыполненияКоманды.Обработчик
                |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФайлыОбластейДанных КАК ФайлыОбластейДанных
                |       ПО ОбъектыКОтправке.ИдентификаторФайла = ФайлыОбластейДанных.Идентификатор
                |           И (НЕ ФайлыОбластейДанных.Временный)
                |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияИнтеграцииОбъектов КАК СостоянияИнтеграцииОбъектов
                |       ПО ОбъектыКОтправке.УчетнаяСистема = СостоянияИнтеграцииОбъектов.УчетнаяСистема
                |           И ОбъектыКОтправке.ИдентификаторОбъекта = СостоянияИнтеграцииОбъектов.ИдентификаторОбъекта
                |ГДЕ
                |   ОбъектыКОтправке.УчетнаяСистема = &УчетнаяСистема
                |   И ЕСТЬNULL(СостоянияИнтеграцииОбъектов.Состояние, &ПустоеСостояние) <> &Ошибка";
            Запрос.УстановитьПараметр("УчетнаяСистема", УчетнаяСистема);
            Запрос.УстановитьПараметр("Ошибка", Перечисления.СостоянияИнтеграцииОбъектов.Ошибка);
            Запрос.УстановитьПараметр("ПустоеСостояние", Перечисления.СостоянияИнтеграцииОбъектов.ПустаяСсылка());
            Запрос.УстановитьПараметр("РезультатыВыполненияКоманды", Результат);
            РезультатЗапроса = Запрос.Выполнить();
            Если Не РезультатЗапроса.Пустой() Тогда
                Выборка = РезультатЗапроса.Выбрать();
                Архиватор = Новый ЗаписьZipФайла;
                КаталогФайлов = ПолучитьИмяВременногоФайла();
                ДанныеМанифеста = Новый Массив;
                Пока Выборка.Следующий() Цикл
                    ДобавитьОбъектКВыгрузке(УчетнаяСистема, КаталогФайлов, Архиватор, ДанныеМанифеста, Выборка, Выборка.ИдентификаторФайла);
                КонецЦикла;
                Манифест = Новый Структура(Словарь.ИмяПоляСоставаДанных(), ДанныеМанифеста);
                Архиватор.Добавить(ЗаписатьМанифест(Манифест, КаталогФайлов));
                ДвоичныеДанныеАрхива = Архиватор.ПолучитьДвоичныеДанные(,, МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный);
                ИмяАрхива = Строка(ИдентификаторЗадания) + ".zip";
                ИдентификаторФайлаАрхива = ФайлыОбластейДанных.ЗагрузитьФайл(ИмяАрхива, ДвоичныеДанныеАрхива,, Истина);
                Попытка
                    УдалитьФайлы(КаталогФайлов);
        		Исключение
        			Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        			ЗаписьЖурналаРегистрации(Словарь.КорневоеСобытие(), УровеньЖурналаРегистрации.Ошибка, , , Комментарий);
                КонецПопытки;
                РезультатЗадания = Новый Структура;
                РезультатЗадания.Вставить(Словарь.ПолеХранилище(), ФайлыОбластейДанных.ИдентификаторХранилища());
                РезультатЗадания.Вставить(Словарь.ПолеИдентификатор(), Строка(ИдентификаторФайлаАрхива));
                СвойстваЗадания.Результат = РаботаВМоделиСервисаБТС.СтрокаИзСтруктурыJSON(РезультатЗадания);
            КонецЕсли; 
            ФайлыОбластейДанных.УстановитьПризнакВременного(ИдентификаторПараметров);
        КонецЕсли; 
        РегистрыСведений.СвойстваЗаданий.Установить(ИдентификаторЗадания, СвойстваЗадания);
    Исключение
        ОчередьЗаданийВнешнийИнтерфейс.УстановитьВнутреннююОшибку(
            ИдентификаторЗадания, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
    КонецПопытки
	
КонецПроцедуры

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

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

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

ВыполнитьКоманду (БСП)

КомандаВыполнить (БСП)

ВыполнитьКомандуВФоне (БСП)

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