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