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