Драйверы оборудования / Форма элемента / Модуль формы

файл
#Область ОбработчикиСобытийФорм

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	СозданиеНового = НЕ ЗначениеЗаполнено(Объект.Ссылка);
	
	Если СозданиеНового Тогда
		Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору;
		Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу;   
		Элементы.БезопасноеПодключение.Видимость = Ложь;
	Иначе                                                   
		
		ДанныеДрайвера = МенеджерОборудования.ДанныеДрайвераОборудования(Объект.Ссылка);
		
		ПоставляемыйВСоставеКонфигурации = Объект.Предопределенный;
		ПодключениеЛокальноПоИдентификатору = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору;
		ПодключениеИзИнформационнойБазы     = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы;
		ПодключениеИзМакета                 = Объект.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета;
		
		Элементы.ФормаОбновитьДрайверИзФайла.Видимость = ПодключениеИзИнформационнойБазы;
		Элементы.СнятСПоддержки.Видимость = Объект.СнятСПоддержки;           
		Элементы.НеСертифицирован.Видимость = ДанныеДрайвера.Несертифицированное;
		Элементы.СообщениеПриИспользовании.Видимость = Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ;
		Элементы.МакетНеДоступен.Видимость = ПодключениеИзМакета И НЕ ДанныеДрайвера.МакетДоступен И НЕ ПустаяСтрока(Объект.ИдентификаторОбъекта);
		
		Если ПоставляемыйВСоставеКонфигурации Тогда
			РежимРаботы = РежимРаботы + НСтр("ru = 'Локальный'");
		КонецЕсли;
		Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.Всплывающая;
		
		СвойстваТолькоПросмотр =  ПоставляемыйВСоставеКонфигурации И Не ПодключениеЛокальноПоИдентификатору;
		Элементы.ТипОборудования.ТолькоПросмотр = СвойстваТолькоПросмотр;
		Элементы.Наименование.ТолькоПросмотр    = СвойстваТолькоПросмотр;
		Элементы.ИдентификаторОбъекта.ТолькоПросмотр = СвойстваТолькоПросмотр;
		Элементы.ФормаЗаписатьИЗакрыть.Видимость = Не СвойстваТолькоПросмотр;
		Элементы.БезопасноеПодключение.Видимость = Не (Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода
				Или Объект.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.СчитывательМагнитныхКарт)
	КонецЕсли;
	
	Если Элементы.МакетНеДоступен.Видимость Тогда
		Элементы.МакетНеДоступен.Заголовок = Элементы.МакетНеДоступен.Заголовок + Символы.НПП + ДанныеДрайвера.ИмяМакетаДрайвера;
	КонецЕсли;
	
	Элементы.ВерсияДрайвера.Видимость = ПодключениеИзМакета И Не ПустаяСтрока(Объект.ВерсияДрайвера);
	Элементы.УстановленнаяВерсия.Видимость = Ложь;
	Элементы.ГруппаЛог.Видимость = Ложь;

	Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = Не Элементы.ФормаЗаписатьИЗакрыть.Видимость; 
	
	Если ОбщегоНазначенияБПО.ЭтоМобильнаяПлатформа() Тогда
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.Наименование);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТипОборудования);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.СпособПодключения);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.РежимРаботы);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ИдентификаторОбъекта);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ВерсияДрайвера);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.ТекущийСтатус);
		ОбщегоНазначенияБПО.ПодготовитьЭлементУправления(Элементы.УстановленнаяВерсия);       
		Элементы.БезопасноеПодключение.Видимость = Ложь;
	КонецЕсли;     
	
	ОбновитьИнформациюДрайвера();
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Если Лев(ТекущийОбъект.ИдентификаторОбъекта, 6) = "AddIn." Тогда
		ТекущийОбъект.ИдентификаторОбъекта = Прав(ТекущийОбъект.ИдентификаторОбъекта, СтрДлина(ТекущийОбъект.ИдентификаторОбъекта) - 6);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
