ОперацияВыполнена (БСП)

Автор: 1С
ОбщийМодуль.ДлительныеОперации
БСП

Операция выполнена.

Функция ОперацияВыполнена(Знач ИдентификаторЗадания, Знач ИсключениеПриОшибке = Ложь, Знач ВыводитьПрогрессВыполнения = Ложь, 
	Знач ВыводитьСообщения = Ложь) Экспорт
	
	Результат = Новый Структура;
	Результат.Вставить("Статус", "Выполняется");
	Результат.Вставить("КраткоеПредставлениеОшибки", Неопределено);
	Результат.Вставить("ПодробноеПредставлениеОшибки", Неопределено);
	Результат.Вставить("Прогресс", Неопределено);
	Результат.Вставить("Сообщения", Неопределено);
	
	Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
	Если Задание = Неопределено Тогда
		Пояснение = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания.
			|Фоновое задание не найдено'") + ": " + Строка(ИдентификаторЗадания);
		ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка, , , Пояснение);
		Если ИсключениеПриОшибке Тогда
			ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию.'"));
		КонецЕсли;
		Результат.Статус = "Ошибка";
		Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания.'");
		Возврат Результат;
	КонецЕсли;
	
	Если ВыводитьПрогрессВыполнения Тогда
		ПрогрессИСообщения = ПрочитатьПрогрессИСообщения(ИдентификаторЗадания, ?(ВыводитьСообщения, "ПрогрессИСообщения", "Прогресс"));
		Результат.Прогресс = ПрогрессИСообщения.Прогресс;
		Если ВыводитьСообщения Тогда
			Результат.Сообщения = ПрогрессИСообщения.Сообщения;
		КонецЕсли;
	ИначеЕсли ВыводитьСообщения Тогда
		Результат.Сообщения = Задание.ПолучитьСообщенияПользователю(Истина);
	КонецЕсли;
	
	Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
		Возврат Результат;
	КонецЕсли;
	
	Если Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда
		УстановитьПривилегированныйРежим(Истина);
		Если ПараметрыСеанса.ОтмененныеДлительныеОперации.Найти(ИдентификаторЗадания) = Неопределено Тогда
			Результат.Статус = "Ошибка";
			Если Задание.ИнформацияОбОшибке <> Неопределено Тогда
				Результат.КраткоеПредставлениеОшибки   = НСтр("ru = 'Операция отменена администратором.'");
				Результат.ПодробноеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки;
			КонецЕсли;
			Если ИсключениеПриОшибке Тогда
				Если Не ПустаяСтрока(Результат.КраткоеПредставлениеОшибки) Тогда
					ТекстСообщения = Результат.КраткоеПредставлениеОшибки;
				Иначе
					ТекстСообщения = НСтр("ru = 'Не удалось выполнить данную операцию.'");
				КонецЕсли;
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;
		Иначе
			Результат.Статус = "Отменено";
		КонецЕсли;
		УстановитьПривилегированныйРежим(Ложь);
		Возврат Результат;
	КонецЕсли;
	
	Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно 
		Или Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда
		
		Результат.Статус = "Ошибка";
		Если Задание.ИнформацияОбОшибке <> Неопределено Тогда
			Результат.КраткоеПредставлениеОшибки   = КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
			Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
		КонецЕсли;
		Если ИсключениеПриОшибке Тогда
			Если Не ПустаяСтрока(Результат.КраткоеПредставлениеОшибки) Тогда
				ТекстСообщения = Результат.КраткоеПредставлениеОшибки;
			Иначе
				ТекстСообщения = НСтр("ru = 'Не удалось выполнить данную операцию.'");
			КонецЕсли;
			ВызватьИсключение ТекстСообщения;
		КонецЕсли;
		Возврат Результат;
	КонецЕсли;
	
	Результат.Статус = "Выполнено";
	Возврат Результат;
	
КонецФункции

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

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

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

ОперацииВыполнены (БСП)

ОперацияНеМожетБытьВыполненаВРазделенномСеансе (БСП)

ОперацияНеМожетБытьВыполненаВБазеСОтключеннымРазделением (БСП)

ВыполнитьОбновлениеИнформационнойБазыВФоне (БСП)

ПослеОтправкиПисьма (БСП)

ВыполнитьНаСторонеЦиклПослеОперацииНаКлиентеXMLDSig (БСП)

ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиентеXMLDSig (БСП)

ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте (БСП)

TurboConf - расширение Конфигуратора 1С