#Область ОписаниеПеременных
&НаКлиенте
Перем ТекущийКонтекст;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
НавигационнаяСсылка = "e1cib/app/ОбщаяФорма.Расширения";
Если Не ПравоДоступа("Администрирование", Метаданные) Тогда
Элементы.СписокРасширенийБезопасныйРежимФлаг.ТолькоПросмотр = Истина;
КонецЕсли;
Элементы.ФормаУстановленныеПатчи.Видимость =
ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации");
Если Не ПравоДоступа("АдминистрированиеРасширенийКонфигурации", Метаданные) Тогда
Элементы.СписокРасширенийОбновить.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели;
Элементы.СписокРасширений.ТолькоПросмотр = Истина;
Элементы.СписокРасширенийДобавить.Видимость = Ложь;
Элементы.СписокРасширенийУдалить.Видимость = Ложь;
Элементы.СписокРасширенийОбновитьИзФайла.Видимость = Ложь;
Элементы.СписокРасширенийСохранитьКак.Видимость = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюДобавить.Видимость = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюУдалить.Видимость = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Видимость = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюСохранитьКак.Видимость = Ложь;
Элементы.ФормаУстановленныеПатчи.Видимость = Ложь;
Элементы.ПроверитьВозможностьПримененияВсехРасширений.Видимость = Ложь;
Элементы.ПодменюВключитьРасширения.Видимость = Ложь;
Элементы.ПодменюПередаватьВПодчиненныеУзлыРИБ.Видимость = Ложь;
Элементы.ПодменюБезопасныйРежим.Видимость = Ложь;
Элементы.УстановитьОтветственного.Видимость = Ложь;
Элементы.СписокРасширенийОтветственный.Видимость = Ложь;
Элементы.СписокРасширенийЕстьКомментарий.Видимость = Ложь;
Элементы.СписокРасширенийКомментарий.Видимость = Ложь;
КонецЕсли;
Элементы.СписокРасширенийОбщее.Видимость = ОбщегоНазначения.РазделениеВключено() И ПравоДоступа("Администрирование", Метаданные);
Элементы.СписокРасширенийПолученоИзГлавногоУзлаРИБ.Видимость = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ();
Элементы.СписокРасширенийПередаватьВПодчиненныеУзлыРИБ.Видимость = ОбщегоНазначения.ЭтоРаспределеннаяИнформационнаяБаза();
ОбновитьСписок();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьДоступностьКнопокКомандныхПанелей()
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ВыполненВыходИзОбластиДанных"
Или ИмяСобытия = "ВыполненВходВОбластьДанных" Тогда
ПодключитьОбработчикОжидания("ОбновитьСписокОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПредупреждениеОписаниеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗавершитьРаботуСистемы(Ложь, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокРасширений
&НаКлиенте
Процедура СписокРасширенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя="СписокРасширенийЕстьКомментарий" Тогда
ТекущийЭлемент = Элементы.СписокРасширенийКомментарий;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПриАктивизацииСтроки(Элемент)
УстановитьДоступностьКнопокКомандныхПанелей();
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
ЗагрузитьРасширение(Неопределено, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПередУдалением(Элемент, Отказ)
Отказ = Истина;
УдалитьРасширения(Элемент.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийБезопасныйРежимФлагПриИзменении(Элемент)
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
Если ТекущееРасширение = Неопределено Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("ИдентификаторСтроки", ТекущееРасширение.ПолучитьИдентификатор());
ПоказатьДлительнуюОперацию();
ТекущийКонтекст = Контекст;
ПодключитьОбработчикОжидания("СписокРасширенийБезопасныйРежимФлагПриИзмененииЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПодключатьПриИзменении(Элемент)
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
Если ТекущееРасширение = Неопределено Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("ИдентификаторСтроки", ТекущееРасширение.ПолучитьИдентификатор());
Если Не ТекущееРасширение.Подключать
И ЭтоРасширениеСДанными(ТекущееРасширение.ИдентификаторРасширения) Тогда
Оповещение = Новый ОписаниеОповещения("ОтключитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОтключениемРасширенияСДанными);
Иначе
СписокРасширенийПодключатьПриИзмененииПродолжение(Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзменении(Элемент)
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
Если ТекущееРасширение = Неопределено Тогда
Возврат;
КонецЕсли;
СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзмененииНаСервере(ТекущееРасширение.ПолучитьИдентификатор());
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийОтветственныйПриИзменении(Элемент)
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
СохранитьСвойстваРасширений(ТекущееРасширение.ИдентификаторРасширения, СвойстваРасширений(ТекущееРасширение));
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийКомментарийПриИзменении(Элемент)
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
ТекущееРасширение.ЕстьКомментарий = ЗначениеЗаполнено(ТекущееРасширение.Комментарий);
СохранитьСвойстваРасширений(ТекущееРасширение.ИдентификаторРасширения, СвойстваРасширений(ТекущееРасширение));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Обновить(Команда)
ОбновитьСписок();
КонецПроцедуры
&НаКлиенте
Процедура СохранитьКак(Команда)
ВыделенныеСтроки = Элементы.СписокРасширений.ВыделенныеСтроки;
ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьКакЗавершение", ЭтотОбъект, ВыделенныеСтроки);
Если ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
ИначеЕсли ВыделенныеСтроки.Количество() = 1 Тогда
СохраняемыеФайлы = СохранитьНаСервере(ВыделенныеСтроки);
Иначе
Заголовок = НСтр("ru = 'Выберите каталог для сохранения расширений конфигурации'");
ФайловаяСистемаКлиент.ВыбратьКаталог(ОписаниеОповещения, Заголовок);
Возврат;
КонецЕсли;
Если СохраняемыеФайлы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения расширения конфигурации'");
ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы расширений конфигурации (*.cfe)|*.cfe'") + "|"
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы());
ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаНаДиске(Команда)
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
Если ТекущееРасширение = Неопределено Тогда
Возврат;
КонецЕсли;
ЗагрузитьРасширение(Элементы.СписокРасширений.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСобытияФоновогоОбновленияПараметровРаботыРасширений(Команда)
ОтборСобытий = Новый Структура;
ОтборСобытий.Вставить("СобытиеЖурналаРегистрации", ИмяСобытияЗаполненияПараметров());
ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ОтборСобытий, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЗапуститьОбновлениеПараметровРаботыРасширенийВФоне(Команда)
ТекстПредупреждения = "";
ЗапуститьОбновлениеПараметровРаботыРасширенийВФонеНаСервере(ТекстПредупреждения);
ПоказатьПредупреждение(, ТекстПредупреждения);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьУстаревшиеПараметровРаботыРасширений(Команда)
УдалитьУстаревшиеПараметрыРаботыРасширенийНаСервере();
ПоказатьПредупреждение(, НСтр("ru = 'Выполнено удаление устаревших версий параметров работы расширений.'"));
КонецПроцедуры
&НаКлиенте
Процедура УстановленныеПатчи(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент");
МодульОбновлениеКонфигурацииКлиент.ПоказатьУстановленныеИсправления();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВозможностьПримененияВсехРасширений(Команда)
Результат = РезультатПроверкиВозможностиПримененияВсех();
Если Результат.КоличествоПроблем = 0 Тогда
ПараметрыФормыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыФормыВопроса.Картинка = БиблиотекаКартинок.ДиалогИнформация;
ПараметрыФормыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
ПараметрыФормыВопроса.Заголовок = НСтр("ru = 'Результат проверки возможности применения всех расширений'");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено,
НСтр("ru = 'Проверка возможности применения всех расширений пройдена успешно.'"),
РежимДиалогаВопрос.ОК,
ПараметрыФормыВопроса);
Иначе
Результат.ИнформацияОПроблемах.Показать(НСтр("ru = 'Результат проверки расширений.'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВключитьРасширения(Команда)
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ВключитьПодключениеРасширений", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьРасширения(Команда)
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ВыключитьПодключениеРасширений", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьПередачуВПодчиненныеУзлыРИБ(Команда)
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ВключитьПередачуВПодчиненныеУзлыРИБЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьПередачуВПодчиненныеУзлыРИБ(Команда)
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ВыключитьПередачуВПодчиненныеУзлыРИБЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьБезопасныйРежим(Команда)
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ВключитьБезопасныйРежимЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьБезопасныйРежим(Команда)
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ВыключитьБезопасныйРежимЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтветственного(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
ПараметрыФормы.Вставить("РасширенныйПодбор", Ложь);
Оповещение = Новый ОписаниеОповещения("УстановитьОтветственногоПослеВыбора", ЭтотОбъект);
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, ЭтотОбъект,,,, Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ОбновитьСписокОбработчикОжидания()
ОбновитьСписок();
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписок(ПослеДобавления = Ложь)
Если ПослеДобавления Тогда
ИндексТекущейСтроки = СписокРасширений.Количество();
Иначе
ИндексТекущейСтроки = 0;
ИдентификаторТекущейСтроки = Элементы.СписокРасширений.ТекущаяСтрока;
Если ИдентификаторТекущейСтроки <> Неопределено Тогда
Строка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);
Если Строка <> Неопределено Тогда
ИндексТекущейСтроки = СписокРасширений.Индекс(Строка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
СписокРасширений.Очистить();
УстановитьПривилегированныйРежим(Истина);
Расширения = РасширенияКонфигурации.Получить();
ПодключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансАктивные);
ОтключенныеРасширения = ИдентификаторыРасширений(ИсточникРасширенийКонфигурации.СеансОтключенные);
УстановитьПривилегированныйРежим(Ложь);
МодульОбновлениеКонфигурации = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации");
КонецЕсли;
НеВыводитьОбщиеРасширения = ОбщегоНазначения.РазделениеВключено() И Не ПравоДоступа("Администрирование", Метаданные);
НомерПоПорядку = 1;
Для Каждого Расширение Из Расширения Цикл
Если НеВыводитьОбщиеРасширения
И (Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза) Тогда
Продолжить;
КонецЕсли;
Если МодульОбновлениеКонфигурации <> Неопределено И МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда
Продолжить;
КонецЕсли;
ЭлементРасширения = СписокРасширений.Добавить();
ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор;
ЭлементРасширения.Имя = Расширение.Имя;
ЭлементРасширения.Версия = Расширение.Версия;
ЭлементРасширения.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма);
ЭлементРасширения.Синоним = Расширение.Синоним;
ЭлементРасширения.Назначение = Расширение.Назначение;
ЭлементРасширения.БезопасныйРежим = Расширение.БезопасныйРежим;
ЭлементРасширения.Подключать = Расширение.Активно;
ЭлементРасширения.ПолученоИзГлавногоУзлаРИБ = Расширение.ГлавныйУзел <> Неопределено;
ЭлементРасширения.ПередаватьВПодчиненныеУзлыРИБ = Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе;
ЭлементРасширения.НомерПоПорядку = НомерПоПорядку;
ЭлементРасширения.Общее = (Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза);
ЭлементРасширения.ПриоритетНазначения =
?(Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Исправление, 1,
?(Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Адаптация, 2, 3));
КлючРасширения = Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия;
Если ПодключенныеРасширения[КлючРасширения] <> Неопределено Тогда
ЭлементРасширения.Подключено = 0;
ЭлементРасширения.СостояниеПодключения = НСтр("ru = 'Подключено'");
ИначеЕсли ОтключенныеРасширения[КлючРасширения] <> Неопределено Тогда
ЭлементРасширения.Подключено = 2;
ЭлементРасширения.СостояниеПодключения = НСтр("ru = 'Отключено'");
Иначе
ЭлементРасширения.Подключено = 1;
ЭлементРасширения.СостояниеПодключения = НСтр("ru = 'Требуется перезапуск'");
КонецЕсли;
Если ПустаяСтрока(ЭлементРасширения.Синоним) Тогда
ЭлементРасширения.Синоним = ЭлементРасширения.Имя;
КонецЕсли;
Если ТипЗнч(Расширение.БезопасныйРежим) = Тип("Булево") Тогда
ЭлементРасширения.БезопасныйРежимФлаг = Расширение.БезопасныйРежим;
Иначе
ЭлементРасширения.БезопасныйРежимФлаг = Истина;
КонецЕсли;
НомерПоПорядку = НомерПоПорядку + 1;
КонецЦикла;
СписокРасширений.Сортировать("ПолученоИзГлавногоУзлаРИБ УБЫВ, ПриоритетНазначения, Общее УБЫВ, НомерПоПорядку");
Если ИндексТекущейСтроки >= СписокРасширений.Количество() Тогда
ИндексТекущейСтроки = СписокРасширений.Количество() - 1;
КонецЕсли;
Если ИндексТекущейСтроки >= 0 Тогда
Элементы.СписокРасширений.ТекущаяСтрока = СписокРасширений.Получить(
ИндексТекущейСтроки).ПолучитьИдентификатор();
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
УстановленныеРасширения = Справочники.ВерсииРасширений.УстановленныеРасширения();
ИзменилосьСостояниеРасширений =
(ПараметрыСеанса.УстановленныеРасширения.ОсновныеСостояние <> УстановленныеРасширения.ОсновныеСостояние);
Элементы.ГруппаПредупреждение.Видимость = ИзменилосьСостояниеРасширений;
УстановитьПривилегированныйРежим(Ложь);
ЭтоНеразделенныйПользовательВОбласти = ЭтоНеразделенныйПользовательВОбласти();
Элементы.ПредупреждениеОписание.Видимость = Не ЭтоНеразделенныйПользовательВОбласти;
Элементы.ПредупреждениеОписание2.Видимость = ЭтоНеразделенныйПользовательВОбласти;
ОбновитьСвойстваРасширенийВСписке();
КонецПроцедуры
&НаСервере
Функция ИдентификаторыРасширений(ИсточникРасширений)
Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширений);
Идентификаторы = Новый Соответствие;
Для Каждого Расширение Из Расширения Цикл
Идентификаторы.Вставить(Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия, Истина);
КонецЦикла;
Возврат Идентификаторы;
КонецФункции
&НаКлиенте
Процедура СохранитьКакЗавершение(ПутьККаталогу, ВыделенныеСтроки) Экспорт
СохраняемыеФайлы = СохранитьНаСервере(ВыделенныеСтроки, ПутьККаталогу);
Если СохраняемыеФайлы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Интерактивно = Ложь;
ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения);
КонецПроцедуры
&НаСервере
Функция СохранитьНаСервере(ИдентификаторыСтрок, ПутьККаталогу = "")
СохраняемыеФайлы = Новый Массив;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
ИдентификаторРасширения = СтрокаСписка.ИдентификаторРасширения;
Расширение = НайтиРасширение(ИдентификаторРасширения);
Если Расширение <> Неопределено Тогда
Если ЗначениеЗаполнено(ПутьККаталогу) Тогда
Префикс = ПутьККаталогу + ПолучитьРазделительПути();
Иначе
Префикс = "";
КонецЕсли;
Имя = Префикс + Расширение.Имя + "_" + Расширение.Версия + ".cfe";
Хранение = ПоместитьВоВременноеХранилище(Расширение.ПолучитьДанные(), УникальныйИдентификатор);
ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла(Имя, Хранение);
СохраняемыеФайлы.Добавить(ОписаниеПередаваемогоФайла);
КонецЕсли;
КонецЦикла;
Возврат СохраняемыеФайлы;
КонецФункции
&НаСервереБезКонтекста
Функция НайтиРасширение(ИдентификаторРасширения)
Возврат Справочники.ВерсииРасширений.НайтиРасширение(ИдентификаторРасширения);
КонецФункции
&НаСервере
Процедура ЗапуститьОбновлениеПараметровРаботыРасширенийВФонеНаСервере(ТекстПредупреждения)
УстановитьПривилегированныйРежим(Истина);
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ВключитьЗаполнениеПараметровРаботыРасширений();
ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '1. Включено и запущено регламентное задание
|""%1"".
|
|2. Результат работы см. в журнале регистрации в событиях
|""%2"",
|например, с помощью команды в меню Еще
|""%3"".'"),
РегистрыСведений.ПараметрыРаботыВерсийРасширений.НаименованиеЗаданияЗаполненияПараметров(),
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ИмяСобытияЗаполненияПараметров(),
Команды.Найти("ЗапуститьОбновлениеПараметровРаботыРасширенийВФоне").Заголовок);
КонецПроцедуры
&НаСервере
Процедура УдалитьУстаревшиеПараметрыРаботыРасширенийНаСервере()
УстановитьПривилегированныйРежим(Истина);
Справочники.ВерсииРасширений.УдалитьУстаревшиеВерсииПараметров();
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРасширения(ВыделенныеСтроки)
Если ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ИдентификаторыРасширений = Новый Массив;
ПропускаемыеСтроки = Новый Массив;
Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
СтрокаРасширения = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаРасширения.Общее
И ЭтоНеразделенныйПользовательВОбласти
Или СтрокаРасширения.ПолученоИзГлавногоУзлаРИБ Тогда
ПропускаемыеСтроки.Добавить(ИдентификаторСтроки);
Продолжить;
КонецЕсли;
ИдентификаторыРасширений.Добавить(СтрокаРасширения.ИдентификаторРасширения);
КонецЦикла;
Для Каждого ИдентификаторСтроки Из ПропускаемыеСтроки Цикл
ВыделенныеСтроки.Удалить(ВыделенныеСтроки.Найти(ИдентификаторСтроки));
КонецЦикла;
Если ИдентификаторыРасширений.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("ИдентификаторыРасширений", ИдентификаторыРасширений);
Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ВидПредупреждения = ?(ЕстьРасширениеСДанными(ИдентификаторыРасширений),
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередУдалениемРасширенияСДанными,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередУдалениемРасширенияБезДанных);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ВидПредупреждения, ИдентификаторыРасширений.Количество() > 1);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт
Если Результат <> "Продолжить" Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПродолжение", ЭтотОбъект, Контекст);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
Запросы = ЗапросыНаОтменуРазрешенийИспользованияВнешнегоМодуля(Контекст.ИдентификаторыРасширений);
МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент");
МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, Оповещение);
Иначе
ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.ОК);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРасширениеПродолжение(Результат, Контекст) Экспорт
Если Результат = КодВозвратаДиалога.ОК Тогда
ПоказатьДлительнуюОперацию();
ТекущийКонтекст = Контекст;
ПодключитьОбработчикОжидания("УдалитьРасширениеЗавершение", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьРасширениеЗавершение()
Контекст = ТекущийКонтекст;
Попытка
УдалитьРасширенияНаСервере(Контекст.ИдентификаторыРасширений);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(ИнформацияОбОшибке);
Возврат;
КонецПопытки;
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
КонецПроцедуры
&НаСервере
Процедура УдалитьРасширенияНаСервере(ИдентификаторыРасширений)
ТекстОшибки = "";
Справочники.ВерсииРасширений.УдалитьРасширения(ИдентификаторыРасширений, ТекстОшибки);
ОбновитьСписок();
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт
Если Результат <> "Продолжить" Тогда
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(Контекст.ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаСписка.Подключать = Не СтрокаСписка.Подключать;
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
Возврат;
КонецЕсли;
СписокРасширенийПодключатьПриИзмененииПродолжение(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПодключатьПриИзмененииПродолжение(Контекст)
ПоказатьДлительнуюОперацию();
ТекущийКонтекст = Контекст;
ПодключитьОбработчикОжидания("СписокРасширенийПодключатьПриИзмененииЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийПодключатьПриИзмененииЗавершение()
Контекст = ТекущийКонтекст;
Попытка
СписокРасширенийПодключатьПриИзмененииНаСервере(Контекст.ИдентификаторСтроки);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ПоказатьПредупреждение(, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат;
КонецПопытки;
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийБезопасныйРежимФлагПриИзмененииЗавершение()
Контекст = ТекущийКонтекст;
Попытка
СписокРасширенийБезопасныйРежимФлагПриИзмененииНаСервере(Контекст.ИдентификаторСтроки);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ПоказатьПредупреждение(, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат;
КонецПопытки;
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
КонецПроцедуры
&НаСервере
Функция ЗапросыНаОтменуРазрешенийИспользованияВнешнегоМодуля(ИдентификаторыРасширений)
Возврат Справочники.ВерсииРасширений.ЗапросыНаОтменуРазрешенийИспользованияВнешнегоМодуля(ИдентификаторыРасширений);
КонецФункции
&НаКлиенте
Процедура ПоказатьДлительнуюОперацию()
Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация;
УстановитьДоступностьКнопокКомандныхПанелей();
КонецПроцедуры
&НаКлиенте
Процедура СкрытьДлительнуюОперацию()
Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений;
УстановитьДоступностьКнопокКомандныхПанелей();
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьРасширение(Знач ИдентификаторРасширения, МножественныйВыбор = Ложь)
Контекст = Новый Структура;
Контекст.Вставить("ИдентификаторРасширения", ИдентификаторРасширения);
Контекст.Вставить("МножественныйВыбор", МножественныйВыбор);
Контекст.Вставить("ВыделенныеСтроки", ИдентификаторРасширения);
Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередДобавлениемРасширений);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьРасширениеПослеПодтверждения(Ответ, Контекст) Экспорт
Если Ответ <> "Продолжить" Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПомещенияФайлов", ЭтотОбъект, Контекст);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Расширение конфигурации'")+ " (*.cfe)|*.cfe";
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл расширения конфигурации'");
ПараметрыЗагрузки.Диалог.ПроверятьСуществованиеФайла = Истина;
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ФайловаяСистемаКлиент.ЗагрузитьФайлы(Оповещение, ПараметрыЗагрузки);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьРасширениеПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт
Если ПомещенныеФайлы = Неопределено
Или ПомещенныеФайлы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент");
Если ВыбранныеФайлыСодержатТолькоИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) Тогда
ПараметрыРезервногоКопирования = Новый Структура;
ПараметрыРезервногоКопирования.Вставить("ВыбранныеФайлы", ВыбранныеФайлыПоОписанию(ПомещенныеФайлы));
МодульОбновлениеКонфигурацииКлиент.ПоказатьПоискИУстановкуОбновлений(ПараметрыРезервногоКопирования);
Возврат;
ИначеЕсли ВыбранныеФайлыСодержатИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент) Тогда
ПоказатьПредупреждение(,
НСтр("ru = 'Выбранные файлы не должны одновременно содержать исправления (патчи) и другие виды расширений.'"));
Возврат;
КонецЕсли;
КонецЕсли;
Контекст.Вставить("ПомещенныеФайлы", ПомещенныеФайлы);
ОповещениеОЗакрытии = Новый ОписаниеОповещения(
"ЗагрузитьРасширениеПродолжение", ЭтотОбъект, Контекст);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
ЗапросыРазрешений = Новый Массив;
Попытка
ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, Контекст.ИдентификаторРасширения);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПоказатьПредупреждение(, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат;
КонецПопытки;
МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент");
МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(
ЗапросыРазрешений, ЭтотОбъект, ОповещениеОЗакрытии);
Иначе
ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ВыбранныеФайлыСодержатИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент)
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
Файл = Новый Файл(ПомещенныйФайл.Имя);
Если МодульОбновлениеКонфигурацииКлиент.ЭтоИсправление(Файл.Имя) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Функция ВыбранныеФайлыСодержатТолькоИсправления(ПомещенныеФайлы, МодульОбновлениеКонфигурацииКлиент)
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
Файл = Новый Файл(ПомещенныйФайл.Имя);
Если Не МодульОбновлениеКонфигурацииКлиент.ЭтоИсправление(Файл.Имя) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция ВыбранныеФайлыПоОписанию(ПомещенныеФайлы)
СписокФайлов = Новый Массив;
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
Файл = Новый Файл(ПомещенныйФайл.Имя);
СписокФайлов.Добавить(Файл.ПолноеИмя);
КонецЦикла;
Возврат СтрСоединить(СписокФайлов, ", ");
КонецФункции
&НаКлиенте
Процедура ЗагрузитьРасширениеПродолжение(Результат, Контекст) Экспорт
Если Результат <> КодВозвратаДиалога.ОК Тогда
Возврат;
КонецЕсли;
ПоказатьДлительнуюОперацию();
ТекущийКонтекст = Контекст;
ПодключитьОбработчикОжидания("ЗагрузитьРасширениеЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьРасширениеЗавершение()
Контекст = ТекущийКонтекст;
НеподключенныеРасширения = "";
РасширенияИзменены = Ложь;
Если Контекст.Свойство("ЗаменаИмениПодтверждена") Тогда
ПодтверждениеЗаменыИмени = Неопределено;
Иначе
ПодтверждениеЗаменыИмени = Новый Структура("СтароеИмя, НовоеИмя", "", "");
КонецЕсли;
Попытка
ИзменитьРасширенияНаСервере(Контекст.ПомещенныеФайлы,
Контекст.ВыделенныеСтроки, НеподключенныеРасширения, РасширенияИзменены, ПодтверждениеЗаменыИмени);
Если РасширенияДляПовторногоДобавления.Количество() > 0 Тогда
ОткрытьФормуЗавершенияРаботыПользователей();
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ПоказатьПредупреждение(, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат;
КонецПопытки;
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
Если Не Контекст.Свойство("ЗаменаИмениПодтверждена")
И ЗначениеЗаполнено(ПодтверждениеЗаменыИмени.СтароеИмя) Тогда
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Расширение с именем ""%1"" будет заменено на расширение с именем ""%2"".
|
|Если расширение ""%2"" не является обновлением расширения ""%1"",
|тогда следует отказаться от замены и добавить расширение ""%2"", как новое.
|Прим.: если расширение ""%2"" не удается добавить из-за расширения ""%1"",
|тогда следует сначала удалить расширение ""%1"", а затем добавить ""%2"".'"),
ПодтверждениеЗаменыИмени.СтароеИмя,
ПодтверждениеЗаменыИмени.НовоеИмя);
ОбработчикЗавершения = Новый ОписаниеОповещения(
"ЗагрузитьРасширениеПослеВопросаЗаменыИмени", ЭтотОбъект, Контекст);
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("Заменить", НСтр("ru = 'Заменить'"));
Кнопки.Добавить("НеЗаменять", НСтр("ru = 'Не заменять'"));
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.КнопкаПоУмолчанию = "НеЗаменять";
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикЗавершения,
ТекстВопроса, Кнопки, ПараметрыВопроса);
Возврат;
КонецЕсли;
Если Не РасширенияИзменены Тогда
Возврат;
КонецЕсли;
Если Контекст.ИдентификаторРасширения = Неопределено Тогда
Если Контекст.ПомещенныеФайлы.Количество() > 1 Тогда
ТекстОповещения = НСтр("ru = 'Расширения конфигурации добавлены'");
Иначе
ТекстОповещения = НСтр("ru = 'Расширение конфигурации добавлено'");
КонецЕсли;
Иначе
ТекстОповещения = НСтр("ru = 'Расширение конфигурации обновлено'");
КонецЕсли;
ПоказатьОповещениеПользователя(ТекстОповещения);
Если Не ЗначениеЗаполнено(НеподключенныеРасширения) Тогда
Возврат;
КонецЕсли;
Если Контекст.ПомещенныеФайлы.Количество() > 1 Тогда
Если СтрНайти(НеподключенныеРасширения, ",") > 0 Тогда
ТекстПредупреждения = НСтр("ru = 'Некоторые расширения не подключаются:'");
Иначе
ТекстПредупреждения = НСтр("ru = 'Одно расширение не подключается:'");
КонецЕсли;
ТекстПредупреждения = ТекстПредупреждения + " " + НеподключенныеРасширения;
Иначе
ТекстПредупреждения = НСтр("ru = 'Расширение не подключается.'");
КонецЕсли;
ПоказатьПредупреждение(, ТекстПредупреждения);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьРасширениеПослеВопросаЗаменыИмени(Результат, Контекст) Экспорт
Если Результат = Неопределено
Или Результат.Значение <> "Заменить" Тогда
Возврат;
КонецЕсли;
Контекст.Вставить("ЗаменаИмениПодтверждена");
ПоказатьДлительнуюОперацию();
ТекущийКонтекст = Контекст;
ПодключитьОбработчикОжидания("ЗагрузитьРасширениеЗавершение", 0.1, Истина);
КонецПроцедуры
&НаСервере
Процедура ИзменитьРасширенияНаСервере(ПомещенныеФайлы, ИдентификаторыСтрок,
НеподключенныеРасширения, РасширенияИзменены, ПодтверждениеЗаменыИмени)
РасширенияДляПовторногоДобавления.Очистить();
Расширение = Неопределено;
ВыделенныеРасширения = Новый Структура;
Если ИдентификаторыСтрок <> Неопределено Тогда
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение);
ОписаниеРасширения = Новый ОписаниеКонфигурации(ДвоичныеДанные);
ВыделенныеРасширения.Вставить(ОписаниеРасширения.Имя, ДвоичныеДанные);
КонецЦикла;
КонецЕсли;
ПроверяемыеРасширения = Новый Соответствие;
ДобавленныеРасширения = Новый Массив;
ИсходныеРасширения = Новый Соответствие;
ТекстОшибки = "";
ИмяФайлаДобавляемогоРасширения = Неопределено;
Попытка
Если ИдентификаторыСтрок <> Неопределено Тогда
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
СтрокаТаблицы = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
ИдентификаторРасширения = СтрокаТаблицы.ИдентификаторРасширения;
Расширение = НайтиРасширение(ИдентификаторРасширения);
Если Расширение = Неопределено Тогда
Продолжить;
КонецЕсли;
ПрежнееИмяРасширения = Расширение.Имя;
НовоеИмяРасширения = ПрежнееИмяРасширения;
Если Не ВыделенныеРасширения.Свойство(ПрежнееИмяРасширения) Тогда
Если ИдентификаторыСтрок.Количество() <> 1 Тогда
Продолжить;
ИначеЕсли ПодтверждениеЗаменыИмени <> Неопределено Тогда
ПодтверждениеЗаменыИмени.СтароеИмя = ПрежнееИмяРасширения;
ПодтверждениеЗаменыИмени.НовоеИмя = ОписаниеРасширения.Имя;
Возврат;
Иначе
НовоеИмяРасширения = ОписаниеРасширения.Имя;
КонецЕсли;
КонецЕсли;
ДанныеРасширения = Расширение.ПолучитьДанные();
ИсходныеРасширения.Вставить(ПрежнееИмяРасширения, ДанныеРасширения);
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
НовыеДвоичныеДанные = ВыделенныеРасширения[НовоеИмяРасширения];
Ошибки = Расширение.ПроверитьВозможностьПрименения(НовыеДвоичныеДанные, Ложь);
Для Каждого Ошибка Из Ошибки Цикл
Если Ошибка.Важность <> ВажностьПроблемыПримененияРасширенияКонфигурации.Критичная Тогда
Продолжить;
КонецЕсли;
ТекстОшибки = ТекстОшибки + Символы.ПС + Ошибка.Описание;
КонецЦикла;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Новое расширение не может быть применено по причине:
|%1'"),
ТекстОшибки);
Прервать;
Иначе
Расширение.Записать(НовыеДвоичныеДанные);
Расширение = НайтиРасширение(ИдентификаторРасширения);
ПроверяемыеРасширения.Вставить(Расширение.Имя, Расширение.Синоним);
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение);
ОписаниеРасширения = Новый ОписаниеКонфигурации(ДвоичныеДанныеФайла);
Отбор = Новый Структура("Имя", ОписаниеРасширения.Имя);
Расширения = РасширенияКонфигурации.Получить(Отбор);
Если Расширения.Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Нельзя добавить расширение ""%1""
|из файла ""%2"",
|так как расширение с таким именем уже существует.'"),
ОписаниеРасширения.Имя,
ПомещенныйФайл.Имя);
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение);
ОписаниеРасширения = Новый ОписаниеКонфигурации(ДвоичныеДанныеФайла);
Расширение = РасширенияКонфигурации.Создать();
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
ИмяФайлаДобавляемогоРасширения = ПомещенныйФайл.Имя;
Расширение.Записать(ДвоичныеДанныеФайла);
ИмяФайлаДобавляемогоРасширения = Неопределено;
Расширение = НайтиРасширение(Строка(Расширение.УникальныйИдентификатор));
ДобавленныеРасширения.Вставить(0, Расширение);
ПроверяемыеРасширения.Вставить(Расширение.Имя, Расширение.Синоним);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если ИдентификаторыСтрок <> Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обновить расширение по причине:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ИначеЕсли ЗначениеЗаполнено(ИмяФайлаДобавляемогоРасширения) Тогда
КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
Если ЭтоОшибкаИсключительнойБлокировкиИнформационнойБазы(КраткоеПредставлениеОшибки) Тогда
ИндексПервогоНедобавленногоРасширения = ПомещенныеФайлы.Найти(ПомещенныйФайл);
Если ИндексПервогоНедобавленногоРасширения <> Неопределено Тогда
РасширенияДляПовторногоДобавления.Очистить();
Для Индекс = ИндексПервогоНедобавленногоРасширения По ПомещенныеФайлы.ВГраница() Цикл
РасширенияДляПовторногоДобавления.Добавить(ПомещенныеФайлы.Получить(Индекс));
КонецЦикла;
КонецЕсли;
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить расширение ""%1""
|из файла ""%2"" по причине:
|%3'"),
ОписаниеРасширения.Имя,
ИмяФайлаДобавляемогоРасширения,
КраткоеПредставлениеОшибки);
КонецЕсли;
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить по причине:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
КонецПопытки;
Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда
Попытка
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения, НеподключенныеРасширения);
РасширенияИзменены = Истина;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при подготовке добавленных расширений к работе:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецПопытки;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ИнформацияОбОшибкеВосстановления = Неопределено;
ВосстановлениеВыполнялось = Ложь;
Попытка
Если ИдентификаторыСтрок <> Неопределено Тогда
Для Каждого ПроверяемоеРасширение Из ПроверяемыеРасширения Цикл
ДанныеРасширения = ИсходныеРасширения[ПроверяемоеРасширение.Ключ];
Расширение = НайтиРасширение(ИдентификаторРасширения);
Если Расширение = Неопределено Тогда
Расширение = РасширенияКонфигурации.Создать();
КонецЕсли;
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
Расширение.Записать(ДанныеРасширения);
КонецЦикла;
ВосстановлениеВыполнялось = Истина;
Иначе
Для Каждого ДобавленноеРасширение Из ДобавленныеРасширения Цикл
Отбор = Новый Структура("Имя", ДобавленноеРасширение.Имя);
Расширения = РасширенияКонфигурации.Получить(Отбор);
Для Каждого Расширение Из Расширения Цикл
Если Расширение.ХешСумма = ДобавленноеРасширение.ХешСумма Тогда
Расширение.Удалить();
ВосстановлениеВыполнялось = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Исключение
ИнформацияОбОшибкеВосстановления = ИнформацияОбОшибке();
Если ИдентификаторыСтрок <> Неопределено Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при попытке восстановить измененное расширение:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления));
Иначе
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при попытке удалить добавленные расширения:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления));
КонецЕсли;
КонецПопытки;
Если ВосстановлениеВыполнялось
И ИнформацияОбОшибкеВосстановления = Неопределено Тогда
Если ИдентификаторыСтрок <> Неопределено Тогда
Если ПроверяемыеРасширения.Количество() > 0 Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Измененное расширение было восстановлено.'");
Иначе
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Расширение не было изменено.'");
КонецЕсли;
Иначе
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Добавленные расширения были удалены.'");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ОбновитьСписок(ИдентификаторРасширения = Неопределено);
КонецПроцедуры
&НаСервере
Процедура СписокРасширенийБезопасныйРежимФлагПриИзмененииНаСервере(ИдентификаторСтроки)
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Возврат;
КонецЕсли;
Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения);
Если Расширение = Неопределено
Или Расширение.БезопасныйРежим = СтрокаСписка.БезопасныйРежимФлаг Тогда
ОбновитьСписок();
Возврат;
КонецЕсли;
Расширение.БезопасныйРежим = СтрокаСписка.БезопасныйРежимФлаг;
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
Попытка
Расширение.Записать();
Исключение
СтрокаСписка.БезопасныйРежимФлаг = Не СтрокаСписка.БезопасныйРежимФлаг;
ВызватьИсключение;
КонецПопытки;
Попытка
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если Расширение.БезопасныйРежим Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при подготовке расширений к работе (после включения безопасного режима):
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при подготовке расширений к работе (после отключения безопасного режима):
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
КонецПопытки;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ИнформацияОбОшибкеВосстановления = Неопределено;
Попытка
Расширение.БезопасныйРежим = Не Расширение.БезопасныйРежим;
Расширение.Записать();
Исключение
ИнформацияОбОшибкеВосстановления = ИнформацияОбОшибке();
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при попытке отменить изменение флажка безопасного режима расширения:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибкеВосстановления));
КонецПопытки;
Если ИнформацияОбОшибкеВосстановления = Неопределено Тогда
СтрокаСписка.БезопасныйРежимФлаг = Расширение.БезопасныйРежим;
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Отменено изменение флажка безопасного режима расширения.'");
КонецЕсли;
КонецЕсли;
ОбновитьСписок();
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьРасширениеСДанными(ИдентификаторыРасширений)
Для Каждого ИдентификаторРасширения Из ИдентификаторыРасширений Цикл
Если ЭтоРасширениеСДанными(ИдентификаторРасширения) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаСервереБезКонтекста
Функция ЭтоРасширениеСДанными(ИдентификаторРасширения)
Расширение = НайтиРасширение(ИдентификаторРасширения);
Если Расширение = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Возврат Расширение.ИзменяетСтруктуруДанных();
КонецФункции
&НаСервере
Процедура СписокРасширенийПодключатьПриИзмененииНаСервере(ИдентификаторСтроки)
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущееИспользование = СтрокаСписка.Подключать;
Попытка
Справочники.ВерсииРасширений.ПереключитьИспользованиеРасширения(СтрокаСписка.ИдентификаторРасширения, ТекущееИспользование);
Исключение
СтрокаСписка.Подключать = Не СтрокаСписка.Подключать;
ОбновитьСписок();
ВызватьИсключение;
КонецПопытки;
ОбновитьСписок();
КонецПроцедуры
&НаСервере
Процедура СписокРасширенийПередаватьВПодчиненныеУзлыРИБПриИзмененииНаСервере(ИдентификаторСтроки)
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Возврат;
КонецЕсли;
Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения);
Если Расширение <> Неопределено Тогда
Если Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе <> СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ Тогда
Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ;
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
Попытка
Расширение.Записать();
Исключение
СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = Не СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ;
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
КонецЕсли;
ОбновитьСписок();
КонецПроцедуры
&НаСервере
Процедура ДобавитьЗапросРазрешений(ЗапросыРазрешений, ПомещенныеФайлы, ИдентификаторРасширения = Неопределено)
МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
Если Не МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности() Тогда
Возврат;
КонецЕсли;
Разрешения = Новый Массив;
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
ДанныеОбновляемогоРасширения = Неопределено;
ТребуетсяВосстановление = Ложь;
Попытка
Если ИдентификаторРасширения = Неопределено Тогда
ВременноеРасширение = РасширенияКонфигурации.Создать();
Иначе
ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения);
Если ВременноеРасширение = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Расширение с идентификатором %1 не существует в приложении, возможно оно было удалено в другом сеансе.'"),
ИдентификаторРасширения);
КонецЕсли;
ДанныеОбновляемогоРасширения = ВременноеРасширение.ПолучитьДанные();
КонецЕсли;
ОтключитьПредупрежденияБезопасности(ВременноеРасширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(ВременноеРасширение);
ДанныеРасширения = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение);
ВременноеРасширение.Записать(ДанныеРасширения);
ТребуетсяВосстановление = Истина;
ВременноеРасширение = НайтиРасширение(Строка(ВременноеРасширение.УникальныйИдентификатор));
СвойстваВременногоРасширения = Новый Структура;
СвойстваВременногоРасширения.Вставить("Имя", ВременноеРасширение.Имя);
СвойстваВременногоРасширения.Вставить("ХешСумма", ВременноеРасширение.ХешСумма);
Если ИдентификаторРасширения = Неопределено Тогда
ВременноеРасширение.Удалить();
Иначе
ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения);
Если ВременноеРасширение = Неопределено Тогда
ВременноеРасширение = РасширенияКонфигурации.Создать();
КонецЕсли;
ОтключитьПредупрежденияБезопасности(ВременноеРасширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(ВременноеРасширение);
ВременноеРасширение.Записать(ДанныеОбновляемогоРасширения);
КонецЕсли;
ТребуетсяВосстановление = Ложь;
Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля(
СвойстваВременногоРасширения.Имя, Base64Строка(СвойстваВременногоРасширения.ХешСумма)));
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если ИдентификаторРасширения = Неопределено Тогда
Если ПомещенныеФайлы.Количество() > 1 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При получении разрешений не удалось добавить расширение из файла
|""%1""
|по причине:
|%2'"),
ПомещенныйФайл.Имя,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При получении разрешений не удалось добавить расширение по причине:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При получении разрешений не удалось обновить расширение по причине:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
Если ТребуетсяВосстановление Тогда
Попытка
Если ИдентификаторРасширения = Неопределено Тогда
ВременноеРасширение.Удалить();
Иначе
ВременноеРасширение = НайтиРасширение(ИдентификаторРасширения);
Если ВременноеРасширение = Неопределено Тогда
ВременноеРасширение = РасширенияКонфигурации.Создать();
КонецЕсли;
ОтключитьПредупрежденияБезопасности(ВременноеРасширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(ВременноеРасширение);
ВременноеРасширение.Записать(ДанныеОбновляемогоРасширения);
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если ИдентификаторРасширения = Неопределено Тогда
Если ПомещенныеФайлы.Количество() > 1 Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При получении разрешений добавленное расширение из файла не было удалено
|%1
|по причине:
|%2'"),
ПомещенныйФайл.Имя,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Иначе
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при попытке удалить временно добавленное расширение:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
Иначе
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Возникла непредвиденная ситуация при попытке восстановить временно измененное расширение:
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
КонецПопытки;
КонецЕсли;
ВызватьИсключение ТекстОшибки;
КонецПопытки;
КонецЦикла;
УстановленныеРасширения = РасширенияКонфигурации.Получить();
Для Каждого Расширение Из УстановленныеРасширения Цикл
Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнегоМодуля(
Расширение.Имя, Base64Строка(Расширение.ХешСумма)));
КонецЦикла;
ЗапросыРазрешений.Добавить(МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения,
ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.ПараметрыРаботыВерсийРасширений")));
КонецПроцедуры
&НаСервере
Процедура ОтключитьПредупрежденияБезопасности(Расширение)
Справочники.ВерсииРасширений.ОтключитьПредупрежденияБезопасности(Расширение);
КонецПроцедуры
&НаСервере
Процедура ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение)
Справочники.ВерсииРасширений.ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенийПодключать.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенийБезопасныйРежимФлаг.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенийПередаватьВПодчиненныеУзлыРИБ.Имя);
ГруппаЭлементовОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаЭлементовОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаЭлементовОтбораОбщее = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаЭлементовОтбораОбщее.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаЭлементовОтбораОбщее.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокРасширений.Общее");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ГруппаЭлементовОтбораОбщее.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоНеразделенныйПользовательВОбласти");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокРасширений.ПолученоИзГлавногоУзлаРИБ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКнопокКомандныхПанелей()
Если Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация Тогда
Элементы.СписокРасширенийДобавить.Доступность = Ложь;
Элементы.СписокРасширенийУдалить.Доступность = Ложь;
Элементы.СписокРасширенийОбновитьИзФайла.Доступность = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюДобавить.Доступность = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюУдалить.Доступность = Ложь;
Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Доступность = Ложь;
ИначеЕсли Элементы.СтраницыОбновление.ТекущаяСтраница = Элементы.СтраницаСписокРасширений Тогда
ВыбранаОднаСтрока = Элементы.СписокРасширений.ВыделенныеСтроки.Количество() = 1;
РедактированиеДоступно = Истина;
Если ВыбранаОднаСтрока Тогда
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
РедактированиеДоступно = (Не ТекущееРасширение.Общее
Или Не ЭтоНеразделенныйПользовательВОбласти())
И Не ТекущееРасширение.ПолученоИзГлавногоУзлаРИБ;
КонецЕсли;
Элементы.СписокРасширенийДобавить.Доступность = Истина;
Элементы.СписокРасширенийУдалить.Доступность = РедактированиеДоступно;
Элементы.СписокРасширенийОбновитьИзФайла.Доступность = РедактированиеДоступно;
Элементы.СписокРасширенийКонтекстноеМенюДобавить.Доступность = Истина;
Элементы.СписокРасширенийКонтекстноеМенюУдалить.Доступность = РедактированиеДоступно;
Элементы.СписокРасширенийКонтекстноеМенюОбновитьИзФайла.Доступность = ВыбранаОднаСтрока И РедактированиеДоступно;
ПодключитьОбработчикОжидания("УстановитьЗаголовокЭлементаКомментарий", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЭтоНеразделенныйПользовательВОбласти()
Возврат СтандартныеПодсистемыСервер.ЭтоРазделенныйРежимСеансаБезРазделителей();
КонецФункции
&НаСервереБезКонтекста
Функция ИмяСобытияЗаполненияПараметров()
Возврат РегистрыСведений.ПараметрыРаботыВерсийРасширений.ИмяСобытияЗаполненияПараметров();
КонецФункции
&НаСервереБезКонтекста
Функция РезультатПроверкиВозможностиПримененияВсех()
ИнформацияОПроблемахПрименения = РасширенияКонфигурации.ПроверитьВозможностьПримененияВсех();
Результат = Новый Структура;
Результат.Вставить("КоличествоПроблем", ИнформацияОПроблемахПрименения.Количество());
Результат.Вставить("ИнформацияОПроблемах", Новый ТекстовыйДокумент);
Если ИнформацияОПроблемахПрименения.Количество() = 0 Тогда
Возврат Результат;
КонецЕсли;
ПроблемныеРасширения = Новый Соответствие;
Для каждого Проблема Из ИнформацияОПроблемахПрименения Цикл
ИнформацияОПроблеме = ПроблемныеРасширения.Получить(Проблема.Расширение);
Если ИнформацияОПроблеме = Неопределено Тогда
Текст = Проблема.Расширение.Синоним;
Иначе
Текст = ИнформацияОПроблеме;
КонецЕсли;
Текст = Текст + Символы.ПС + Символы.Таб + "(" + Строка(Проблема.Важность) + ")" + " " + Проблема.Описание;
ПроблемныеРасширения.Вставить(Проблема.Расширение, Текст);
КонецЦикла;
Для каждого Расширение Из ПроблемныеРасширения Цикл
Результат.ИнформацияОПроблемах.ДобавитьСтроку(Расширение.Значение);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ВключитьБезопасныйРежимЗавершение()
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьБезопасныйРежимДляВыделенныхРасширений(Истина, ОшибкиИзмененияРасширений);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьБезопасныйРежимЗавершение()
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьБезопасныйРежимДляВыделенныхРасширений(Ложь, ОшибкиИзмененияРасширений);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецПроцедуры
&НаСервере
Процедура ВключитьВыключитьБезопасныйРежимДляВыделенныхРасширений(Значение, ОшибкиИзмененияРасширений)
Для Каждого ИдентификаторСтроки Из Элементы.СписокРасширений.ВыделенныеСтроки Цикл
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Продолжить;
КонецЕсли;
СтрокаСписка.БезопасныйРежимФлаг = Значение;
Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения);
Если Расширение = Неопределено
Или Расширение.БезопасныйРежим = СтрокаСписка.БезопасныйРежимФлаг Тогда
Продолжить;
КонецЕсли;
Расширение.БезопасныйРежим = СтрокаСписка.БезопасныйРежимФлаг;
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
Попытка
Расширение.Записать();
Исключение
СтрокаСписка.БезопасныйРежимФлаг = Не СтрокаСписка.БезопасныйРежимФлаг;
ОписаниеПроблемы = СтрокаСписка.Синоним + ": " + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОшибкиИзмененияРасширений.Добавить(ОписаниеПроблемы);
КонецПопытки;
КонецЦикла;
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений();
КонецПроцедуры
&НаКлиенте
Процедура ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений)
Если ОшибкиИзмененияРасширений.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ИнформацияОбОшибках = "";
Для Каждого СтрокаОшибка Из ОшибкиИзмененияРасширений Цикл
ИнформацияОбОшибках = ?(ЗначениеЗаполнено(ИнформацияОбОшибках), ИнформацияОбОшибках + Символы.ПС + Символы.ПС + СтрокаОшибка, СтрокаОшибка);
КонецЦикла;
ПараметрыФормыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыФормыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыФормыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
ПараметрыФормыВопроса.Заголовок = НСтр("ru = 'Не все расширения удалось перенастроить'");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено,
ИнформацияОбОшибках,
РежимДиалогаВопрос.ОК,
ПараметрыФормыВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьПередачуВПодчиненныеУзлыРИБЗавершение()
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьПередачуВПодчиненныеУзлыРИБ(Истина, ОшибкиИзмененияРасширений);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьПередачуВПодчиненныеУзлыРИБЗавершение()
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьПередачуВПодчиненныеУзлыРИБ(Ложь, ОшибкиИзмененияРасширений);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецПроцедуры
&НаСервере
Процедура ВключитьВыключитьПередачуВПодчиненныеУзлыРИБ(Значение, ОшибкиИзмененияРасширений)
Для Каждого ИдентификаторСтроки Из Элементы.СписокРасширений.ВыделенныеСтроки Цикл
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Продолжить;
КонецЕсли;
СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = Значение;
Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения);
Если Расширение = Неопределено
Или Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ Тогда
Продолжить;
КонецЕсли;
Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ;
ОтключитьПредупрежденияБезопасности(Расширение);
ОтключитьИспользованиеОсновныхРолейДляВсехПользователей(Расширение);
Попытка
Расширение.Записать();
Исключение
СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ = Не СтрокаСписка.ПередаватьВПодчиненныеУзлыРИБ;
ОписаниеПроблемы = СтрокаСписка.Синоним + ": " + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОшибкиИзмененияРасширений.Добавить(ОписаниеПроблемы);
КонецПопытки;
КонецЦикла;
ОбновитьСписок();
КонецПроцедуры
&НаКлиенте
Процедура ВключитьПодключениеРасширений()
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьПодключениеРасширений(Истина, ОшибкиИзмененияРасширений);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьПодключениеРасширений()
СинонимыРасширений = СинонимыРасширенийВыделенныхРасширенийДляВыключения();
Если СинонимыРасширений.СДанными.Количество() = 1 И СинонимыРасширений.БезДанных.Количество() = 0 Тогда
ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные;
Если ТекущееРасширение = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущееРасширение.Подключать = Ложь;
Контекст = Новый Структура;
Контекст.Вставить("ИдентификаторСтроки", ТекущееРасширение.ПолучитьИдентификатор());
Оповещение = Новый ОписаниеОповещения("ОтключитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОтключениемРасширенияСДанными);
ИначеЕсли СинонимыРасширений.СДанными.Количество() > 0 Тогда
Если СинонимыРасширений.СДанными.Количество() = 1 Тогда
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Среди отключаемых расширений есть расширение, хранящее данные в приложении, которые станут недоступными.
|Кроме того, некоторые данные самого приложения могут тоже стать недоступными для изменения.
|
|Расширение с данными:
| - %1'"),
СинонимыРасширений.СДанными[0]);
Иначе
РасширенияСДаннымиТекст = СтрСоединить(СинонимыРасширений.СДанными, Символы.ПС + " - ");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Среди отключаемых расширений есть расширения, хранящие данные в приложении, которые станут недоступными.
|Кроме того, некоторые данные самого приложения могут тоже стать недоступными для изменения.
|
|Расширения с данными:
| - %1'"),
РасширенияСДаннымиТекст);
КонецЕсли;
ОбработчикЗавершения = Новый ОписаниеОповещения(
"ВыключитьРасширенияПослеВопроса", ЭтотОбъект);
Кнопки = Новый СписокЗначений;
Если СинонимыРасширений.БезДанных.Количество() > 0 Тогда
Кнопки.Добавить("ОтключитьТолькоБезДанных", НСтр("ru = 'Отключить только расширения без данных'"));
Если СинонимыРасширений.БезДанных.Количество() = 1 Тогда
РасширенияБезДанныхТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Расширение без данных:
| - %1'"),
СинонимыРасширений.БезДанных[0]);
Иначе
РасширенияБезДанныхТекст = СтрСоединить(СинонимыРасширений.БезДанных, Символы.ПС + " - ");
РасширенияБезДанныхТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Расширения без данных:
| - %1'"),
РасширенияБезДанныхТекст);
КонецЕсли;
ТекстВопроса = ТекстВопроса + Символы.ПС + Символы.ПС + РасширенияБезДанныхТекст;
КонецЕсли;
Кнопки.Добавить("ОтключитьВсе", НСтр("ru = 'Отключить все'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Заголовок = НСтр("ru = 'Предупреждение'");
ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьТолькоБезДанных";
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикЗавершения,
ТекстВопроса, Кнопки, ПараметрыВопроса);
Иначе
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьПодключениеРасширений(Ложь, ОшибкиИзмененияРасширений);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВключитьВыключитьПодключениеРасширений(Значение, ОшибкиИзмененияРасширений, ОбрабатыватьРасширенияСДанными = Истина)
Для Каждого ИдентификаторСтроки Из Элементы.СписокРасширений.ВыделенныеСтроки Цикл
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Не ОбрабатыватьРасширенияСДанными И ЭтоРасширениеСДанными(СтрокаСписка.ИдентификаторРасширения) Тогда
Продолжить;
КонецЕсли;
СтрокаСписка.Подключать = Значение;
Попытка
Справочники.ВерсииРасширений.ПереключитьИспользованиеРасширения(СтрокаСписка.ИдентификаторРасширения, Значение);
Исключение
СтрокаСписка.Подключать = Не СтрокаСписка.Подключать;
ОписаниеПроблемы = СтрокаСписка.Синоним + ": " + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОшибкиИзмененияРасширений.Добавить(ОписаниеПроблемы);
КонецПопытки;
КонецЦикла;
ОбновитьСписок();
КонецПроцедуры
&НаСервере
Функция СинонимыРасширенийВыделенныхРасширенийДляВыключения()
СДанными = Новый массив;
БезДанных = Новый массив;
Для Каждого ИдентификаторСтроки Из Элементы.СписокРасширений.ВыделенныеСтроки Цикл
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено И СтрокаСписка.Подключать Тогда
Продолжить;
КонецЕсли;
Если ЭтоРасширениеСДанными(СтрокаСписка.ИдентификаторРасширения) Тогда
СДанными.Добавить(СтрокаСписка.Синоним);
Иначе
БезДанных.Добавить(СтрокаСписка.Синоним);
КонецЕсли;
КонецЦикла;
СинонимыРасширений = Новый Структура;
СинонимыРасширений.Вставить("СДанными", СДанными);
СинонимыРасширений.Вставить("БезДанных", БезДанных);
Возврат СинонимыРасширений;
КонецФункции
&НаКлиенте
Процедура ВыключитьРасширенияПослеВопроса(Результат, Контекст) Экспорт
Если Результат = Неопределено Или Результат.Значение = "Отмена" Тогда
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
Возврат;
ИначеЕсли Результат.Значение = "ОтключитьТолькоБезДанных" Тогда
ОбрабатыватьРасширенияСДанными = Ложь;
ИначеЕсли Результат.Значение = "ОтключитьВсе" Тогда
ОбрабатыватьРасширенияСДанными = Истина;
КонецЕсли;
ОшибкиИзмененияРасширений = Новый Массив;
ВключитьВыключитьПодключениеРасширений(Ложь, ОшибкиИзмененияРасширений, ОбрабатыватьРасширенияСДанными);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ВывестиИнформациюОбОшибкахПеренастройкиРасширений(ОшибкиИзмененияРасширений);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СохранитьСвойстваРасширений(ИдентификаторРасширения, СвойстваРасширений)
РегистрыСведений.СвойстваРасширений.СохранитьСвойстваРасширений(ИдентификаторРасширения, СвойстваРасширений);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СвойстваРасширений(ТекущееРасширение)
Свойства = Новый Структура;
Свойства.Вставить("Ответственный", ТекущееРасширение.Ответственный);
Свойства.Вставить("Комментарий", ТекущееРасширение.Комментарий);
Возврат Свойства;
КонецФункции
&НаСервере
Процедура ОбновитьСвойстваРасширенийВСписке()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Расширения.ИдентификаторРасширения КАК ИдентификаторРасширения
|ПОМЕСТИТЬ ИдентификаторыРасширений
|ИЗ
| &СписокРасширений КАК Расширения
|;
|
|
|ВЫБРАТЬ
| СвойстваРасширений.Ответственный КАК Ответственный,
| СвойстваРасширений.Комментарий КАК Комментарий,
| ИдентификаторыРасширений.ИдентификаторРасширения КАК ИдентификаторРасширения
|ИЗ
| ИдентификаторыРасширений КАК ИдентификаторыРасширений
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СвойстваРасширений КАК СвойстваРасширений
| ПО ИдентификаторыРасширений.ИдентификаторРасширения = СвойстваРасширений.ИдентификаторРасширения";
Запрос.УстановитьПараметр("СписокРасширений", СписокРасширений.Выгрузить());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("ИдентификаторРасширения", Выборка.ИдентификаторРасширения);
СтрокиРасширений = СписокРасширений.НайтиСтроки(СтруктураДляПоиска);
ЗаполнитьЗначенияСвойств(СтрокиРасширений[0], Выборка);
СтрокиРасширений[0].ЕстьКомментарий = ЗначениеЗаполнено(СтрокиРасширений[0].Комментарий);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЗаголовокЭлементаКомментарий()
Если Элементы.СписокРасширений.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Элементы.СписокРасширенийКомментарий.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Комментарий для %1'"), Элементы.СписокРасширений.ТекущиеДанные.Синоним);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтветственногоПослеВыбора(Ответственный, ДополнительныеПараметры) Экспорт
Если Ответственный = Неопределено Тогда
Возврат;
КонецЕсли;
УстановитьОтветственногоДляВыделенныхРасширений(Ответственный);
КонецПроцедуры
&НаСервере
Процедура УстановитьОтветственногоДляВыделенныхРасширений(Ответственный)
Для Каждого ИдентификаторСтроки Из Элементы.СписокРасширений.ВыделенныеСтроки Цикл
СтрокаСписка = СписокРасширений.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаСписка = Неопределено Тогда
Продолжить;
КонецЕсли;
СтрокаСписка.Ответственный = Ответственный;
СохранитьСвойстваРасширений(СтрокаСписка.ИдентификаторРасширения, СвойстваРасширений(СтрокаСписка));
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЭтоОшибкаИсключительнойБлокировкиИнформационнойБазы(ТекстОшибки)
ТекстОшибкиИсключительнойБлокировки = НСтр("ru='Ошибка исключительной блокировки информационной базы'");
Возврат (СтрНайти(ТекстОшибки, ТекстОшибкиИсключительнойБлокировки) <> 0);
КонецФункции
&НаКлиенте
Процедура ОткрытьФормуЗавершенияРаботыПользователей()
Если РасширенияДляПовторногоДобавления.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда
Оповещение = Новый ОписаниеОповещения("ПослеУстановкиМонопольногоРежима", ЭтотОбъект);
МодульСоединенияИБКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СоединенияИБКлиент");
ПараметрыФормы = МодульСоединенияИБКлиент.ПараметрыОткрытияФормыОшибкиУстановкиМонопольногоРежима();
КоличествоКЗагрузке = РасширенияДляПовторногоДобавления.Количество();
ПараметрыФормы.Заголовок = ?(КоличествоКЗагрузке = 1,
НСтр("ru = 'Не удалось добавить расширение'"), НСтр("ru = 'Не удалось добавить расширения'"));
ПараметрыФормы.ТекстСообщенияОбОшибке = ?(КоличествоКЗагрузке = 1,
НСтр("ru = 'Не удалось добавить расширение, т.к. с приложением работают пользователи.'"),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить расширения (%1), т.к. с приложением работают пользователи.'"), КоличествоКЗагрузке));
ПараметрыФормы.ТекстСообщенияОбОшибкеЗавершенияРаботы = ?(КоличествоКЗагрузке = 1,
НСтр("ru = 'Невозможно выполнить добавление расширения, т.к. не удалось завершить работу пользователей:'"),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Невозможно выполнить добавление расширений (%1), т.к. не удалось завершить работу пользователей:'"), КоличествоКЗагрузке));
ПараметрыФормы.СообщениеПриВходеВПриложение = НСтр("ru = 'Приложение заблокировано для добавления расширения.'");
ПараметрыФормы.ЗавершатьВсеСеансыКромеТекущего = Истина;
ПараметрыФормы.ЗавершатьСеансКонфигуратора = Истина;
ПараметрыФормы.ПериодБлокировки = 60;
МодульСоединенияИБКлиент.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Оповещение, ПараметрыФормы);
Иначе
СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеУстановкиМонопольногоРежима(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Ложь Тогда
ПоказатьДлительнуюОперацию();
ПодключитьОбработчикОжидания("ПовторноеДобавлениеРасширенияСДанными", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПовторноеДобавлениеРасширенияСДанными()
Если РасширенияДляПовторногоДобавления = Неопределено Тогда
Возврат;
КонецЕсли;
НеподключенныеРасширения = "";
РасширенияИзменены = Ложь;
ПодтверждениеЗаменыИмени = Новый Структура("СтароеИмя, НовоеИмя", "", "");
ИзменитьРасширенияНаСервере(РасширенияДляПовторногоДобавления.ВыгрузитьЗначения(), Неопределено, НеподключенныеРасширения,
РасширенияИзменены, ПодтверждениеЗаменыИмени);
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
Если РасширенияДляПовторногоДобавления.Количество() > 0 Тогда
ОткрытьФормуЗавершенияРаботыПользователей();
КонецЕсли;
КонецПроцедуры
#КонецОбласти