#Если ВебКлиент Тогда
	Элементы.БезопасноеПодключение.Доступность = Ложь; 
#КонецЕсли
	
	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ОбновитьИнформациюДрайвераОборудования()
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДрайвер_Завершение(РезультатВыполнения, Параметры) Экспорт
	
	Если РезультатВыполнения.Результат Тогда
		ТекстСообщения = НСтр("ru = 'Установка драйвера оборудования завершена.'");
		ОбновитьИнформациюДрайвераОборудования();
#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда
		Сообщить(ТекстСообщения);
#Иначе
		ПоказатьОповещениеПользователя(НСтр("ru = 'Установка драйвера'"), , ТекстСообщения, БиблиотекаКартинок.ОформлениеЗнакФлажок, 
			СтатусОповещенияПользователя.Важное, ЭтаФорма.УникальныйИдентификатор);
#КонецЕсли
	Иначе
		ТекстСообщения   = РезультатВыполнения.ОписаниеОшибки;
#Если МобильноеПриложениеКлиент Или МобильныйКлиент Тогда
		Сообщить(ТекстСообщения);
#Иначе
		ПоказатьОповещениеПользователя(НСтр("ru = 'Установка драйвера'"), , ТекстСообщения, БиблиотекаКартинок.ОформлениеЗнакКрест, 
			СтатусОповещенияПользователя.Важное, ЭтаФорма.УникальныйИдентификатор);
#КонецЕсли
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДрайвер(Команда)
	
	Оповещение = Новый ОписаниеОповещения("УстановитьДрайвер_Завершение",  ЭтотОбъект);
	МенеджерОборудованияКлиент.УстановитьДрайверОборудования(Оповещение, Объект.Ссылка);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДрайвер_Завершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат.Загружена Тогда  
		
		ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru = 'Драйвер оборудования обновлен.'"));
		Записать();
		
		ОбновитьИнформациюДрайвера();
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДрайвер(Команда)
	
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("Ключ", "Значение");
	
	ПараметрыПоискаТипаКомпонентыПодключения = ВнешниеКомпонентыБПОКлиент.ПараметрыПоискаДополнительнойИнформации();
	ПараметрыПоискаТипаКомпонентыПодключения.ИмяФайлаXML = "INFO.XML";
	ПараметрыПоискаТипаКомпонентыПодключения.ВыражениеXPath = "//drivers/component/@type";
	
	ПараметрыЗагрузки = ВнешниеКомпонентыБПОКлиент.ПараметрыЗагрузки();
	ПараметрыЗагрузки.Идентификатор = Объект.ИдентификаторОбъекта;
	
	ПараметрыЗагрузки.ПараметрыПоискаДополнительнойИнформации.Вставить("ТипКомпонентыПодключения", ПараметрыПоискаТипаКомпонентыПодключения);
	
	Оповещение = Новый ОписаниеОповещения("ОбновитьДрайвер_Завершение", ЭтотОбъект, ДополнительныеПараметры);
	
	ВнешниеКомпонентыБПОКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки);
	
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиКФайлуЛогаДрайвера(Команда)
	
	Оповещение = Новый ОписаниеОповещения("ЗапускПриложенияЗавершение", ЭтотОбъект);
	Если МенеджерОборудованияКлиентСервер.СтрокаЗапускаБезопасная(ЛогДрайвераПутьКФайлу) Тогда
		НачатьЗапускПриложения(Оповещение, ЛогДрайвераПутьКФайлу); // АПК:534 произведена проверка запуска
	Иначе
		ОбщегоНазначенияБПОКлиент.СообщитьПользователю(
			НСтр("ru = 'Не допускается в пути к файлу использование символов $ ` | || ; & &&'"));
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапускПриложенияЗавершение(КодВозврата, ДополнительныйПараметр) Экспорт
	
	СообщениеОбОшибке = НСтр("ru='Переход к файлу лога драйвера.'");
	ОбщегоНазначенияБПОКлиент.СообщитьПользователю(СообщениеОбОшибке);
	
