Интерактивное обновление классификаторов из файла. Обработка файла с обновлениями классификаторов в в фоновом задании.
// Обработка файла с обновлениями классификаторов в в фоновом задании.
//
// Параметры:
// ПараметрыПроцедуры - Структура - данные для обновления;
// АдресХранилища - Строка - адрес хранилища результат обновления.
//
Процедура ИнтерактивноеОбновлениеКлассификаторовИзФайла(ПараметрыПроцедуры, АдресХранилища) Экспорт
РезультатОбновления = Новый Структура;
РезультатОбновления.Вставить("КодОшибки", "");
РезультатОбновления.Вставить("СообщениеОбОшибке", "");
ДанныеФайла = ПараметрыПроцедуры.ДанныеФайла;
ДанныеКлассификаторов = ПараметрыПроцедуры.ДанныеКлассификаторов;
ДанныеКлассификаторов.Колонки.Добавить("АдресФайла", ОбщегоНазначения.ОписаниеТипаСтрока(250));
КаталогОбновлений = ФайловаяСистема.СоздатьВременныйКаталог(
Строка(Новый УникальныйИдентификатор));
ФайлыКлассификаторов = ПолучитьИмяВременногоФайла(".zip");
ДанныеФайла.Записать(ФайлыКлассификаторов);
ДанныеФайла = Неопределено;
ЧтениеZipФайла = Новый ЧтениеZipФайла(ФайлыКлассификаторов);
Для Каждого ОписаниеВерсии Из ДанныеКлассификаторов Цикл
ЭлементАрхива = ЧтениеZipФайла.Элементы.Найти(ОписаниеВерсии.ИдентификаторФайла);
Если ЭлементАрхива = Неопределено Тогда
ЗаписатьИнформациюВЖурналРегистрации(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось найти файл классификатора %1 в архиве %2.'"),
ОписаниеВерсии.Идентификатор,
ФайлыКлассификаторов),
Истина,
Метаданные.Обработки.ОбновлениеКлассификаторов);
Продолжить;
КонецЕсли;
ЧтениеZipФайла.Извлечь(ЭлементАрхива, КаталогОбновлений);
ДанныеФайла = Новый ДвоичныеДанные(КаталогОбновлений + ОписаниеВерсии.ИдентификаторФайла);
Если ДанныеФайла.Размер() = 0 Тогда
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файл классификатора %1 (%2) имеет размер равный 0.
|Загрузка данных остановлена.'"),
ОписаниеВерсии.Наименование,
ОписаниеВерсии.Идентификатор);
ЗаписатьИнформациюВЖурналРегистрации(
ТекстИсключения,
Истина,
Метаданные.Обработки.ОбновлениеКлассификаторов);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ОписаниеВерсии.Размер = ДанныеФайла.Размер();
ОписаниеВерсии.КонтрольнаяСумма = ИнтернетПоддержкаПользователей.КонтрольнаяСуммаФайла(ДанныеФайла);
ОписаниеВерсии.АдресФайла = ПоместитьВоВременноеХранилище(ДанныеФайла);
КонецЦикла;
УдалитьФайлы(ФайлыКлассификаторов);
ОбработатьФайлыПриИнтерактивнойЗагрузке(
ДанныеКлассификаторов,
РезультатОбновления);
ПоместитьВоВременноеХранилище(РезультатОбновления, АдресХранилища);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ДанныеКлассификаторовДляИнтерактивногоОбновления (БСП)
ИнтерактивноеОбновлениеКлассификаторовИзСервиса (БСП)
ОбработатьОбновлениеКлассификатора (БСП)
УстановитьДатуОбновленияКлассификатора (БСП)
ВерсииКлассификаторовВФайле (БСП)
ИнтерактивнаяЗагрузкаКлассификаторовДоступна (БСП)
ДоступныеОбновленияКлассификаторов (БСП)