Документооборот с контролирующими органами / Установка CryptoPro CSP: Регистрационные данные / Модуль формы

файл
&НаКлиенте
Перем КонтекстЭДОКлиент;

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Продукт = "csp50r2_win";
	ЗаполнитьРегистрационныеДанные();
	
	Лицензия = "Приобретена";
	ИзменитьОформлениеЛицензии();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если ЗначениеЗаполнено(КонтактноеЛицо) И ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда
		ТекущийЭлемент = Элементы.СерийныйНомер;
	КонецЕсли;
	
	СистемнаяИнформация = Новый СистемнаяИнформация;
	ЭтоWindowsXP = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
			ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64)
		И (СтрНайти(СистемнаяИнформация.ВерсияОС, "Windows XP") > 0
			ИЛИ СтрНайти(СистемнаяИнформация.ИнформацияПрограммыПросмотра, "Windows NT 5.1") > 0);
	Если НЕ ЭтоWindowsXP Тогда
		Продукт = "csp50r3_win";
	КонецЕсли;
	
	// Инициализируем контекст формы - контейнера клиентских методов
	ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
	ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	Если ЗначениеЗаполнено(ЭлектроннаяПочта)
		И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ЭлектроннаяПочта) Тогда
		ОбщегоНазначения.СообщитьПользователю(
			НСтр("ru = 'Некорректно заполнен адрес электронной почты.'"),, "ЭлектроннаяПочта",, Отказ);
	КонецЕсли;
	
	СимволыСерийнногоНомера = Новый Массив;
	Если ЗначениеЗаполнено(СерийныйНомер) Тогда
		Для Индекс = 1 По СтрДлина(СерийныйНомер) Цикл
			ТекущийСимвол = ВРег(Сред(СерийныйНомер, Индекс, 1));
			Код = КодСимвола(ТекущийСимвол);
			Если (Код > 64 И Код < 91) ИЛИ (Код > 47 И Код < 58) Тогда
				СимволыСерийнногоНомера.Добавить(ТекущийСимвол);
			КонецЕсли;
		КонецЦикла;
		
		ЧистыйСерийныйНомер = СтрСоединить(СимволыСерийнногоНомера, "");
		Если СтрДлина(ЧистыйСерийныйНомер) <> 25 Тогда
			ОбщегоНазначения.СообщитьПользователю(
				НСтр("ru = 'Некорректно заполнен серийный номер.'"),, "СерийныйНомер",, Отказ);
		ИначеЕсли Лев(ЧистыйСерийныйНомер, 2) <> "39" И Лев(ЧистыйСерийныйНомер, 2) <> "40"
			И Лев(ЧистыйСерийныйНомер, 2) <> "50" Тогда
			ОбщегоНазначения.СообщитьПользователю(
				НСтр("ru = 'Серийный номер не соответствует продуктам CryptoPro CSP 3.9, CryptoPro CSP 4.0 и CryptoPro CSP 5.0.
						   |Автоматическая установка невозможна'"),, "СерийныйНомер",, Отказ);
		КонецЕсли;
	КонецЕсли;	
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ЛицензияПриИзменении(Элемент)
	
	ИзменитьОформлениеЛицензии();
	
КонецПроцедуры

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

&НаКлиенте
Процедура КонтактноеЛицоПослеВыбора(РезультатВыбора, Параметры) Экспорт
	
	Если РезультатВыбора = Неопределено Тогда
		Возврат;
	КонецЕсли;   
	КонтактноеЛицо = РезультатВыбора;
	
КонецПроцедуры

&НаКлиенте
Процедура СерийныйНомерПриИзменении(Элемент)
	
	СерийныйНомер = СокрЛП(СерийныйНомер);
	Если ЗначениеЗаполнено(СерийныйНомер) Тогда
		Если Лев(СерийныйНомер, 2) = "39" Тогда
			Продукт = "csp39";
		ИначеЕсли Лев(СерийныйНомер, 2) = "40" Тогда
			Продукт = "csp40";
		ИначеЕсли Лев(СерийныйНомер, 2) = "50" Тогда
			Продукт = ?(ЭтоWindowsXP, "csp50r2_win", "csp50r3_win");
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

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

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

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

&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;
	Если КонтекстЭДОКлиент = Неопределено Тогда
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьПослеОтветаНаВопрос(Ответ, ВходящийКонтекст) Экспорт

	Если Ответ = КодВозвратаДиалога.Да Тогда
		Закрыть(ВходящийКонтекст);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьРегистрационныеДанные()

	ТекущийПользователь = Пользователи.ТекущийПользователь();
	КонтактноеЛицо = ТекущийПользователь;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ПользователиКонтактнаяИнформация.Представление
	|ИЗ
	|	Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация
	|ГДЕ
	|	ПользователиКонтактнаяИнформация.Ссылка = &Ссылка
	|	И ПользователиКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailПользователя)";
	Запрос.УстановитьПараметр("Ссылка", ТекущийПользователь);
	Результат = Запрос.Выполнить();
	Если Не Результат.Пустой() Тогда
		Выборка = Результат.Выбрать();
		Выборка.Следующий();
	
		Если ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(Выборка.Представление) Тогда
			ЭлектроннаяПочта = Выборка.Представление;			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Функция ОпределитьЛицензиюПозже()
	
	Возврат Лицензия = "Позже";
	
КонецФункции

&НаСервере
Функция ЛицензияПриобретена()
	
	Возврат Лицензия = "Приобретена";
	
КонецФункции
	
&НаСервере
Функция ЛицензияВстроена()
	
	Возврат Лицензия = "Встроена";
	
КонецФункции

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

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