Выгрузить область хранилище. Создает файл выгрузки заданной области и помещает его в хранилище Менеджера сервиса.
// Создает файл выгрузки заданной области и помещает его в хранилище Менеджера сервиса.
//
// Параметры:
// Параметры - Структура:
// - ОбластьДанных - Число.
// - ИДКопии - УникальныйИдентификатор; Неопределено.
// - МоментЗапуска - Дата - момент запуска архивирования области.
// - Принудительно - Булево - Флаг из МС: необходимость создавать копию вне зависимости от активности пользователей.
// - ПоТребованию - Булево - флаг интерактивного запуска архивирования. Если из МС - всегда Ложь.
// - ИДФайла - УникальныйИдентификатор - ИД файла выгрузки в хранилище МС.
// - НомерПопытки - Число - Счетчик попыток. Начальное значение: 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ВыгрузитьТекущуюОбластьДанныхВоВременноеХранилище (БСП)
ВыгрузитьВсеСобытияЖурналаРегистрации (БСП)
ВыгрузитьТекущуюОбластьДанныхВАрхив (БСП)
ВыгрузитьТекущуюОбластьДанныхВФайлИРазделитьНаЧасти (БСП)
УстановитьНастройкиРезервногоКопированияОбласти (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)