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