#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаРезультатыОбновления;
Элементы.ДекорацияОписаниеРезультата.Заголовок =
НСтр("ru = 'Использование обработки недоступно при работе в модели сервиса.'");
Элементы.ДекорацияКартинкаРезультат.Картинка = БиблиотекаКартинок.Ошибка32;
Элементы.КнопкаНазад.Видимость = Ложь;
Элементы.КнопкаДалее.Видимость = Ложь;
Иначе
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
КонецЕсли;
ИдентификаторыОтбор = Параметры.ИдентификаторыОтбор;
Если ОбщегоНазначения.ЭтоВебКлиент() Тогда
ИнформацияОДоступныхОбновленияхИзСервиса();
КонецЕсли;
СообщенияВТехПоддержкуДоступны = ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РежимОбновленияПриИзменении(Элемент)
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ФайлОбновленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Архив'") + "(*.zip)|*.zip";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ФайлОбновленияНачалоВыбораЗавершение",
ЭтотОбъект);
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(
ОписаниеОповещения,
ДиалогВыбораФайла);
КонецПроцедуры
&НаКлиенте
Процедура НадписьПоясненияПодключенияАвторизацияОбработкаНавигационнойСсылки(
Элемент,
НавигационнаяСсылкаФорматированнойСтроки,
СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "action:openPortal" Тогда
СтандартнаяОбработка = Ложь;
ИнтернетПоддержкаПользователейКлиент.ОткрытьСтраницуИнтегрированногоСайта(
ИнтернетПоддержкаПользователейКлиентСервер.URLСтраницыСервисаLogin(
,
ИнтернетПоддержкаПользователейКлиент.НастройкиСоединенияССерверами()));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЛогинПриИзменении(Элемент)
СохранитьДанныеАутентификации = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПарольПриИзменении(Элемент)
СохранитьДанныеАутентификации = Истина;
ИнтернетПоддержкаПользователейКлиент.ПриИзмененииСекретныхДанных(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПарольНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИнтернетПоддержкаПользователейКлиент.ОтобразитьСекретныеДанные(
ЭтотОбъект,
Элемент,
"Пароль");
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияПереходВЖурналеРегистрацииОбработкаНавигационнойСсылки(
Элемент,
НавигационнаяСсылкаФорматированнойСтроки,
СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "action:openLog" Тогда
СтандартнаяОбработка = Ложь;
Отбор = Новый Структура;
Отбор.Вставить("Уровень", "Ошибка");
Отбор.Вставить("СобытиеЖурналаРегистрации", РаботаСКлассификаторамиКлиент.ИмяСобытияЖурналаРегистрации());
ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияТехническаяПоддержкаОбработкаНавигационнойСсылки(
Элемент,
НавигационнаяСсылкаФорматированнойСтроки,
СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "action:support" Тогда
СтандартнаяОбработка = Ложь;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки") Тогда
МодульСообщенияВСлужбуТехническойПоддержкиКлиентСервер =
ОбщегоНазначенияКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиКлиентСервер");
ДанныеСообщения = МодульСообщенияВСлужбуТехническойПоддержкиКлиентСервер.ДанныеСообщения();
ДанныеСообщения.Получатель = "webIts";
ДанныеСообщения.Тема = НСтр("ru = 'Интернет-поддержка. Обновление классификаторов'");
ДанныеСообщения.Сообщение = СообщениеОбОшибке;
Если ИнформацияОбОшибке <> "" Тогда
МодульСообщенияВСлужбуТехническойПоддержкиКлиентСервер.ЗаполнитьНастройкиПоискаГотовогоОтвета(
ИнформацияОбОшибке,
ДанныеСообщения.НастройкиПоискаГотовогоОтвета);
КонецЕсли;
МодульСообщенияВСлужбуТехническойПоддержкиКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("СообщенияВСлужбуТехническойПоддержкиКлиент");
МодульСообщенияВСлужбуТехническойПоддержкиКлиент.ОтправитьСообщение(
ДанныеСообщения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДанныеКлассификаторов
&НаКлиенте
Процедура ДанныеКлассификаторовПередНачаломДобавления(
Элемент,
Отказ,
Копирование,
Родитель,
Группа,
Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДанныеКлассификаторовПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Далее(Команда)
ОчиститьСообщения();
ИнформацияОбОшибке = "";
СообщениеОбОшибке = "";
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаПодключениеКПорталу Тогда
Результат = ИнтернетПоддержкаПользователейКлиентСервер.ПроверитьДанныеАутентификации(
Новый Структура("Логин, Пароль",
Логин, Пароль));
Если Результат.Отказ Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
Результат.СообщениеОбОшибке,
,
Результат.Поле);
КонецЕсли;
Если Результат.Отказ Тогда
Возврат;
КонецЕсли;
ПроверитьПодключениеКПорталу1СИТС();
ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборРежимаОбновления Тогда
Если РежимОбновления = РежимОбновленияЧерезИнтернет() Тогда
ИнформацияОДоступныхОбновленияхИзСервиса();
Иначе
ИнформацияОДоступныхОбновленияхИзФайла();
КонецЕсли;
ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборКлассификаторов
Или Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаИнформацияОКлассификаторе Тогда
Если РежимОбновления = РежимОбновленияЧерезИнтернет() Тогда
НачатьОбновлениеКлассификаторовСервис();
Иначе
НачатьОбновлениеКлассификаторовИзФайла();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Назад(Команда)
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборРежимаОбновления;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Логин = "";
Пароль = "";
ИнформацияОбОшибке = "";
СообщениеОбОшибке = "";
КонецПроцедуры
&НаКлиенте
Процедура УстановитьФлажки(Команда)
УстановитьОтметку(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьФлажки(Команда)
УстановитьОтметку(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФорму(Команда)
Закрыть(ИдентификаторыОбновленных.ВыгрузитьЗначения());
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ФайлОбновленияНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() <> 0 Тогда
ФайлОбновления = ВыбранныеФайлы[0];
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьПодключениеКПорталу1СИТС()
ПараметрыПолучения = ПодготовитьПараметрыПолученияИнформацииОбОбновлениях();
Если ПараметрыПолучения.Идентификаторы.Количество() = 0 Тогда
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
НСтр("ru = 'Отсутствуют классификаторы доступные для обновления.'"),
Ложь,
Ложь);
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Возврат;
КонецЕсли;
РезультатОперации = РаботаСКлассификаторами.СлужебнаяДоступныеОбновленияКлассификаторов(
ПараметрыПолучения.Идентификаторы,
Новый Структура("Логин, Пароль",
Логин, Пароль));
Если РезультатОперации.КодОшибки = "НеверныйЛогинИлиПароль" Тогда
ОбщегоНазначения.СообщитьПользователю(
РезультатОперации.СообщениеОбОшибке,
,
"Логин");
Возврат;
КонецЕсли;
ЗаполнитьИнформациюОДоступныхОбновлениях(
РезультатОперации,
ПараметрыПолучения.ВерсииКлассификаторов);
КонецПроцедуры
&НаСервере
Процедура ИнформацияОДоступныхОбновленияхИзСервиса()
Если Не ИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки() Тогда
Если ИнтернетПоддержкаПользователей.ДоступноПодключениеИнтернетПоддержки() Тогда
СохранитьДанныеАутентификации = Истина;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаПодключениеКПорталу;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Иначе
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
НСтр("ru = 'Интернет-поддержка пользователей не подключена, обратитесь к администратору.'"),
Ложь,
Ложь);
КонецЕсли;
Возврат;
КонецЕсли;
ПараметрыПолучения = ПодготовитьПараметрыПолученияИнформацииОбОбновлениях();
Если ПараметрыПолучения.Идентификаторы.Количество() = 0 Тогда
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
НСтр("ru = 'Отсутствуют классификаторы доступные для обновления.'"),
Ложь,
Ложь);
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Возврат;
КонецЕсли;
РезультатОперации = РаботаСКлассификаторами.СлужебнаяДоступныеОбновленияКлассификаторов(
ПараметрыПолучения.Идентификаторы,
Неопределено);
ЗаполнитьИнформациюОДоступныхОбновлениях(
РезультатОперации,
ПараметрыПолучения.ВерсииКлассификаторов);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИнформациюОДоступныхОбновлениях(РезультатОперации, ВерсииКлассификаторов)
ИнформацияОбОшибке = РезультатОперации.ИнформацияОбОшибке;
Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда
Если РезультатОперации.КодОшибки = "НеверныйЛогинИлиПароль" Тогда
Если ИнтернетПоддержкаПользователей.ДоступноПодключениеИнтернетПоддержки() Тогда
СохранитьДанныеАутентификации = Истина;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаПодключениеКПорталу;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Иначе
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
НСтр("ru = 'Введен не верный логин или пароль Интернет-поддержки пользователей, обратитесь к администратору.'"),
Ложь,
Ложь);
КонецЕсли;
Иначе
Если СохранитьДанныеАутентификации Тогда
Логин = "";
Пароль = "";
СохранитьДанныеАутентификации = Ложь;
КонецЕсли;
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
РезультатОперации.СообщениеОбОшибке);
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
КонецЕсли;
Возврат;
КонецЕсли;
Если СохранитьДанныеАутентификации Тогда
УстановитьПривилегированныйРежим(Истина);
ИнтернетПоддержкаПользователей.СлужебнаяСохранитьДанныеАутентификации(
Новый Структура(
"Логин, Пароль",
Логин,
Пароль));
УстановитьПривилегированныйРежим(Ложь);
Логин = "";
Пароль = "";
СохранитьДанныеАутентификации = Ложь;
КонецЕсли;
Для Каждого ОписаниеКлассификатора Из ВерсииКлассификаторов Цикл
Для Каждого ОписаниеВерсии Из РезультатОперации.ДоступныеВерсии Цикл
Если ОписаниеВерсии.Идентификатор = ОписаниеКлассификатора.Идентификатор Тогда
СтрокаКлассификатора = ДанныеКлассификаторов.Добавить();
ЗаполнитьЗначенияСвойств(
СтрокаКлассификатора,
ОписаниеКлассификатора,
"Идентификатор, Наименование");
СтрокаКлассификатора.КонтрольнаяСумма = ОписаниеВерсии.ИдентификаторФайла.КонтрольнаяСумма;
СтрокаКлассификатора.ИдентификаторФайла = ОписаниеВерсии.ИдентификаторФайла.ИдентификаторФайла;
СтрокаКлассификатора.Версия = ОписаниеВерсии.Версия;
СтрокаКлассификатора.ОписаниеВерсии = ОписаниеВерсии.ОписаниеВерсии;
СтрокаКлассификатора.Размер = ОписаниеВерсии.Размер;
Если ОписаниеКлассификатора.Версия >= ОписаниеВерсии.Версия
И РезультатОперации.ДоступныеВерсии.Количество() > 1 Тогда
СтрокаКлассификатора.Наименование = ОбновлениеНеТребуется(
ОписаниеКлассификатора.Наименование);
КонецЕсли;
Если ОписаниеКлассификатора.Версия >= ОписаниеВерсии.Версия Тогда
СтрокаКлассификатора.Версия = ОписаниеКлассификатора.Версия;
Иначе
СтрокаКлассификатора.ТребуетсяОбновление = Истина;
СтрокаКлассификатора.Отметка = Истина;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ДанныеКлассификаторов.Количество() = 1 Тогда
Если ДанныеКлассификаторов[0].ТребуетсяОбновление Тогда
Элементы.ДекорацияИнформацияОКлассификаторе.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Доступна новая версия <b>%1</b> классификатора <b>%2</b>.
|Нажмите <b>Далее></b> для загрузки новой версии классификатора.'"),
ДанныеКлассификаторов[0].Версия,
ДанныеКлассификаторов[0].Наименование);
Иначе
Элементы.ДекорацияИнформацияОКлассификаторе.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Обновление классификатора <b>%1</b> не требуется.
|Нажмите <b>Далее></b> для загрузки текущей версии классификатора.'"),
ДанныеКлассификаторов[0].Наименование);
КонецЕсли;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаИнформацияОКлассификаторе;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
ИначеЕсли ДанныеКлассификаторов.Количество() > 1 Тогда
ДанныеКлассификаторов.Сортировать("Отметка Убыв, Наименование");
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборКлассификаторов;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Иначе
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
НСтр("ru = 'Не найдены доступные обновления классификаторов.'"),
Ложь,
Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИнформацияОДоступныхОбновленияхИзФайла()
ДанныеКлассификаторов.Очистить();
Если Не ЗначениеЗаполнено(ФайлОбновления) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Не выбран файл обновления.'"),
,
"ФайлОбновления");
Возврат;
КонецЕсли;
КомпонентыПути = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлОбновления);
Если КомпонентыПути.Расширение <> ".zip" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Неверный формат файла.'"),
,
"ФайлОбновления");
Возврат;
КонецЕсли;
ВерсииКлассификаторов = РаботаСКлассификаторамиКлиент.ВерсииКлассификаторовВФайле(
ФайлОбновления);
ИнформацияОДоступныхОбновленияхИзФайлаНаСервере(ВерсииКлассификаторов);
Если ДанныеКлассификаторов.Количество() <> 0 Тогда
ДанныеКлассификаторов.Сортировать("Отметка Убыв, Наименование");
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборКлассификаторов;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
Иначе
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
НСтр("ru = 'Не найдены доступные обновления классификаторов.'"),
Ложь,
Ложь);
КонецЕсли;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ИнформацияОДоступныхОбновленияхИзФайлаНаСервере(Знач ВерсииКлассификаторов)
Идентификаторы = ИдентификаторыОтбор.ВыгрузитьЗначения();
ВерсииКлассификаторовИБ = РаботаСКлассификаторами.ДанныеКлассификаторовДляИнтерактивногоОбновления(
?(Идентификаторы.Количество() = 0,
Неопределено,
Идентификаторы));
Для каждого ОписаниеКлассификатора Из ВерсииКлассификаторов Цикл
Если ОписаниеКлассификатора.Версия = 0 Тогда
ОписаниеКлассификатора.Версия = РаботаСКлассификаторами.ОбработатьНачальнуюВерсиюКлассификатора(
ОписаниеКлассификатора.Идентификатор);
КонецЕсли;
КонецЦикла;
Для Каждого ВерсияКлассификатора Из ВерсииКлассификаторов Цикл
ТребуетсяОбновление = Истина;
КлассификаторИспользуется = Ложь;
Для Каждого ВерсияКлассификатораИБ Из ВерсииКлассификаторовИБ Цикл
Если ВерсияКлассификатораИБ.Идентификатор = ВерсияКлассификатора.Идентификатор Тогда
КлассификаторИспользуется = Истина;
Если ВерсияКлассификатораИБ.Версия >= ВерсияКлассификатора.Версия Тогда
ТребуетсяОбновление = Ложь;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Если КлассификаторИспользуется Тогда
СтрокаЗагрузки = ДанныеКлассификаторов.Добавить();
СтрокаЗагрузки.Отметка = ТребуетсяОбновление;
Если ТребуетсяОбновление Тогда
СтрокаЗагрузки.Наименование = ВерсияКлассификатораИБ.Наименование;
Иначе
СтрокаЗагрузки.Наименование = ОбновлениеНеТребуется(ВерсияКлассификатораИБ.Наименование);
КонецЕсли;
СтрокаЗагрузки.Версия = ВерсияКлассификатора.Версия;
СтрокаЗагрузки.ТребуетсяОбновление = ТребуетсяОбновление;
СтрокаЗагрузки.Идентификатор = ВерсияКлассификатора.Идентификатор;
СтрокаЗагрузки.ИдентификаторФайла = ВерсияКлассификатора.Имя;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура НачатьОбновлениеКлассификаторовИзФайлаПослеЗагрузки(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт
Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Файл с обновлениями не загружен.'"));
Возврат;
КонецЕсли;
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
РезультатВыполнения = ИнтерактивноеОбновлениеКлассификаторовИзФайла(
ПомещенныеФайлы[0].Хранение);
ОповещениеОЗавершении = Новый ОписаниеОповещения(
"НачатьОбновлениеКлассификаторовЗавершение",
ЭтотОбъект);
Если РезультатВыполнения.Статус = "Выполнено" Или РезультатВыполнения.Статус = "Ошибка" Тогда
НачатьОбновлениеКлассификаторовЗавершение(РезультатВыполнения, Неопределено);
Возврат;
КонецЕсли;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаДлительнаяОперация;
Элементы.ИндикаторОбновления.Видимость = Ложь;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Обработка файлов классификатора на сервере.'");
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(
РезультатВыполнения,
ОповещениеОЗавершении,
ПараметрыОжидания);
КонецПроцедуры
&НаСервере
Функция ИнтерактивноеОбновлениеКлассификаторовИзФайла(Знач АдресФайла)
Отбор = Новый Структура;
Отбор.Вставить("Отметка", Истина);
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("ДанныеФайла", ПолучитьИзВременногоХранилища(АдресФайла));
ПараметрыПроцедуры.Вставить("ДанныеКлассификаторов", ДанныеКлассификаторов.Выгрузить(Отбор));
УдалитьИзВременногоХранилища(АдресФайла);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обработка файлов классификатора на сервере.'");
РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне(
"РаботаСКлассификаторами.ИнтерактивноеОбновлениеКлассификаторовИзФайла",
ПараметрыПроцедуры,
ПараметрыВыполнения);
Возврат РезультатВыполнения;
КонецФункции
&НаКлиенте
Процедура НачатьОбновлениеКлассификаторовСервис()
ИндикаторОбновления = 0;
ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения(
"ОбновитьИндикаторЗагрузки",
ЭтотОбъект);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ПараметрыОжидания.ОповещениеОПрогрессеВыполнения = ОповещениеОПрогрессеВыполнения;
РезультатВыполнения = ИнтерактивноеОбновлениеКлассификаторовИзСервиса();
ОповещениеОЗавершении = Новый ОписаниеОповещения(
"НачатьОбновлениеКлассификаторовЗавершение",
ЭтотОбъект);
Если РезультатВыполнения.Статус = "Выполнено" Или РезультатВыполнения.Статус = "Ошибка" Тогда
НачатьОбновлениеКлассификаторовЗавершение(РезультатВыполнения, Неопределено);
Возврат;
КонецЕсли;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаДлительнаяОперация;
Элементы.ИндикаторОбновления.Видимость = Истина;
Элементы.ДекорацияСостояние.Заголовок = НСтр("ru = 'Выполняется обновление классификаторов. Обновление может занять от
|нескольких минут до нескольких часов в зависимости от размера обновления.'");
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(
РезультатВыполнения,
ОповещениеОЗавершении,
ПараметрыОжидания);
КонецПроцедуры
&НаСервере
Функция ИнтерактивноеОбновлениеКлассификаторовИзСервиса()
ДанныеКлассификаторовПодготовка = ДанныеКлассификаторов.Выгрузить();
ДанныеКлассификаторовПодготовка.Колонки.Добавить("ДанныеФайла");
СтрокиУдалить = Новый Массив;
Если ДанныеКлассификаторовПодготовка.Количество() > 1 Тогда
Для Каждого ОписаниеКлассификатора Из ДанныеКлассификаторовПодготовка Цикл
Если Не ОписаниеКлассификатора.Отметка Тогда
СтрокиУдалить.Добавить(ОписаниеКлассификатора);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для каждого ОписаниеКлассификатора Из СтрокиУдалить Цикл
ДанныеКлассификаторовПодготовка.Удалить(ОписаниеКлассификатора);
КонецЦикла;
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("ДанныеКлассификаторов", ДанныеКлассификаторовПодготовка);
ПараметрыПроцедуры.Вставить("РежимОбновления", РежимОбновления);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление данных классификаторов.'");
РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне(
"РаботаСКлассификаторами.ИнтерактивноеОбновлениеКлассификаторовИзСервиса",
ПараметрыПроцедуры,
ПараметрыВыполнения);
Возврат РезультатВыполнения;
КонецФункции
&НаКлиенте
Процедура НачатьОбновлениеКлассификаторовИзФайла()
ОписаниеОповещения = Новый ОписаниеОповещения(
"НачатьОбновлениеКлассификаторовИзФайлаПослеЗагрузки",
ЭтотОбъект);
ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла(ФайлОбновления);
ФайлыОбновлений = Новый Массив;
ФайлыОбновлений.Добавить(ОписаниеПередаваемогоФайла);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.Интерактивно = Ложь;
ФайловаяСистемаКлиент.ЗагрузитьФайлы(
ОписаниеОповещения,
ПараметрыЗагрузки,
ФайлыОбновлений);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИндикаторЗагрузки(СтатусВыполнения, ДополнительныеПараметры) Экспорт
Если СтатусВыполнения = Неопределено Тогда
Возврат;
КонецЕсли;
Если СтатусВыполнения.Статус <> "Выполняется" Тогда
Возврат;
КонецЕсли;
Если СтатусВыполнения.Прогресс <> Неопределено Тогда
ИндикаторОбновления = СтатусВыполнения.Прогресс.Процент;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьОбновлениеКлассификаторовЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Выполнено" Тогда
РезультатОперации = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда
ИнформацияОбОшибке = РезультатОперации.ИнформацияОбОшибке;
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
РезультатОперации.СообщениеОбОшибке,
Ложь,
Ложь);
Иначе
УстановитьОтображениеУспешногоЗавершения(ЭтотОбъект);
КонецЕсли;
Для Каждого СтрокаТаблицы Из ДанныеКлассификаторов Цикл
Если СтрокаТаблицы.Отметка Тогда
ИдентификаторыОбновленных.Добавить(СтрокаТаблицы.Идентификатор);
КонецЕсли;
КонецЦикла;
Оповестить(
РаботаСКлассификаторамиКлиент.ИмяСобытияОповещенияОЗагрузки(),
ИдентификаторыОбновленных.ВыгрузитьЗначения(),
ЭтотОбъект);
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ДанныеОшибки = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(
Результат.ИнформацияОбОшибке,
НСтр("ru = 'Ошибка загрузки классификаторов.'"));
ИнформацияОбОшибке = ДанныеОшибки.Текст;
УстановитьОтображениеИнформацииОбОшибке(
ЭтотОбъект,
ИнформацияОбОшибке);
КонецЕсли;
УстановитьОтображениеЭлементовФормы(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеЭлементовФормы(Форма)
Элементы = Форма.Элементы;
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборРежимаОбновления Тогда
Элементы.КнопкаНазад.Видимость = Ложь;
Элементы.КнопкаДалее.Видимость = Истина;
ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаПодключениеКПорталу
Или Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВыборКлассификаторов
Или Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаИнформацияОКлассификаторе Тогда
Элементы.КнопкаНазад.Видимость = Истина;
Элементы.КнопкаДалее.Видимость = Истина;
ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаДлительнаяОперация Тогда
Элементы.КнопкаНазад.Видимость = Ложь;
Элементы.КнопкаДалее.Видимость = Ложь;
ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаРезультатыОбновления Тогда
Элементы.КнопкаНазад.Видимость = Истина;
Элементы.КнопкаДалее.Видимость = Ложь;
КонецЕсли;
Если Форма.РежимОбновления = 0 Тогда
Элементы.ФайлОбновления.Доступность = Ложь;
Иначе
Элементы.ФайлОбновления.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеИнформацииОбОшибке(
Форма,
ИнформацияОбОшибке,
Ошибка = Истина,
ОтображатьЖР = Истина)
Форма.СообщениеОбОшибке = ИнформацияОбОшибке;
Форма.Элементы.ДекорацияПереходВЖурналеРегистрации.Видимость = ОтображатьЖР;
Форма.Элементы.ДекорацияТехническаяПоддержка.Видимость = Форма.СообщенияВТехПоддержкуДоступны;
Форма.Элементы.ГруппаСтраницы.ТекущаяСтраница = Форма.Элементы.ГруппаРезультатыОбновления;
Форма.Элементы.ДекорацияОписаниеРезультата.Заголовок = ИнформацияОбОшибке;
Форма.Элементы.ДекорацияКартинкаРезультат.Картинка = ?(
Ошибка,
БиблиотекаКартинок.Ошибка32,
БиблиотекаКартинок.Предупреждение32);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеУспешногоЗавершения(Форма)
Форма.Элементы.ГруппаСтраницы.ТекущаяСтраница = Форма.Элементы.ГруппаРезультатыОбновления;
Форма.Элементы.ДекорацияКартинкаРезультат.Картинка = БиблиотекаКартинок.Успешно32;
Форма.Элементы.ДекорацияОписаниеРезультата.Заголовок = НСтр("ru = 'Обновление классификаторов успешно завершено.'");
Форма.Элементы.ДекорацияТехническаяПоддержка.Видимость = Ложь;
Форма.Элементы.ДекорацияПереходВЖурналеРегистрации.Видимость = Ложь;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДанныеКлассификаторовВерсия.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДанныеКлассификаторовНаименование.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДанныеКлассификаторовОтметка.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДанныеКлассификаторов.ТребуетсяОбновление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра(
"ЦветТекста",
Метаданные.ЭлементыСтиля.ЦветНеАктивнойСтроки.Значение);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтметку(Значение)
Для Каждого СтрокаКлассификатора Из ДанныеКлассификаторов Цикл
СтрокаКлассификатора.Отметка = Значение;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция РежимОбновленияЧерезИнтернет()
Возврат 0;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОбновлениеНеТребуется(Наименование)
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (обновление не требуется)'"),
Наименование);
КонецФункции
&НаСервере
Функция ПодготовитьПараметрыПолученияИнформацииОбОбновлениях()
ДанныеКлассификаторов.Очистить();
Идентификаторы = ИдентификаторыОтбор.ВыгрузитьЗначения();
ВерсииКлассификаторов = РаботаСКлассификаторами.ДанныеКлассификаторовДляИнтерактивногоОбновления(
?(Идентификаторы.Количество() = 0,
Неопределено,
Идентификаторы));
Идентификаторы = Новый Массив;
Для Каждого ОписаниеКлассификатора Из ВерсииКлассификаторов Цикл
Идентификаторы.Добавить(ОписаниеКлассификатора.Идентификатор);
КонецЦикла;
ПараметрыПолучения = Новый Структура;
ПараметрыПолучения.Вставить("ВерсииКлассификаторов", ВерсииКлассификаторов);
ПараметрыПолучения.Вставить("Идентификаторы", Идентификаторы);
Возврат ПараметрыПолучения;
КонецФункции
#КонецОбласти