ПодготовитьОбластьИзВыгрузки (БСП)

Автор: 1С
ОбщийМодуль.РаботаВМоделиСервисаБТС
БСП

Подготовить область из выгрузки. Загружает данные в область из пользовательской выгрузки.

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

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

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

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

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

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

ПодготовитьИПрикрепитьОбластьДанных (БСП)

ПодготовитьОбластьДанныхКИспользованиюИзЭталонной (БСП)

ПриОшибкеПодготовкиОбластиИзВыгрузки (БСП)

ПодготовитьОбластьДанныхКИспользованию (БСП)

ВыполнитьВыгрузкуДанных (БСП)

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

Синтакс-помощник БСП с нейросетевым ассистентом