Выполнить команду. Обработчик задания очереди заданий.
// Обработчик задания очереди заданий.
//
// Параметры:
// УчетнаяСистема - ОпределяемыйТип.УчетныеСистемыИнтеграцииОбластейДанных - учетная система.
// ИдентификаторПараметров - Строка(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
///////////////////////////////////////////////////////////////////////////////////////////////////////