ЗагрузитьДанныеИзКаталога (БСП)

Автор: 1С
ОбщийМодуль.ВыгрузкаЗагрузкаДанныхСлужебный
БСП

Загрузить данные из каталога. Загружает данные из каталога.

// Загружает данные из каталога.
//
// Параметры:
//	КаталогЗагрузки - Строка - каталог загрузки.
//	ПараметрыЗагрузки - Структура - параметры загрузки, см. параметр "ПараметрыЗагрузки" процедуры "ЗагрузитьТекущуюОбластьДанныхИзАрхива" общего модуля "ВыгрузкаЗагрузкаОбластейДанных".
//
Процедура ЗагрузитьДанныеИзКаталога(Знач КаталогЗагрузки, Знач ПараметрыЗагрузки) Экспорт
	
	СистемнаяИнформация = Новый СистемнаяИнформация();
	ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения;
	
	Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.2.19.0") < 0
		ИЛИ (ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.1.0") > 0
		И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.4.0") < 0) Тогда
		
		ВызватьИсключение
			НСтр("ru = 'Для выполнения загрузки данных требуется обновить технологическую платформу ""1С:Предприятие"".
                  |Для версии 8.2 необходимо использовать релиз 8.2.19 (или более новый).
                  |Для версии 8.3 необходимо использовать релиз 8.3.4 (или более новый).'");
		
	КонецЕсли;
	
	Если НЕ СтрЗаканчиваетсяНа(КаталогЗагрузки, "\") Тогда
		Каталог = Каталог + "\";
	КонецЕсли;
	
	Обработчики = Обработки.ВыгрузкаЗагрузкаДанныхМенеджерОбработчиковЗагрузкиДанных.Создать();
	
	Контейнер = Обработки.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера.Создать();
	Контейнер.ИнициализироватьЗагрузку(КаталогЗагрузки, ПараметрыЗагрузки);
	
	ИнформацияОВыгрузке = ПрочитатьИнформациюОВыгрузке(Контейнер);
	
	Если Не ВыгрузкаВАрхивеСовместимаСТекущейКонфигурацией(ИнформацияОВыгрузке) Тогда
		
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Невозможно загрузить данные из файла, т.к. файл был выгружен из другой конфигурации (файл выгружен из конфигурации %1 и не может быть загружен в конфигурацию %2)'"),
			ИнформацияОВыгрузке.Configuration.Name,
			Метаданные.Имя
		);
		
	КонецЕсли;
	
	Если Не ВыгрузкаВАрхивеСовместимаСТекущейВерсиейКонфигурации(ИнформацияОВыгрузке) Тогда
		
		ВызватьИсключение СтрШаблон(НСтр("ru = 'Невозможно загрузить данные из файла, т.к. файл был выгружен из другой версии конфигурации (файл выгружен из конфигурации версии %1 и не может быть загружен в конфигурацию версии %2)'"),
			ИнформацияОВыгрузке.Configuration.Version,
			Метаданные.Версия
		);
		
	КонецЕсли;
	
	Если ИнтеграцияПодсистемБТС.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ИнтеграцияПодсистемБТС.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Истина, Ложь);
	КонецЕсли;
	
	Обработчики.ПередОчисткойДанных(Контейнер);
	
	РаботаВМоделиСервиса.ОчиститьДанныеОбласти(ПараметрыЗагрузки.ЗагружатьПользователей);
	
	Обработчики.ПередЗагрузкойДанных(Контейнер);
	
	Обработки.ВыгрузкаЗагрузкаДанныхМенеджерЗагрузкиДанныхИнформационнойБазы.ЗагрузитьДанныеИнформационнойБазы(Контейнер, Обработчики);
	
	СопоставлениеПользователей = Неопределено;
	Если ПараметрыЗагрузки.ЗагружатьПользователей Тогда
		
		ВыгрузкаЗагрузкаПользователейИнформационнойБазы.ЗагрузитьПользователейИнформационнойБазы(Контейнер);
		
		Если ПараметрыЗагрузки.ЗагружатьНастройкиПользователей Тогда
			
			Обработки.ВыгрузкаЗагрузкаДанныхМенеджерЗагрузкиНастроекПользователей.ЗагрузитьНастройкиПользователейИнформационнойБазы(
				Контейнер, Обработчики);
			
		КонецЕсли;
		
	ИначеЕсли ПараметрыЗагрузки.Свойство("СопоставлениеПользователей", СопоставлениеПользователей) Тогда
		
		// Очистить идентификаторы, если они используются.
		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("Пользователи", СопоставлениеПользователей.ВыгрузитьКолонку("Пользователь"));
		Запрос.УстановитьПараметр("Идентификаторы", СопоставлениеПользователей.ВыгрузитьКолонку("ИдентификаторПользователяСервиса"));
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Пользователи.Ссылка КАК Пользователь
		|ИЗ
		|	Справочник.Пользователи КАК Пользователи
		|ГДЕ
		|	НЕ Пользователи.Ссылка В (&Пользователи)
		|	И Пользователи.ИдентификаторПользователяСервиса В(&Идентификаторы)";
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			ПользовательОбъект = Выборка.Пользователь.ПолучитьОбъект();
			ПользовательОбъект.ИдентификаторПользователяСервиса = Неопределено;
			ПользовательОбъект.ОбменДанными.Загрузка = Истина;
			ПользовательОбъект.Записать();
		КонецЦикла;
		
		// Обновить идентификаторы для используемых пользователей.
		Для Каждого СопоставлениеПользователя Из СопоставлениеПользователей Цикл
			Если Не ЗначениеЗаполнено(СопоставлениеПользователя.Пользователь) Тогда
				Продолжить;
			КонецЕсли;
			ПользовательОбъект = СопоставлениеПользователя.Пользователь.ПолучитьОбъект();
			Если ПользовательОбъект.ИдентификаторПользователяСервиса <> СопоставлениеПользователя.ИдентификаторПользователяСервиса Тогда
				ПользовательОбъект.ИдентификаторПользователяСервиса = СопоставлениеПользователя.ИдентификаторПользователяСервиса;
				ПользовательОбъект.ОбменДанными.Загрузка = Истина;
				ПользовательОбъект.Записать();
			КонецЕсли;
		КонецЦикла;
		
		// Загрузить настройки с заменой имени пользователя ИБ.
		ЗаменитьПользователяВНастройках = Новый Соответствие;
		Для Каждого СопоставлениеПользователя Из СопоставлениеПользователей Цикл
			Если ЗначениеЗаполнено(СопоставлениеПользователя.СтароеИмяПользователяИБ) 
				И ЗначениеЗаполнено(СопоставлениеПользователя.НовоеИмяПользователяИБ) Тогда
				ЗаменитьПользователяВНастройках.Вставить(СопоставлениеПользователя.СтароеИмяПользователяИБ, СопоставлениеПользователя.НовоеИмяПользователяИБ);
			КонецЕсли;
		КонецЦикла;
		Обработки.ВыгрузкаЗагрузкаДанныхМенеджерЗагрузкиНастроекПользователей.ЗагрузитьНастройкиПользователейИнформационнойБазы(
			Контейнер, Обработчики, ЗаменитьПользователяВНастройках);
		
	КонецЕсли;
	
	Если ИнтеграцияПодсистемБТС.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ИнтеграцияПодсистемБТС.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Истина);
	КонецЕсли;
	
	Обработчики.ПослеЗагрузкиДанных(Контейнер);
	
	Если ИнтеграцияПодсистемБТС.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ИнтеграцияПодсистемБТС.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

Загрузить (БСП)

ЗагрузитьДанныеXDTOВИнформационнуюБазу (БСП)

ВыгрузитьДанныеВКаталог (БСП)

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