Загрузить данные из каталога. Загружает данные из каталога.
// Загружает данные из каталога.
//
// Параметры:
// КаталогЗагрузки - Строка - каталог загрузки.
// ПараметрыЗагрузки - Структура - параметры загрузки, см. параметр "ПараметрыЗагрузки" процедуры "ЗагрузитьТекущуюОбластьДанныхИзАрхива" общего модуля "ВыгрузкаЗагрузкаОбластейДанных".
//
Процедура ЗагрузитьДанныеИзКаталога(Знач КаталогЗагрузки, Знач ПараметрыЗагрузки) Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация();
ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения;
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "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
///////////////////////////////////////////////////////////////////////////////////////////////////////