КонецПроцедуры

&НаКлиенте
Процедура СохранениеЛогаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
	
#Если Сервер ИЛИ ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение Тогда
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Попытка                                                 
		ЗаписьZIP = Новый ЗаписьZipФайла(ВыбранныеФайлы[0]);
		ЗаписьZIP.Добавить(ЛогДрайвераПутьКФайлу + "*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
		ЗаписьZIP.Записать();
	Исключение
		ВызватьИсключение;
	КонецПопытки;
#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьЛогДрайвера(Команда)
	
#Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
	// АПК: 1348-выкл не используется модуль ФайловаяСистемаКлиент из БСП
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.МножественныйВыбор = Ложь;
	Диалог.Каталог = ЛогДрайвераПутьКФайлу;
	Диалог.Расширение = "zip";
	Диалог.Фильтр = НСтр("ru = 'Файл архива'") + " (*.zip)|*.zip";
	ОповещениеВыбораФайла = Новый ОписаниеОповещения("СохранениеЛогаЗавершение", ЭтотОбъект);
	Диалог.Показать(ОповещениеВыбораФайла);
	// АПК: 1348-вкл
#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура СохранениеШаблонЛокализации(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
	
#Если Сервер ИЛИ ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение Тогда
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Попытка
		Текст = Новый ЗаписьТекста;
		Текст.Открыть(ВыбранныеФайлы[0],КодировкаТекста.UTF8);
		Текст.ЗаписатьСтроку(ШаблонЛокализации);
		Текст.Закрыть();
	Исключение
		ВызватьИсключение;
	КонецПопытки;
#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьШаблонЛокализации(Команда)

#Если ТонкийКлиент ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
	// АПК: 1348-выкл не используется модуль ФайловаяСистемаКлиент из БСП
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.МножественныйВыбор = Ложь;
	Диалог.Каталог = ЛогДрайвераПутьКФайлу;
	Диалог.Расширение = "xml";
	Диалог.Фильтр = НСтр("ru = 'Файл локализации драйвера'") + " (*.xml)|*.xml";
	ОповещениеВыбораФайла = Новый ОписаниеОповещения("СохранениеШаблонЛокализации", ЭтотОбъект);
	Диалог.Показать(ОповещениеВыбораФайла);
	// АПК: 1348-вкл
#КонецЕсли

КонецПроцедуры

&НаКлиенте
Процедура ТипОборудованияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ДанныеВыбора = Новый СписокЗначений();
	ЗаполнитьДоступныеТипыОборудования(ДанныеВыбора);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

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

&НаКлиенте
Процедура ОбновитьИнформациюДрайвераОборудования()
	
	Оповещение = Новый ОписаниеОповещения("ОбновитьИнформациюДрайвераОборудования_Завершение", ЭтотОбъект);
	МенеджерОборудованияКлиент.НачатьПолучениеОписанияДрайвера(Оповещение, Неопределено, ДанныеДрайвера);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьИнформациюДрайвера()
	
	Если ПодключениеИзИнформационнойБазы Тогда
		РезультатИнформация = ВнешниеКомпонентыБПО.ИнформацияОКомпоненте(Объект.ИдентификаторОбъекта);
		Если Не ПустаяСтрока(РезультатИнформация.ОписаниеОшибки) Тогда
			Элементы.ИдентификаторОбъекта.Подсказка = РезультатИнформация.ОписаниеОшибки;
			Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу;
		Иначе
			Элементы.ИдентификаторОбъекта.ОтображениеПодсказки = ОтображениеПодсказки.Всплывающая;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗаполнитьДоступныеТипыОборудования(ДанныеВыбора)
	
	ДоступныеТипыОборудования = МенеджерОборудования.ДоступныеТипыОборудования();
	Для Каждого Тип Из ДоступныеТипыОборудования Цикл
		ДанныеВыбора.Добавить(Тип);
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

Связанные материалы