&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ИнициализироватьПараметры(Параметры);
ОбработкаЗаявленийАбонентаКлиентСервер.ИнициализироватьПроверкиТелефонаДляОблака(ЭтотОбъект);
ПроверкаТелефонДляПаролей.ЗначениеВведено = ЗначениеЗаполнено(ТелефонМобильныйДляПаролей);
НастроитьРежимВыбора();
УправлениеФормой(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытии_ПослеПолученияКонтекста", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
Элементы.ТелефонМобильныйДляПаролей.ОбновитьТекстРедактирования();
ПодключитьОбработчикОжидания("ОбновитьРазмерыФормы", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИсправленыОшибкиЛокальногоХраненияКлюча" Тогда
ИнициализироватьПараметры(Параметр);
УправлениеФормой(ЭтаФорма);
Если Параметр.Свойство("ВыбранноеМестоХраненияКлюча") И ИгнорироватьКонфликт Тогда
ПродолжитьВыборСертификата(Неопределено);
КОнецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РежимРаботыСКлючамиЛокальноПриИзменении(Элемент)
ПереместитьПодсказкиПодТокенИлиЛокальноеХранение();
РежимРаботыСКлючамиПриИзменении(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура РежимРаботыСКлючамиНаТокенеПриИзменении(Элемент)
ПереместитьПодсказкиПодТокенИлиЛокальноеХранение();
РежимРаботыСКлючамиПриИзменении(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ТелефонДляПаролейПриИзменении(Элемент)
ТелефонДляПаролейИзменениеТекстаРедактирования(Элемент, Элемент.ТекстРедактирования, Истина);
КонецПроцедуры
&НаКлиенте
Процедура РежимРаботыСКлючамиПриИзменении(Элемент)
УправлениеФормой(ЭтотОбъект);
ПроверитьНаличиеСервера();
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаВключенияСертификатаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("НавигационнаяСсылка", НавигационнаяСсылкаФорматированнойСтроки);
ДополнительныеПараметры.Вставить("РежимРаботыСКлючами", РежимРаботыСКлючами);
Оповестить("ИсправитьОшибкиЛокальногоХраненияКлюча", ДополнительныеПараметры);
ИзменитьОформлениеОшибкаВключенияСертификата(ЭтотОбъект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ТелефонДляПаролейИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
ОбработкаЗаявленийАбонентаКлиент.ТелефонДляПаролейИзменениеТекстаРедактирования(ЭтотОбъект, Текст);
КонецПроцедуры
&НаКлиенте
Процедура КодПодтвержденияПриИзменении(Элемент)
ОбработкаЗаявленийАбонентаКлиент.КодПодтвержденияПриИзменении(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КодПодтвержденияИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
ОбработкаЗаявленийАбонентаКлиент.КодПодтвержденияИзменениеТекстаРедактирования(ЭтотОбъект, Элемент, Текст, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ВключатьЛицензиюКриптоПроВСертификатПриИзменении(Элемент)
Если ВключатьЛицензиюКриптоПроВСертификат И ПредупреждатьПроНаличиеЛицензииКриптоПро Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"ВключатьЛицензиюКриптоПроВСертификатПриИзменении_Завершение",
ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'На компьютере уже имеется общая лицензия КриптоПро CSP.
|Вы уверены, что хотите включить лицензию в сертификат (потребуется доп. оплата) ?'");
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВключатьЛицензиюКриптоПроВСертификатПриИзменении_Завершение(Ответ, ВходящийКонтекст) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
ВключатьЛицензиюКриптоПроВСертификат = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УчетнаяЗаписьОблачнойПодписиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОповещениеСледующее = Новый ОписаниеОповещения("ПослеВыбораУчетнойЗаписи", ЭтотОбъект);
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("ТекущаяЗапись", УчетнаяЗаписьОблачнойПодписи);
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("ПоставляемыйСервер", Истина);
Если ЗначениеЗаполнено(ИНН) Тогда
ПараметрыОперации.Вставить("ПредставлениеОтбора", НСтр("ru = 'Отобрать по'") + " " + ИНН);
ПараметрыОтбора.Вставить("Наименование", ИНН);
КонецЕсли;
КонтекстЭДОКлиент.ВыбратьУчетнуюЗаписьОблачнойПодписи(ОповещениеСледующее, ЭтотОбъект, ПараметрыОперации, ПараметрыОтбора);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьМестоХраненияКлючейНажатие(Элемент)
ОповещениеСледующее = Новый ОписаниеОповещения("ВыбратьМестоХраненияКлючаПослеВыбора", ЭтотОбъект);
ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("ИНН", ИНН);
КонтекстЭДОКлиент.ОткрытьНастройкиОблачнойПодписи(
ОповещениеСледующее,
УчетнаяЗаписьОблачнойПодписи,
Логин,
СерверОблачнойПодписи,
Организация,
ПервичноеЗаявление,
ТолькоПросмотр,
ПараметрыОперации);
КонецПроцедуры
&НаКлиенте
Процедура УчетнаяЗаписьОблачнойПодписиСоздание(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СоздатьУчетнуюЗаписьОблачнойПодписи();
КонецПроцедуры
&НаКлиенте
Процедура НомерТелефонаПриПереходеВОблакоОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения(
"НомерТелефонаПриПереходеВОблакоОбработкаНавигационнойСсылкиЗавершение",
ЭтотОбъект);
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ТелефонМобильный", ТелефонМобильныйДляПаролей);
ДополнительныеПараметры.Вставить("ЭлектроннаяПочта", ЭлектроннаяПочтаДляПаролей);
ОткрытьФорму(КонтекстЭДОКлиент.ПутьКОбъекту + ".Форма.ПервичнаяНастройкаПолученияВременныхПаролей",
ДополнительныеПараметры,
,
,
,
,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВосстановитьУчетнуюЗаписьОблачнойПодписи(Команда)
СоздатьУчетнуюЗаписьОблачнойПодписи();
КонецПроцедуры
&НаКлиенте
Процедура УчетнаяЗаписьОблачнойПодписиОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ОткрытьСведенияУчетнойЗаписи(Неопределено, УчетнаяЗаписьОблачнойПодписи);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "Подробнее" Тогда
КонтекстЭДОКлиент.ПоказатьИнформациюОбОблачнойПодписи(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ПродолжитьВыборСертификата(Команда)
ВыбраноЭПВМоделиСервиса = РежимРаботыСКлючами = 1;
ВыбранаОблачнаяПодпись = РежимРаботыСКлючами = 3;
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(Ложь);
Если ВыбраноЭПВМоделиСервиса Тогда
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(Истина);
ВыбранноеМестоХраненияКлюча = ПредопределенноеЗначение("Перечисление.МодельРаботыСКлючами.ВМоделиСервиса");
Если РежимВыбора = "Сертификат" Тогда
Если НЕ ПроверкаТелефонДляПаролей.ПодтверждениеВыполнено Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Для продолжения подтвердите номер телефона'"));
Возврат;
КонецЕсли;
Если НЕ УдалосьПолучитьСертификаты() Тогда
Возврат;
КонецЕсли;
КонецЕсли;
ИначеЕсли ВыбранаОблачнаяПодпись Тогда
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(УчетнаяЗаписьОблачнойПодписи);
ВыбранноеМестоХраненияКлюча = ПредопределенноеЗначение("Перечисление.МодельХраненияЗакрытогоКлюча.ОблачнаяПодпись");
Если НЕ ПроверитьМестоХраненияОблачнойПодписи() Тогда
Возврат;
КонецЕсли;
ИначеЕсли ЕстьОшибкаЛокальногоХраненияКлючей(ЭтотОбъект) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Для продолжения устраните ошибку'"),,"РежимРаботыСКлючамиЛокально");
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ВыбранТокен", ВыбранТокен(ЭтотОбъект));
Если ВыбранТокен(ЭтотОбъект) Тогда
ДополнительныеПараметры.Вставить("РежимРаботыСКлючами", 2);
Иначе
ДополнительныеПараметры.Вставить("РежимРаботыСКлючами", РежимРаботыСКлючами);
КонецЕсли;
КриптографияЭДКОКлиентСервер.ЗаполнитьМестоХраненияКлюча(МестоХраненияКлюча, ДополнительныеПараметры);
ДополнительныеПараметры.Вставить("Логин", Логин);
ДополнительныеПараметры.Вставить("СерверОблачнойПодписи", СерверОблачнойПодписи);
ДополнительныеПараметры.Вставить("ВыбранноеМестоХраненияКлюча", ВыбранноеМестоХраненияКлюча);
ДополнительныеПараметры.Вставить("СпособПодтвержденияКриптоопераций", СпособПодтвержденияКриптоопераций);
ДополнительныеПараметры.Вставить("ВключатьЛицензиюКриптоПроВСертификат", ВключатьЛицензиюКриптоПроВСертификат);
Если ВыбраноЭПВМоделиСервиса Тогда
ДополнительныеПараметры.Вставить("ИдентификаторПроверки", ПроверкаТелефонДляПаролей.ИдентификаторПроверки);
ДополнительныеПараметры.Вставить("ОблачныеСертификатыКалуги", ОблачныеСертификатыКалуги);
ДополнительныеПараметры.Вставить("ТелефонМобильныйДляПаролей", ТелефонМобильныйДляПаролей);
ДополнительныеПараметры.Вставить("ЭлектроннаяПочтаДляПаролей", ЭлектроннаяПочтаДляПаролей);
ДополнительныеПараметры.Вставить("ИдентификаторПроверкиТелефонаДляПаролей", ИдентификаторПроверкиТелефонаДляПаролей);
ДополнительныеПараметры.Вставить("ИдентификаторПроверкиЭлектроннойПочтыДляПаролей", ИдентификаторПроверкиЭлектроннойПочтыДляПаролей);
КонецЕсли;
Закрыть(ДополнительныеПараметры);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ВыбранТокен(Форма)
Возврат Форма.РежимРаботыСКлючами = 4;
КонецФункции
&НаСервере
Функция УдалосьПолучитьСертификаты()
РезультатПоИНН = ОбработкаЗаявленийАбонента.УдалосьПолучитьСписокОблачныхСертификатов(ЭтотОбъект, ИНН, Истина);
ЭтоРуководитель = ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоРуководитель(ЭтотОбъект);
Если ЭтоРуководитель Тогда
Удалось = РезультатПоИНН.Выполнено;
Иначе
РезультатПоИННФЛ = ОбработкаЗаявленийАбонента.УдалосьПолучитьСписокОблачныхСертификатов(ЭтотОбъект, ИННФЛ, Истина);
Удалось = РезультатПоИНН.Выполнено ИЛИ РезультатПоИННФЛ.Выполнено;
КонецЕсли;
Возврат Удалось;
КонецФункции
&НаКлиенте
Процедура ПроверитьНомер(Команда)
ОтправитьКодПодтверждения();
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьПроверкуТелефонаНажатие(Элемент)
ОбработкаЗаявленийАбонентаКлиент.ОтменитьПроверкуТелефонаНажатие(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьКодПовторно(Команда)
ОтправитьКодПодтверждения();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПриОткрытии_ПослеПолученияКонтекста(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
ПроверитьНаличиеСервера();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНаличиеСервера()
Если РежимРаботыСКлючами = 3
И НЕ ЗначениеЗаполнено(СерверОблачнойПодписи)
И НЕ ЗначениеЗаполнено(УчетнаяЗаписьОблачнойПодписи) Тогда
ОповещениеСледующее = Новый ОписаниеОповещения("ПослеЗаполненияСпискаСерверовОблачнойПодписи", ЭтотОбъект);
КонтекстЭДОКлиент.ОткрытьНастройкиОблачнойПодписиФоновымЗаданием(ОповещениеСледующее, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаполненияСпискаСерверовОблачнойПодписи(РезультатВыполнения, ДополнительныеПараметры) Экспорт
ВсеСервера = КонтекстЭДОКлиент.ПолучитьСписокСерверовОблачнойПодписи(РезультатВыполнения);
Если ВсеСервера.Количество() = 1 Тогда
СерверОблачнойПодписи = ВсеСервера[0].ВнутреннийИдентификатор;
КонецЕсли;
ИзменитьОформлениеОблачнаяПодпись(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция ПроверитьМестоХраненияОблачнойПодписи()
Результат = Истина;
Если РежимВыбора = "Сертификат" Тогда
Если НЕ ЗначениеЗаполнено(УчетнаяЗаписьОблачнойПодписи) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Выберите учетную запись DSS'"), ,"УчетнаяЗаписьОблачнойПодписиПредставление");
Результат = Ложь;
КонецЕсли;
Иначе
Если НЕ ЗначениеЗаполнено(УчетнаяЗаписьОблачнойПодписи) И НЕ ЗначениеЗаполнено(СерверОблачнойПодписи) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Выберите сервер для новой учетной записи DSS'"));
Результат = Ложь;
ИначеЕсли НЕ ЗначениеЗаполнено(УчетнаяЗаписьОблачнойПодписи) И НЕ ЗначениеЗаполнено(Логин) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Выберите логин для новой учетной записи DSS'"));
Результат = Ложь;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОбновитьРазмерыФормы()
Элементы.Заголовок.Видимость = НЕ Элементы.Заголовок.Видимость;
Элементы.Заголовок.Видимость = НЕ Элементы.Заголовок.Видимость;
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьКодПодтверждения()
ОбработкаЗаявленийАбонентаКлиент.ОтправитьКодПодтверждения(ЭтотОбъект);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроверитьНомерНаСервере(Телефон, Идентификатор) Экспорт
Возврат МенеджерСервисаКриптографии.ПолучитьКодПроверкиТелефона(Телефон, Идентификатор);
КонецФункции
&НаКлиенте
Процедура Подключаемый_АктивироватьПолеКодПодтверждения() Экспорт
ТекущийЭлемент = Элементы.КодПодтверждения;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработчикОбратногоОтсчета() Экспорт
ОбработкаЗаявленийАбонентаКлиент.Подключаемый_ОбработчикОбратногоОтсчета(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УправлениеФормой(Форма) Экспорт
Элементы = Форма.Элементы;
ДоступностьГруппы = Форма.РежимРаботыСКлючами = 1 И НЕ Форма.ТолькоПросмотр И Форма.ДоступнаПодписьМоделиСервиса;
Элементы.ГруппаВОблакеВертикальная.Доступность = ДоступностьГруппы;
Элементы.ГруппаВОблакеВыбор.Доступность = ДоступностьГруппы;
ИзменитьОформлениеЭПВОблаке(Форма);
ИзменитьОформлениеОблачнаяПодпись(Форма);
ИзменитьОформлениеЛокальнаяПодпись(Форма);
ИзменитьОформлениеОшибкаВключенияСертификата(Форма);
Элементы.РежимРаботыСКлючамиЛокально.Доступность = НЕ Форма.ТолькоПросмотр;
Элементы.РежимРаботыСКлючамиВМоделиСервиса.Доступность = НЕ Форма.ТолькоПросмотр;
Элементы.РежимРаботыСКлючамиОблачнаяПодпись.Доступность = НЕ Форма.ТолькоПросмотр;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеЭПВОблаке(Форма) Экспорт
Элементы = Форма.Элементы;
ДоступностьГруппы = Форма.РежимРаботыСКлючами = 1 И НЕ Форма.ТолькоПросмотр И Форма.ДоступнаПодписьМоделиСервиса;
Элементы.ГруппаВОблакеВертикальная.Доступность = ДоступностьГруппы;
Элементы.ГруппаВОблакеВыбор.Доступность = ДоступностьГруппы;
Элементы.РежимРаботыСКлючамиВМоделиСервиса.Видимость = Форма.ДоступнаПодписьМоделиСервиса;
ОбработкаЗаявленийАбонентаКлиентСервер.ИзменитьОформлениеЭПВОблаке(Форма);
КонецПроцедуры
&НаСервере
Процедура ПереместитьПодсказкиПодТокенИлиЛокальноеХранение()
Если ВыбранТокен(ЭтотОбъект) Тогда
МестоРасположения = Элементы.РежимРаботыСКлючамиЛокально;
Иначе
МестоРасположения = Элементы.ГруппаЛокальныеКлючиЛицензия;
КонецЕсли;
Элементы.Переместить(
Элементы.ГруппаЛокальныеКлючиГоризонтальная,
Элементы.ГруппаЛокальныеКлючи,
МестоРасположения);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеЛокальнаяПодпись(Форма)
Элементы = Форма.Элементы;
ЕстьОшибкаЛокальногоХраненияКлючей = ЕстьОшибкаЛокальногоХраненияКлючей(Форма);
РежимЛокальный =
(Форма.РежимРаботыСКлючами = 2 ИЛИ ВыбранТокен(Форма))
И НЕ Форма.ТолькоПросмотр;
ПереключитьНаСтрницуВариантаЛокальныеКлючи(
Форма,
РежимЛокальный,
ЕстьОшибкаЛокальногоХраненияКлючей);
ИзменитьОформлениеЛицензииКриптоПро(
Форма,
РежимЛокальный,
ЕстьОшибкаЛокальногоХраненияКлючей);
ИзменитьОформлениеПодсказкиПоЛокальномуКлючу(
Форма,
ЕстьОшибкаЛокальногоХраненияКлючей);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПереключитьНаСтрницуВариантаЛокальныеКлючи(
Форма,
РежимЛокальный,
ЕстьОшибкаЛокальногоХраненияКлючей)
Элементы = Форма.Элементы;
Элементы.ГруппаЛокальныеКлючиВарианты.Доступность = РежимЛокальный;
Если ЕстьОшибкаЛокальногоХраненияКлючей Тогда
Элементы.ГруппаЛокальныеКлючиВарианты.ТекущаяСтраница = Элементы.ОшибкаКриптопровайдера;
ИначеЕсли Форма.НетВыбораМестаХранения Тогда
Элементы.ГруппаЛокальныеКлючиВарианты.ТекущаяСтраница = Элементы.НетВыбораМестаХранения;
Если Форма.ViPNetCSPУстановлен Тогда
КриптопровайдерПредставление = Новый ФорматированнаяСтрока(НСтр("ru = 'Программа защиты информации: ViPNet CSP'"));
Иначе
КриптопровайдерПредставление = Новый ФорматированнаяСтрока(НСтр("ru = 'Программа защиты информации: CryptoPro CSP'"));
КонецЕсли;
Иначе
Элементы.ГруппаЛокальныеКлючиВарианты.ТекущаяСтраница = Элементы.ЛокальныйКлючКриптопровайдеры;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеПодсказкиПоЛокальномуКлючу(
Форма,
ЕстьОшибкаЛокальногоХраненияКлючей)
Элементы = Форма.Элементы;
ПодсказкаПоЛокальномуКлючу = "";
Если НЕ ЕстьОшибкаЛокальногоХраненияКлючей Тогда
ПодсказкаПоЛокальномуКлючу = НСтр("ru = 'Ключ электронной подписи будет храниться на этом компьютере при помощи %1'");
Если Форма.CryptoProCSPУстановлен Тогда
ПодсказкаПоЛокальномуКлючу = СтрШаблон(ПодсказкаПоЛокальномуКлючу, НСтр("ru = 'CryptoPro CSP'"));
Иначе
ПодсказкаПоЛокальномуКлючу = СтрШаблон(ПодсказкаПоЛокальномуКлючу, НСтр("ru = 'ViPNet CSP'"));
КонецЕсли;
Элементы.РежимРаботыСКлючамиЛокально.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Иначе
Элементы.РежимРаботыСКлючамиЛокально.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
КонецЕсли;
Элементы.РежимРаботыСКлючамиЛокально.РасширеннаяПодсказка.Заголовок = ПодсказкаПоЛокальномуКлючу;
Если Элементы.ГруппаЛокальныеКлючиВарианты.ТекущаяСтраница = Элементы.ЛокальныйКлючКриптопровайдеры
И Элементы.ВыбранноеМестоХраненияКлюча.СписокВыбора.Количество() < 2 Тогда
Элементы.ГруппаЛокальныеКлючиГоризонтальная.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеЛицензииКриптоПро(
Форма,
РежимЛокальный,
ЕстьОшибкаЛокальногоХраненияКлючей)
Элементы = Форма.Элементы;
ЭтоВыборСертификата = Форма.РежимВыбора = "Сертификат";
ЭтоКонфликтКриптопровайдеров = Форма.CryptoProCSPУстановлен И Форма.ViPNetCSPУстановлен;
Форма.ПоказыватьФлагВключатьЛицензиюКриптоПроВСертификат =
(Форма.CryptoProCSPУстановлен И НЕ ЭтоКонфликтКриптопровайдеров
ИЛИ Форма.ИгнорироватьКонфликт И Форма.КриптопровайдерПриКонфликте = ПредопределенноеЗначение("Перечисление.ТипыКриптоПровайдеров.CryptoPro"))
И РежимЛокальный
И НЕ ЕстьОшибкаЛокальногоХраненияКлючей
И НЕ ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоРуководитель(Форма)
И НЕ ЭтоВыборСертификата;
Если НЕ Форма.ПоказыватьФлагВключатьЛицензиюКриптоПроВСертификат Тогда
Форма.ВключатьЛицензиюКриптоПроВСертификат = Ложь;
КонецЕсли;
Элементы.ГруппаЛокальныеКлючиЛицензия.Видимость = Форма.ПоказыватьФлагВключатьЛицензиюКриптоПроВСертификат;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеОшибкаВключенияСертификата(Форма, ЭтоСтартИсправления = Ложь)
Элементы = Форма.Элементы;
Элементы.ОшибкаВключенияСертификата.Заголовок = "";
Если ЭтоСтартИсправления Тогда
Элементы.ОшибкаВключенияСертификата.Заголовок = Новый ФорматированнаяСтрока(БиблиотекаКартинок.ДлительнаяОперация16);
Иначе
ЭтоКонфликтКриптопровайдеров = Форма.CryptoProCSPУстановлен И Форма.ViPNetCSPУстановлен;
УстановленХотяБыОдинКриптопровайдер = Форма.CryptoProCSPУстановлен ИЛИ Форма.ViPNetCSPУстановлен;
ЕстьОшибкаЛокальногоХраненияКлючей = ЕстьОшибкаЛокальногоХраненияКлючей(Форма);
Если ЕстьОшибкаЛокальногоХраненияКлючей Тогда
Элементы.РежимРаботыСКлючамиЛокально.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
Иначе
Элементы.РежимРаботыСКлючамиЛокально.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
КонецЕсли;
Если ЕстьОшибкаЛокальногоХраненияКлючей Тогда
Текст = ТекстОшибкиВключенияЛокальногоСертификата(Форма);
Если ЭтоКонфликтКриптопровайдеров Тогда
Ссылка = Новый ФорматированнаяСтрока(НСтр("ru = 'Исправить'"),,,,"Исправить конфликт");
ИначеЕсли НЕ Форма.КомпонентаДляРаботыСКриптографиейПодключена Тогда
Ссылка = Новый ФорматированнаяСтрока(НСтр("ru = 'Установить'"),,,,"Установить компоненту");
ИначеЕсли НЕ УстановленХотяБыОдинКриптопровайдер Тогда
Ссылка = Новый ФорматированнаяСтрока(НСтр("ru = 'Установить'"),,,,"Установить криптопровайдер");
КонецЕсли;
КрасныйТекст = Новый ФорматированнаяСтрока(Текст,,Форма.КрасныйЦвет);
Элементы.ОшибкаВключенияСертификата.Заголовок = Новый ФорматированнаяСтрока(КрасныйТекст, Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ТекстОшибкиВключенияЛокальногоСертификата(Форма)
ЭтоКонфликтКриптопровайдеров = Форма.CryptoProCSPУстановлен И Форма.ViPNetCSPУстановлен;
УстановленХотяБыОдинКриптопровайдер = Форма.CryptoProCSPУстановлен ИЛИ Форма.ViPNetCSPУстановлен;
ЭтоВыборСертификата = Форма.РежимВыбора = "Сертификат";
Текст = "";
Если ЭтоКонфликтКриптопровайдеров Тогда
Текст = НСтр("ru = 'Недоступно при конфликте криптопровайдеров. '");
ИначеЕсли НЕ Форма.КомпонентаДляРаботыСКриптографиейПодключена И ЭтоВыборСертификата Тогда
Текст = НСтр("ru = 'Для выбора сертификата необходимо установить внешнюю компоненту криптографии. '");
ИначеЕсли НЕ УстановленХотяБыОдинКриптопровайдер И ЭтоВыборСертификата Тогда
Текст = НСтр("ru = 'Для выбора сертификата необходимо установить криптопровайдер. '");
ИначеЕсли НЕ Форма.КомпонентаДляРаботыСКриптографиейПодключена Тогда
Текст = НСтр("ru = 'Необходимо установить внешнюю компоненту криптографии. '");
ИначеЕсли НЕ УстановленХотяБыОдинКриптопровайдер Тогда
Текст = НСтр("ru = 'Необходимо установить криптопровайдер. '");
КонецЕсли;
Возврат Текст;
КонецФункции
&НаКлиенте
Процедура Подключаемый_ПроверитьКодПодтверждения() Экспорт
ОбработкаЗаявленийАбонентаКлиент.Подключаемый_ПроверитьКодПодтверждения(ЭтотОбъект);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроверитьТелефонПоКодуНаСервере(Идентификатор, КодПодтверждения) Экспорт
Возврат МенеджерСервисаКриптографии.ПроверитьТелефонПоКоду(Идентификатор, КодПодтверждения);
КонецФункции
&НаКлиенте
Процедура Подключаемый_ОбновитьТелефонДляПаролей() Экспорт
ОбработкаЗаявленийАбонентаКлиент.Подключаемый_ОбновитьТелефонДляПаролей(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьТекстПоляТелефонДляПаролей()
Элементы.ТелефонМобильныйДляПаролей.ОбновитьТекстРедактирования();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_АктивироватьКнопкуПроверитьНомер()
ТекущийЭлемент = Элементы.ПроверитьНомер;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЕстьОшибкаЛокальногоХраненияКлючей(Форма)
ЭтоКонфликтКриптопровайдеров = Форма.CryptoProCSPУстановлен И Форма.ViPNetCSPУстановлен;
УстановленХотяБыОдинКриптопровайдер = Форма.CryptoProCSPУстановлен ИЛИ Форма.ViPNetCSPУстановлен;
Возврат
(ЭтоКонфликтКриптопровайдеров И НЕ Форма.ИгнорироватьКонфликт)
ИЛИ НЕ УстановленХотяБыОдинКриптопровайдер
ИЛИ НЕ Форма.КомпонентаДляРаботыСКриптографиейПодключена;
КонецФункции
&НаСервере
Процедура ИнициализироватьПараметры(ВхПараметры)
ПараметрыФормы = ВхПараметры.ПараметрыФормы;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ВхПараметры, ПараметрыФормы);
ВхПараметры.Свойство("ВыбранноеМестоХраненияКлюча", ВыбранноеМестоХраненияКлюча);
РежимВыбора = ЗначениеПараметра(ВхПараметры, "РежимВыбора", "МестоХранения");
Логин = ЗначениеПараметра(ВхПараметры, "Логин");
ИННФЛ = ЗначениеПараметра(ВхПараметры, "ИННФЛ");
УчетнаяЗаписьОблачнойПодписи = ЗначениеПараметра(ВхПараметры, "УчетнаяЗаписьОблачнойПодписи");
СерверОблачнойПодписи = ЗначениеПараметра(ВхПараметры, "СерверОблачнойПодписи");
Организация = ЗначениеПараметра(ВхПараметры, "Организация");
СпособПодтвержденияКриптоопераций = ЗначениеПараметра(ВхПараметры, "СпособПодтвержденияКриптоопераций");
ВключатьЛицензиюКриптоПроВСертификат = ЗначениеПараметра(ВхПараметры, "ВключатьЛицензиюКриптоПроВСертификат");
ЭлектроннаяПочтаДляПаролей = ЗначениеПараметра(ВхПараметры, "ЭлектроннаяПочтаДляПаролей");
ИдентификаторПроверкиТелефонаДляПаролей = ЗначениеПараметра(ВхПараметры, "ИдентификаторПроверкиТелефонаДляПаролей");
ЭтаУчетнаяЗаписьБылаСделанаДляОблака = ЗначениеПараметра(ВхПараметры, "ЭтаУчетнаяЗаписьБылаСделанаДляОблака");
ПервичноеЗаявление = ЗначениеПараметра(ВхПараметры, "ПервичноеЗаявление");
УчетнаяЗаписьОблачнойПодписиПредставление = ЛогинУчетнойЗаписи(УчетнаяЗаписьОблачнойПодписи);
ПоказыватьОбаКриптопровайдера = НЕ КомпонентаДляРаботыСКриптографиейПодключена
ИЛИ КомпонентаДляРаботыСКриптографиейПодключена И НЕ ViPNetCSPУстановлен И НЕ CryptoProCSPУстановлен;
СписокВыбора = Элементы.ВыбранноеМестоХраненияКлюча.СписокВыбора;
СписокВыбора.Очистить();
Если ViPNetCSPУстановлен ИЛИ ПоказыватьОбаКриптопровайдера Тогда
СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ТипыКриптоПровайдеров.VipNet"),
НСтр("ru = 'На рабочем компьютере (ViPNet CSP)'"));
КонецЕсли;
Если CryptoProCSPУстановлен ИЛИ ПоказыватьОбаКриптопровайдера Тогда
СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.ТипыКриптоПровайдеров.CryptoPro"),
НСтр("ru = 'На рабочем компьютере (CryptoPro CSP)'"));
КонецЕсли;
Если СписокВыбора.Количество() = 1 Тогда
ВыбранноеМестоХраненияКлюча = СписокВыбора[0].Значение;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Логин) Тогда
Логин = ИНН;
КонецЕсли;
ДоступнаПодписьМоделиСервиса = ЭлектроннаяПодписьВМоделиСервиса.ИспользованиеВозможно();
ДоступнаОблачнаяПодпись = ОбработкаЗаявленийАбонента.ИспользованиеОблачнойПодписиВЗаявленииВозможно(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция ЗначениеПараметра(ВхПараметры, ИмяПараметра, ЗначениеПоУмолчанию = Неопределено)
ЗначениеФормы = ЭтотОбъект[ИмяПараметра];
ЗначениеВходящее = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ВхПараметры, ИмяПараметра);
Если ЗначениеЗаполнено(ЗначениеВходящее) Тогда
Результат = ЗначениеВходящее;
ИначеЕсли ЗначениеЗаполнено(ЗначениеПоУмолчанию) И НЕ ЗначениеЗаполнено(ЗначениеФормы) Тогда
Результат = ЗначениеПоУмолчанию;
Иначе
Результат = ЗначениеФормы;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеОблачнаяПодпись(Форма)
ДоступностьРаздела = Форма.РежимРаботыСКлючами = 3 И Форма.ДоступнаОблачнаяПодпись;
ОшибкаЗаполнения = Ложь;
Если ЗначениеЗаполнено(Форма.УчетнаяЗаписьОблачнойПодписи) Тогда
ПредставлениеМестаХранения = СокрЛП(Форма.УчетнаяЗаписьОблачнойПодписи) + "";
ИначеЕсли Форма.РежимВыбора = "Сертификат" Тогда
ПредставлениеМестаХранения = НСтр("ru = 'Выбрать'");
Иначе
ПредставлениеМестаХранения = НСтр("ru = 'Новая учетная запись'") + " " + Форма.Логин + "";
ОшибкаЗаполнения = НЕ ЗначениеЗаполнено(Форма.СерверОблачнойПодписи);
КонецЕсли;
ЭлементФормы = Форма.Элементы.ВыбратьМестоХраненияКлючей;
Если ОшибкаЗаполнения И ДоступностьРаздела Тогда
ЭлементФормы.ЦветТекста = Новый Цвет(178,34, 34);
Иначе
ЭлементФормы.ЦветТекста = Новый Цвет;
КонецЕсли;
ЭлементФормы.Заголовок = ПредставлениеМестаХранения;
ЭлементФормы.Доступность = ДоступностьРаздела;
Форма.Элементы.ГруппаОблачнаяПодписьВыбор.Доступность = ДоступностьРаздела И НЕ Форма.ТолькоПросмотр;
Если Форма.РежимВыбора = "Сертификат" Тогда
Форма.Элементы.ВыбратьМестоХраненияКлючей.Видимость = Ложь;
Иначе
Форма.Элементы.ГруппаОблачнаяПодписьВыбор.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьМестоХраненияКлючаПослеВыбора(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если РезультатВыбора <> Неопределено Тогда
УчетнаяЗаписьОблачнойПодписи = РезультатВыбора.УчетнаяЗаписьОблачнойПодписи;
Логин = РезультатВыбора.Логин;
СерверОблачнойПодписи = РезультатВыбора.СерверОблачнойПодписи;
ИзменитьОформлениеОблачнаяПодпись(ЭтотОбъект);
УчетнаяЗаписьОблачнойПодписиПредставление = ЛогинУчетнойЗаписи(УчетнаяЗаписьОблачнойПодписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораУчетнойЗаписи(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если РезультатВыбора.Выполнено Тогда
УчетнаяЗаписьОблачнойПодписи = РезультатВыбора.Результат;
УчетнаяЗаписьОблачнойПодписиПредставление = ЛогинУчетнойЗаписи(УчетнаяЗаписьОблачнойПодписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьРежимВыбора()
ТекущийКлючФормы = РежимВыбора;
Элементы.ГруппаВОблакеВертикальная.Видимость = Ложь;
Элементы.ГруппаВОблакеВыбор.Видимость = Ложь;
Элементы.ГруппаЛокальныеКлючиВарианты.Видимость = Ложь;
Элементы.ГруппаЛокальныеКлючиЛицензия.Видимость = Ложь;
Элементы.ГруппаОблачнаяПодпись.Видимость = ДоступнаОблачнаяПодпись;
Элементы.ГруппаВОблаке.Видимость = ДоступнаПодписьМоделиСервиса;
Элементы.ГруппаПодсказка.Видимость = Ложь;
Элементы.Отступ.Видимость = Ложь;
ПодсказкаКнопки = Элементы.ФормаПродолжитьВыборСертификата.РасширеннаяПодсказка;
Заголовок = "Место хранения сертификата";
Элементы.РежимРаботыСКлючамиНаТокене.Видимость = Ложь;
Если РежимВыбора = "Сертификат" Тогда
ТекстЗаголовка = НСтр("ru = 'Выберите место, где хранится сертификат, на использование которого хотите перейти.'");
Элементы.ГруппаВОблакеВертикальная.Видимость = Истина;
Элементы.Отступ.Видимость = Истина;
Элементы.ГруппаЛокальныеКлючиВарианты.Видимость = Истина;
ПроверкаТелефонДляПаролей.ЗначениеВведено = ЗначениеЗаполнено(ТелефонМобильныйДляПаролей);
ПодсказкаКнопки.Заголовок = НСтр("ru = 'Продолжить выбор сертификата'");
Элементы.РежимРаботыСКлючамиНаТокене.Видимость = Истина;
Если РежимРаботыСКлючами = 2 ИЛИ ВыбранТокен(ЭтотОбъект) Тогда
РежимРаботыСКлючами = 4;
ПереместитьПодсказкиПодТокенИлиЛокальноеХранение();
КонецЕсли;
ИначеЕсли РежимВыбора = "МестоХранения" Тогда
ТекстЗаголовка = НСтр("ru = 'Выберите место, где будет храниться сертификат, на использование которого хотите перейти.'");
ПроверкаТелефонДляПаролей.ЗначениеВведено = Ложь;
Элементы.ГруппаПодсказка.Видимость = ДоступнаПодписьМоделиСервиса;
Элементы.ГруппаЛокальныеКлючиВарианты.Видимость = Истина;
ПодсказкаКнопки.Заголовок = НСтр("ru = 'Выбор места хранения ключа'");
ИначеЕсли РежимВыбора = "Переиздание" Тогда
ТекстЗаголовка = НСтр("ru = 'Выберите место, где будет храниться сертификат, на использование которого хотите перейти.'");
Элементы.ГруппаВОблакеВыбор.Видимость = Истина;
Элементы.Отступ.Видимость = Истина;
Элементы.ГруппаЛокальныеКлючиВарианты.Видимость = Истина;
Элементы.ГруппаЛокальныеКлючиЛицензия.Видимость = Истина;
ПроверкаТелефонДляПаролей.ЗначениеВведено = Ложь;
ПодсказкаКнопки.Заголовок = НСтр("ru = 'Продолжить выбор сертификата'");
КонецЕсли;
Элементы.Заголовок.Заголовок = ТекстЗаголовка;
ТекущийКлючФормы = ТекущийКлючФормы + ?(ДоступнаОблачнаяПодпись, "1", "0");
ТекущийКлючФормы = ТекущийКлючФормы + ?(ДоступнаПодписьМоделиСервиса, "1", "0");
КлючСохраненияПоложенияОкна = ТекущийКлючФормы;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗадатьНадписьНомерТелефонаПриПереходеВОблако(Форма)
ЭтоПереходВОблако = НЕ Форма.ЭтаУчетнаяЗаписьБылаСделанаДляОблака
И Форма.РежимРаботыСКлючами = 1
И Форма.РежимВыбора = "Переиздание";
Если ЭтоПереходВОблако Тогда
Подстрока1 = НСтр("ru = 'Номер телефона: '");
Если НЕ ЗначениеЗаполнено(Форма.ИдентификаторПроверкиТелефонаДляПаролей) ИЛИ НЕ ЗначениеЗаполнено(Форма.ТелефонМобильныйДляПаролей) Тогда
Подстрока2 = Новый ФорматированнаяСтрока(НСтр("ru = 'не указан'"),,Новый Цвет(225, 40, 40),,"номер телефона");
Иначе
Подстрока2 = Новый ФорматированнаяСтрока(Форма.ТелефонМобильныйДляПаролей,,,,"номер телефона");
КонецЕсли;
Форма.Элементы.НомерТелефонаПриПереходеВОблако.Видимость = Истина;
Форма.НомерТелефонаПриПереходеВОблако = Новый ФорматированнаяСтрока(Подстрока1, Подстрока2);
Иначе
Форма.Элементы.НомерТелефонаПриПереходеВОблако.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НомерТелефонаПриПереходеВОблакоОбработкаНавигационнойСсылкиЗавершение(Результат, ВходящийКонтекст) Экспорт
Если Результат <> Неопределено Тогда
ТелефонМобильныйДляПаролей = Результат.ТелефонМобильный;
ЭлектроннаяПочтаДляПаролей = Результат.ЭлектроннаяПочта;
ИдентификаторПроверкиТелефонаДляПаролей = Результат.ИдентификаторПроверкиТелефонаДляПаролей;
ИдентификаторПроверкиЭлектроннойПочтыДляПаролей = Результат.ИдентификаторПроверкиЭлектроннойПочтыДляПаролей;
ЗадатьНадписьНомерТелефонаПриПереходеВОблако(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьУчетнуюЗаписьОблачнойПодписи()
ОповещениеСледующее = Новый ОписаниеОповещения("ПослеСозданияУчетнойЗаписи", ЭтотОбъект);
КонтекстЭДОКлиент.ОткрытьВосстановлениеОблачнойПодписи(ОповещениеСледующее, Неопределено, Логин, , ПервичноеЗаявление);
КонецПроцедуры
&НаКлиенте
Процедура ПослеСозданияУчетнойЗаписи(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(РезультатВыбора) Тогда
УчетнаяЗаписьОблачнойПодписи = РезультатВыбора;
УчетнаяЗаписьОблачнойПодписиПредставление = ЛогинУчетнойЗаписи(УчетнаяЗаписьОблачнойПодписи);
Если ЗначениеЗаполнено(УчетнаяЗаписьОблачнойПодписи) Тогда
ПродолжитьВыборСертификата(Неопределено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЛогинУчетнойЗаписи(ТекущаяСсылка)
Результат = "";
Если ЗначениеЗаполнено(ТекущаяСсылка) Тогда
Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "Логин", Истина);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура УправлениеФормойКлиент() Экспорт
УправлениеФормой(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура УправлениеФормойСервер() Экспорт
УправлениеФормой(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьДействияПриПравильномКоде() Экспорт
ЭтоЗаглушка = Истина;
КонецПроцедуры
#КонецОбласти