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