&НаКлиенте
Перем КонтекстЭДО Экспорт;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИзмененыСвойстваМодуля = Ложь;
Элементы.УстановитьКомпоненту.Видимость = Ложь;
ПоддерживаемыеКриптопровайдеры = КриптографияЭДКОКлиентСервер.ПоддерживаемыеКриптопровайдеры();
Для каждого СвойстваКриптопровайдера Из ПоддерживаемыеКриптопровайдеры Цикл
ДобавитьСтрокуВТаблицуCSP(
СвойстваКриптопровайдера.Имя,
?(СвойстваКриптопровайдера.ТипКриптопровайдера = Перечисления.ТипыКриптоПровайдеров.CryptoPro, 1, 2),
СвойстваКриптопровайдера.Тип);
КонецЦикла;
ЕстьАрхив = РегистрыСведений.СостояниеАрхивированияФайловДОСКонтролирующимиОрганами.СостояниеАрхива().ВсегоВАрхиве > 0;
Элементы.ГруппаАрхив.Видимость = ЕстьАрхив И НЕ КриптографияЭДКО.РаботаВМоделиСервиса();
ВосстановитьНастройки();
УправлениеЭУВРежимеСервиса();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ПрограммноеЗакрытие = Не Модифицированность;
ТекстПредупреждения = НСтр("ru = 'Настройки были изменены. Закрыть без сохранения?'");
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПриОтказеОтЗакрытияФормы",
ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(
ЭтотОбъект,
Отказ,
ЗавершениеРаботы,
ТекстПредупреждения,
"ПрограммноеЗакрытие",
ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПолеМодульДокументооборотаПредставлениеОчистка(Элемент, СтандартнаяОбработка)
ИзмененыСвойстваМодуля = Истина;
ВерсияМодуля = Неопределено;
ДанныеМодуля = Неопределено;
Модифицированность = Истина;
УправлениеЭУ();
КонецПроцедуры
&НаКлиенте
Процедура ПолеИспользоватьВнешнийМодульПриИзменении(Элемент)
ИзмененыСвойстваМодуля = Истина;
УправлениеЭУ();
Если ИспользоватьВнешнийМодуль Тогда
ВыбратьВнешнийМодуль();
ИначеЕсли НЕ ИспользоватьВнешнийМодуль Тогда
ВерсияМодуля = Неопределено;
ДанныеМодуля = Неопределено;
Модифицированность = Истина;
УправлениеЭУ();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолеРазрешитьОбновлениеМодуляПриИзменении(Элемент)
УправлениеЭУ();
КонецПроцедуры
&НаКлиенте
Процедура НастройкиПрограммЭлектроннойПодписиИШифрованияНажатие(Элемент)
ЭлектроннаяПодписьКлиент.ОткрытьНастройкиЭлектроннойПодписиИШифрования("Программы");
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Новая версия модуля документооборота зарегистрирована в информационной базе" Тогда
ИзмененыСвойстваМодуля = Истина;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолеМодульДокументооборотаПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбратьВнешнийМодуль();
КонецПроцедуры
&НаКлиенте
Процедура ИсключенияИзОшибокРасшифровкиНажатие(Элемент)
ПараметрыОткрытияФормы = Неопределено;
Если ЗначениеЗаполнено(ИсключаемоеТранспортноеСообщение) Тогда
СвойстваТранспортногоСообщения =
ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ЗначенияРеквизитовОбъекта(
ИсключаемоеТранспортноеСообщение, "Получатель, Отправитель, ЦиклОбмена");
Если ТипЗнч(СвойстваТранспортногоСообщения.Получатель) = Тип("СправочникСсылка.Организации") Тогда
ОрганизацияТранспортногоСообщения = СвойстваТранспортногоСообщения.Получатель;
ИначеЕсли ТипЗнч(СвойстваТранспортногоСообщения.Отправитель) = Тип("СправочникСсылка.Организации") Тогда
ОрганизацияТранспортногоСообщения = СвойстваТранспортногоСообщения.Отправитель;
ИначеЕсли ЗначениеЗаполнено(СвойстваТранспортногоСообщения.ЦиклОбмена) Тогда
ОрганизацияТранспортногоСообщения =
ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ЗначениеРеквизитаОбъекта(
ИсключаемоеТранспортноеСообщение, "Организация");
КонецЕсли;
МассивТраспортныхСообщений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИсключаемоеТранспортноеСообщение);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Контекст", МассивТраспортныхСообщений);
ПараметрыОткрытияФормы.Вставить("ОписаниеОшибки", "Ошибка расшифровки файла документа при распаковке пакета");
ПараметрыОткрытияФормы.Вставить("Организация", ОрганизацияТранспортногоСообщения);
КонецЕсли;
ФормаРезультат = ПолучитьФорму(
КонтекстЭДО.ПутьКОбъекту + ".Форма.Нерасшифровываемые_УправлениеОшибкамиОбмена",
ПараметрыОткрытияФормы,
ЭтотОбъект);
ФормаРезультат.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура СообщенияДляРасшифровкиДругимиПользователямиНажатие(Элемент)
Если ИспользоватьРежимТестирования Тогда
ПараметрыПриложения["БРО.БольшеНеПоказыватьСообщенияТребующиеРасшифровки"] = Ложь;
КонтекстЭДО.ПолучитьИОбработатьВходящиеКлиент();
Возврат;
КонецЕсли;
ПараметрыПоказа = КонтекстЭДО.ПараметрыПоказаСообщенийТребующихРасшифровки();
ПараметрыПоказа.ПоказДляТекущегоПользователя = Ложь;
ПараметрыПоказа.ПоказДляДругихПользователей = Истина;
ПараметрыПоказа.ВсеСообщения = Истина;
ВходящиеСообщения = КонтекстЭДО.ПолучитьИОбработатьВходящие(УникальныйИдентификатор, ПараметрыПоказа);
Если ВходящиеСообщения <> Неопределено И ВходящиеСообщения.НовыеСообщения.Количество() > 0 Тогда
Оповестить("Заполнение списка полученных сообщений", ВходящиеСообщения.НовыеСообщения);
КонецЕсли;
Если ВходящиеСообщения <> Неопределено И ВходящиеСообщения.ТребующиеРасшифровки.Количество() > 0
И КонтекстЭДО.ВыполнитьРасшифровкуПриНеобходимости(ВходящиеСообщения.ТребующиеРасшифровки, ПараметрыПоказа) Тогда
Возврат;
КонецЕсли;
ПоказатьПредупреждение(, НСтр("ru = 'Нет нерасшифрованных сообщений для других пользователей.'"));
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьТранспортныеКонтейнерыВАрхивеНажатие(Элемент)
КонтекстЭДО.ПолучениеПеремещенныхФайлов(Новый Массив, Неопределено, "Архив", Неопределено);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура СохранитьИЗакрыть(Команда)
Если СохранитьНастройки() Тогда
Оповестить("ИзменениеНастроекДокументооборота");
Если ИзмененыСвойстваМодуля Тогда
ВопросПерезапуститьПрограммуПослеОбновленияМодуля();
Иначе
Закрыть();
КонецЕсли;
Иначе
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьПараметрыПроксиСервера(Команда)
ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера");
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКомпоненту(Команда)
ОбновитьГруппуВнешняяКомпонента(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСейчас(Команда)
СохранитьНастройки();
ОписаниеОповещения = Новый ОписаниеОповещения("ОбновитьСейчасЗавершение", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения, Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ЗакрытиеФормы
&НаКлиенте
Процедура ВопросПерезапуститьПрограммуПослеОбновленияМодуля() Экспорт
ТекстВопроса = "Изменения вступят в силу только после повторного открытия программы!
|Перезапустить программу сейчас?";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ВопросПерезапуститьПрограммуПослеОбновленияМодуляЗавершение",
ЭтотОбъект);
ПоказатьВопрос(
ОписаниеОповещения,
ТекстВопроса,
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ВопросПерезапуститьПрограммуПослеОбновленияМодуляЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ЗавершитьРаботуСистемы(Истина, Истина);
Иначе
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОтказеОтЗакрытияФормы(Результат, ВходящийКонтекст) Экспорт
Модифицированность = Ложь;
КонецПроцедуры
#КонецОбласти
#Область ПрочиеПроцедурыИФункции
&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДО = Результат.КонтекстЭДО;
УправлениеЭУ();
ОбновитьГруппуВнешняяКомпонента();
Если ИспользоватьРежимТестирования = Истина Тогда
Оповещение = Новый ОписаниеОповещения("ПослеПоискаУстановленныхПрограмм", ЭтотОбъект, Ложь);
ЭлектроннаяПодписьКлиент.НайтиУстановленныеПрограммы(Оповещение, , Неопределено);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьВерсиюВнешнегоМодуляИзФайла(Адрес, ВыбранноеИмяФайла)
Файл = Новый Файл(ВыбранноеИмяФайла);
Если Адрес <> Неопределено Тогда
ИмяФайлаОбработки = КаталогВременныхФайлов() + Файл.Имя;
ПолучитьИзВременногоХранилища(Адрес).Записать(ИмяФайлаОбработки);
Иначе
Возврат Неопределено
КонецЕсли;
Попытка
Результат = ВнешниеОбработки.Создать(ИмяФайлаОбработки).мВерсияМодуля;
Исключение
Результат = Неопределено;
КонецПопытки;
УдалитьФайлы(ИмяФайлаОбработки);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДобавитьСтрокуВТаблицуCSP(ИмяКриптопровайдера, КодCSP, ТипCSP)
НовСтр = ТаблицаCSP.Добавить();
НовСтр.Имя = ИмяКриптопровайдера;
НовСтр.Код = КодCSP;
НовСтр.Тип = ТипCSP;
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройки()
Если ПравоДоступа("Чтение", Метаданные.Константы.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль) Тогда
Если ОбщегоНазначения.РазделениеВключено() Тогда
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Константы.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль,
| Константы.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля
|ИЗ
| Константы КАК Константы";
Запрос = Новый Запрос(ТекстЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ИспользоватьВнешнийМодуль = Выборка.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль;
ВерсияМодуля = Выборка.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля;
КонецЕсли;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ"
+ ?(НЕ ОбщегоНазначения.РазделениеВключено(), "
| Константы.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль,
| Константы.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль,
| Константы.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля,",
"") + "
| Константы.ДокументооборотСКонтролирующимиОрганами_ИмяКриптопровайдера,
| Константы.ДокументооборотСКонтролирующимиОрганами_ТипКриптопровайдера,
| Константы.ДокументооборотСКонтролирующимиОрганами_РежимТестирования
|ИЗ
| Константы КАК Константы";
Запрос = Новый Запрос(ТекстЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда
ИспользоватьВнешнийМодуль = Выборка.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль;
ДанныеМодуля = Выборка.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль.Получить();
ВерсияМодуля = Выборка.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля;
КонецЕсли;
ИмяКриптопровайдера = Выборка.ДокументооборотСКонтролирующимиОрганами_ИмяКриптопровайдера;
ТипКриптопровайдера = Выборка.ДокументооборотСКонтролирующимиОрганами_ТипКриптопровайдера;
ИспользоватьРежимТестирования = Выборка.ДокументооборотСКонтролирующимиОрганами_РежимТестирования;
СтрCSP = ТаблицаCSP.НайтиСтроки(Новый Структура("Имя, Тип", ИмяКриптопровайдера, ТипКриптопровайдера));
Если СтрCSP.Количество() > 0 Тогда
Криптопровайдер = СтрCSP[0].Код;
КонецЕсли;
КонецЕсли;
КонецЕсли;
сохрРазрешитьОбновлениеМодуля = ХранилищеОбщихНастроек.Загрузить("ДокументооборотСКонтролирующимиОрганами_РазрешитьОнлайнОбновление");
Если сохрРазрешитьОбновлениеМодуля = Неопределено Тогда
сохрРазрешитьОбновлениеМодуля = ХранилищеОбщихНастроек.Загрузить("ДокументооборотСНалоговымиОрганами_РазрешитьОнлайнОбновление");
КонецЕсли;
РазрешитьОбновлениеМодуля = (сохрРазрешитьОбновлениеМодуля = Истина);
КонецПроцедуры
&НаСервере
Функция СохранитьНастройки()
Если ИспользоватьВнешнийМодуль И НЕ ОбщегоНазначения.РазделениеВключено() И НЕ ЗначениеЗаполнено(ДанныеМодуля) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Выберите внешний модуль.'"));
Возврат Ложь;
КонецЕсли;
ИзменениеВнешнегоМодуляРазрешено =
(ПравоДоступа("Изменение", Метаданные.Константы.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль)
И ПравоДоступа("Изменение", Метаданные.Константы.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль)
ИЛИ ПравоДоступа("Изменение", Метаданные.Справочники.УчетныеЗаписиДокументооборота))
И НЕ ОбщегоНазначения.РазделениеВключено();
Если ИзменениеВнешнегоМодуляРазрешено Тогда
УстановитьПривилегированныйРежим(Истина);
КонецЕсли;
ИменаКонстантНабора =
?(НЕ ОбщегоНазначения.РазделениеВключено(),
"ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль,
|ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль,
|ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля,
|",
"")
+ "ДокументооборотСКонтролирующимиОрганами_ИмяКриптопровайдера,
|ДокументооборотСКонтролирующимиОрганами_ТипКриптопровайдера,
|ДокументооборотСКонтролирующимиОрганами_РежимТестирования";
КонстантыНабор = Константы.СоздатьНабор(ИменаКонстантНабора);
Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль = ИспользоватьВнешнийМодуль;
Если ЗначениеЗаполнено(ДанныеМодуля) Тогда
Если ТипЗнч(ДанныеМодуля) = Тип("ДвоичныеДанные") Тогда
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль = Новый ХранилищеЗначения(ДанныеМодуля);
ИначеЕсли ЭтоАдресВременногоХранилища(ДанныеМодуля) Тогда
ДанныеМодуля = ПолучитьИзВременногоХранилища(ДанныеМодуля);
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль = Новый ХранилищеЗначения(ДанныеМодуля);
КонецЕсли;
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля = ВерсияМодуля;
Иначе
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль = Неопределено;
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля = Неопределено;
КонецЕсли;
КонецЕсли;
ТаблицаCSPЗначение = РеквизитФормыВЗначение("ТаблицаCSP");
СтрКриптопровайдер = ТаблицаCSPЗначение.Найти(Криптопровайдер, "Код");
Если ЗначениеЗаполнено(СтрКриптопровайдер) Тогда
СвойстваКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдера(СтрКриптопровайдер.Имя, СтрКриптопровайдер.Тип);
Если СвойстваКриптопровайдера <> Неопределено Тогда
СтрКриптопровайдер = СвойстваКриптопровайдера;
ПараметрыКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдераПоУмолчанию(СвойстваКриптопровайдера.ТипКриптопровайдера);
Если ЗначениеЗаполнено(ПараметрыКриптопровайдера.Имя) ИЛИ ЗначениеЗаполнено(ПараметрыКриптопровайдера.Тип) Тогда
СтрКриптопровайдер = СвойстваКриптопровайдера;
КонецЕсли;
КонецЕсли;
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ИмяКриптопровайдера = СтрКриптопровайдер.Имя;
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ТипКриптопровайдера = СтрКриптопровайдер.Тип;
Иначе
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ИмяКриптопровайдера = Неопределено;
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_ТипКриптопровайдера = Неопределено;
КонецЕсли;
КонстантыНабор.ДокументооборотСКонтролирующимиОрганами_РежимТестирования = ИспользоватьРежимТестирования;
КонстантыНабор.Записать();
Если ИзменениеВнешнегоМодуляРазрешено Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ХранилищеОбщихНастроек.Сохранить("ДокументооборотСКонтролирующимиОрганами_РазрешитьОнлайнОбновление", , РазрешитьОбновлениеМодуля);
ОбновитьПовторноИспользуемыеЗначения();
Модифицированность = Ложь;
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ВыбратьВнешнийМодуль()
ФайлыБылиВыбраны = Ложь;
ДанныеМодуля = Неопределено;
МодульДокументооборотаПредставление = "";
ВыбранноеИмяФайла = "";
ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьВнешнийМодульЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, ДанныеМодуля, ВыбранноеИмяФайла, Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВнешнийМодульЗавершение(ФайлыБылиВыбраны, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
ВыбранКорректныйФайл = КонтекстЭДО.ВыбранКорректныйФайл(ВыбранноеИмяФайла, ".epf");
Если НЕ ВыбранКорректныйФайл Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Загружать можно только файлы с расширением *.epf'"));
Иначе
ДанныеМодуля = Адрес;
ВыбратьВнешнийМодульИзменитьПеременные(ФайлыБылиВыбраны, ВыбранноеИмяФайла);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВнешнийМодульИзменитьПеременные(ФайлыБылиВыбраны, ВыбранноеИмяФайла)
Если ФайлыБылиВыбраны И ЗначениеЗаполнено(ДанныеМодуля) Тогда
стрВерсияМодуля = ПолучитьВерсиюВнешнегоМодуляИзФайла(ДанныеМодуля, ВыбранноеИмяФайла);
Если стрВерсияМодуля = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выбранный файл не является внешним модулем документооборота!'"));
Иначе
ВерсияМодуля = стрВерсияМодуля;
ИзмененыСвойстваМодуля = Истина;
Модифицированность = Истина;
УправлениеЭУ();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УправлениеЭУВРежимеСервиса()
Если ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ГруппаВнешнийМодуль.Видимость = Ложь;
Элементы.ГруппаПрокси.Видимость = Ложь;
Элементы.ГруппаОбновлениеМодуля.Видимость = Ложь;
КонецЕсли;
Элементы.ГруппаВнешнийМодульВРежимеСервиса.Видимость = ОбщегоНазначения.РазделениеВключено() И ИспользоватьВнешнийМодуль;
КонецПроцедуры
&НаКлиенте
Процедура УправлениеЭУ(ПослеЗаменыМодуля = Ложь)
Если НЕ ПослеЗаменыМодуля Тогда
Элементы.ПолеМодульДокументооборотаПредставление.Доступность = ИспользоватьВнешнийМодуль;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДанныеМодуля) Тогда
МодульДокументооборотаПредставление = "";
Иначе
МодульДокументооборотаПредставление = "";
Если ЗначениеЗаполнено(ВерсияМодуля) Тогда
МодульДокументооборотаПредставление = "Модуль версии " + ВерсияМодуля;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(МодульДокументооборотаПредставление) И ЗначениеЗаполнено(ДанныеМодуля) Тогда
МодульДокументооборотаПредставление = "Модуль загружен";
КонецЕсли;
КонецЕсли;
Если НЕ ПослеЗаменыМодуля Тогда
Если ЗначениеЗаполнено(ВерсияМодуля) Тогда
Элементы.ДекорацияЗагруженВнешнийМодульВРежимеСервиса.Заголовок = СтрШаблон(
НСтр("ru = 'Загружен внешний модуль версии %1'"),
ВерсияМодуля);
Иначе
Элементы.ДекорацияЗагруженВнешнийМодульВРежимеСервиса.Заголовок = НСтр("ru = 'Загружен внешний модуль'");
КонецЕсли;
Если ОбщегоНазначенияЭДКОКлиент.ЭтоКриптопровайдерLinux() Тогда
Элементы.ГруппаКриптография.Видимость = Истина;
Элементы.ГруппаВнешняяКомпонента.Отображение = ОтображениеОбычнойГруппы.Нет;
Иначе
Элементы.ГруппаКриптография.Видимость = Ложь;
Элементы.ГруппаВнешняяКомпонента.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьГруппуВнешняяКомпонента(ПредлагатьУстановкуКомпоненты = Ложь)
Оповещение = Новый ОписаниеОповещения(
"ОбновитьГруппуВнешняяКомпонентаЗавершение", ЭтотОбъект);
КриптографияЭДКОКлиент.СоздатьМенеджерКриптографии(Оповещение, Ложь,, ПредлагатьУстановкуКомпоненты);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьГруппуВнешняяКомпонентаЗавершение(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
Элементы.ТекущийСтатус.Заголовок = НСтр("ru = 'Внешняя компонента: установлена.'");
Элементы.УстановитьКомпоненту.Видимость = Ложь;
Иначе
Элементы.ТекущийСтатус.Заголовок = НСтр("ru = 'Внешняя компонента: не установлена.'");
Элементы.УстановитьКомпоненту.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСейчасЗавершение(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДО = Результат.КонтекстЭДО;
ПараметрыВнешнегоМодуля =
ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ПараметрыВнешнегоМодуляДокументооборота();
ВнешнийМодульЗаменен = (ПараметрыВнешнегоМодуля.ИспользоватьВнешнийМодуль = Истина И ИспользоватьВнешнийМодуль
И Строка(ПараметрыВнешнегоМодуля.ВерсияВнешнегоМодуля) <> ВерсияМодуля);
Если ВнешнийМодульЗаменен Тогда
ИспользоватьВнешнийМодуль = (ПараметрыВнешнегоМодуля.ИспользоватьВнешнийМодуль = Истина);
ДанныеМодуля = ПараметрыВнешнегоМодуля.ВнешнийМодуль;
ВерсияМодуля = Строка(ПараметрыВнешнегоМодуля.ВерсияВнешнегоМодуля);
УправлениеЭУ(Истина);
Если ВнешнийМодульЗаменен Тогда
ВопросПерезапуститьПрограммуПослеОбновленияМодуля();
КонецЕсли;
Возврат;
КонецЕсли;
ВосстановитьНастройки();
УправлениеЭУ();
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьРежимТестированияПриИзменении(Элемент)
Если ИспользоватьРежимТестирования = Истина Тогда
Оповещение = Новый ОписаниеОповещения("ПослеПоискаУстановленныхПрограмм", ЭтотОбъект, Ложь);
ЭлектроннаяПодписьКлиент.НайтиУстановленныеПрограммы(Оповещение, , Неопределено);
Иначе
Элементы.ПереключитьТестовыйКонтур.Доступность = Ложь;
Элементы.ПереключитьТестовыйКонтур.Видимость = Ложь;
Элементы.ПереключитьТестовыйКонтур.Заголовок = "Тестовый режим отключен";
Элементы.ДекорацияКодыТестовогоКонтура1С.Видимость = Ложь;
КонецЕсли;
Текст = НСтр("ru = 'Чтобы настройка вступила в силу перезайдите в программу'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Текст);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПоискаУстановленныхПрограмм(РезультатПоиска, Переключить) Экспорт
Для Каждого ОписаниеПрограммы Из РезультатПоиска Цикл
Если ОписаниеПрограммы.ТипПрограммы <> 1 Тогда
УстановленаНаКлиенте = ОписаниеПрограммы.Установлена И НЕ ЗначениеЗаполнено(ОписаниеПрограммы.РезультатПроверкиНаКлиенте);
Если УстановленаНаКлиенте Тогда
КонтекстВозврата = Новый Структура("Переключить, Подключен", Переключить, Элементы.ПереключитьТестовыйКонтур.Заголовок = "Отключить тестовый контур 1С");
Если КонтекстВозврата.Переключить = Истина И КонтекстВозврата.Подключен = Ложь Тогда
Оповещение = Новый ОписаниеОповещения("СоздатьМенеджерКриптографииЗавершение", ЭтотОбъект, КонтекстВозврата);
Контекст = Новый Структура;
Контекст.Вставить("ОповещениеВозвратаМенеджерКриптографии", Оповещение);
Контекст.Вставить("ОписаниеПрограммы", ОписаниеПрограммы);
Контекст.Вставить("БылаПопыткаУстановкиРасширения", Ложь);
НачатьПодключениеРасширенияРаботыСКриптографией(
Новый ОписаниеОповещения(
"СоздатьМенеджерКриптографииПослеПодключенияРасширенияРаботыСКриптографией",
ЭтотОбъект,
Контекст));
Иначе
СтатусПодключения = СтатусПодключенияКТестовомуКонтуру1С(КонтекстВозврата.Переключить);
Если СтатусПодключения <> "Подключен" Тогда
ОчиститьФайлыСведенийСпецоператоры();
КонецЕсли;
ОтразитьПодлючениеНаФорме(СтатусПодключения);
КонецЕсли;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОчиститьФайлыСведенийСпецоператоры()
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей = РегистрыСведений.ФайлыСведенийСпецоператоры.СоздатьНаборЗаписей();
НаборЗаписей.Записать(Истина);
КонецПроцедуры
&НаКлиенте
Функция РезультатСоздатьМенеджерКриптографии()
Результат = Новый Структура;
Результат.Вставить("МенеджерКриптографии", Неопределено);
Результат.Вставить("Выполнено", Ложь);
Результат.Вставить("ИнформацияОбОшибке", "");
Результат.Вставить("ИмяПрограммы", "");
Результат.Вставить("ТипПрограммы", 1);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура СоздатьМенеджерКриптографииЗавершение(Результат, КонтекстВозврата) Экспорт
Если Результат.Выполнено = Истина Тогда
Оповещение = Новый ОписаниеОповещения("СоздатьМенеджерКриптографииЗавершениеПослеПолученияХранилища", ЭтотОбъект, КонтекстВозврата);
Результат.МенеджерКриптографии.НачатьПолучениеХранилищаСертификатов(Оповещение, ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты,
РасположениеХранилищаСертификатовКриптографии.ДанныеПользователяОС);
Иначе
ПоказатьИнформациюОбОшибке(Результат.ИнформацияОбОшибке);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьМенеджерКриптографииЗавершениеПослеПолученияХранилища(Хранилище, КонтекстВозврата) Экспорт
ДанныеДляТестовогоКонтура1С = ДанныеДляТестовогоКонтура1С();
КонтекстВозврата.Вставить("ДанныеДляТестовогоКонтура1С", ДанныеДляТестовогоКонтура1С);
КонтекстВозврата.Вставить("Количество", ДанныеДляТестовогоКонтура1С.Количество());
КонтекстВозврата.Вставить("ТекущийНомер", 0);
КонтекстВозврата.Вставить("Хранилище", Хранилище);
ПолучениеСертификатовДляТестовогоКонтура1С(Неопределено, КонтекстВозврата)
КонецПроцедуры
&НаКлиенте
Процедура ПолучениеСертификатовДляТестовогоКонтура1С(Результат, КонтекстВозврата) Экспорт
Если Результат <> Неопределено Тогда
СтруктураПредыдущейУчетнойЗаписи = КонтекстВозврата.ДанныеДляТестовогоКонтура1С[КонтекстВозврата.ТекущийНомер - 1];
СтруктураПредыдущейУчетнойЗаписи.Вставить("Сертификат", Результат);
КонецЕсли;
Если КонтекстВозврата.ТекущийНомер < КонтекстВозврата.Количество Тогда
СтруктураУчетнойЗаписи = КонтекстВозврата.ДанныеДляТестовогоКонтура1С[КонтекстВозврата.ТекущийНомер];
ОтпечатокДвоичныеДанные = ПолучитьДвоичныеДанныеИзHexСтроки(СтруктураУчетнойЗаписи.Отпечаток);
КонтекстВозврата.ТекущийНомер = КонтекстВозврата.ТекущийНомер + 1;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПолучениеСертификатовДляТестовогоКонтура1С",
ЭтотОбъект,
КонтекстВозврата);
КонтекстВозврата.Хранилище.НачатьПоискПоОтпечатку(ОписаниеОповещения, ОтпечатокДвоичныеДанные);
Иначе
КонтекстВозврата.ТекущийНомер = 0;
ВыгрузкаСертификатовДляТестовогоКонтура1С(Неопределено, КонтекстВозврата)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузкаСертификатовДляТестовогоКонтура1С(Результат, КонтекстВозврата) Экспорт
Если Результат <> Неопределено Тогда
СертификатBase64 = Base64Строка(Результат);
СтруктураПредыдущейУчетнойЗаписи = КонтекстВозврата.ДанныеДляТестовогоКонтура1С[КонтекстВозврата.ТекущийНомер - 1];
СтруктураПредыдущейУчетнойЗаписи.Вставить("СертификатРуководителяBase64", СертификатBase64);
КонецЕсли;
Если КонтекстВозврата.ТекущийНомер < КонтекстВозврата.Количество Тогда
СтруктураУчетнойЗаписи = КонтекстВозврата.ДанныеДляТестовогоКонтура1С[КонтекстВозврата.ТекущийНомер];
КонтекстВозврата.ТекущийНомер = КонтекстВозврата.ТекущийНомер + 1;
Если СтруктураУчетнойЗаписи.Свойство("Сертификат") Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"ВыгрузкаСертификатовДляТестовогоКонтура1С",
ЭтотОбъект,
КонтекстВозврата);
СтруктураУчетнойЗаписи.Сертификат.НачатьВыгрузку(ОписаниеОповещения);
Иначе
ВыгрузкаСертификатовДляТестовогоКонтура1С(Неопределено, КонтекстВозврата)
КонецЕсли;
Иначе
Для Каждого СтруктураУчетнойЗаписи Из КонтекстВозврата.ДанныеДляТестовогоКонтура1С Цикл
Если СтруктураУчетнойЗаписи.Свойство("Сертификат") Тогда
СтруктураУчетнойЗаписи.Удалить("Сертификат");
КонецЕсли;
КонецЦикла;
СтатусПодключения = СтатусПодключенияКТестовомуКонтуру1С(КонтекстВозврата.Переключить,
КонтекстВозврата.ДанныеДляТестовогоКонтура1С);
Если СтатусПодключения <> "Подключен" Тогда
ОчиститьФайлыСведенийСпецоператоры();
КонецЕсли;
ОтразитьПодлючениеНаФорме(СтатусПодключения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьМенеджерКриптографииПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт
ОписаниеПрограммы = Контекст.ОписаниеПрограммы;
Если НЕ Подключено Тогда
Если Контекст.БылаПопыткаУстановкиРасширения Тогда
РезультатВыполнения = РезультатСоздатьМенеджерКриптографии();
ВыполнитьОбработкуОповещения(Контекст.ОповещениеВозвратаМенеджерКриптографии, РезультатВыполнения);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения(
"СоздатьМенеджерКриптографииПослеУстановкиРасширенияРаботыСКриптографией",
ЭтотОбъект,
Контекст
);
НачатьУстановкуРасширенияРаботыСКриптографией(ОписаниеОповещения);
КонецЕсли;
Возврат;
КонецЕсли;
Контекст.Вставить("МенеджерКриптографии", Неопределено);
Контекст.МенеджерКриптографии = Новый МенеджерКриптографии;
ЭтоLinux = Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент();
Контекст.МенеджерКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения(
"СоздатьМенеджерКриптографииЦиклПослеИнициализацииЗавершение",
ЭтотОбъект,
Контекст,
"СоздатьМенеджерКриптографииЦиклПриОшибкеИнициализации",
ЭтотОбъект),
ОписаниеПрограммы.ИмяПрограммы,
?(ЭтоLinux, ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить(ОписаниеПрограммы.Ссылка), ""),
ОписаниеПрограммы.ТипПрограммы);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьМенеджерКриптографииПослеУстановкиРасширенияРаботыСКриптографией(Контекст) Экспорт
Контекст.БылаПопыткаУстановкиРасширения = Истина;
НачатьПодключениеРасширенияРаботыСКриптографией(
Новый ОписаниеОповещения(
"СоздатьМенеджерКриптографииПослеПодключенияРасширенияРаботыСКриптографией",
ЭтотОбъект,
Контекст));
КонецПроцедуры
&НаКлиенте
Процедура СоздатьМенеджерКриптографииЦиклПослеИнициализацииЗавершение(МенеджерКриптографии, Контекст) Экспорт
РезультатВыполнения = РезультатСоздатьМенеджерКриптографии();
РезультатВыполнения.МенеджерКриптографии = МенеджерКриптографии;
РезультатВыполнения.Выполнено = Истина;
ВыполнитьОбработкуОповещения(Контекст.ОповещениеВозвратаМенеджерКриптографии, РезультатВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьМенеджерКриптографииЦиклПриОшибкеИнициализации(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
РезультатВыполнения = РезультатСоздатьМенеджерКриптографии();
РезультатВыполнения.ИнформацияОбОшибке = ИнформацияОбОшибке;
ВыполнитьОбработкуОповещения(Контекст.ОповещениеВозвратаМенеджерКриптографии, РезультатВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура ОтразитьПодлючениеНаФорме(СтатусПодключения) Экспорт
Если СтатусПодключения = "Недоступен" Тогда
Элементы.ПереключитьТестовыйКонтур.Доступность = Ложь;
Элементы.ПереключитьТестовыйКонтур.Видимость = Истина;
Элементы.ПереключитьТестовыйКонтур.Заголовок = "Тестовый контур 1С не доступен";
Элементы.ДекорацияКодыТестовогоКонтура1С.Видимость = Ложь;
ИначеЕсли СтатусПодключения = "Отключен" Тогда
Элементы.ПереключитьТестовыйКонтур.Доступность = Истина;
Элементы.ПереключитьТестовыйКонтур.Видимость = Истина;
Элементы.ПереключитьТестовыйКонтур.Заголовок = "Подключить тестовый контур 1С";
Элементы.ДекорацияКодыТестовогоКонтура1С.Видимость = Ложь;
ИначеЕсли СтатусПодключения = "Подключен" Тогда
Элементы.ПереключитьТестовыйКонтур.Доступность = Истина;
Элементы.ПереключитьТестовыйКонтур.Видимость = Истина;
Элементы.ПереключитьТестовыйКонтур.Заголовок = "Отключить тестовый контур 1С";
Элементы.ДекорацияКодыТестовогоКонтура1С.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДанныеДляТестовогоКонтура1С()
УстановитьПривилегированныйРежим(Истина);
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить("ИНН");
МассивРеквизитов.Добавить("КПП");
МассивРеквизитов.Добавить("ОГРН");
МассивРеквизитов.Добавить("КодПоОКПО");
МассивРеквизитов.Добавить("РегистрационныйНомерПФР");
МассивРеквизитов.Добавить("РегистрационныйНомерФСС");
ТекстЗапросаРеквизитов = "Организации.Наименование КАК Наименование";
Для Каждого ЭлРеквизит Из МассивРеквизитов Цикл
Если Метаданные.Справочники.Организации.Реквизиты.Найти(ЭлРеквизит) <> Неопределено Тогда
ТекстЗапросаРеквизитов = ТекстЗапросаРеквизитов + ",
| Организации." + ЭлРеквизит + " КАК " + ЭлРеквизит;
КонецЕсли;
КонецЦикла;
Текст = "ВЫБРАТЬ
| ПОДСТРОКА(УчетныеЗаписиДокументооборота.ИдентификаторАбонента, 4, 36) КАК ИдентификаторАбонента,
| УчетныеЗаписиДокументооборота.ИдентификаторСпецоператора КАК ИдентификаторСпецоператора,
| УчетныеЗаписиДокументооборота.Ссылка КАК УчетнаяЗапись,
| ЕСТЬNULL(ФИОФизическихЛицСрезПоследних.Фамилия, """") КАК Фамилия,
| ЕСТЬNULL(ФИОФизическихЛицСрезПоследних.Имя, """") КАК Имя,
| ЕСТЬNULL(ФИОФизическихЛицСрезПоследних.Отчество, """") КАК Отчество,
| Организации.Ссылка КАК ОрганизацияСсылка,
| &ТекстЗапросаРеквизитов КАК ТекстЗапросаРеквизитов
|ИЗ
| Справочник.Организации КАК Организации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиДокументооборота КАК УчетныеЗаписиДокументооборота
| ПО Организации.УчетнаяЗаписьОбмена = УчетныеЗаписиДокументооборота.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизическихЛиц.СрезПоследних КАК ФИОФизическихЛицСрезПоследних
| ПО &ТекстСоединенияСФИО
|ГДЕ
| Организации.ВидОбменаСКонтролирующимиОрганами = ЗНАЧЕНИЕ(Перечисление.ВидыОбменаСКонтролирующимиОрганами.ОбменВУниверсальномФормате)
| И Организации.ПометкаУдаления = ЛОЖЬ
| И УчетныеЗаписиДокументооборота.ПометкаУдаления = ЛОЖЬ";
Текст = СтрЗаменить(Текст, "&ТекстЗапросаРеквизитов КАК ТекстЗапросаРеквизитов", ТекстЗапросаРеквизитов);
Если Метаданные.Справочники.Организации.Реквизиты.Найти("ИндивидуальныйПредприниматель") <> Неопределено Тогда
ТекстСоединенияСФИО = "(ФИОФизическихЛицСрезПоследних.ФизическоеЛицо = Организации.ИндивидуальныйПредприниматель)";
Иначе
ТекстСоединенияСФИО = "ЛОЖЬ";
КонецЕсли;
Текст = СтрЗаменить(Текст, "&ТекстСоединенияСФИО", ТекстСоединенияСФИО);
ЗапросУчетныхЗаписей = Новый Запрос(Текст);
РезультатЗапроса = ЗапросУчетныхЗаписей.Выполнить();
ВыборкаУчетныхЗаписей = РезультатЗапроса.Выбрать();
МассивДанных = Новый Массив;
Пока ВыборкаУчетныхЗаписей.Следующий() Цикл
Сертификат = Мультирежим.СертификатПользователя(ВыборкаУчетныхЗаписей.УчетнаяЗапись, "Отпечаток");
Если НЕ Сертификат.Найден Тогда
Продолжить;
КонецЕсли;
СтруктураУчетнойЗаписи = Новый Структура;
СтруктураУчетнойЗаписи.Вставить("Отпечаток", Сертификат.Отпечаток);
Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
Если Колонка.Имя <> "УчетнаяЗапись"
И Колонка.Имя <> "ОрганизацияСсылка" Тогда
СтруктураУчетнойЗаписи.Вставить(Колонка.Имя, ВыборкаУчетныхЗаписей[Колонка.Имя]);
КонецЕсли;
КонецЦикла;
СтруктураУчетнойЗаписи.Вставить("ЭтоИП", РегламентированнаяОтчетностьПереопределяемый.ЭтоЮридическоеЛицо(ВыборкаУчетныхЗаписей.ОрганизацияСсылка) = Ложь);
МассивДанных.Добавить(СтруктураУчетнойЗаписи);
КонецЦикла;
Возврат МассивДанных;
КонецФункции
&НаСервереБезКонтекста
Функция СтатусПодключенияКТестовомуКонтуру1С(Переключить = Ложь, ДанныеДляТестовогоКонтура1С = Неопределено)
Возврат ДокументооборотСКО.СтатусПодключенияКТестовомуКонтуру1С(Переключить, ДанныеДляТестовогоКонтура1С);
КонецФункции
&НаКлиенте
Процедура ПереключитьТестовыйКонтур(Команда)
Если ИспользоватьРежимТестирования = Истина Тогда
Оповещение = Новый ОписаниеОповещения("ПослеПоискаУстановленныхПрограмм", ЭтотОбъект, Истина);
ЭлектроннаяПодписьКлиент.НайтиУстановленныеПрограммы(Оповещение, , Неопределено);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти