ВыгрузитьОбластьВХранилищеМС (БСП)

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

Выгрузить область хранилище. Создает файл выгрузки заданной области и помещает его в хранилище Менеджера сервиса.

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

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

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

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

ВыгрузитьТекущуюОбластьДанныхВоВременноеХранилище (БСП)

ВыгрузитьВсеСобытияЖурналаРегистрации (БСП)

ВыгрузитьТекущуюОбластьДанныхВАрхив (БСП)

ВыгрузитьТекущуюОбластьДанныхВФайлИРазделитьНаЧасти (БСП)

УстановитьНастройкиРезервногоКопированияОбласти (БСП)

ВыгрузитьЧастьФайла (БСП)

ВыгрузитьПользователейИнформационнойБазы (БСП)

ПолеХранилище (БСП)

1С Менеджер конфигураций