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