#Область ГлобальныеПеременные
&НаКлиенте
Перем НастройкиДиагностики, РезультатыДиагностики, ОсновнаяУчетнаяЗапись, КонтекстЭДОКлиент, РезультатыПодключенияКК;
&НаКлиенте
Перем КонтекстЭДО Экспорт;
&НаКлиенте
Перем АвтонастройкаПриСтарте, ОбщиеКлиентскиеМетоды;
&НаКлиенте
Перем АвтонастройкаПриСтартеПричина;
#КонецОбласти
#Область ИзменениеФормы
&НаСервере
Процедура ОчиститьНадписи()
ДобавитьНадпись("", 0,, Истина);
ДобавитьНадпись("", 1,, Истина);
ДобавитьНадпись("", 2,, Истина);
КонецПроцедуры
&НаСервере
Процедура ОчиститьФорму()
Элементы.ГруппаСобытия.Видимость = Ложь;
Элементы.ГруппаГоризонтальная.Видимость = Ложь;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Ложь;
ИдентификаторОтчета = "";
Элементы.ВыполнитьПроверку.Доступность = Ложь;
Элементы.ТелефонСлужбыПоддержки.Видимость = Ложь;
ОчиститьНадписи();
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФормуСОбновлением()
Элементы.ГруппаСобытия.Видимость = Ложь;
Элементы.ГруппаГоризонтальная.Видимость = Ложь;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Ложь;
ИдентификаторОтчета = "";
Элементы.ВыполнитьПроверку.Доступность = Ложь;
Элементы.ТелефонСлужбыПоддержки.Видимость = Ложь;
ОчиститьНадписи();
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПрогресс(Знач ПрогрессЗначение = 0, Знач ТекстПрогресса = "Выполняется проверка (%1%)", Знач Показать = Истина)
ТекстПрогресса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПрогресса, ПрогрессЗначение);
Элементы.ПрогрессТекст.Заголовок = ТекстПрогресса;
Если Показать <> Элементы.ГруппаПрогресс.Видимость Тогда
Элементы.ГруппаПрогресс.Видимость = Показать;
КонецЕсли;
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
&НаСервере
Функция ПолучитьФорматированнуюСтрокуСоСсылками(Какую,
Знач Ссылка1 = Неопределено,
Знач Ссылка2 = Неопределено,
Знач Ссылка3 = Неопределено,
Знач ИмяЭлемента = "",
ИменаСсылок = Неопределено)
ВсеСсылки = Новый Массив;
Если Ссылка1 <> Неопределено Тогда
Ссылка1.Вставить("Маска", "%1");
Ссылка1.Вставить("СсылкаОбъекта", ИмяЭлемента);
ВсеСсылки.Добавить(Ссылка1);
КонецЕсли;
Если Ссылка2 <> Неопределено Тогда
Ссылка2.Вставить("Маска", "%2");
Ссылка1.Вставить("СсылкаОбъекта", ИмяЭлемента);
ВсеСсылки.Добавить(Ссылка2);
КонецЕсли;
Если Ссылка3 <> Неопределено Тогда
Ссылка3.Вставить("Маска", "%3");
Ссылка1.Вставить("СсылкаОбъекта", ИмяЭлемента);
ВсеСсылки.Добавить(Ссылка3);
КонецЕсли;
Счетчик = -1;
Для Каждого Ссылка из ВсеСсылки Цикл
Счетчик = Счетчик + 1;
Если Ссылка.Свойство("Текст") = Неопределено Тогда
Ссылка.Вставить("Текст", "Ссылка");
КонецЕсли;
Если Ссылка.Текст = "" Тогда
Ссылка.Текст = "Ссылка";
КонецЕсли;
Если Ссылка.Свойство("Ссылка") = Неопределено ИЛИ Ссылка.Ссылка = Неопределено Тогда
Ссылка.Вставить("Ссылка", ИмяЭлемента+Строка(Счетчик));
Иначе
Если ТипЗнч(Ссылка.Ссылка) <> Тип("Строка") И ТипЗнч(Ссылка.Ссылка) <> Тип("Число") Тогда
Ссылка.Ссылка = ПолучитьНавигационнуюСсылку(Ссылка.Ссылка);
КонецЕсли;
КонецЕсли;
Если Ссылка.Свойство("Действие") = Неопределено ИЛИ Ссылка.Действие = Неопределено Тогда
Если Лев(Ссылка.Ссылка, 6)="e1cib/" Тогда
Ссылка.Вставить("Действие", Неопределено);
Иначе
Ссылка.Вставить("Действие", "ДекорацияТекстОбщийНажатие");
КонецЕсли;
КонецЕсли;
КонецЦикла;
ФорматированныйЗаголовок = Новый Массив;
Для Каждого Ссылка из ВсеСсылки Цикл
Если ФорматированныйЗаголовок.Количество() = 0 Тогда
БылоНайдено = Ложь;
Пока Найти(Какую, Ссылка.Маска) > 0 Цикл
БылоНайдено = Истина;
Слева = Лев(Какую, Найти(Какую, Ссылка.Маска)-1);
ФорматированныйЗаголовок.Добавить(Слева);
Если Ссылка.Действие <> Неопределено Тогда
ПолнаяСсылка = Ссылка.Действие + "." + Ссылка.Ссылка;
Иначе
ПолнаяСсылка = Ссылка.Ссылка;
КонецЕсли;
ФорматированныйЗаголовок.Добавить(Новый ФорматированнаяСтрока(Ссылка.Текст,,,, ПолнаяСсылка));
Какую = Сред(Какую, СтрДлина(Слева) + СтрДлина(Ссылка.Маска) + 1);
КонецЦикла;
Если БылоНайдено Тогда
ФорматированныйЗаголовок.Добавить(Какую);
КонецЕсли;
Иначе
Индекс = -1;
Для Каждого Подстрока из ФорматированныйЗаголовок Цикл
Индекс = Индекс + 1;
Какую = Подстрока;
БылоНайдено = Ложь;
Если Найти(Какую, Ссылка.Маска) > 0 Тогда
ФорматированныйЗаголовок.Удалить(Индекс);
Индекс = Индекс - 1;
КонецЕсли;
Пока Найти(Какую, Ссылка.Маска) > 0 Цикл
БылоНайдено = Истина;
Слева = Лев(Какую, Найти(Какую, Ссылка.Маска) - 1);
Индекс = Индекс + 1;
ФорматированныйЗаголовок.Вставить(Индекс, Слева);
Если Ссылка.Действие <> Неопределено Тогда
ПолнаяСсылка = Ссылка.Действие + "." + Ссылка.Ссылка;
Иначе
ПолнаяСсылка = Ссылка.Ссылка;
КонецЕсли;
Индекс = Индекс + 1;
ФорматированныйЗаголовок.Вставить(Индекс, Новый ФорматированнаяСтрока(Ссылка.Текст,,,, ПолнаяСсылка));
Какую = Сред(Какую, СтрДлина(Слева) + СтрДлина(Ссылка.Маска)+ 1);
КонецЦикла;
Если БылоНайдено Тогда
Индекс = Индекс + 1;
ФорматированныйЗаголовок.Вставить(Индекс, Какую);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ВсеСсылки.Количество() = 0 или ФорматированныйЗаголовок.Количество() = 0 Тогда
ФорматированныйЗаголовок.Добавить(Какую);
КонецЕсли;
Возврат Новый ФорматированнаяСтрока(ФорматированныйЗаголовок);
КонецФункции
&НаСервере
Функция ПрименитьСтиль(Объект, ИмяМакета="ДиагностикаОтчетности_Стили")
Обработка = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Если Обработка.Метаданные().Макеты.Найти(ИмяМакета) = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
МакетСтиля = Обработка.ПолучитьМакет(ИмяМакета);
МассивВсехТипов = Новый Массив;
МассивВсехТипов.Добавить("ГруппаФормы");
МассивВсехТипов.Добавить("ДекорацияФормы");
МассивВсехТипов.Добавить("КнопкаФормы");
МассивВсехТипов.Добавить("ТаблицаФормы");
МассивВсехТипов.Добавить("ПолеФормы");
ВсеТипы = Новый Соответствие;
Для каждого ЭлементМассиваТипов Из МассивВсехТипов Цикл
ВсеТипы.Вставить(Тип(ЭлементМассиваТипов), ЭлементМассиваТипов);
КонецЦикла;
ОбъектТип = ВсеТипы.Получить(ТипЗнч(Объект));
ИскатьПоТипу = ОбъектТип <> Неопределено;
ИскатьПоИмени = Истина;
ИскатьПоПрефиксу = Ложь;
Попытка
ОбъектИмя = Объект["Имя"];
ОбъектПрефикс = ОбъектИмя;
Пока Найти("0123456789", Прав(ОбъектПрефикс, 1)) > 0 Цикл
ОбъектПрефикс = Лев(ОбъектПрефикс, СтрДлина(ОбъектПрефикс)-1);
КонецЦикла;
ОбъектИмя = "#" + ОбъектИмя;
ОбъектПрефикс = "." + ОбъектПрефикс;
Исключение
ОбъектИмя = "";
ОбъектПрефикс = "";
ИскатьПоИмени = Ложь;
КонецПопытки;
ИскатьПоПрефиксу = ИскатьПоИмени;
Если НЕ ИскатьПоТипу И НЕ ИскатьПоИмени И НЕ ИскатьПоПрефиксу Тогда
Возврат Ложь;
КонецЕсли;
КолонкаПоиска = МакетСтиля.Область("C1");
Для Ш = 1 по 3 Цикл
Если Ш = 1 И НЕ ИскатьПоТипу Тогда
Продолжить;
ИначеЕсли Ш = 2 И НЕ ИскатьПоПрефиксу Тогда
Продолжить;
ИначеЕсли Ш = 3 И НЕ ИскатьПоИмени Тогда
Продолжить;
КонецЕсли;
Если Ш = 1 Тогда
ЗначениеПоиска = ОбъектТип;
ИначеЕсли Ш = 2 Тогда
ЗначениеПоиска = ОбъектПрефикс;
ИначеЕсли Ш = 3 Тогда
ЗначениеПоиска = ОбъектИмя;
КонецЕсли;
Область = МакетСтиля.НайтиТекст(ЗначениеПоиска,, КолонкаПоиска);
Если Область <> Неопределено Тогда
НомерСтроки = Область.Низ + 1;
Для Нс = НомерСтроки по МакетСтиля.ВысотаТаблицы Цикл
Признак = СокрЛП(МакетСтиля.Область(НомерСтроки, 1, НомерСтроки, 1).Текст);
Если Признак <> "" Тогда
Прервать;
КонецЕсли;
Свойство = СокрЛП(МакетСтиля.Область(НомерСтроки, 2, НомерСтроки, 2).Текст);
Если Свойство="" Или Найти("*~", Лев(Свойство, 1)) > 0 Тогда
Продолжить;
КонецЕсли;
Значение = СокрЛП(МакетСтиля.Область(НомерСтроки, 3, НомерСтроки, 3).Текст);
Если Значение="" Тогда
Продолжить;
КонецЕсли;
Попытка
Объект[Свойство] = ОбщегоНазначения.ВычислитьВБезопасномРежиме(Значение);
Исключение
КонецПопытки;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаСервере
Функция ДобавитьОтступ(Знач Куда, Идентификатор = Неопределено, Префикс, Размер = 3, ВключитьПодсветкуВерстки = Ложь)
Если Куда = 0 Тогда
Куда = ЭтаФорма.Элементы.ГруппаОшибки;
ИначеЕсли Куда = 1 Тогда
Куда = ЭтаФорма.Элементы.ГруппаПредупреждения;
КонецЕсли;
Если Идентификатор = Неопределено Тогда
Идентификатор = Формат(ТекущаяУниверсальнаяДатаВМиллисекундах(), "ЧДЦ=; ЧН=; ЧГ=")+Формат(ЭтаФорма.Элементы.Количество(), "ЧДЦ=; ЧН=; ЧГ=");
КонецЕсли;
ОтступПоВертикали = ЭтаФорма.Элементы.Добавить(Префикс + Идентификатор, Тип("ДекорацияФормы"), Куда);
ОтступПоВертикали.Вид = ВидДекорацииФормы.Надпись;
ОтступПоВертикали.Видимость = Истина;
ОтступПоВертикали.Ширина = 1;
ОтступПоВертикали.Заголовок = " ";
ОтступПоВертикали.Шрифт = Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста,, Размер);
Если ВключитьПодсветкуВерстки Тогда
ОтступПоВертикали.ЦветФона = ЦветаСтиля.ЦветФонаПодсказки;
КонецЕсли;
КонецФункции
&НаСервере
Функция ВерсияВерстальщика()
МножительСтаршей = 100000000;
МножительМладшей = 1000000;
МножительСубверсии = 10000;
МножительБилда = 1;
Версия = 0;
Инфо = Новый СистемнаяИнформация;
Если Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Инфо.ВерсияПриложения, ".", Ложь, Истина);
Версия = Массив[0] * МножительСтаршей + Массив[1] * МножительМладшей + Массив[2] * МножительСубверсии + Массив[3] * МножительБилда;
ИначеЕсли Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_3_6 Тогда
Версия = 8 * МножительСтаршей + 3 * МножительМладшей + 6 * МножительСубверсии + 0 * МножительБилда;
ИначеЕсли Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_3_7 Тогда
Версия = 8 * МножительСтаршей + 3 * МножительМладшей + 7 * МножительСубверсии + 0 * МножительБилда;
КонецЕсли;
Возврат Версия;
КонецФункции
&НаСервере
Функция ДобавитьНадпись(Знач Какую,
Знач Куда = 0,
Знач Отступ = Ложь,
Знач Очистить = Ложь,
Ссылка1 = Неопределено,
Ссылка2 = Неопределено,
Ссылка3 = Неопределено,
Рекомендация = Ложь)
Перем ИменаСсылок;
ШаблонДляТекстаРУ = "ru = '%1'";
СообщениеРУ = СтрЗаменить(ШаблонДляТекстаРУ, "%1", Какую);
Какую = НСтр(СообщениеРУ);
ВключитьПодсветкуВерстки = Ложь;
БезОберток = Ложь;
Если Куда = 0 Тогда
Группа = ЭтаФорма.Элементы.ГруппаОшибки;
ИначеЕсли Куда = 1 Тогда
Группа = ЭтаФорма.Элементы.ГруппаПредупреждения;
ИначеЕсли Куда = 2 Тогда
Группа = ЭтаФорма.Элементы.ГруппаИнформация;
Иначе
БезОберток = Истина;
Группа = ЭтаФорма.Элементы.Найти(Куда);
Если Группа = Неопределено Тогда
Возврат "";
КонецЕсли;
КонецЕсли;
Если Очистить Тогда
Группа.ОтображатьЗаголовок = Истина;
Пока Группа.ПодчиненныеЭлементы.Количество() > 0 Цикл
Для Каждого Подчиненный из Группа.ПодчиненныеЭлементы Цикл
Элементы.Удалить(Подчиненный);
КонецЦикла;
КонецЦикла;
Возврат "";
КонецЕсли;
Если Какую = "" Тогда
Возврат "";
КонецЕсли;
Ид = Формат(ТекущаяУниверсальнаяДатаВМиллисекундах(), "ЧДЦ=; ЧН=; ЧГ=") + Формат(ЭтаФорма.Элементы.Количество(), "ЧДЦ=; ЧН=; ЧГ=");
Если БезОберток Тогда
Для Каждого Эл Из Группа.ПодчиненныеЭлементы Цикл
Если Найти(Эл.Имя, "ДГруппаСодержимое") > 0 Тогда
Группа = Эл;
Прервать;
КонецЕсли;
КонецЦикла;
Если Рекомендация Тогда
Кому = ЭтаФорма.Элементы.Добавить("ДНадписьРекомендация" + Ид, Тип("ДекорацияФормы"), Группа);
Иначе
Кому = ЭтаФорма.Элементы.Добавить("ДНадписьОписание" + Ид, Тип("ДекорацияФормы"), Группа);
КонецЕсли;
ПрименитьСтиль(Кому);
Если ВключитьПодсветкуВерстки Тогда
Кому.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
Кому.ЦветРамки = Новый Цвет(100, 100, 255);
КонецЕсли;
Если Ссылка1 = Неопределено И Ссылка2 = Неопределено И Ссылка3 = Неопределено Тогда
ФорматированныйЗаголовок = Новый Массив;
ФорматированныйЗаголовок.Добавить(Какую);
Кому.Заголовок = Новый ФорматированнаяСтрока(ФорматированныйЗаголовок);
Иначе
Кому.УстановитьДействие("ОбработкаНавигационнойСсылки", "ДинамическийЭлементОбработкаНавигационнойСсылки");
Кому.Заголовок = ПолучитьФорматированнуюСтрокуСоСсылками(Какую, Ссылка1, Ссылка2, Ссылка3, Кому.Имя, ИменаСсылок);
КонецЕсли;
Иначе
Кому = ЭтаФорма.Элементы.Добавить("ДГруппаКонтейнер"+Ид, Тип("ГруппаФормы"), Группа);
ПрименитьСтиль(Кому);
КолВоВложенных = Группа.ПодчиненныеЭлементы.Количество();
КолВоВложенных = Формат(КолВоВложенных, "ЧДЦ=; ЧН=; ЧГ=");
ОтступСлева = ЭтаФорма.Элементы.Добавить("ДГруппаОтступСлева" + Ид, Тип("ГруппаФормы"), Кому);
ПрименитьСтиль(ОтступСлева);
ГруппаСодержимое = ЭтаФорма.Элементы.Добавить("ДГруппаСодержимое" + Ид, Тип("ГруппаФормы"), Кому);
ПрименитьСтиль(ГруппаСодержимое);
Если ВерсияВерстальщика() > 803060000 Тогда
Если Группа.ПодчиненныеЭлементы.Количество() <> 1 Тогда
ДобавитьОтступ(ОтступСлева, Ид, "ДОтступВерхнийСлева", 3, ВключитьПодсветкуВерстки);
ДобавитьОтступ(ГруппаСодержимое, Ид, "ДОтступВерхнийСправа", 3, ВключитьПодсветкуВерстки);
КонецЕсли;
КонецЕсли;
МаркерЗаголовка = ЭтаФорма.Элементы.Добавить("ДНадписьЗаголовкаНомер" + Ид, Тип("ДекорацияФормы"), ОтступСлева);
ПрименитьСтиль(МаркерЗаголовка);
МаркерЗаголовка.Заголовок = КолВоВложенных + ".";
ТекстЗаголовка = ЭтаФорма.Элементы.Добавить("ДНадписьЗаголовкаТекст" + Ид, Тип("ДекорацияФормы"), ГруппаСодержимое);
ПрименитьСтиль(ТекстЗаголовка);
ТекстЗаголовка.Заголовок = ПолучитьФорматированнуюСтрокуСоСсылками(Какую, Ссылка1, Ссылка2, Ссылка3, ТекстЗаголовка.Имя, ИменаСсылок);
Если Ссылка1 = Неопределено И Ссылка2 = Неопределено И Ссылка3 = Неопределено Тогда
Иначе
ТекстЗаголовка.УстановитьДействие("ОбработкаНавигационнойСсылки", "ДинамическийЭлементОбработкаНавигационнойСсылки");
КонецЕсли;
Если ВключитьПодсветкуВерстки Тогда
МаркерЗаголовка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
ТекстЗаголовка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
КонецЕсли;
КонецЕсли;
Возврат Кому.Имя;
КонецФункции
&НаСервере
Процедура ЗаполнитьСводку(РезультатыДиагностики, ВсегоОшибок, ВсегоПредупреждений)
Перем Ссылка1, Ссылка2, Ссылка3;
КонтекстМодуля = ДокументооборотСКО.ПолучитьОбработкуЭДО();
МакетПодсказки = КонтекстМодуля.ПолучитьМакет("ДиагностикаОтчетности_Подсказки");
ОрганизацияКлиент = РезультатыДиагностики.Параметры.Организация;
УчетнаяЗаписьОбменаКлиент = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена;
ЧастьОтчета = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента;
Если ЧастьОтчета.Документы.Количество() > 0 Тогда
ВсегоПредупреждений = ВсегоПредупреждений + 1;
СводкаТекст = НайтиОписаниеПоКоду("645_0", МакетПодсказки,,,
КонтекстМодуля.ПростоеСклонение(ЧастьОтчета.Документы.Количество(), "о", "ы", "ы"),
КонтекстМодуля.ПростоеСклонение(ЧастьОтчета.Документы.Количество(), "ое", "ые", "ых"),
КонтекстМодуля.ПростоеСклонение(ЧастьОтчета.Документы.Количество(), "е", "я", "й"));
СсылкаГруппы = ДобавитьНадпись(СводкаТекст, 1);
ТекстПроверок = "";
ВсегоПроверок = 0;
Если ЧастьОтчета.ЕстьРеквизиты Тогда
ВсегоПроверок = ВсегоПроверок + 1;
КонецЕсли;
Если ЧастьОтчета.ЕстьЛицензия Тогда
ВсегоПроверок = ВсегоПроверок + 1;
КонецЕсли;
Если ЧастьОтчета.ЕстьСертификат Тогда
ВсегоПроверок = ВсегоПроверок + 1;
КонецЕсли;
Если ЧастьОтчета.ЕстьНаправления Тогда
ВсегоПроверок = ВсегоПроверок + 1;
КонецЕсли;
ТекущаяПроверка = 0;
Если ЧастьОтчета.ЕстьРеквизиты Тогда
ТекущаяПроверка = ТекущаяПроверка + 1;
ТекстПроверок = ТекстПроверок + ?(ТекстПроверок="", "", ?(ТекущаяПроверка = ВсегоПроверок, " или ", ", ")) + "реквизитов подключения";
КонецЕсли;
Если ЧастьОтчета.ЕстьЛицензия Тогда
ТекущаяПроверка = ТекущаяПроверка + 1;
ТекстПроверок = ТекстПроверок + ?(ТекстПроверок="", "", ?(ТекущаяПроверка = ВсегоПроверок, " или ", ", ")) + "срока действия лицензии 1С-Отчетности";
КонецЕсли;
Если ЧастьОтчета.ЕстьСертификат Тогда
ТекущаяПроверка = ТекущаяПроверка + 1;
ТекстПроверок = ТекстПроверок + ?(ТекстПроверок="", "", ?(ТекущаяПроверка = ВсегоПроверок, " или ", ", ")) + "срока действия и атрибутов личного сертификата";
КонецЕсли;
Если ЧастьОтчета.ЕстьНаправления Тогда
ТекущаяПроверка = ТекущаяПроверка + 1;
ТекстПроверок = ТекстПроверок + ?(ТекстПроверок="", "", ?(ТекущаяПроверка = ВсегоПроверок, " или ", ", ")) + "доверенностей из списка подключенных направлений";
КонецЕсли;
Если ТекстПроверок = "" Тогда
ТекстПроверок = "прочих атрибутов подключения к 1С-Отчетности";
КонецЕсли;
ПояснениеТекст = НайтиОписаниеПоКоду("645_1", МакетПодсказки,,, ТекстПроверок + ".");
ДобавитьНадпись(ПояснениеТекст, СсылкаГруппы);
ПояснениеТекст = НайтиОписаниеПоКоду("645_5", МакетПодсказки, Ссылка1);
ДобавитьНадпись(ПояснениеТекст, СсылкаГруппы,,, Ссылка1);
КонецЕсли;
ЧастьОтчета = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи;
Если ЧастьОтчета.СрокГодностиЧислом <> 0 Тогда
СрокГодностиСобытие = ЧастьОтчета.СрокГодностиСобытие;
ТекстЛицензии = "Лицензия ""%1"", действительна с %2 по %3";
ТекстЛицензии = СтрЗаменить(ТекстЛицензии, "%1", ЧастьОтчета.ЛицензияНаименование);
ТекстЛицензии = СтрЗаменить(ТекстЛицензии, "%2", Формат(ЧастьОтчета.ЛицензияДатаНачала, "ДЛФ=DD"));
ТекстЛицензии = СтрЗаменить(ТекстЛицензии, "%3", Формат(ЧастьОтчета.ЛицензияДатаОкончания, "ДЛФ=DD"));
СводкаТекст = НайтиОписаниеПоКоду("768_0", МакетПодсказки);
Если ЧастьОтчета.СрокГодностиЧислом = 1 Тогда
ВсегоПредупреждений = ВсегоПредупреждений + 1;
СводкаТекст = СтрЗаменить(СводкаТекст, "%1", "заканчивается");
СводкаТекст = СтрЗаменить(СводкаТекст, "%2", КонтекстМодуля.ИнтервалСтрокой(
РезультатыДиагностики.Параметры.ДатаКлиента,
ЧастьОтчета.ЛицензияДатаОкончания));
СсылкаГруппы = ДобавитьНадпись(СводкаТекст, 1);
СводкаТекст = ТекстЛицензии;
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
ИначеЕсли ЧастьОтчета.СрокГодностиЧислом = 2 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
СводкаТекст = СтрЗаменить(СводкаТекст, "%1", "закончился");
СводкаТекст = СтрЗаменить(СводкаТекст, "%2", КонтекстМодуля.ИнтервалСтрокой(
РезультатыДиагностики.Параметры.ДатаКлиента,
ЧастьОтчета.ЛицензияДатаОкончания));
СсылкаГруппы = ДобавитьНадпись(СводкаТекст, 0);
СводкаТекст = ТекстЛицензии;
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
ИначеЕсли ЧастьОтчета.СрокГодностиЧислом = 3 Тогда
ВсегоПредупреждений = ВсегоПредупреждений + 1;
СводкаТекст = СтрЗаменить(СводкаТекст, "%1", "еще не начался.");
СводкаТекст = СтрЗаменить(СводкаТекст, "%2", "Начнется " + КонтекстМодуля.ИнтервалСтрокой(
РезультатыДиагностики.Параметры.ДатаКлиента,
ЧастьОтчета.ЛицензияДатаНачала));
СсылкаГруппы = ДобавитьНадпись(СводкаТекст, 1);
СводкаТекст = ТекстЛицензии;
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
КонецЕсли;
Если ЧастьОтчета.СрокГодностиЧислом = 1 Тогда
Ссылка1 = Неопределено;
Подсказка = НайтиОписаниеПоКоду(СрокГодностиСобытие.Код, МакетПодсказки, Ссылка1);
Если Подсказка <> "" Тогда
ДобавитьНадпись(Подсказка, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли ЧастьОтчета.СрокГодностиЧислом = 2 Тогда
Ссылка1 = Неопределено;
Подсказка = НайтиОписаниеПоКоду(СрокГодностиСобытие.Код, МакетПодсказки, Ссылка1);
Если Подсказка <> "" Тогда
ДобавитьНадпись(Подсказка, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли ЧастьОтчета.СрокГодностиЧислом = 3 Тогда
Подсказка = НайтиОписаниеПоКоду(СрокГодностиСобытие.Код, МакетПодсказки);
Если Подсказка <> "" Тогда
ДобавитьНадпись(Подсказка, СсылкаГруппы,,,,,, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.РазличияРеквизитовСведений.Количество() > 0 Тогда
ВсегоРазличияРеквизитовСведений = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.РазличияРеквизитовСведений.Количество();
ИзНихВажных = 0;
Для Каждого Запись из РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.РазличияРеквизитовСведений Цикл
Если Запись.Важно Тогда
ИзНихВажных = ИзНихВажных + 1;
КонецЕсли;
КонецЦикла;
Ссылка = "%1 изменени%2";
Ссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Ссылка,
ВсегоРазличияРеквизитовСведений,
КонтекстМодуля.ПростоеСклонение(ВсегоРазличияРеквизитовСведений, "е", "я", "ий"));
Сообщение = НайтиОписаниеПоКоду("776_0", МакетПодсказки, Ссылка1,,
КонтекстМодуля.ПростоеСклонение(ВсегоРазличияРеквизитовСведений, "о", "ы", "ы"), Ссылка);
Ссылка1 = ПодготовитьСсылку(Сообщение, Ссылка);
Если ВсегоРазличияРеквизитовСведений = ИзНихВажных Тогда
СсылкаГруппы = ДобавитьНадпись(Сообщение, 0,,, Ссылка1);
ВсегоОшибок = ВсегоОшибок + 1;
ИначеЕсли ИзНихВажных = 0 Тогда
СсылкаГруппы = ДобавитьНадпись(Сообщение, 1,,, Ссылка1);
ВсегоПредупреждений = ВсегоПредупреждений + 1;
Иначе
СсылкаГруппы = ДобавитьНадпись(Сообщение, 0,,, Ссылка1);
ВсегоОшибок = ВсегоОшибок + 1;
КонецЕсли;
НоваяСводка = Новый Структура("Категория, Проверка, Ссылка", 0, 2, Ссылка1.Ссылка);
РезультатыДиагностики.Отчет.Сводка.Добавить(НоваяСводка);
Если ИзНихВажных > 0 Тогда
Рекомендация = НайтиОписаниеПоКоду("776_1", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
Иначе
Рекомендация = НайтиОписаниеПоКоду("776_2", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
ВладелецЭП = КонтекстМодуля.НормализованныеФИО(
РезультатыДиагностики.Автонастройка.ВладелецЭП.Фамилия,
РезультатыДиагностики.Автонастройка.ВладелецЭП.Имя,
РезультатыДиагностики.Автонастройка.ВладелецЭП.Отчество);
ВладелецЭПРп="";
ВладелецЭПВп="";
ВладелецЭПДп="";
КонтекстМодуля.СклонятьВВп(ВладелецЭП, ВладелецЭПВп);
КонтекстМодуля.СклонятьВРп(ВладелецЭП, ВладелецЭПРп);
КонтекстМодуля.СклонятьВДп(ВладелецЭП, ВладелецЭПДп);
ПроблемСДоверенностями = 0;
Если РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности <> Неопределено И
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности.Количество() > 0 Тогда
НетДоверенности = Новый Массив;
ДоверенностиСОшибкой = Новый Массив;
Индекс = -1;
Для Каждого Доверенность из РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности Цикл
Индекс = Индекс + 1;
Если Доверенность.Проблемы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ПроблемСДоверенностями = ПроблемСДоверенностями + 1;
Если Доверенность.Доверенность = Неопределено Тогда
НетДоверенности.Добавить(Индекс);
Иначе
ДоверенностиСОшибкой.Добавить(Индекс);
КонецЕсли;
КонецЦикла;
ТекстИПОрг = ?(РезультатыДиагностики.Отчет.Абонент.ИП, "индивидуальным предпринимателем", "руководителем (законным представителем) организации");
Если НетДоверенности.Количество() = 1 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
Доверенность = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности[НетДоверенности[0]];
ИдИФНС = Доверенность.Направление + " " + Доверенность.КодПолучателя
+ ?(НЕ РезультатыДиагностики.Отчет.Абонент.ИП, ?(ЗначениеЗаполнено(Доверенность.КПП), " И КПП " + Доверенность.КПП, ""), "");
СводкаТекст = НайтиОписаниеПоКоду("777_2", МакетПодсказки,,, ИдИФНС);
ИмяГруппы = ДобавитьНадпись(СводкаТекст, 0);
СводкаТекст = НайтиОписаниеПоКоду("777", МакетПодсказки,,, ВладелецЭПВп, ТекстИПОрг);
ДобавитьНадпись(СводкаТекст, ИмяГруппы);
Рекомендация = НайтиОписаниеПоКоду("778_1", МакетПодсказки, Ссылка1,, ВладелецЭПРп);
Если Ссылка1 = Неопределено Тогда
Ссылка1 = ПодготовитьСсылку("", "");
КонецЕсли;
Ссылка1.Ссылка = Формат(НетДоверенности[0], "ЧДЦ=; ЧН=; ЧГ=");
ИмяСсылки = ДобавитьНадпись(Рекомендация, ИмяГруппы,,, Ссылка1,,, Истина);
ИначеЕсли НетДоверенности.Количество() > 1 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
СводкаТекст = НайтиОписаниеПоКоду("777_3", МакетПодсказки,,,
КонтекстМодуля.ПростоеСклонение(НетДоверенности.Количество(), "ет", "ют", "ют"),
НетДоверенности.Количество(),
КонтекстМодуля.ПростоеСклонение(НетДоверенности.Количество(), "ь", "и", "ей"));
ИмяГруппы = ДобавитьНадпись(СводкаТекст, 0);
Рекомендация = НайтиОписаниеПоКоду("777_6", МакетПодсказки, Ссылка1);
ИмяСсылки = ДобавитьНадпись(Рекомендация, ИмяГруппы,,, Ссылка1,,, Истина);
НоваяСводка = Новый Структура("Категория, Проверка, Ссылка, Фильтр", 0, 4, Ссылка1.Ссылка, НетДоверенности);
РезультатыДиагностики.Отчет.Сводка.Добавить(НоваяСводка);
Иначе
СводкаТекст = "";
КонецЕсли;
Если ДоверенностиСОшибкой.Количество() = 1 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
Доверенность = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности[ДоверенностиСОшибкой[0]];
ИдИФНС = Доверенность.Направление + " " + Доверенность.КодПолучателя
+ ?(НЕ РезультатыДиагностики.Отчет.Абонент.ИП, ?(ЗначениеЗаполнено(Доверенность.КПП), " И КПП " + Доверенность.КПП, ""), "");
ОдиночнаяПроблемаПросрочка = Ложь;
Если Доверенность.Проблемы.Количество() = 1 И Доверенность.Проблемы[0].Код = 779 Тогда
ОдиночнаяПроблемаПросрочка = Истина;
КонецЕсли;
Если ОдиночнаяПроблемаПросрочка Тогда
СводкаТекст = НайтиОписаниеПоКоду("777_7", МакетПодсказки, Ссылка1,,
ИдИФНС,
КонтекстМодуля.ИнтервалСтрокой(РезультатыДиагностики.Параметры.ДатаКлиента, Доверенность.Доверенность.ДатаОкончания));
Если Ссылка1 = Неопределено Тогда
Ссылка1 = ПодготовитьСсылку("", "");
КонецЕсли;
Ссылка1.Ссылка = Формат(ДоверенностиСОшибкой[0], "ЧДЦ=; ЧН=; ЧГ=");
ИмяГруппы = ДобавитьНадпись(СводкаТекст, 0,,, Ссылка1);
Иначе
СводкаТекст = НайтиОписаниеПоКоду("777_4", МакетПодсказки,,, ИдИФНС);
ИмяГруппы = ДобавитьНадпись(СводкаТекст, 0);
Ожидаемый = "";
Фактический = "";
ПроблемаСоСроком = Ложь;
ВидПроблемы = 0;
ПроблемаСПредставителем = Ложь;
Для Каждого Проблема из Доверенность.Проблемы Цикл
Если Проблема.Код = 779 Тогда
ПроблемаСоСроком = Истина;
ВидПроблемы = 1;
ИначеЕсли Проблема.Код = 780 Тогда
ПроблемаСоСроком = Истина;
ВидПроблемы = 2;
ИначеЕсли Проблема.Код = 781 Тогда
ПроблемаСПредставителем = Истина;
Ожидаемый = Проблема.Представитель.Ожидаемый;
Фактический = Проблема.Представитель.Фактический;
КонецЕсли;
КонецЦикла;
Если ПроблемаСПредставителем Тогда
ФактическийРп = "";
ОжидаемыйРп = "";
КонтекстМодуля.СклонятьВРп(Фактический, ФактическийРп, Ожидаемый, ОжидаемыйРп);
СводкаТекст = НайтиОписаниеПоКоду("777_0", МакетПодсказки,,, ФактическийРп, ОжидаемыйРп);
КонецЕсли;
Если ПроблемаСоСроком Тогда
Парам3 = ?(ВидПроблемы = 1, "закончился "
+ КонтекстМодуля.ИнтервалСтрокой(
РезультатыДиагностики.Параметры.ДатаКлиента,
Доверенность.Доверенность.ДатаОкончания)
, "ещё не начался, начнется "
+ КонтекстМодуля.ИнтервалСтрокой(
РезультатыДиагностики.Параметры.ДатаКлиента,
Доверенность.Доверенность.ДатаВыдачи));
Если ПроблемаСПредставителем Тогда
СводкаТекст = СводкаТекст + "Также п" + НайтиОписаниеПоКоду("777_1", МакетПодсказки,,,,, Парам3);
Иначе
СводкаТекст = "П" + НайтиОписаниеПоКоду("777_1", МакетПодсказки,,,,, Парам3);
КонецЕсли;
КонецЕсли;
ДобавитьНадпись(СводкаТекст, ИмяГруппы);
Если ПроблемаСПредставителем Тогда
Рекомендация = НайтиОписаниеПоКоду("781", МакетПодсказки, Ссылка1,, ВладелецЭПРп);
ИначеЕсли ПроблемаСоСроком Тогда
Рекомендация = НайтиОписаниеПоКоду("780", МакетПодсказки, Ссылка1);
КонецЕсли;
Если Ссылка1 = Неопределено Тогда
Ссылка1 = ПодготовитьСсылку("", "");
КонецЕсли;
Ссылка1.Ссылка = Формат(ДоверенностиСОшибкой[0], "ЧДЦ=; ЧН=; ЧГ=");
ДобавитьНадпись(Рекомендация, ИмяГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли ДоверенностиСОшибкой.Количество() > 1 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
СводкаТекст = НайтиОписаниеПоКоду("777_5", МакетПодсказки);
ИмяГруппы = ДобавитьНадпись(СводкаТекст, 0);
Рекомендация = НайтиОписаниеПоКоду("777_6", МакетПодсказки, Ссылка1);
Если Ссылка1 = Неопределено Тогда
Ссылка1 = ПодготовитьСсылку("", "");
КонецЕсли;
Ссылка1.Действие = "ДействиеПосмотретьОшибочныеДоверенности";
ИмяСсылки = ДобавитьНадпись(Рекомендация, ИмяГруппы,,, Ссылка1,,, Истина);
НоваяСводка = Новый Структура("Категория, Проверка, Ссылка, Фильтр", 0, 5, Ссылка1.Ссылка, ДоверенностиСОшибкой);
РезультатыДиагностики.Отчет.Сводка.Добавить(НоваяСводка);
Иначе
СводкаТекст = "";
КонецЕсли;
КонецЕсли;
НетПодключения = Ложь;
НедоступенХостВипнет = Ложь;
Если РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаПодключений") Тогда
ОшибокПодключений = 0;
ПредупрежденийПодключений = 0;
ЧастьОтчета = РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений;
Если ЧастьОтчета.Свойство("Предупреждения") Тогда
Для Каждого Операция из РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Предупреждения Цикл
ПредупрежденийПодключений = ПредупрежденийПодключений + 1;
КонецЦикла;
Если ПредупрежденийПодключений > 0 Тогда
ВсегоПредупреждений = ВсегоПредупреждений + 1;
Ссылка = "%1 замечани%2";
Ссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Ссылка,
ПредупрежденийПодключений,
КонтекстМодуля.ПростоеСклонение(ПредупрежденийПодключений, "е", "я", "ий"));
Сообщение = "Проверка подключений выявила " + Ссылка;
ИмяСсылки = ДобавитьНадпись(Сообщение, 1);
КонецЕсли;
КонецЕсли;
Для Каждого Операция из ЧастьОтчета.Ресурсы Цикл
Если Операция.Результат Тогда
Продолжить;
КонецЕсли;
ОшибокПодключений = ОшибокПодключений + 1;
КонецЦикла;
Если ОшибокПодключений > 0 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
Ссылка = "%1 сервис%2";
Ссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Ссылка,
ОшибокПодключений,
КонтекстМодуля.ПростоеСклонение(ОшибокПодключений, "у", "ам", "ам"));
Сообщение = НайтиОписаниеПоКоду("1281_0", МакетПодсказки, Ссылка1,, Ссылка);
Ссылка1 = ПодготовитьСсылку(Сообщение, Ссылка);
ИмяСсылки = ДобавитьНадпись(Сообщение, 0,,, Ссылка1);
НоваяСводка = Новый Структура("Категория, Проверка, Ссылка", 1, 1, Ссылка1.Ссылка);
РезультатыДиагностики.Отчет.Сводка.Добавить(НоваяСводка);
ВсегоНедоступных = 0;
СоСреднимКачеством = 0;
СПлохимКачеством = 0;
СХорошимКачеством = 0;
ДоступныхЧерезШлюз = 0;
НедоступныхПочты = 0;
НедоступныхПрочих = 0;
НедоступнаТолькоПочта = Ложь;
Для Каждого Ресурс из ЧастьОтчета.Ресурсы Цикл
Если Ресурс.Результат Тогда
Продолжить;
КонецЕсли;
ВсегоНедоступных = ВсегоНедоступных + 1;
ПП = Ресурс.ПараметрыПодключения;
Если ПП.Свойство("Адрес") Тогда
НедоступныхПрочих = НедоступныхПрочих + 1;
Иначе
НедоступныхПочты = НедоступныхПочты + 1;
КонецЕсли;
Адрес = ПП.ПредставлениеХоста;
Если Найти(Адрес, "infotecs.ru") > 0 Тогда
НедоступенХостВипнет = Истина;
КонецЕсли;
ДоступностьЗаЧас = 0;
ТекстСостояния = "";
Если Ресурс.СервисПроверки.Использовался <> Неопределено И Ресурс.СервисПроверки.Использовался Тогда
Если Ресурс.СервисПроверки.Доступен Тогда
ДоступныхЧерезШлюз = ДоступныхЧерезШлюз + 1;
КонецЕсли;
ДоступностьЗаЧас = Ресурс.СервисПроверки.ДоступностьЗаЧас;
Если ДоступностьЗаЧас > 95 Тогда
СХорошимКачеством = СХорошимКачеством + 1;
ИначеЕсли ДоступностьЗаЧас > 40 Тогда
СоСреднимКачеством = СоСреднимКачеством + 1;
ИначеЕсли ДоступностьЗаЧас > 0 Тогда
СПлохимКачеством = СПлохимКачеством + 1;
ИначеЕсли ДоступностьЗаЧас <= 0 Тогда
СПлохимКачеством = СПлохимКачеством + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НедоступнаТолькоПочта = НедоступныхПочты > 0 И НедоступныхПрочих = 0;
ТекстПрокси = ?(НедоступнаТолькоПочта, "", " либо задайте настройки прокси в программе");
Если ЧастьОтчета.Ресурсы.Количество() = ВсегоНедоступных Тогда
Подсказка = НайтиОписаниеПоКоду("1281_1", МакетПодсказки, Ссылка1,, ТекстПрокси);
Если НедоступнаТолькоПочта Тогда
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
Иначе
ДобавитьНадпись(Подсказка, ИмяСсылки,,, Ссылка1,,, Истина);
КонецЕсли;
НетПодключения = Истина;
ИначеЕсли ДоступныхЧерезШлюз > 0 Тогда
Если СПлохимКачеством > 0 Тогда
Подсказка = НайтиОписаниеПоКоду("1281_4", МакетПодсказки, Ссылка1,, ТекстПрокси);
Если НедоступнаТолькоПочта Тогда
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
Иначе
ДобавитьНадпись(Подсказка, ИмяСсылки,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли СоСреднимКачеством > 0 Тогда
Подсказка = НайтиОписаниеПоКоду("1281_3", МакетПодсказки, Ссылка1,, ТекстПрокси);
Если НедоступнаТолькоПочта Тогда
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
Иначе
Если НедоступнаТолькоПочта Тогда
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
Иначе
ДобавитьНадпись(Подсказка, ИмяСсылки,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
ИначеЕсли СХорошимКачеством > 0 Тогда
Подсказка = НайтиОписаниеПоКоду("1281_2", МакетПодсказки, Ссылка1,, ТекстПрокси);
Если НедоступнаТолькоПочта Тогда
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
Иначе
Если НедоступнаТолькоПочта Тогда
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
Иначе
ДобавитьНадпись(Подсказка, ИмяСсылки,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если РезультатыДиагностики.Отчет.Проверки.СостояниеСервисаПроверки = 0 Тогда
Подсказка = НайтиОписаниеПоКоду("1281_5", МакетПодсказки,,, ТелефонСлужбыПоддержки);
Иначе
Подсказка = "";
КонецЕсли;
ДобавитьНадпись(Подсказка, ИмяСсылки,,,,,, Истина);
КонецЕсли;
КонецЕсли;
ИначеЕсли НЕ РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаПодключений") Тогда
СсылкаГруппы = ДобавитьНадпись("Проверка подключений отключена", 1);
ВсегоПредупреждений = ВсегоПредупреждений + 1;
ДобавитьНадпись("Выключите тестовый режим", СсылкаГруппы,,,,,, Истина);
КонецЕсли;
Если РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаКомпонентов") Тогда
ЧастьОтчета = РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов;
ОшибокКомпонентов = 0;
Если ЧастьОтчета.Криптокомпонент = Неопределено
ИЛИ ЧастьОтчета.Криптопровайдеры = Неопределено
ИЛИ ЧастьОтчета.РасширениеРаботыСФайлами = Неопределено Тогда
ДобавитьНадпись("Проверка компонентов отключена", 1);
Иначе
Если НЕ ЧастьОтчета.Криптокомпонент.Подключен Тогда
ОшибокКомпонентов = ОшибокКомпонентов + 1;
КонецЕсли;
Если НЕ ЧастьОтчета.Криптопровайдеры.Подключен Тогда
ОшибокКомпонентов = ОшибокКомпонентов + 1;
КонецЕсли;
Если НЕ ЧастьОтчета.РасширениеРаботыСФайлами.Подключен Тогда
ОшибокКомпонентов = ОшибокКомпонентов + 1;
КонецЕсли;
КонецЕсли;
Если РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.СрокГодности > 1 Тогда
ОшибокКомпонентов = ОшибокКомпонентов + 1;
КонецЕсли;
Если ОшибокКомпонентов > 0 Тогда
ЧастьОтчета = РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов;
ЧастьОтчета2 = РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций;
ТипКлиента = РезультатыДиагностики.Отчет.ДополнительнаяИнформация["ТипКлиентскогоПодключенияЧислом"];
ЛичныйСертификат = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата;
СрокГодности = ЛичныйСертификат.СрокГодности;
ТекстСертификата = "выдан %1, действителен с %2 по %3";
ТекстСертификата = СтрЗаменить(ТекстСертификата, "%1", ВладелецЭПДп);
ТекстСертификата = СтрЗаменить(ТекстСертификата, "%2", Формат(ЛичныйСертификат.Выдан, "ДЛФ=DD"));
ТекстСертификата = СтрЗаменить(ТекстСертификата, "%3", Формат(ЛичныйСертификат.ДействуетПо, "ДЛФ=DD"));
СводкаТекстШаблон = "Сертификат %1";
Если СрокГодности <> -1 Тогда
Интервал = КонтекстМодуля.ИнтервалСтрокой(РезультатыДиагностики.Параметры.ДатаКлиента, ЛичныйСертификат.ДействуетПо);
КонецЕсли;
Если СрокГодности = -1 Тогда
ИначеЕсли СрокГодности = 1 Тогда
ВсегоПредупреждений = ВсегоПредупреждений + 1;
Описание = НайтиОписаниеПоКоду("8448_8", МакетПодсказки,,, Интервал);
СсылкаГруппы = ДобавитьНадпись(Описание, 1);
СводкаТекст = СтрЗаменить(СводкаТекстШаблон, "%1", ТекстСертификата);
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
Рекомендация = НайтиОписаниеПоКоду("8448_5", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
ИначеЕсли СрокГодности = 2 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
Описание = НайтиОписаниеПоКоду("8448_6", МакетПодсказки,,, Интервал);
СсылкаГруппы = ДобавитьНадпись(Описание);
СводкаТекст = СтрЗаменить(СводкаТекстШаблон, "%1", ТекстСертификата);
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
Рекомендация = НайтиОписаниеПоКоду("8448_3", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
ИначеЕсли СрокГодности = 3 Тогда
ВсегоПредупреждений = ВсегоПредупреждений + 1;
Интервал = КонтекстМодуля.ИнтервалСтрокой(ЛичныйСертификат.Выдан, РезультатыДиагностики.Параметры.ДатаКлиента);
Описание = НайтиОписаниеПоКоду("8448_7", МакетПодсказки,,, Интервал);
СсылкаГруппы = ДобавитьНадпись(Описание, 1);
СводкаТекст = СтрЗаменить(СводкаТекстШаблон, "%1", ТекстСертификата);
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
Рекомендация = НайтиОписаниеПоКоду("8448_4", МакетПодсказки);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,,,,, Истина);
КонецЕсли;
Если НЕ ЧастьОтчета.Криптокомпонент.Подключен Тогда
Если ЧастьОтчета.Криптокомпонент.КодОшибки = 0 Тогда
ИначеЕсли ЧастьОтчета.Криптокомпонент.КодОшибки = 1 Тогда
ОписаниеПроблемы = НайтиОписаниеПоКоду("2304_1", МакетПодсказки);
ИначеЕсли ЧастьОтчета.Криптокомпонент.КодОшибки = 2 Тогда
ОписаниеПроблемы = НайтиОписаниеПоКоду("2304_3", МакетПодсказки);
КонецЕсли;
СсылкаГруппы = ДобавитьНадпись(ОписаниеПроблемы, 0);
ВсегоОшибок = ВсегоОшибок + 1;
Если ЧастьОтчета.Криптокомпонент.КодОшибки = 1 Тогда
Ссылка1 = Неопределено;
Если ТипКлиента = 3 Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_n", МакетПодсказки, Ссылка1);
Иначе
Рекомендация = НайтиОписаниеПоКоду("2304_2", МакетПодсказки, Ссылка1);
КонецЕсли;
Если Рекомендация <> "" Тогда
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли ЧастьОтчета.Криптокомпонент.КодОшибки = 2 Тогда
Перечисление_ТипыКриптоПровайдеров = ПолучитьЗначенияПеречисления("ТипыКриптоПровайдеров");
ПредставленияКП = Новый Соответствие;
ПредставленияКП.Вставить(0, "");
ПредставленияКП.Вставить(Перечисление_ТипыКриптоПровайдеров.VipNet, "ViPNet CSP");
ПредставленияКП.Вставить(Перечисление_ТипыКриптоПровайдеров.CryptoPro, "CryptoPro CSP");
КП = ПолучитьКриптопровайдераОтчета(РезультатыДиагностики.Отчет, РезультатыДиагностики.Автонастройка);
ПредставлениеКП = ПредставленияКП.Получить(?(КП = Неопределено, 0, КП));
Рекомендация = НайтиОписаниеПоКоду("2304_4", МакетПодсказки,,, ПредставлениеКП);
Если Рекомендация <> "" Тогда
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,,,,, Истина);
КонецЕсли;
ТекстНетПодключения = НайтиОписаниеПоКоду("2304_i", МакетПодсказки);
Если КП = Неопределено Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_m", МакетПодсказки, Ссылка1, Ссылка2);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1, Ссылка2,, Истина);
ИначеЕсли КП = Перечисление_ТипыКриптоПровайдеров.VipNet Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_k", МакетПодсказки, Ссылка1,, ?(НедоступенХостВипнет, ТекстНетПодключения, ""));
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
ИначеЕсли КП = Перечисление_ТипыКриптоПровайдеров.CryptoPro Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_l", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЧастьОтчета.Криптокомпонент.Подключен И НЕ ЧастьОтчета.Криптопровайдеры.Подключен Тогда
Если ЧастьОтчета.Криптопровайдеры.Состояние = 2 Тогда
ОписаниеПроблемы = НайтиОписаниеПоКоду("2304_7", МакетПодсказки);
СсылкаГруппы = ДобавитьНадпись(ОписаниеПроблемы, 0);
ВсегоОшибок = ВсегоОшибок + 1;
КП = ПолучитьКриптопровайдераОтчета(РезультатыДиагностики.Отчет, РезультатыДиагностики.Автонастройка);
Перечисление_ТипыКриптоПровайдеров = ПолучитьЗначенияПеречисления("ТипыКриптоПровайдеров");
ТекстНетПодключения = НайтиОписаниеПоКоду("2304_i", МакетПодсказки);
Если КП = Неопределено или КП = Перечисление_ТипыКриптоПровайдеров.VipNet Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_8", МакетПодсказки, Ссылка1,, ?(НедоступенХостВипнет, ТекстНетПодключения, ""));
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
Если КП = Неопределено или КП = Перечисление_ТипыКриптоПровайдеров.CryptoPro Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_9", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли ЧастьОтчета.Криптопровайдеры.Состояние = 1 Тогда
ОписаниеПроблемы = НайтиОписаниеПоКоду("2304_6", МакетПодсказки);
СсылкаГруппы = ДобавитьНадпись(ОписаниеПроблемы);
ВсегоОшибок = ВсегоОшибок + 1;
ПараметрыКП = Неопределено;
КП_2 = ПолучитьКриптопровайдераОтчета(РезультатыДиагностики.Отчет, РезультатыДиагностики.Автонастройка, ПараметрыКП);
СводкаТекст = НайтиОписаниеПоКоду("2304_a", МакетПодсказки);
ДобавитьНадпись(СводкаТекст, СсылкаГруппы);
Если КП_2 <> Неопределено Тогда
ИзвестныеКриптопровайдеры = КриптографияЭДКОКлиентСервер.ИзвестныеКриптопровайдеры();
ИндексКриптопровайдеров = Неопределено;
КП_2 = ПараметрыКП.Представление;
Для каждого Эл из РезультатыДиагностики.Отчет.Криптопровайдеры Цикл
Если Эл.Представление = ПараметрыКП.Имя Тогда
Продолжить;
КонецЕсли;
СвойстваКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдера(
Эл.Представление,,
ИзвестныеКриптопровайдеры,
ИндексКриптопровайдеров);
КП_1 = ?(СвойстваКриптопровайдера <> Неопределено, СвойстваКриптопровайдера.Представление, Эл.Представление);
КонецЦикла;
Рекомендация = НайтиОписаниеПоКоду("2304_e", МакетПодсказки,,, КП_1, КП_2);
ИмяСсылки = ДобавитьНадпись(Рекомендация, СсылкаГруппы,,,,,, Истина);
Рекомендация = НайтиОписаниеПоКоду("2304_f", МакетПодсказки, Ссылка1,, КП_1, КП_2);
Если Ссылка1 = Неопределено Тогда
Ссылка1 = ПодготовитьСсылку("", "");
КонецЕсли;
Ссылка1.Ссылка = "КПИзменить";
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
Рекомендация = НайтиОписаниеПоКоду("2304_g", МакетПодсказки, Ссылка1,, КП_1, КП_2);
Если Ссылка1 = Неопределено Тогда
Ссылка1 = ПодготовитьСсылку("", "");
КонецЕсли;
Ссылка1.Ссылка = "КПНастроить";
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
ИначеЕсли ЧастьОтчета.Криптопровайдеры.Состояние = 3 Тогда
КонецЕсли;
КонецЕсли;
Если НЕ ЧастьОтчета.РасширениеРаботыСФайлами.Подключен Тогда
ТекстОшибки = НайтиОписаниеПоКоду("2304_h", МакетПодсказки);
СсылкаГруппы = ДобавитьНадпись(ТекстОшибки, 0,,,,,, Истина);
ВсегоОшибок = ВсегоОшибок + 1;
Ссылка1 = Неопределено;
Если ТипКлиента = 3 Тогда
Рекомендация = НайтиОписаниеПоКоду("2304_c", МакетПодсказки, Ссылка1);
Иначе
Рекомендация = НайтиОписаниеПоКоду("2304_b", МакетПодсказки);
КонецЕсли;
Если Рекомендация <> "" Тогда
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаСертификатов") И
РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаКомпонентов") И
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.Подключен Тогда
ОшибокСертификатов = 0;
Для Каждого Операция из РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов Цикл
Если Операция.Найден Тогда
Продолжить;
КонецЕсли;
ОшибокСертификатов = ОшибокСертификатов + 1;
КонецЦикла;
Если ОшибокСертификатов > 0 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
Ссылка = "%1 сертификат%2";
Ссылка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Ссылка,
ОшибокСертификатов,
КонтекстМодуля.ПростоеСклонение(ОшибокСертификатов, "", "а", "ов"));
Сообщение = НайтиОписаниеПоКоду("4353_0", МакетПодсказки, Ссылка1,,
КонтекстМодуля.ПростоеСклонение(ОшибокСертификатов, "", "ы", "ы"),
ОшибокСертификатов,
КонтекстМодуля.ПростоеСклонение(ОшибокСертификатов, "", "а", "ов"),
КонтекстМодуля.ПростоеСклонение(ОшибокСертификатов, "й", "е", "е"));
Ссылка1 = ПодготовитьСсылку(Сообщение, Ссылка);
ИмяСсылкиГруппы = ДобавитьНадпись(Сообщение, 0,,, Ссылка1);
НоваяСводка = Новый Структура("Категория, Проверка, Ссылка", 3, 0, Ссылка1.Ссылка);
РезультатыДиагностики.Отчет.Сводка.Добавить(НоваяСводка);
Подсказка = НайтиОписаниеПоКоду("4353_1", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Подсказка, ИмяСсылкиГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
Если РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаКриптоопераций")
И РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.Подключен Тогда
ОперацияТекст = Неопределено;
ОшибокКриптоопераций = 0;
Для Каждого Операция из РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций Цикл
Если Не Операция.Успешно Тогда
Если ОперацияТекст = Неопределено Тогда
ОперацияТекст = НРег(Операция.Операция);
КонецЕсли;
ОшибокКриптоопераций = ОшибокКриптоопераций + 1;
Прервать;
КонецЕсли;
КонецЦикла;
Если ОшибокКриптоопераций > 0 Тогда
ВсегоОшибок = ВсегоОшибок + 1;
Сообщение = НайтиОписаниеПоКоду("8448_0", МакетПодсказки,,
, КонтекстМодуля.ПростоеСклонение(ОшибокКриптоопераций, "а", "ы", "ы")
, КонтекстМодуля.ПростоеСклонение(ОшибокКриптоопераций, "ая", "ые", "ых")
, КонтекстМодуля.ПростоеСклонение(ОшибокКриптоопераций, "я", "и", "й")
, ОперацияТекст);
СсылкаГруппы = ДобавитьНадпись(Сообщение, 0);
Для Каждого Криптооперация из РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций Цикл
Если Криптооперация.Успешно Тогда
Продолжить;
КонецЕсли;
Если Найти(Криптооперация.ОписаниеОшибки, "отменена пользователем") > 0 Тогда
Рекомендация = НайтиОписаниеПоКоду("8448_1", МакетПодсказки, Ссылка1);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,, Ссылка1,,, Истина);
ИначеЕсли Найти(Криптооперация.ОписаниеОшибки, "не найден") > 0 Тогда
Рекомендация = НайтиОписаниеПоКоду("8448_2", МакетПодсказки);
ДобавитьНадпись(Рекомендация, СсылкаГруппы,,,,,, Истина);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИначеЕсли НЕ РезультатыДиагностики.Отчет.Проверки.Свойство("ПроверкаКриптоопераций") Тогда
Если КриптографияЭДКОКлиентСервер.ЭтоПодписьСервиса(РезультатыДиагностики.Параметры) Тогда
СсылкаГруппы = ДобавитьНадпись("Проверка криптоопераций не производится при ключах в программе", 1);
ВсегоПредупреждений = ВсегоПредупреждений + 1;
Сообщение = НайтиОписаниеПоКоду("130_5", МакетПодсказки, Ссылка1,);
ДобавитьНадпись(Сообщение, СсылкаГруппы,,, Ссылка1,,, Истина);
Иначе
СсылкаГруппы = ДобавитьНадпись("Проверка криптоопераций отключена", 1);
ВсегоПредупреждений = ВсегоПредупреждений + 1;
ДобавитьНадпись("Выключите тестовый режим", СсылкаГруппы,,,,,, Истина);
КонецЕсли;
КонецЕсли;
Нерасшифрованные = РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"];
Если Нерасшифрованные <> Неопределено И Нерасшифрованные.Количество() > 0 Тогда
Безнадежных = 0;
Для Каждого Эл Из Нерасшифрованные Цикл
НечемРасшифровать = Истина;
Если Эл.СодержимоеТранспортныхКонтейнеров <> Неопределено И Эл.СодержимоеТранспортныхКонтейнеров.Количество() > 0 Тогда
Для Каждого Контейнер Из Эл.СодержимоеТранспортныхКонтейнеров Цикл
Если Контейнер.Документы <> Неопределено И Контейнер.Документы.Количество() > 0 Тогда
Для Каждого Док Из Контейнер.Документы Цикл
Если Док.Сведения <> Неопределено И Док.Сведения.Количество() > 0 Тогда
Для Каждого Подпись Из Док.Сведения Цикл
Если Подпись.found Тогда
НечемРасшифровать = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ИначеЕсли Контейнер.Документы <> Неопределено И Контейнер.Документы.Количество() = 0 Тогда
НечемРасшифровать = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НечемРасшифровать Тогда
Безнадежных = Безнадежных + 1;
КонецЕсли;
КонецЦикла;
Если Безнадежных > 0 Тогда
Сообщение = НайтиОписаниеПоКоду("130_0", МакетПодсказки,,
, КонтекстМодуля.ПростоеСклонение(Безнадежных, "о", "ы", "ы")
, Формат(Безнадежных, "ЧН=; ЧГ=")
, КонтекстМодуля.ПростоеСклонение(Безнадежных, "е", "я", "й")
, КонтекстМодуля.ПростоеСклонение(Безнадежных, "ое", "ые", "ые")
);
СсылкаГруппы = ДобавитьНадпись(Сообщение, 1);
ВсегоПредупреждений = ВсегоПредупреждений + 1;
Сообщение = НайтиОписаниеПоКоду("130_1", МакетПодсказки,Ссылка1,);
ДобавитьНадпись(Сообщение, СсылкаГруппы,,,Ссылка1,,, Истина);
Сообщение = НайтиОписаниеПоКоду("130_2", МакетПодсказки,,);
ДобавитьНадпись(Сообщение, СсылкаГруппы,,,,,, Истина);
Сообщение = НайтиОписаниеПоКоду("130_3", МакетПодсказки,,);
ДобавитьНадпись(Сообщение, СсылкаГруппы,,,,,, Истина);
Сообщение = НайтиОписаниеПоКоду("130_4", МакетПодсказки, Ссылка1,);
ДобавитьНадпись(Сообщение, СсылкаГруппы,,, Ссылка1,,, Истина);
КонецЕсли;
КонецЕсли;
Если ВсегоОшибок > 0 Тогда
ДобавитьОтступ(0,, "ДинамическаяОберткаОтступГруппыНижний", 3, Ложь);
КонецЕсли;
Если ВсегоОшибок > 0 Тогда
Элементы.ГруппаСобытия.ЦветТекстаЗаголовка = Новый Цвет(240, 0, 0);
ЗаголовокГруппы = "Проверка завершена, обнаружен%1 %2 ошиб%3";
ЗаголовокГруппы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ЗаголовокГруппы,
КонтекстМодуля.ПростоеСклонение(ВсегоОшибок, "а", "ы", "ы"),
ВсегоОшибок,
КонтекстМодуля.ПростоеСклонение(ВсегоОшибок, "ка", "ки", "ок"));
Если ВсегоПредупреждений > 0 Тогда
ШаблонСообщения = " и %1 предупрежден%2";
ЗаголовокГруппы = ЗаголовокГруппы + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСообщения,
ВсегоПредупреждений,
КонтекстМодуля.ПростоеСклонение(ВсегоПредупреждений, "ие", "ия", "ий"));
Иначе
ЗаголовокГруппы = ЗаголовокГруппы + ":";
КонецЕсли;
Элементы.ГруппаСобытия.Заголовок = ЗаголовокГруппы;
Элементы.НадписьНетОшибок.Видимость = Ложь;
Элементы.ГруппаСобытия.Видимость = Истина;
Элементы.ДекорацияОтступ.Видимость = Истина;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Истина;
Если ВсегоПредупреждений = 0 Тогда
Элементы.ГруппаОшибки.ОтображатьЗаголовок = Ложь;
Иначе
Элементы.ГруппаОшибки.ОтображатьЗаголовок = Истина;
КонецЕсли;
ИначеЕсли ВсегоОшибок = 0 И ВсегоПредупреждений > 0 Тогда
ЗаголовокГруппы = "Проверка завершена, обнаружен%1 %2 предупрежден%3";
ЗаголовокГруппы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокГруппы,
КонтекстМодуля.ПростоеСклонение(ВсегоПредупреждений, "о", "ы", "ы"),
ВсегоПредупреждений,
КонтекстМодуля.ПростоеСклонение(ВсегоПредупреждений, "ие", "ия", "ий"));
Элементы.ГруппаСобытия.ЦветТекстаЗаголовка = Новый Цвет(240, 128, 0);
Элементы.ГруппаСобытия.Заголовок = ЗаголовокГруппы;
Элементы.ГруппаПредупреждения.ЦветТекстаЗаголовка = Элементы.ГруппаСобытия.ЦветТекстаЗаголовка;
Элементы.НадписьНетОшибок.Видимость = Ложь;
Элементы.ГруппаСобытия.Видимость = Истина;
Элементы.ДекорацияОтступ.Видимость = Истина;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Истина;
ИначеЕсли ВсегоОшибок = 0 И ВсегоПредупреждений = 0 Тогда
Элементы.ГруппаСобытия.Заголовок = "Проверка завершена, ошибок не обнаружено";
Элементы.ГруппаСобытия.ЦветТекстаЗаголовка = Новый Цвет(0, 128, 0);
Элементы.ГруппаИнформация.ОтображатьЗаголовок = Ложь;
Элементы.ГруппаИнформация.Отображение = ОтображениеОбычнойГруппы.Нет;
Элементы.НадписьНетОшибок.Видимость = Истина;
Элементы.ГруппаСобытия.Видимость = Истина;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Ложь;
Элементы.ДекорацияОтступ.Видимость = Ложь;
Элементы.ТелефонСлужбыПоддержки.Видимость = Истина;
КонецЕсли;
Элементы.ВыполнитьПроверку.Доступность = Истина;
КонецПроцедуры
#КонецОбласти
#Область СобытияФормы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
РезультатыДиагностики = Новый Структура;
Если Элементы.Организация.СписокВыбора.Количество() = 0 Тогда
Сообщение = "Запуск средства диагностики возможен только при наличии подключения к 1С-Отчетности";
Сообщение = СтрЗаменить("ru = '%1'", "%1", Сообщение);
Сообщение = НСтр(Сообщение);
ПоказатьПредупреждение(, Сообщение,, "Ошибка");
Отказ = Истина;
Возврат;
КонецЕсли;
ОбновитьПрогресс(0,, Ложь);
ТелефонСлужбыПоддержки = "8-800-700-86-68";
АвтонастройкаПриСтартеПричина = "";
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Перем ИспользуетсяОднаОрганизация, ОсновнаяОрганизация;
КоличествоДнейЗаКотороеНужноПредупреждатьОбИстеченииСрока = 30;
ЕстьРеквизитОрганизацииНаименованиеСокращенное =
(Метаданные.Справочники.Организации.Реквизиты.Найти("НаименованиеСокращенное") <> Неопределено);
Параметры.Тестирование = Ложь;
Параметры.ХОХост = "reputils.1c.ru";
ОчиститьФорму();
Элементы.ВыполнитьПроверку.Доступность = Истина;
Обработка = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ТипОбъекта = Обработка.ПутьКОбъекту;
ПолучитьЗначенияНастроек(ИспользуетсяОднаОрганизация, ОсновнаяОрганизация);
Если (НЕ ОсновнаяОрганизация.Пустая()) И (ИспользуетсяОднаОрганизация) Тогда
Учетка = ПолучитьУчетнуюЗапись(ОсновнаяОрганизация);
Если Учетка <> Неопределено И Учетка.ОбменВУниверсальномФормате И СпецоператорСвязиПоддерживается(Учетка.СпецоператорСвязи) Тогда
Организация = ОсновнаяОрганизация;
Элементы.Организация.СписокВыбора.Добавить(ОсновнаяОрганизация);
Элементы.Организация.Видимость = Ложь;
ОбновитьЭлементыПриИзмененииОрганизации();
Возврат;
КонецЕсли;
КонецЕсли;
МассивДоступныхОрганизаций = ПолучитьДоступныеОрганизации();
Элементы.Организация.СписокВыбора.ЗагрузитьЗначения(МассивДоступныхОрганизаций);
Для Каждого Эл Из Элементы.Организация.СписокВыбора Цикл
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(Эл.Значение.Ссылка);
Если КриптографияЭДКОКлиентСервер.ЭтоПодписьСервиса(МестоХраненияКлюча) Тогда
Эл.Представление = Строка(Эл.Значение) + ", 1С-Fresh";
ИначеЕсли КриптографияЭДКОКлиентСервер.ЭтоОблачнаяПодпись(МестоХраненияКлюча) Тогда
Эл.Представление = Строка(Эл.Значение) + ", 1С:DSS";
КонецЕсли;
КонецЦикла;
Если МассивДоступныхОрганизаций.Количество() = 1 Тогда
Организация = МассивДоступныхОрганизаций[0];
Элементы.Организация.ТолькоПросмотр = Истина;
ОбновитьЭлементыПриИзмененииОрганизации();
ИначеЕсли МассивДоступныхОрганизаций.Количество() > 1 Тогда
Если НЕ ОсновнаяОрганизация.Пустая() Тогда
Если МассивДоступныхОрганизаций.Найти(ОсновнаяОрганизация) <> Неопределено Тогда
Организация = ОсновнаяОрганизация;
ОбновитьЭлементыПриИзмененииОрганизации();
Возврат;
КонецЕсли;
КонецЕсли;
ИначеЕсли МассивДоступныхОрганизаций.Количество() = 0 Тогда
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьКонтекстЭДОРезультат(Результат, ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры = Неопределено Тогда
ДополнительныеПараметры = Новый Структура;
КонецЕсли;
Если Результат.Свойство("КонтекстЭДО") Тогда
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
КонтекстЭДО = Результат.КонтекстЭДО;
ОсновнаяУчетнаяЗапись = ПолучитьУчетнуюЗапись(Организация);
ИспользоватьИнтерактивноеУведомление = Ложь;
Если ДополнительныеПараметры.Свойство("ИспользоватьИнтерактивноеУведомление") Тогда
ИспользоватьИнтерактивноеУведомление = ДополнительныеПараметры.ИспользоватьИнтерактивноеУведомление;
КонецЕсли;
Если ОсновнаяУчетнаяЗапись <> Неопределено Тогда
ПараметрыОрганизации = ПолучитьСведенияОбОрганизации(Организация);
ДополнительныеПараметры.Вставить("УчетнаяЗаписьДокументооборота", ОсновнаяУчетнаяЗапись.Ссылка);
ДополнительныеПараметры.Вставить("ПараметрыОрганизации", ПараметрыОрганизации);
Иначе
ДополнительныеПараметры.Вставить("УчетнаяЗаписьДокументооборота", Неопределено);
ДополнительныеПараметры.Вставить("ПараметрыОрганизации", Неопределено);
КонецЕсли;
Если ДополнительныеПараметры.УчетнаяЗаписьДокументооборота <> Неопределено Тогда
ИсхПараметры = Новый Структура("ИспользоватьИнтерактивноеУведомление", ИспользоватьИнтерактивноеУведомление);
ИсхПараметры.Вставить("ВхПараметры", ДополнительныеПараметры);
ВыполняемоеОповещение = Новый ОписаниеОповещения("АвтоматическаяНастройкаУчетнойЗаписиЗавершение", ЭтотОбъект, ИсхПараметры);
УведомлятьТолькоОбОшибках = Истина;
ИгнорироватьРежимАвтонастройки = Истина;
ТихийРежим = Истина;
ЗапрашиватьПараметрыОрганизацииПриНеобходимости = Ложь;
ВыполнятьРасшифровкуЗашифрованнойЧастиФайлаАвтонастроки = Ложь;
КонтекстЭДОКлиент.АвтоматическаяНастройкаУчетнойЗаписи(
ДополнительныеПараметры.УчетнаяЗаписьДокументооборота,
ДополнительныеПараметры.ПараметрыОрганизации,
ВыполняемоеОповещение,
УведомлятьТолькоОбОшибках,
ИгнорироватьРежимАвтонастройки,
ТихийРежим,
ЗапрашиватьПараметрыОрганизацииПриНеобходимости,,,,
ВыполнятьРасшифровкуЗашифрованнойЧастиФайлаАвтонастроки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АвтоматическаяНастройкаУчетнойЗаписиЗавершение(Результат, ДополнительныеПараметры) Экспорт
АвтонастройкаПриСтартеПричина = "";
Если Результат.Свойство("РезультатНастройки") Тогда
РезультатНастройки = Результат.РезультатНастройки;
ИначеЕсли Результат.Свойство("РезультатПрименения") Тогда
РезультатНастройки = Результат.РезультатПрименения;
Иначе
РезультатНастройки = Неопределено;
КонецЕсли;
Если Результат.Свойство("ОписаниеРезультата") Тогда
АвтонастройкаПриСтартеПричина = Результат.ОписаниеРезультата;
КонецЕсли;
Если ТипЗнч(РезультатНастройки) = Тип("Булево") Тогда
АвтонастройкаПриСтарте = РезультатНастройки;
Если ДополнительныеПараметры.ИспользоватьИнтерактивноеУведомление Тогда
Если РезультатНастройки = Истина Тогда
Сообщение = НСтр("ru = 'Автоматическая настройка успешно завершена.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
ИначеЕсли РезультатНастройки = Ложь Тогда
Сообщение = НСтр("ru = 'Текущие настройки учетной записи актуальны!'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ДополнительныеПараметры.Свойство("ВхПараметры") Тогда
Если ДополнительныеПараметры.ВхПараметры.Свойство("Команда") Тогда
НачатьПроверку(ДополнительныеПараметры.ВхПараметры.Команда, Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОбновитьЭлементыПриИзмененииОрганизации();
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыПриИзмененииОрганизации()
ОсновнаяУчетнаяЗапись = ПолучитьУчетнуюЗапись(Организация);
Если ЗначениеЗаполнено(ОсновнаяУчетнаяЗапись) И КриптографияЭДКОКлиентСервер.ЭтоПодписьСервиса(ОсновнаяУчетнаяЗапись) Тогда
Элементы.ДекорацияТекстИнфо.Заголовок =
"В ходе диагностики выполняются:
|- проверки учетной записи
|- подключение к внешним сервисам
|- прочие проверки";
Иначе
Элементы.ДекорацияТекстИнфо.Заголовок =
"В ходе диагностики выполняются:
|- проверки учетной записи
|- подключение к внешним сервисам
|- тестовая операция с ключом
|- прочие проверки";
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПодготовкаИЗапускВсехПроверок
&НаКлиенте
Функция ВыполнитьПроверку(Вид, КриптокомпонентГотов = Ложь, ПроверкаПодключенийЗавершена = Ложь)
Если Вид = 0 Тогда
ОбновитьПрогресс(15 * Вид);
ПоместитьИнформациюОбУчетнойЗаписиВОтчет();
ВыполнитьПроверкуУчетнойЗаписи();
ИначеЕсли Вид = 1 И РезультатыДиагностики.НастройкиДиагностики[Вид].Пометка Тогда
ОбновитьПрогресс(15 * Вид);
ВыполнитьПроверкуПодключений();
ИначеЕсли Вид = 2 И РезультатыДиагностики.НастройкиДиагностики[Вид].Пометка Тогда
Если ПроверкаПодключенийЗавершена Тогда
ОбновитьПрогресс(15 * Вид);
ВыполнитьПроверкуКомпонентов();
КонецЕсли;
ИначеЕсли Вид = 3 И РезультатыДиагностики.НастройкиДиагностики[Вид].Пометка Тогда
Если КриптокомпонентГотов Тогда
ОбновитьПрогресс(15 * Вид);
ВыполнитьПроверкуСертификатов();
КонецЕсли;
ИначеЕсли Вид = 4 И РезультатыДиагностики.НастройкиДиагностики[Вид].Пометка Тогда
Если КриптокомпонентГотов Тогда
ОбновитьПрогресс(15 * Вид);
ВыполнитьПроверкуКриптоопераций();
КонецЕсли;
КонецЕсли;
Если Вид = 2 И НЕ РезультатыДиагностики.НастройкиДиагностики[Вид].Пометка Тогда
Если ПроверкаПодключенийЗавершена Тогда
ВсеПроверкиЗавершены(1, Неопределено);
КонецЕсли;
КонецЕсли;
КонецФункции
&НаСервере
Функция ЗаполнитьОбщиеПараметры(ПараметрыСервера)
КонтекстМодуля = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ПараметрыСервера.Вставить("Организация", ИзвлечьПоля(Организация));
Если НЕ ПараметрыСервера.Организация.Свойство("КПП") Тогда
ПараметрыСервера.Организация.Вставить("КПП", "");
КонецЕсли;
Если НЕ ПараметрыСервера.Организация.Свойство("КодПоОКПО") Тогда
ПараметрыСервера.Организация.Вставить("КодПоОКПО", "");
КонецЕсли;
РеквизитыОрганизации = "КППЮЛ,ОКПО,";
СтруктураДанныхОрганизации = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(Организация,, РеквизитыОрганизации);
Если СтруктураДанныхОрганизации.Свойство("КППЮЛ") Тогда
ПараметрыСервера.Организация.Вставить("КПП", СтруктураДанныхОрганизации.КППЮЛ);
КонецЕсли;
Если СтруктураДанныхОрганизации.Свойство("ОКПО") Тогда
ПараметрыСервера.Организация.Вставить("КодПоОКПО", СтруктураДанныхОрганизации.ОКПО);
КонецЕсли;
ПараметрыСервера.Вставить("ОрганизацияЯвляетсяИП", ОрганизацияЯвляетсяИП(Организация));
ПараметрыСервера.Вставить("УчетнаяЗаписьОбмена", ИзвлечьПоля(Организация.УчетнаяЗаписьОбмена));
КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(Организация.УчетнаяЗаписьОбмена, ПараметрыСервера);
Результат = ПолучитьДополнительныеРеквизитыУчетнойЗаписи(Организация.УчетнаяЗаписьОбмена);
ПараметрыСервера.Вставить("ДополнительныеРеквизитыУчетнойЗаписи", Результат);
Результат = ПолучитьДополнительныеРеквизитыУчетнойЗаписиПолучатели(Организация.УчетнаяЗаписьОбмена);
ПараметрыСервера.Вставить("ДополнительныеРеквизитыУчетнойЗаписиПолучатели", Результат);
ПараметрыСервера.Вставить("МетаданныеКлиент", ПолучитьРеквизитыМетаданных());
ПутьВК = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ПолучитьПутьВК();
ПараметрыСервера.Вставить("ВерсияКК", ПутьВК);
ЧасовойПояс = Неопределено;
ДатаКлиента = КонтекстМодуля.ТекущаяДатаСеансаКлиент(ЧасовойПояс);
ПараметрыСервера.Вставить("ЧасовойПояс", ЧасовойПояс);
ПараметрыСервера.Вставить("ДатаКлиента", ДатаКлиента);
ПараметрыСервера.Вставить("ДатаКлиентаXML", XMLСтрока(ДатаКлиента));
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция РежимРаботы()
СС = СтрокаСоединенияИнформационнойБазы();
Если Найти(НРег(СС), "srvr=""") > 0 И Найти(НРег(СС), "ref=""") > 0 Тогда
Возврат 0;
ИначеЕсли Найти(НРег(СС), "file=""") > 0 Тогда
Возврат 1;
ИначеЕсли Найти(НРег(СС), "ws=""") > 0 Тогда
Возврат 2;
Иначе
Возврат 9;
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ПоместитьИнформациюОбУчетнойЗаписиВОтчет()
ОрганизацияКлиент = РезультатыДиагностики.Параметры.Организация;
УчетнаяЗаписьОбменаКлиент = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена;
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
ДополнительныеРеквизитыУчетнойЗаписи = РезультатыДиагностики.Параметры.ДополнительныеРеквизитыУчетнойЗаписи;
РегНомерПФР = "";
Если ДополнительныеРеквизитыУчетнойЗаписи <> Неопределено Тогда
РегНомерПФР = ДополнительныеРеквизитыУчетнойЗаписи.РегНомерПФР;
КонецЕсли;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить(
"ПодключенныеНаправления",
РезультатыДиагностики.Параметры.ДополнительныеРеквизитыУчетнойЗаписиПолучатели);
КодРежима = РежимРаботы();
Если КодРежима = 0 Тогда
РежимИБ = "Серверный";
ИначеЕсли КодРежима = 1 Тогда
РежимИБ = "Файловый";
ИначеЕсли КодРежима = 2 Тогда
РежимИБ = "Веб-сервер";
Иначе
РежимИБ = "Не удалось определить";
КонецЕсли;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("РежимИБ", РежимИБ);
РезультатыДиагностики.Отчет.Абонент.Вставить("НазваниеАбонента", ?(ЕстьРеквизитОрганизацииНаименованиеСокращенное,
ОрганизацияКлиент.НаименованиеСокращенное, ОрганизацияКлиент.Наименование));
РезультатыДиагностики.Отчет.Абонент.Вставить("ИП", РезультатыДиагностики.Параметры.ОрганизацияЯвляетсяИП);
РезультатыДиагностики.Отчет.Абонент.Вставить("ИНН", СокрП(ОрганизацияКлиент.ИНН));
РезультатыДиагностики.Отчет.Абонент.Вставить("КПП", СокрП(ОрганизацияКлиент.КПП));
РезультатыДиагностики.Отчет.Абонент.Вставить("ОКПО", ОрганизацияКлиент.КодПоОКПО);
РезультатыДиагностики.Отчет.Абонент.Вставить("РегНомерПФР", РегНомерПФР);
РезультатыДиагностики.Отчет.Абонент.Вставить("УчетнаяЗапись", Новый Структура);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("ИдентификаторАбонента", УчетнаяЗаписьОбменаКлиент.ИдентификаторАбонента);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("ЛицензияНаименование", УчетнаяЗаписьОбменаКлиент.ЛицензияНаименование);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("НачалоДействияЛицензииДата", УчетнаяЗаписьОбменаКлиент.ЛицензияДатаНачала);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("ОкончаниеДействияЛицензииДата", УчетнаяЗаписьОбменаКлиент.ЛицензияДатаОкончания);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("Криптопровайдер", РезультатыДиагностики.Автонастройка.ВладелецЭП.Криптопровайдер);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("КриптопровайдерXML", РезультатыДиагностики.Автонастройка.ВладелецЭП.КриптопровайдерXML);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("ЭПВоблаке", УчетнаяЗаписьОбменаКлиент.ЭлектроннаяПодписьВМоделиСервиса);
РезультатыДиагностики.Отчет.Абонент.УчетнаяЗапись.Вставить("МодельХраненияЗакрытогоКлюча", КриптографияЭДКОКлиентСервер.МодельХраненияЗакрытогоКлюча(МестоХраненияКлюча));
КонецФункции
&НаКлиенте
Функция ПолучитьИнформациюФайлаАвтонастройки()
ОрганизацияКлиент = РезультатыДиагностики.Параметры.Организация;
УчетнаяЗаписьОбменаКлиент = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена;
ДанныеАвтонастройки = Новый Структура("СведенияРегистрации, ВладелецЭП, СертификатыCA, СертификатыROOT, Получатели");
ДанныеАвтонастройки.СведенияРегистрации = Новый Структура;
ДанныеАвтонастройки.ВладелецЭП = Новый Структура;
ДанныеАвтонастройки.СертификатыCA = Новый Соответствие;
ДанныеАвтонастройки.СертификатыROOT = Новый Соответствие;
ДанныеАвтонастройки.Получатели = Новый СписокЗначений;
ДанныеАвтонастройки.Получатели.Добавить("ФСРАР");
ДанныеАвтонастройки.Получатели.Добавить("ПФР");
ДанныеАвтонастройки.Получатели.Добавить("ФНС");
ДанныеАвтонастройки.Получатели.Добавить("ФСГС");
ДанныеАвтонастройки.Получатели.Добавить("РПН");
ДанныеАвтонастройки.Получатели.Добавить("ФТС");
ДанныеАвтонастройки.Получатели.Добавить("ФСС");
ПараметрыФункции = новый Структура("ВыводитьСообщения, ФайлИзКэша", Ложь, Ложь);
ПараметрыФункции.Вставить("ВызовИзМастераПодключенияК1СОтчетности", Ложь);
ПараметрыФункции.Вставить("ТекстОшибокДляМастераПодключенияК1СОтчетности", "");
ПараметрыФункции.Вставить("ОбращениеКСерверуОтключено", Ложь);
ПараметрыФункции.Вставить("ДанныеУзлаКонфиденциальнаяИнформацияАдрес", Неопределено);
ПараметрыФункции.Вставить("ВременныйФайлОбновленийАдрес", Неопределено);
ПараметрыФункции.Вставить("УчетнаяЗапись", ОрганизацияКлиент.УчетнаяЗаписьОбмена);
ПараметрыФункции.Вставить("ИдентификаторАбонента", УчетнаяЗаписьОбменаКлиент.ИдентификаторАбонента);
ПараметрыФункции.Вставить("СпецоператорСвязи", УчетнаяЗаписьОбменаКлиент.СпецоператорСвязи);
ПараметрыФункции.Вставить("ДействиеОблачнойПодписи", "");
ПараметрыФункции.Вставить("ОблачныйСертификат", Неопределено);
ПараметрыФункции.Вставить("СерверОблачнойПодписи", "");
Если КонтекстЭДОКлиент.РегистрацияПолучитьДанныеССервераКлиент(ПараметрыФункции, Ложь) Тогда
Для Каждого Сертификат из КонтекстЭДОКлиент.Сертификаты Цикл
Если Сертификат.Хранилище = "CA" Тогда
ДанныеАвтонастройки.СертификатыCA.Вставить(Сертификат.Отпечаток, Сертификат.Тело);
ИначеЕсли Сертификат.Хранилище = "ROOT" Тогда
ДанныеАвтонастройки.СертификатыROOT.Вставить(Сертификат.Отпечаток, Сертификат.Тело);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = РезультатыДиагностики.Параметры.ДополнительныеРеквизитыУчетнойЗаписиПолучатели;
Для Каждого Запись из Результат Цикл
Получатель = ДанныеАвтонастройки.Получатели.НайтиПоЗначению(Запись.ТипПолучателяСтрокой);
Если Получатель <> Неопределено Тогда
Получатель.Пометка = Истина;
КонецЕсли;
КонецЦикла;
ПеречислениеТипыКриптоПровайдеров = ПолучитьЗначенияПеречисления("ТипыКриптоПровайдеров");
ДопРеквизиты = РезультатыДиагностики.Параметры.ДополнительныеРеквизитыУчетнойЗаписи;
Если ДопРеквизиты <> Неопределено Тогда
СвойстваКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдераПоУмолчанию(ДопРеквизиты.ТипКриптопровайдера);
ВладелецЭПИмяКриптопровайдера = СвойстваКриптопровайдера.Имя;
ВладелецЭПИмяКриптопровайдера2 = СвойстваКриптопровайдера.Представление;
ДанныеАвтонастройки.ВладелецЭП.Вставить("Фамилия", ДопРеквизиты.ВладелецЭЦПФамилия);
ДанныеАвтонастройки.ВладелецЭП.Вставить("Имя", ДопРеквизиты.ВладелецЭЦПИмя);
ДанныеАвтонастройки.ВладелецЭП.Вставить("Отчество", ДопРеквизиты.ВладелецЭЦПОтчество);
ДанныеАвтонастройки.ВладелецЭП.Вставить("СНИЛС", ДопРеквизиты.ВладелецЭЦПСНИЛС);
ДанныеАвтонастройки.ВладелецЭП.Вставить("Должность", ДопРеквизиты.ВладелецЭЦПДолжность);
ДанныеАвтонастройки.ВладелецЭП.Вставить("Криптопровайдер", ВладелецЭПИмяКриптопровайдера);
ДанныеАвтонастройки.ВладелецЭП.Вставить("КриптопровайдерXML", ВладелецЭПИмяКриптопровайдера2);
ДанныеАвтонастройки.ВладелецЭП.Вставить("КриптопровайдерENUM", ДопРеквизиты.ТипКриптопровайдера);
ДанныеАвтонастройки.СведенияРегистрации.Вставить("КраткоеНаименование", ДопРеквизиты.КраткоеНаименование);
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ТелефонОсновной", ДопРеквизиты.ТелефонОсновной);
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ЭлектроннаяПочта", ДопРеквизиты.ЭлектроннаяПочта);
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ИНН", СокрП(ДопРеквизиты.ИНН));
ДанныеАвтонастройки.СведенияРегистрации.Вставить("КПП", СокрП(ДопРеквизиты.КПП));
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ОГРН", ДопРеквизиты.ОГРН);
ДанныеАвтонастройки.СведенияРегистрации.Вставить("РегНомерПФР", ДопРеквизиты.РегНомерПФР);
Иначе
ДанныеАвтонастройки.ВладелецЭП.Вставить("Фамилия", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("Имя", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("Отчество", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("СНИЛС", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("Должность", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("Криптопровайдер", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("КриптопровайдерXML", "");
ДанныеАвтонастройки.ВладелецЭП.Вставить("КриптопровайдерENUM", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("КраткоеНаименование", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ТелефонОсновной", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ЭлектроннаяПочта", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ИНН", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("КПП", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("ОГРН", "");
ДанныеАвтонастройки.СведенияРегистрации.Вставить("РегНомерПФР", "");
КонецЕсли;
Возврат ДанныеАвтонастройки;
КонецФункции
&НаКлиенте
Функция ОпределитьСписокПроверки()
Проверять = Истина;
Настройки = Новый СписокЗначений();
Настройки.Добавить(0, "Проверка учетной записи", Проверять);
Настройки.Добавить(1, "Проверка ресурсов", Проверять);
Если КриптографияЭДКОКлиентСервер.ЭтоПодписьСервиса(РезультатыДиагностики.Параметры) Тогда
Проверять = Ложь;
КонецЕсли;
Настройки.Добавить(2, "Проверка криптографии", Проверять);
Настройки.Добавить(3, "Проверка сертификатов", Проверять);
Настройки.Добавить(4, "Проверка криптоопераций", Проверять);
Возврат Настройки;
КонецФункции
&НаКлиенте
Процедура НачатьПроверку(Команда, АвтонастройкаВыполнена = Ложь)
Если Организация.Пустая() Тогда
Сообщение = НСтр("ru = 'Необходимо сначала выбрать организацию'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
Возврат;
КонецЕсли;
ОсновнаяУчетнаяЗапись = ПолучитьУчетнуюЗапись(Организация);
Если ОсновнаяУчетнаяЗапись = Неопределено Тогда
Сообщение = "ru = 'У организации %1 нет подписки на 1С-Отчетность'";
Сообщение = СтрЗаменить(Сообщение, "%1", Организация);
Сообщение = НСтр(Сообщение);
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
Возврат;
КонецЕсли;
Сертификат = МультирежимВызовСервера.СертификатПользователя(ОсновнаяУчетнаяЗапись.Ссылка);
Если НЕ Сертификат.Найден Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(Сертификат.ТекстОшибки);
Возврат;
КонецЕсли;
ОчиститьФормуСОбновлением();
ОбновитьПрогресс(0, "Выполняется автонастройка (%1%)");
Если Не АвтонастройкаВыполнена Тогда
Контекст = Новый Структура;
Контекст.Вставить("Команда", Команда);
ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьКонтекстЭДОРезультат", ЭтотОбъект, Контекст);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
Возврат;
КонецЕсли;
ОбновитьПрогресс(100, "Выполняется автонастройка (%1%)");
РезультатыДиагностики = Новый Структура;
РезультатыДиагностики.Вставить("Отчет", Новый Структура);
РезультатыДиагностики.Вставить("Автонастройка", Неопределено);
РезультатыДиагностики.Вставить("Параметры", Новый Структура);
ЗаполнитьОбщиеПараметры(РезультатыДиагностики.Параметры);
РезультатыДиагностики.Автонастройка = ПолучитьИнформациюФайлаАвтонастройки();
МетаданныеКлиент = РезультатыДиагностики.Параметры.МетаданныеКлиент;
ДатаКлиента = РезультатыДиагностики.Параметры.ДатаКлиента;
ДатаКлиентаXML = РезультатыДиагностики.Параметры.ДатаКлиентаXML;
ЧасовойПояс = РезультатыДиагностики.Параметры.ЧасовойПояс;
РезультатыДиагностики.Отчет.Вставить("ВерсияФормата", "1.0");
РезультатыДиагностики.Отчет.Вставить("ВерсияПрограммы", МетаданныеКлиент.Версия);
РезультатыДиагностики.Отчет.Вставить("ДатаВремя", ДатаКлиентаXML);
РезультатыДиагностики.Отчет.Вставить("Абонент", Новый Структура);
РезультатыДиагностики.Отчет.Вставить("Проверки", Новый Структура);
РезультатыДиагностики.Отчет.Вставить("Рекомендации", Новый Массив);
ФлагиМастераИзмененияПараметров = Новый Структура("ПродлитьСертификат, ПереиздатьСертификат", Ложь, Ложь);
ФлагиМастераИзмененияПараметров.Вставить("ПродлитьЛицензиюНа1СОтчетность", Ложь);
ФлагиМастераИзмененияПараметров.Вставить("ИзменитьРеквизитыПодключенияК1СОтчетности", Ложь);
РезультатыДиагностики.Отчет.Вставить("ФлагиМастераИзмененияПараметров", ФлагиМастераИзмененияПараметров);
РезультатыДиагностики.Отчет.Вставить("ДополнительнаяИнформация", Новый Соответствие);
РезультатыДиагностики.Отчет.Вставить("ЖурналРегистрации", Новый Массив);
РезультатыДиагностики.Отчет.Вставить("НачалоФормирования", ТекущаяУниверсальнаяДатаВМиллисекундах());
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ЧасовойПояс", ЧасовойПояс);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Метаданные.Версия", МетаданныеКлиент.Версия);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Метаданные.Синоним", МетаданныеКлиент.Синоним);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Криптокомпонента.Версия", Сред(РезультатыДиагностики.Параметры.ВерсияКК, Найти(РезультатыДиагностики.Параметры.ВерсияКК, ".") + 1));
Если МетаданныеКлиент.УровниЖР = 0 Тогда
УровниТекстом = "Не записывать ничего";
ИначеЕсли МетаданныеКлиент.УровниЖР = 1 Тогда
УровниТекстом = "Только ошибки";
ИначеЕсли МетаданныеКлиент.УровниЖР = 2 Тогда
УровниТекстом = "Только ошибки и предупреждения";
ИначеЕсли МетаданныеКлиент.УровниЖР = 3 Тогда
УровниТекстом = "Только ошибки, предупреждения и информация";
Иначе
УровниТекстом = "Записывать все";
КонецЕсли;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("УровеньЛогированияЖурнала", УровниТекстом);
Если АвтонастройкаПриСтарте = Неопределено Тогда
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("АвтонастройкаПриСтарте", "Не выполнена");
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("АвтонастройкаПриСтартеПричина", Строка(АвтонастройкаПриСтартеПричина));
ИначеЕсли АвтонастройкаПриСтарте Тогда
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("АвтонастройкаПриСтарте", "Выполнена");
ИначеЕсли НЕ АвтонастройкаПриСтарте Тогда
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("АвтонастройкаПриСтарте", "Выполнена с отрицательным результатом");
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("АвтонастройкаПриСтартеПричина", Строка(АвтонастройкаПриСтартеПричина));
КонецЕсли;
ТипКлиентаЧислом = -2;
ТипКлиентаСтр = ТипКлиента(ТипКлиентаЧислом);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ТипКлиентскогоПодключения", ТипКлиентаСтр);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ТипКлиентскогоПодключенияЧислом", ТипКлиентаЧислом);
РезультатыДиагностики.Вставить("НастройкиДиагностики", ОпределитьСписокПроверки());
ПроверкаПодключенийЗавершена = Ложь;
ККГотов = Ложь;
Для Каждого Проверка из РезультатыДиагностики.НастройкиДиагностики Цикл
Если Проверка.Значение = 1 И НЕ Проверка.Пометка Тогда
ПроверкаПодключенийЗавершена = Истина;
КонецЕсли;
ВыполнитьПроверку(Проверка.Значение, ККГотов, ПроверкаПодключенийЗавершена);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция JSONParse(СтрокаJSON)
ЧтениеJSON = Новый ЧтениеJSON;
Попытка
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
СвойстваПолучателей = ПрочитатьJSON(ЧтениеJSON, Ложь);
Исключение
Возврат Новый Массив;
КонецПопытки;
Возврат СвойстваПолучателей;
КонецФункции
&НаКлиенте
Процедура Пустое(Результат) Экспорт
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура НачатьВызовЗаписатьЗавершение(Результат, ВхПараметры) Экспорт
Если Результат.Выполнено Тогда
Оповещение = Новый ОписаниеОповещения("НачатьВызовPKCS7ПолучитьСвойстваПолучателейЗавершение", ЭтотОбъект, ВхПараметры);
ВхПараметры.Криптокомпонент.НачатьВызовPKCS7ПолучитьСвойстваПолучателей(Оповещение, Результат.ИмяФайла);
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ИзвлечьСведенияИзКонтейнеров", ЭтотОбъект, ВхПараметры.Проверяемые);
ВыполнитьОбработкуОповещения(Оповещение, Истина);
КонецПроцедуры
&НаСервере
Процедура УдалитьИзВременногоХранилищаНесколько(Адрес1, Адрес2 = Неопределено, Адрес3 = Неопределено, Адрес4 = Неопределено, Адрес5 = Неопределено)
УдалитьИзВременногоХранилища(Адрес1);
Если Адрес2 <> Неопределено Тогда
УдалитьИзВременногоХранилища(Адрес2);
КонецЕсли;
Если Адрес3 <> Неопределено Тогда
УдалитьИзВременногоХранилища(Адрес3);
КонецЕсли;
Если Адрес4 <> Неопределено Тогда
УдалитьИзВременногоХранилища(Адрес4);
КонецЕсли;
Если Адрес5 <> Неопределено Тогда
УдалитьИзВременногоХранилища(Адрес5);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьВызовPKCS7ПолучитьСвойстваПолучателейЗавершение(Результат, ПараметрыВызова, ВхПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Строка") Тогда
РезультатПриведенный = СтрЗаменить(Результат, "\u0000", "");
СвойстваПолучателей = JSONParse(РезультатПриведенный);
Для i = 0 по СвойстваПолучателей.Количество()-1 Цикл
СвойстваПолучателей[i].Вставить("found", Истина);
КонецЦикла;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"][ВхПараметры.ТекущийПроверяемый.Сообщение]
.СодержимоеТранспортныхКонтейнеров[ВхПараметры.ТекущийПроверяемый.Контейнер]
.Документы[ВхПараметры.ТекущийПроверяемый.Документ].Сведения = СвойстваПолучателей;
ДокументКонтейнера = РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"][ВхПараметры.ТекущийПроверяемый.Сообщение]
.СодержимоеТранспортныхКонтейнеров[ВхПараметры.ТекущийПроверяемый.Контейнер]
.Документы[ВхПараметры.ТекущийПроверяемый.Документ];
УдалитьИзВременногоХранилищаНесколько(ДокументКонтейнера.СодержимоеWC, ДокументКонтейнера.Содержимое)
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("Пустое", ЭтотОбъект, Неопределено);
Для Каждого ВременныйФайл Из ПараметрыВызова Цикл
ЭтоLinuxИлиMacOS = ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() ИЛИ ОбщегоНазначенияКлиент.ЭтоMacOSКлиент();
#Если ВебКлиент Тогда
ЭтоВеб = Истина;
#Иначе
ЭтоВеб = Ложь;
#КонецЕсли
Если НЕ ЭтоВеб И НЕ ЭтоLinuxИлиMacOS Тогда
НачатьУдалениеФайлов(Оповещение, ВременныйФайл);
КонецЕсли;
КонецЦикла;
Оповещение = Новый ОписаниеОповещения("ИзвлечьСведенияИзКонтейнеров", ЭтотОбъект, ВхПараметры.Проверяемые);
ВыполнитьОбработкуОповещения(Оповещение, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПоискСертификатовНерасшифрованныхСообщенийЗавершение(Результат, ВхПараметры) Экспорт
Если Не Результат.Выполнено Тогда
ВсеПроверкиИСборСведенийЗавершены();
Возврат;
КонецЕсли;
Для Каждого Сертификат Из Результат.Сертификаты Цикл
Ссылки = ВхПараметры.СертификатыКонтексты.Получить(Сертификат.СерийныйНомер);
Если Ссылки = Неопределено Тогда
Продолжить;
КонецЕсли;
Для Каждого Ссылка Из Ссылки Цикл
РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"][Ссылка.Сообщение]
.СодержимоеТранспортныхКонтейнеров[Ссылка.Контейнер]
.Документы[Ссылка.Документ]
.Сведения[Ссылка.Сертификат].found = Истина;
КонецЦикла;
КонецЦикла;
ВсеПроверкиИСборСведенийЗавершены();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПоискСертификатовНерасшифрованныхСообщений()
СертификатыКПоиску = Новый Соответствие;
СертификатыРеквизиты = Новый Массив;
ИндексСообщения = -1;
Для Каждого Нерасшифрованный Из РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"] Цикл
ИндексСообщения = ИндексСообщения + 1;
ИндексКонтейнера = -1;
Для Каждого ТКонтейнер Из Нерасшифрованный.СодержимоеТранспортныхКонтейнеров Цикл
ИндексКонтейнера = ИндексКонтейнера + 1;
ИндексДокумента = -1;
Если ТКонтейнер.ОшибкаКонтейнера = 0 Тогда
Для Каждого ДокументВКонтейнере Из ТКонтейнер.Документы Цикл
ИндексДокумента = ИндексДокумента + 1;
Если ДокументВКонтейнере.ОшибкаДокумента = 0 И ДокументВКонтейнере.Сведения.Количество() > 0 Тогда
ИндексСертификата = -1;
Для Каждого СертификатДокумента Из ДокументВКонтейнере.Сведения Цикл
ИндексСертификата = ИндексСертификата + 1;
Контекст = Новый Структура("Сообщение, Контейнер, Документ, Сертификат", ИндексСообщения, ИндексКонтейнера, ИндексДокумента, ИндексСертификата);
Контексты = СертификатыКПоиску.Получить(СертификатДокумента.serial_number);
Если Контексты = Неопределено Тогда
Контексты = Новый Массив;
РеквизитыСертификата = Новый Структура("СерийныйНомер, Поставщик", СертификатДокумента.serial_number, СертификатДокумента.issuer);
СертификатыРеквизиты.Добавить(РеквизитыСертификата);
КонецЕсли;
Контексты.Добавить(Контекст);
СертификатыКПоиску.Вставить(СертификатДокумента.serial_number, Контексты);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если СертификатыРеквизиты.Количество() = 0 Тогда
ВсеПроверкиИСборСведенийЗавершены();
Иначе
Контекст = Новый Структура;
Контекст.Вставить("СертификатыРеквизиты", СертификатыРеквизиты);
Контекст.Вставить("СертификатыКонтексты", СертификатыКПоиску);
Оповещение = Новый ОписаниеОповещения("ВыполнитьПоискСертификатовНерасшифрованныхСообщенийЗавершение", ЭтотОбъект, Контекст);
КриптографияЭДКОКлиент.НайтиСертификаты(Оповещение, СертификатыРеквизиты, Ложь, Ложь, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзвлечьСведенияИзКонтейнеров(Результат, Проверяемые) Экспорт
Если НЕ Результат Тогда
Возврат;
КонецЕсли;
Если Проверяемые.Количество() = 0 Тогда
ВыполнитьПоискСертификатовНерасшифрованныхСообщений();
Возврат;
КонецЕсли;
ТекущийПроверяемый = Проверяемые[0];
Проверяемые.Удалить(0);
ДокументКонтейнера = РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"][ТекущийПроверяемый.Сообщение]
.СодержимоеТранспортныхКонтейнеров[ТекущийПроверяемый.Контейнер]
.Документы[ТекущийПроверяемый.Документ];
Контекст = Новый Структура("ТекущийПроверяемый, Проверяемые", ТекущийПроверяемый, Проверяемые);
ЭтоLinuxИлиMacOS = ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() ИЛИ ОбщегоНазначенияКлиент.ЭтоMacOSКлиент();
#Если ВебКлиент Тогда
ЭтоВеб = Истина;
#Иначе
ЭтоВеб = Ложь;
#КонецЕсли
Если ЭтоВеб ИЛИ ЭтоLinuxИлиMacOS Тогда
ДДBase64 = ПолучитьИзВременногоХранилища(ДокументКонтейнера.СодержимоеWC);
Контекст.Вставить("Криптокомпонент", РезультатыПодключенияКК.Криптокомпонент);
Оповещение = Новый ОписаниеОповещения("НачатьВызовЗаписатьЗавершение", ЭтотОбъект, Контекст);
ОперацииСФайламиЭДКОСлужебныйКлиент.Base64ВФайл(Оповещение, ДДBase64, Неопределено, Ложь, Неопределено);
Иначе
#Если НЕ ВебКлиент Тогда
ДД = ПолучитьИзВременногоХранилища(ДокументКонтейнера.Содержимое);
ЗашифрованныйФайл = ПолучитьИмяВременногоФайла("bin");
ДД.Записать(ЗашифрованныйФайл);
Оповещение = Новый ОписаниеОповещения("НачатьВызовPKCS7ПолучитьСвойстваПолучателейЗавершение", ЭтотОбъект, Контекст);
РезультатыПодключенияКК.Криптокомпонент.НачатьВызовPKCS7ПолучитьСвойстваПолучателей(Оповещение, ЗашифрованныйФайл);
#КонецЕсли
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьПолучениеКаталогаВременныхФайловЗавершение(Результат, ВхПараметры) Экспорт
Если Результат.Выполнено Тогда
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("КаталогВременныхФайлов", Результат.ИмяКаталога);
Иначе
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("КаталогВременныхФайлов", "<не удалось получить>");
КонецЕсли;
ЗаполнитьПрочуюИнформацию();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПрочуюИнформацию()
Если РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Получить("КаталогВременныхФайлов") = Неопределено Тогда
Оповещение = Новый ОписаниеОповещения("НачатьПолучениеКаталогаВременныхФайловЗавершение", ЭтотОбъект, Неопределено);
ОперацииСФайламиЭДКОКлиент.КаталогВременныхФайловНаКлиенте(Оповещение, Ложь,);
Возврат;
КонецЕсли;
МетаданныеКлиент = РезультатыДиагностики.Параметры.МетаданныеКлиент;
ИнфоОСистеме = Новый СистемнаяИнформация;
#Если НЕ ВебКлиент Тогда
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ИмяКомпьютера", ИмяКомпьютера());
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("АнтивирусноеПО", Новый Массив);
ДобавитьИнформациюОбАнтивирусах(РезультатыДиагностики.Отчет.ДополнительнаяИнформация["АнтивирусноеПО"]);
ДобавитьИнформациюОВерсияхКриптопровайдеров(РезультатыДиагностики.Отчет.ДополнительнаяИнформация);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("РазрядностьОС", ИнформацияОРазрядностиОС());
#КонецЕсли
Экраны = ПолучитьИнформациюЭкрановКлиента();
Всего = 0;
Для Каждого Экран из Экраны Цикл
Шаблон = "%1 x %2, %3 DPI";
ОписаниеЭкрана = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон,
Формат(Экран.Ширина, "ЧДЦ=; ЧГ="),
Формат(Экран.Высота, "ЧДЦ=; ЧГ="),
Экран.DPI);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Экран"+Всего, ОписаниеЭкрана);
Всего = Всего + 1;
КонецЦикла;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Метаданные.Синоним", МетаданныеКлиент.Синоним);
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ТипПлатформы", Строка(ИнфоОСистеме.ТипПлатформы));
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ВерсияОС", Строка(ИнфоОСистеме.ВерсияОС));
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ВерсияПриложения", Строка(ИнфоОСистеме.ВерсияПриложения));
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ОперативнаяПамять", Формат(ИнфоОСистеме.ОперативнаяПамять, "ЧДЦ=; ЧГ="));
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Процессор", Строка(ИнфоОСистеме.Процессор));
ВремяПроверки = ТекущаяУниверсальнаяДатаВМиллисекундах() - РезультатыДиагностики.Отчет.НачалоФормирования;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ПродолжительностьПроверкиСекунд", Цел(ВремяПроверки / 1000));
Если РезультатыПодключенияКК.Криптокомпонент = Неопределено Тогда
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ИнициализированныйКриптопровайдерКК", "<отсутствует>");
Иначе
Оповещение = Новый ОписаниеОповещения("ПолучениеИмяКриптопровайдераЗавершение", ЭтотОбъект, Неопределено);
РезультатыПодключенияКК.Криптокомпонент.НачатьПолучениеИмяКриптопровайдера(Оповещение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ЗаполнитьПрочуюИнформациюЕще()
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("Нерасшифрованные", Новый Массив);
ДобавитьИнформациюНаСервере(
РезультатыДиагностики.Отчет,
РезультатыДиагностики.Параметры);
Если РезультатыПодключенияКК.Криптокомпонент <> Неопределено Тогда
ТребуетсяПоискСертификатов = Ложь;
Проверяемые = Новый Массив;
ИндексСообщения = -1;
Для Каждого Нерасшифрованный Из РезультатыДиагностики.Отчет.ДополнительнаяИнформация["Нерасшифрованные"] Цикл
ИндексСообщения = ИндексСообщения + 1;
ИндексКонтейнера = -1;
Для Каждого ТКонтейнер Из Нерасшифрованный.СодержимоеТранспортныхКонтейнеров Цикл
ИндексКонтейнера = ИндексКонтейнера + 1;
ИндексДокумента = -1;
Если ТКонтейнер.ОшибкаКонтейнера = 0 Тогда
Для Каждого ДокументВКонтейнере Из ТКонтейнер.Документы Цикл
ИндексДокумента = ИндексДокумента + 1;
Если ДокументВКонтейнере.ОшибкаДокумента = 0 И ДокументВКонтейнере.Содержимое <> Неопределено Тогда
Контекст = Новый Структура("Сообщение, Контейнер, Документ", ИндексСообщения, ИндексКонтейнера, ИндексДокумента);
Проверяемые.Добавить(Контекст);
КонецЕсли;
Если ДокументВКонтейнере.Сведения.Количество() > 0 И Не ТребуетсяПоискСертификатов Тогда
ТребуетсяПоискСертификатов = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если Проверяемые.Количество() > 0 Тогда
Оповещение = Новый ОписаниеОповещения("ИзвлечьСведенияИзКонтейнеров", ЭтотОбъект, Проверяемые);
НачатьПодключениеРасширенияРаботыСФайлами(Оповещение);
Возврат Ложь;
Иначе
Если ТребуетсяПоискСертификатов Тогда
ВыполнитьПоискСертификатовНерасшифрованныхСообщений();
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ПолучениеИмяКриптопровайдераЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
ИмяКриптопровайдера = "<отсутствует>";
Иначе
ИмяКриптопровайдера = Результат;
КонецЕсли;
РезультатыДиагностики.Отчет.ДополнительнаяИнформация.Вставить("ИнициализированныйКриптопровайдерКК", ИмяКриптопровайдера);
КонецПроцедуры
&НаСервере
Функция ДобавитьИнформациюНаСервере(Отчет, ВхПараметры)
ДобавитьИнформациюОНерасшифрованных(Отчет.ДополнительнаяИнформация["Нерасшифрованные"], ВхПараметры.Организация.Ссылка, ВхПараметры.УчетнаяЗаписьОбмена.Ссылка, ЭтотОбъект.УникальныйИдентификатор);
ДобавитьИнформациюОВнешнемМодуле(Отчет.ДополнительнаяИнформация);
Отчет.Вставить("ИдентификаторЗаданияЖР", Неопределено);
Отчет.Вставить("АдресСодержимогоЖР", Неопределено);
Отчет.Вставить("СодержимоеЖРПолучено", Ложь);
ПараметрыЗапуска = Новый Структура("Начало, Окончание");
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтотОбъект.УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "Сбор информации журнала регистрации для диагностики";
ПараметрыВыполнения.ОжидатьЗавершение = Ложь;
Задание = ДлительныеОперации.ВыполнитьВФоне("Обработки.ДокументооборотСКонтролирующимиОрганами.ДобавитьИнформациюЖР", ПараметрыЗапуска, ПараметрыВыполнения);
Отчет.Вставить("ИдентификаторЗаданияЖР", Задание.ИдентификаторЗадания);
Отчет.Вставить("АдресСодержимогоЖР", Задание.АдресРезультата);
Если Задание.Статус = "Выполнено" Тогда
Отчет.Вставить("ИдентификаторЗаданияЖР", "ffffffff-d0ne-d0ne-d0ne-ffffffffffff");
КонецЕсли;
Если РежимРаботы() = 0 Тогда
ИнфоОСистеме = Новый СистемнаяИнформация;
Отчет.ДополнительнаяИнформация.Вставить("Сервер.ВерсияОС", Строка(ИнфоОСистеме.ВерсияОС));
Отчет.ДополнительнаяИнформация.Вставить("Сервер.ОперативнаяПамять", Формат(ИнфоОСистеме.ОперативнаяПамять, "ЧДЦ=; ЧГ="));
Отчет.ДополнительнаяИнформация.Вставить("Сервер.Процессор", Строка(ИнфоОСистеме.Процессор));
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ПолучитьНастройкуСлужбы(Знач Путь)
WshShell = Неопределено;
#Если НЕ МобильныйКлиент Тогда
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
Исключение
КонецПопытки;
#КонецЕсли
Если WshShell = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ПолныйПуть = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\"+Путь;
ПолныйПуть = СтрЗаменить(ПолныйПуть, "HKEY_LOCAL_MACHINE", "HKLM");
Настройка = Новый Структура("Start, ImagePath, DisplayName, Группа, Запущен",,,,, Ложь);
Попытка
Значение1 = WshShell.RegRead(ПолныйПуть + "\Start");
Исключение
Значение1 = -1;
КонецПопытки;
Попытка
Значение2 = WshShell.RegRead(ПолныйПуть + "\ImagePath");
Исключение
Если Значение1 = -1 Тогда
Возврат Неопределено;
КонецЕсли;
Значение2 = "";
КонецПопытки;
Попытка
Значение3 = WshShell.RegRead(ПолныйПуть + "\DisplayName");
Исключение
Значение3 = "";
КонецПопытки;
Если Лев(Значение3, 1) = "@" Тогда
Значение3 = Путь;
КонецЕсли;
Настройка.Start = Значение1;
Настройка.ImagePath = Значение2;
Настройка.DisplayName = Значение3;
ЭтоLinuxИлиMacOS = ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() ИЛИ ОбщегоНазначенияКлиент.ЭтоMacOSКлиент();
#Если ВебКлиент Тогда
ЭтоВеб = Истина;
#Иначе
ЭтоВеб = Ложь;
#КонецЕсли
Если ЭтоВеб ИЛИ ЭтоLinuxИлиMacOS Тогда
Временный = "";
Возврат Неопределено;
Иначе
#Если НЕ ВебКлиент Тогда
Временный = ПолучитьИмяВременногоФайла(".q");
#КонецЕсли
КонецЕсли;
WshShell.Run("cmd.exe /c sc.exe queryex " + Путь + " >""" + Временный+"""", 0 , true);
Состояние = "";
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(Временный, "cp866");
Для ш = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(ш-1);
Если Найти(ВРег(Стр), " STATE") > 0 ИЛИ Найти(ВРег(Стр), " СОСТОЯНИЕ") > 0 Тогда
Состояние = СокрЛП(Сред(Стр, Найти(Стр, ":")+1));
Прервать;
КонецЕсли;
КонецЦикла;
УдалитьФайлы(Временный);
Если Найти(Состояние, "RUNNING") > 0 ИЛИ Найти(ВРег(Состояние), "ЗАПУЩЕН") > 0 Тогда
Настройка.Запущен = Истина;
КонецЕсли;
Возврат Настройка;
КонецФункции
&НаКлиенте
Процедура ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, Группа);
Если Настройка = Неопределено Тогда
Возврат;
КонецЕсли;
Если СокрЛП(Настройка.ImagePath)="" Тогда
Возврат;
КонецЕсли;
Настройка.Группа = Группа;
Куда.Добавить(Настройка);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИнформациюОбАнтивирусах(Куда)
Настройка = ПолучитьНастройкуСлужбы("MpsSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Брандмауэр Windows");
Настройка = ПолучитьНастройкуСлужбы("MsMpSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Microsoft Security Essentials");
Настройка = ПолучитьНастройкуСлужбы("SharedAccess");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Общий доступ к подключению к Интернету (ICS)");
Настройка = ПолучитьНастройкуСлужбы("WinDefend");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Защитник Windows");
Настройка = ПолучитьНастройкуСлужбы("SPIDER");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("spidernt");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("drwebnet");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("DrWebAVService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("DrWebFwSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("DrWebNetFilter");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("DrWebEngine");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("DrWebLwf");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Dr.Web");
Настройка = ПолучитьНастройкуСлужбы("ekrn");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("epfw");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("epfwtdi");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("eamon");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("easdrv");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("ERA_HTTP_SERVER");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("ERA_SERVER");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ESET NOD32");
Настройка = ПолучитьНастройкуСлужбы("avfwot");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avira");
Настройка = ПолучитьНастройкуСлужбы("avnetflt");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avira");
Настройка = ПолучитьНастройкуСлужбы("AntiVirFirewallService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avira");
Настройка = ПолучитьНастройкуСлужбы("AntiVirMailService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avira");
Настройка = ПолучитьНастройкуСлужбы("AntiVirService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avira");
Настройка = ПолучитьНастройкуСлужбы("AntiVirWebService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avira");
Настройка = ПолучитьНастройкуСлужбы("aswTdi");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avast!");
Настройка = ПолучитьНастройкуСлужбы("avast! Web Scanner");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avast!");
Настройка = ПолучитьНастройкуСлужбы("avast! Firewall");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avast!");
Настройка = ПолучитьНастройкуСлужбы("avast! Antivirus");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Avast!");
Настройка = ПолучитьНастройкуСлужбы("klif");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("klflt");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("kltdi");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("klmouflt");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("kavsvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("klfltdev");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("klkbdflt");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("AVP");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Kaspersky");
Настройка = ПолучитьНастройкуСлужбы("SYMTDI");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Symantec");
Настройка = ПолучитьНастройкуСлужбы("Teefer2");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Symantec");
Настройка = ПолучитьНастройкуСлужбы("NAVENG");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Symantec");
Настройка = ПолучитьНастройкуСлужбы("NAVEX15");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Symantec");
Настройка = ПолучитьНастройкуСлужбы("TMCM");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Trend Micro");
Настройка = ПолучитьНастройкуСлужбы("tmactmon");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Trend Micro");
Настройка = ПолучитьНастройкуСлужбы("tmevtmgr");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Trend Micro");
Настройка = ПолучитьНастройкуСлужбы("tmcomm");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Trend Micro");
Настройка = ПолучитьНастройкуСлужбы("Amsp");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Trend Micro");
Настройка = ПолучитьНастройкуСлужбы("ds_agent");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Trend Micro");
Настройка = ПолучитьНастройкуСлужбы("PavProc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Panda");
Настройка = ПолучитьНастройкуСлужбы("PavPrSrv");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Panda");
Настройка = ПолучитьНастройкуСлужбы("ShldDrv");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Panda");
Настройка = ПолучитьНастройкуСлужбы("PAVSRV");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Panda");
Настройка = ПолучитьНастройкуСлужбы("PAVDRV");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Panda");
Настройка = ПолучитьНастройкуСлужбы("PavFnSvr");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Panda");
Настройка = ПолучитьНастройкуСлужбы("FPA_RTP");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "F-Prot");
Настройка = ПолучитьНастройкуСлужбы("F-Secure HIPS");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "F-Secure");
Настройка = ПолучитьНастройкуСлужбы("fsvista");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "F-Secure");
Настройка = ПолучитьНастройкуСлужбы("a2acc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Emsisoft");
Настройка = ПолучитьНастройкуСлужбы("A2DDA");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Emsisoft");
Настройка = ПолучитьНастройкуСлужбы("epp32");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Emsisoft");
Настройка = ПолучитьНастройкуСлужбы("epp");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Emsisoft");
Настройка = ПолучитьНастройкуСлужбы("epp64");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Emsisoft");
Настройка = ПолучитьНастройкуСлужбы("a2antimalware");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Emsisoft");
Настройка = ПолучитьНастройкуСлужбы("bdss");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Bitdefender");
Настройка = ПолучитьНастройкуСлужбы("FILESpy");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Bitdefender");
Настройка = ПолучитьНастройкуСлужбы("LIVESRV");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Bitdefender");
Настройка = ПолучитьНастройкуСлужбы("VSSERV");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Bitdefender");
Настройка = ПолучитьНастройкуСлужбы("XCOMM");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Bitdefender");
Настройка = ПолучитьНастройкуСлужбы("BDESRV");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Bitdefender");
Настройка = ПолучитьНастройкуСлужбы("McShield");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "McAfee");
Настройка = ПолучитьНастройкуСлужбы("McTaskManager");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "McAfee");
Настройка = ПолучитьНастройкуСлужбы("mfeapfk");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "McAfee");
Настройка = ПолучитьНастройкуСлужбы("mfehidk");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "McAfee");
Настройка = ПолучитьНастройкуСлужбы("mferkdet");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "McAfee");
Настройка = ПолучитьНастройкуСлужбы("mfevtp");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "McAfee");
Настройка = ПолучитьНастройкуСлужбы("CmdAgent");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Comodo");
Настройка = ПолучитьНастройкуСлужбы("cmdGuard");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Comodo");
Настройка = ПолучитьНастройкуСлужбы("Inspect");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Comodo");
Настройка = ПолучитьНастройкуСлужбы("WRSVC");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Webroot");
Настройка = ПолучитьНастройкуСлужбы("AVKService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "G Data");
Настройка = ПолучитьНастройкуСлужбы("K7CrvSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "K7 Computing");
Настройка = ПолучитьНастройкуСлужбы("K7EmlPxy");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "K7 Computing");
Настройка = ПолучитьНастройкуСлужбы("K7FWSrvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "K7 Computing");
Настройка = ПолучитьНастройкуСлужбы("K7RKScan");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "K7 Computing");
Настройка = ПолучитьНастройкуСлужбы("K7Sentry");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "K7 Computing");
Настройка = ПолучитьНастройкуСлужбы("Avg");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("avgfws8");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("avg8emc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AvgTdiA");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("avgfws9");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("avg9wd");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AvgTdiX");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AVGIDSFiltervtx");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AVGIDSDrivervtx");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AVGIDSFiltervta");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AVGIDSDrivervta");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AVGIDSFilterw7a");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("AVGIDSFilterw7x");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AVG");
Настройка = ПолучитьНастройкуСлужбы("clamantivirus");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ClamAV");
Настройка = ПолучитьНастройкуСлужбы("ClamD");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ClamAV");
Настройка = ПолучитьНастройкуСлужбы("MBAMProtector");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Malwarebytes");
Настройка = ПолучитьНастройкуСлужбы("MBAMScheduler");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Malwarebytes");
Настройка = ПолучитьНастройкуСлужбы("MBAMService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Malwarebytes");
Настройка = ПолучитьНастройкуСлужбы("FILESpy");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "BullGuard");
Настройка = ПолучитьНастройкуСлужбы("FILESpy5");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "BullGuard");
Настройка = ПолучитьНастройкуСлужбы("Wpm");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "BullGuard");
Настройка = ПолучитьНастройкуСлужбы("BDFILESPY");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "BullGuard");
Настройка = ПолучитьНастройкуСлужбы("QuickHealCleanerSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Quick Heal");
Настройка = ПолучитьНастройкуСлужбы("Core Mail Protection");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Quick Heal");
Настройка = ПолучитьНастройкуСлужбы("Core Scanning Server");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Quick Heal");
Настройка = ПолучитьНастройкуСлужбы("SBAMSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SBAPIFS");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SBEMI");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SBFW");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SBFWIMCL");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SBFWIMCLMP");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("Gfiark");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SBPIMSVC");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("SpamCure");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("NinjaWatchSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "ThreatTrack");
Настройка = ПолучитьНастройкуСлужбы("QHActiveDefense");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "360 Total Security");
Настройка = ПолучитьНастройкуСлужбы("paSvc");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "AhnLab");
Настройка = ПолучитьНастройкуСлужбы("EconService");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "MicroWorld");
Настройка = ПолучитьНастройкуСлужбы("ProcObsrv");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "MicroWorld");
Настройка = ПолучитьНастройкуСлужбы("ProcObsrves");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "MicroWorld");
Настройка = ПолучитьНастройкуСлужбы("ProcObsrvesx");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "MicroWorld");
Настройка = ПолучитьНастройкуСлужбы("BaiduHips");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("BDKVRTP");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("BDDefense");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("BDMNetMon");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("BDMRTP");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("BDSGRTP");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("bd0001");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("bd0002");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
Настройка = ПолучитьНастройкуСлужбы("bd0003");
ДобавитьИнформациюОбАнтивирусахЕслиЕсть(Куда, Настройка, "Baidu");
КонецПроцедуры
&НаКлиенте
Функция ИнформацияОРазрядностиОС()
WshShell = Неопределено;
#Если НЕ МобильныйКлиент Тогда
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
Исключение
КонецПопытки;
#КонецЕсли
Если WshShell = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Путь1 = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE";
Попытка
Значение = WshShell.RegRead(Путь1);
Исключение
Значение = Неопределено;
КонецПопытки;
Если Значение = "AMD64" Тогда
Значение = 64;
Иначе
Значение = 32;
КонецЕсли;
Возврат Значение;
КонецФункции
&НаКлиенте
Процедура ДобавитьИнформациюОВерсияхКриптопровайдеров(Куда)
WshShell = Неопределено;
#Если НЕ МобильныйКлиент Тогда
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
Исключение
КонецПопытки;
#КонецЕсли
Если WshShell = Неопределено Тогда
Возврат;
КонецЕсли;
Путь1 = "HKLM\SOFTWARE\Crypto Pro\Settings\Version";
Путь2 = "HKLM\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Version";
Путь3 = "HKLM\SOFTWARE\InfoTeCS\Setup\Products\InfoTeCS-CSP\ProductVersion";
Путь4 = "HKLM\SOFTWARE\Wow6432Node\InfoTeCS\Setup\Products\InfoTeCS-CSP\ProductVersion";
Попытка
Значение = WshShell.RegRead(Путь1);
Куда.Вставить("ВерсияCryptoPro", Значение);
Исключение
КонецПопытки;
Попытка
Значение = WshShell.RegRead(Путь2);
Куда.Вставить("ВерсияCryptoPro", Значение);
Исключение
КонецПопытки;
Попытка
Значение = WshShell.RegRead(Путь3);
Куда.Вставить("ВерсияViPNet", Значение);
Исключение
КонецПопытки;
Попытка
Значение = WshShell.RegRead(Путь4);
Куда.Вставить("ВерсияViPNet", Значение);
Исключение
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьСвойствоОбъектаXDTO(Объект, Свойство, Значение = Неопределено) Экспорт
Значение = Неопределено;
ВсеСвойства = Объект.Свойства();
Если ВсеСвойства.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ЕстьСвойство = ВсеСвойства.Получить(Свойство);
Если ЕстьСвойство <> Неопределено Тогда
Значение = Объект[Свойство];
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервереБезКонтекста
Функция НормализоватьФорматСерийногоНомера(Знач СерийныйНомер)
Нормализованный = "";
СерийныйНомер = СокрЛП(СерийныйНомер);
Пока СтрДлина(СерийныйНомер) > 0 Цикл
Нормализованный = Прав(СерийныйНомер, 2) + ?(Нормализованный = "", "", " ") + Нормализованный;
СерийныйНомер = Лев(СерийныйНомер, СтрДлина(СерийныйНомер) - 2);
КонецЦикла;
Возврат Нормализованный;
КонецФункции
&НаСервереБезКонтекста
Функция ИзвлечьСведенияИзЗашифрованногоПакета(ИмяФайла, РабочийКаталог, РазмерДокумента)
WshShell = Неопределено;
#Если НЕ МобильныйКлиент Тогда
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
Исключение
КонецПопытки;
#КонецЕсли
Если WshShell = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
РазмерДокумента = 0;
Файл = Новый Файл(РабочийКаталог + ИмяФайла);
Если Не Файл.Существует() Тогда
Возврат Неопределено;
КонецЕсли;
РазмерДокумента = Файл.Размер();
Приложение = "%SystemRoot%\system32\certutil.exe";
КоманднаяСтрока = "cmd.exe /C ""%1";
КоманднаяСтрока = СтрЗаменить(КоманднаяСтрока, "%1", Приложение);
ПараметрыКоманднойСтроки = " -dump %1> %1.dump""";
КодЗавершения = 0;
Если WshShell = Неопределено Тогда
ПараметрыКоманднойСтроки = СтрЗаменить(ПараметрыКоманднойСтроки, "%1", ИмяФайла);
ЗапуститьПриложение(КоманднаяСтрока + ПараметрыКоманднойСтроки, РабочийКаталог, Истина, КодЗавершения);
Иначе
ПараметрыКоманднойСтроки = СтрЗаменить(ПараметрыКоманднойСтроки, "%1", РабочийКаталог + ИмяФайла);
КодЗавершения = WshShell.Run(КоманднаяСтрока + ПараметрыКоманднойСтроки, 0, true);
КонецЕсли;
Если КодЗавершения <> 0 Тогда
Возврат Неопределено;
КонецЕсли;
ФайлРезультата = РабочийКаталог + ИмяФайла + ".dump";
Файл = Новый Файл(ФайлРезультата);
Если Не Файл.Существует() Тогда
Возврат Неопределено;
КонецЕсли;
Получатели = Новый Массив;
Чтение = Новый ЧтениеТекста;
Чтение.Открыть(ФайлРезультата, "windows-1251");
СтрФайла = Чтение.ПрочитатьСтроку();
Пока СтрФайла <> Неопределено Цикл
Если Найти(ВРег(СтрФайла), "CERT_ID_ISSUER_SERIAL_NUMBER") > 0 Тогда
СтрСерийныйНомер = Чтение.ПрочитатьСтроку();
СтрПоставщик = Чтение.ПрочитатьСтроку();
Если Найти(СтрСерийныйНомер, ": ") > 0 Тогда
СтрСерийныйНомер = Сред(СтрСерийныйНомер, Найти(СтрСерийныйНомер, ": ") + 2);
Иначе
СтрСерийныйНомер = "";
КонецЕсли;
Если Найти(СтрПоставщик, ": ") > 0 Тогда
СтрПоставщик = Сред(СтрПоставщик, Найти(СтрПоставщик, ": ") + 2);
Иначе
СтрПоставщик = "";
КонецЕсли;
Получатель = Новый Структура("issuer, serial_number, found", СтрПоставщик, НормализоватьФорматСерийногоНомера(СтрСерийныйНомер), Ложь);
Получатели.Добавить(Получатель);
КонецЕсли;
СтрФайла = Чтение.ПрочитатьСтроку();
КонецЦикла;
Возврат Получатели;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьДанныеТКС(ТССсылка, УИД)
ИспользоватьCertUtil = Ложь;
СисИнфо = Новый СистемнаяИнформация;
Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86
Или СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
РазделительПути = "\";
ИспользоватьCertUtil = Истина;
Иначе
РазделительПути = "/";
КонецЕсли;
КаталогКонтейнеров = "";
ОграничениеРазмераДокументаВКонтейнере = 5 * 1024 * 1024;
ТранспортныеКонтейнеры = Новый Массив;
Отбор = Новый Структура("ТранспортноеСообщение", ТССсылка);
ВсеТК = РегистрыСведений.ТранспортныеКонтейнеры.Выбрать(Отбор);
Пока ВсеТК.Следующий() Цикл
ДанныеТК = ВсеТК.Данные.Получить();
Если ТипЗнч(ДанныеТК) <> Тип("ДвоичныеДанные") Тогда
Продолжить;
КонецЕсли;
Если КаталогКонтейнеров = "" Тогда
КаталогКонтейнеров = ПолучитьИмяВременногоФайла("containers");
СоздатьКаталог(КаталогКонтейнеров);
КаталогКонтейнеров = КаталогКонтейнеров + РазделительПути;
КонецЕсли;
ПрефиксИмени = Формат(ТранспортныеКонтейнеры.Количество(), "ЧЦ=4; ЧДЦ=; ЧН=; ЧВН=; ЧГ=");
ИмяФайла = ПрефиксИмени + ".zip";
ПолныйПуть = КаталогКонтейнеров + ИмяФайла;
КаталогКонтейнера = КаталогКонтейнеров + ПрефиксИмени + РазделительПути;
РазмерКонтейнера = ДанныеТК.Размер();
ДанныеТК.Записать(ПолныйПуть);
Контейнер = Новый Структура("ОшибкаКонтейнера, РазмерКонтейнера, Документы", 0, РазмерКонтейнера, Новый Массив);
ТранспортныеКонтейнеры.Добавить(Контейнер);
Попытка
ЧтениеАрхива = Новый ЧтениеZipФайла(ПолныйПуть);
Исключение
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 1;
Продолжить;
КонецПопытки;
ФорматДокументооборота = Неопределено;
ИмяФайлаОписания = "packageDescription.xml";
ФайлОписания = ЧтениеАрхива.Элементы.Найти(ИмяФайлаОписания);
Если ФайлОписания = Неопределено Тогда
РеквизитыЦиклаОбмена = ?(ЗначениеЗаполнено(ТССсылка.ЦиклОбмена),
ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТССсылка.ЦиклОбмена, "Вид, ФорматДокументооборота"),
Новый Структура("Вид, ФорматДокументооборота", Неопределено, Неопределено));
Если РеквизитыЦиклаОбмена.Вид = Перечисления.ТипыКонтролирующихОрганов.ПФР
И (НЕ ЗначениеЗаполнено(РеквизитыЦиклаОбмена.ФорматДокументооборота) ИЛИ
РеквизитыЦиклаОбмена.ФорматДокументооборота = Перечисления.ФорматыДокументооборотаСПФР.ЭДОК)
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПервичноеСообщениеСодержащееОтчетностьПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПодтверждениеПолученияОтчетностиПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПротоколПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПротоколКвитанцияПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПисьмоИсходящееКвитанцияПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.УведомлениеОбОшибкеПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПодтверждениеПолученияЗапросаПФР
ИЛИ ТССсылка.Тип = Перечисления.ТипыТранспортныхСообщений.ОтветНаЗапросПФР Тогда
Попытка
ЧтениеАрхива.Закрыть();
МассивОписанийИДанных = ОбщегоНазначенияЭДКО.МассивОписанийИДанныхZipФайла(ПолныйПуть);
Если МассивОписанийИДанных <> Неопределено Тогда
ОперацииСФайламиЭДКО.УдалитьВременныйФайл(ПолныйПуть);
ПолныйПуть = ПолныйПуть + ".zip";
ОбщегоНазначенияЭДКО.СформироватьZip(МассивОписанийИДанных, ПолныйПуть);
КонецЕсли;
ЧтениеАрхива = Новый ЧтениеZipФайла(ПолныйПуть);
Исключение
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 2;
Продолжить;
КонецПопытки;
Для каждого ЭлементКонтейнера Из ЧтениеАрхива.Элементы Цикл
ИмяФайлаВРег = СокрЛП(ЭлементКонтейнера.ИмяБезРасширения);
ИмяФайлаВРег = ВРег(ИмяФайлаВРег);
РасширениеФайла = СокрЛП(ЭлементКонтейнера.Расширение);
Если (Лев(ИмяФайлаВРег, 4) = "ПФР_" ИЛИ Лев(ИмяФайлаВРег, 4) = "СФР_")
И СтрНайти(ИмяФайлаВРег, "_ОСП_") > 0 И нрег(РасширениеФайла) = "xml" Тогда
ИмяФайлаОписания = ЭлементКонтейнера.Имя;
ФайлОписания = ЭлементКонтейнера;
ФорматДокументооборота = Перечисления.ФорматыДокументооборотаСПФР.ЭДОК;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ФайлОписания = Неопределено Тогда
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 2;
Продолжить;
КонецЕсли;
КонецЕсли;
Попытка
ЧтениеАрхива.ИзвлечьВсе(КаталогКонтейнера, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
Исключение
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 3;
Продолжить;
КонецПопытки;
ЧтениеОписания = Новый ЧтениеXML;
ЧтениеОписания.ОткрытьФайл(КаталогКонтейнера + ИмяФайлаОписания);
Описание = ФабрикаXDTO.ПрочитатьXML(ЧтениеОписания);
ЧтениеОписания.Закрыть();
Если ТипЗнч(Описание) <> Тип("ОбъектXDTO") Тогда
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 4;
Продолжить;
КонецЕсли;
Если ФорматДокументооборота = Перечисления.ФорматыДокументооборотаСПФР.ЭДОК Тогда
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Если КонтекстЭДОСервер = Неопределено Тогда
Продолжить;
КонецЕсли;
ДеревоОписанияСведений = КонтекстЭДОСервер.ЗагрузитьXMLВДеревоЗначений(КаталогКонтейнера + ИмяФайлаОписания);
Если ДеревоОписанияСведений = Неопределено Тогда
Продолжить;
КонецЕсли;
УзелОСП = КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(ДеревоОписанияСведений,,, "ОСП", "Э");
Если НЕ ЗначениеЗаполнено(УзелОСП) Тогда
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 5;
Продолжить;
КонецЕсли;
УзелЗашифровано = КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелОСП,,, "Зашифровано", "Э", Ложь);
ДокументыЗашифрованы = ?(ЗначениеЗаполнено(УзелЗашифровано),
КонтекстЭДОСервер.БулевоПоСтроке(УзелЗашифровано.Значение), Неопределено);
УзлыДокумент = Новый Массив;
КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелОСП,, УзлыДокумент, "Документ", "Э", Ложь);
УзелДополнительныеДокументы = КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелОСП,,,
"ДополнительныеДокументы", "Э", Ложь);
УзлыДополнительныйДокумент = Неопределено;
Если ЗначениеЗаполнено(УзелДополнительныеДокументы) Тогда
УзлыДополнительныйДокумент = Новый Массив;
КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелДополнительныеДокументы,,
УзлыДополнительныйДокумент, "Документ", "Э", Ложь);
КонецЕсли;
Для НомерУзловДокументов = 1 По ?(УзлыДополнительныйДокумент = Неопределено, 1, 2) Цикл
ЭтоДополнительныйДокумент = (НомерУзловДокументов = 2);
Если ЭтоДополнительныйДокумент Тогда
УзлыДокумент = УзлыДополнительныйДокумент;
КонецЕсли;
Для каждого УзелДокумент Из УзлыДокумент Цикл
УзелКод = КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелДокумент,,, "Код", "Э", Ложь);
КодДокумента = ?(ЗначениеЗаполнено(УзелКод), СокрЛП(УзелКод.Значение), "");
УзелФайл = КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелДокумент,,, "Файл", "Э", Ложь);
ИмяФайлаДокумента = ?(ЗначениеЗаполнено(УзелФайл), СокрЛП(УзелФайл.Значение), "");
Если (ВРег(КодДокумента) = "УОД" ИЛИ ВРег(КодДокумента) = "УОПП" ИЛИ ВРег(КодДокумента) = "УОНД")
И НЕ ЗначениеЗаполнено(УзелЗашифровано) И (нрег(Прав(ИмяФайлаДокумента, 4)) = ".enc") Тогда
ИмяФайлаДокумента = Лев(ИмяФайлаДокумента, СтрДлина(ИмяФайлаДокумента) - 4);
КонецЕсли;
УзелТипФайла = КонтекстЭДОСервер.НайтиСтрокиДереваЗначений(УзелДокумент,,, "ТипФайла", "Э", Ложь);
ТипФайлаДокумента = ?(ЗначениеЗаполнено(УзелТипФайла), СокрЛП(УзелТипФайла.Значение), "");
Если ТипФайлаДокумента = "application/gzip" Тогда
ТипФайлаДокумента = "application/xml";
КонецЕсли;
Если ДокументыЗашифрованы <> Неопределено Тогда
ДокументЗашифрован = ДокументыЗашифрованы;
Иначе
РасширениеДокументаНРег = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаДокумента).Расширение;
РасширениеДокументаНРег = нрег(РасширениеДокументаНРег);
ДокументЗашифрован = (РасширениеДокументаНРег = ".enc"
ИЛИ (РасширениеДокументаНРег <> ".gz" И РасширениеДокументаНРег <> ".der"
И КонтекстЭДОСервер.ТипСодержимогоПоИмениФайла(ИмяФайлаДокумента) =
Перечисления.ТипыСодержимогоФайлов.Неизвестный));
КонецЕсли;
ИмяФайла = ИмяФайлаДокумента;
ТипСодержимогоИРасширение = КонтекстЭДОСервер.ТипСодержимогоИРасширениеПоMIMEТипу(ТипФайлаДокумента);
ПозицияРазделителя = СтрНайти(ИмяФайлаДокумента, ".");
Если ПозицияРазделителя > 1 Тогда
ИмяФайлаДокумента = Лев(ИмяФайлаДокумента, ПозицияРазделителя - 1);
КонецЕсли;
Если ЗначениеЗаполнено(ТипСодержимогоИРасширение.Расширение) Тогда
ИмяФайлаДокумента = ИмяФайлаДокумента + "." + ТипСодержимогоИРасширение.Расширение;
КонецЕсли;
ИсходноеИмяФайла = ИмяФайлаДокумента;
Если ДокументЗашифрован Тогда
РазмерДокумента = 0;
Если ИспользоватьCertUtil Тогда
Сведения = ИзвлечьСведенияИзЗашифрованногоПакета(ИмяФайла, КаталогКонтейнера, РазмерДокумента);
КонецЕсли;
Если (Сведения = Неопределено) И (РазмерДокумента <= ОграничениеРазмераДокументаВКонтейнере) Тогда
Сведения = Новый Массив;
ДД = Новый ДвоичныеДанные(КаталогКонтейнера + ИмяФайла);
РазмерДокумента = ДД.Размер();
ДДBase64 = Base64Строка(ДД);
Адрес = ПоместитьВоВременноеХранилище(ДД, УИД);
Адрес2 = ПоместитьВоВременноеХранилище(ДДBase64, УИД);
Иначе
Адрес = Неопределено;
Адрес2 = Неопределено;
КонецЕсли;
Если ИсходноеИмяФайла = Неопределено Или ИсходноеИмяФайла = "" Тогда
ИсходноеИмяФайла = ИмяФайла;
КонецЕсли;
ЗашифрованныйДокумент = Новый Структура("Имя, Представление, Сведения", ИмяФайла, ИсходноеИмяФайла, Сведения);
ЗашифрованныйДокумент.Вставить("ОшибкаДокумента", 0);
Если РазмерДокумента > ОграничениеРазмераДокументаВКонтейнере Тогда
ЗашифрованныйДокумент.ОшибкаДокумента = 1;
КонецЕсли;
ЗашифрованныйДокумент.Вставить("Содержимое", Адрес);
ЗашифрованныйДокумент.Вставить("СодержимоеWC", Адрес2);
ЗашифрованныйДокумент.Вставить("РазмерДокумента", РазмерДокумента);
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].Документы.Добавить(ЗашифрованныйДокумент);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Если Не ЕстьСвойствоОбъектаXDTO(Описание, "документ") Тогда
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].ОшибкаКонтейнера = 5;
Продолжить;
КонецЕсли;
Если ТипЗнч(Описание.документ) = Тип("ОбъектXDTO") Тогда
СписокДокументов = Новый Массив;
СписокДокументов.Добавить(Описание.документ);
Иначе
СписокДокументов = Описание.документ;
КонецЕсли;
Для Каждого Документ Из СписокДокументов Цикл
ИсходноеИмяФайла = Неопределено;
ЕстьСвойствоОбъектаXDTO(Документ, "исходноеИмяФайла", ИсходноеИмяФайла);
Значение = Неопределено;
Если ЕстьСвойствоОбъектаXDTO(Документ, "зашифрован", Значение) Тогда
Если НРег(Значение) = "true" Тогда
Содержимое = Неопределено;
Если ЕстьСвойствоОбъектаXDTO(Документ, "содержимое", Содержимое) Тогда
ИмяФайла = Неопределено;
Если ЕстьСвойствоОбъектаXDTO(Содержимое, "имяФайла", ИмяФайла) Тогда
РазмерДокумента = 0;
Если ИспользоватьCertUtil Тогда
Сведения = ИзвлечьСведенияИзЗашифрованногоПакета(ИмяФайла, КаталогКонтейнера, РазмерДокумента);
КонецЕсли;
Если (Сведения = Неопределено) И (РазмерДокумента <= ОграничениеРазмераДокументаВКонтейнере) Тогда
Сведения = Новый Массив;
ДД = Новый ДвоичныеДанные(КаталогКонтейнера + ИмяФайла);
РазмерДокумента = ДД.Размер();
ДДBase64 = Base64Строка(ДД);
Адрес = ПоместитьВоВременноеХранилище(ДД, УИД);
Адрес2 = ПоместитьВоВременноеХранилище(ДДBase64, УИД);
Иначе
Адрес = Неопределено;
Адрес2 = Неопределено;
КонецЕсли;
Если ИсходноеИмяФайла = Неопределено Или ИсходноеИмяФайла = "" Тогда
ИсходноеИмяФайла = ИмяФайла;
КонецЕсли;
ЗашифрованныйДокумент = Новый Структура("Имя, Представление, Сведения", ИмяФайла, ИсходноеИмяФайла, Сведения);
ЗашифрованныйДокумент.Вставить("ОшибкаДокумента", 0);
Если РазмерДокумента > ОграничениеРазмераДокументаВКонтейнере Тогда
ЗашифрованныйДокумент.ОшибкаДокумента = 1;
КонецЕсли;
ЗашифрованныйДокумент.Вставить("Содержимое", Адрес);
ЗашифрованныйДокумент.Вставить("СодержимоеWC", Адрес2);
ЗашифрованныйДокумент.Вставить("РазмерДокумента", РазмерДокумента);
ТранспортныеКонтейнеры[ТранспортныеКонтейнеры.Количество()-1].Документы.Добавить(ЗашифрованныйДокумент);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если КаталогКонтейнеров <> "" Тогда
УдалитьФайлы(КаталогКонтейнеров);
КаталогКонтейнеров = "";
КонецЕсли;
Возврат ТранспортныеКонтейнеры;
КонецФункции
&НаСервереБезКонтекста
Процедура ДобавитьИнформациюОНерасшифрованных(Куда, Организация, УчетнаяЗаписьОбмена, УИД)
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДокТранспортноеСообщение.Отправитель КАК Отправитель,
| ДокТранспортноеСообщение.Тема КАК Тема,
| ДокТранспортноеСообщение.ДатаТранспорта КАК ДатаТранспорта,
| ДокТранспортноеСообщение.ИдентификаторСообщения КАК ИдентификаторСообщения,
| ДокТранспортноеСообщение.Ссылка КАК Ссылка
|ИЗ
| РегистрСведений.ТранспортныеКонтейнеры КАК ТранспортныеКонтейнеры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТранспортноеСообщение КАК ДокТранспортноеСообщение
| ПО ТранспортныеКонтейнеры.ТранспортноеСообщение = ДокТранспортноеСообщение.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СодержимоеТранспортныхКонтейнеров КАК СодержимоеТранспортныхКонтейнеров
| ПО ТранспортныеКонтейнеры.ТранспортноеСообщение = СодержимоеТранспортныхКонтейнеров.ТранспортноеСообщение
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЦиклыОбмена КАК ЦиклыОбмена
| ПО ЦиклыОбмена.Ссылка = ДокТранспортноеСообщение.ЦиклОбмена
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВладельцыОбъектов1СОтчетности КАК ВладельцыОбъектов1СОтчетности
| ПО (ЦиклыОбмена.Ссылка = ВладельцыОбъектов1СОтчетности.Объект)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВладельцыОбъектов1СОтчетности КАК ВладельцыОбъектов1СОтчетностиТС
| ПО (ТранспортныеКонтейнеры.ТранспортноеСообщение = ВладельцыОбъектов1СОтчетностиТС.Объект
| И ВладельцыОбъектов1СОтчетности.Владелец ЕСТЬ NULL)
|ГДЕ
| (ДокТранспортноеСообщение.Отправитель = &ОтборОрганизация
| ИЛИ ДокТранспортноеСообщение.Получатель = &ОтборОрганизация)
| И ДокТранспортноеСообщение.УчетнаяЗапись = &УчетнаяЗапись
| И НЕ ДокТранспортноеСообщение.ПометкаУдаления
| И НЕ ДокТранспортноеСообщение.ЦиклОбмена.ПометкаУдаления
| И СодержимоеТранспортныхКонтейнеров.ТранспортноеСообщение ЕСТЬ NULL
| И (ВладельцыОбъектов1СОтчетности.Владелец = &ТекущийПользователь
| ИЛИ ВладельцыОбъектов1СОтчетности.Владелец ЕСТЬ NULL)
| И (ВладельцыОбъектов1СОтчетностиТС.Владелец = &ТекущийПользователь
| ИЛИ ВладельцыОбъектов1СОтчетностиТС.Владелец ЕСТЬ NULL)");
ТекущийПользователь = Пользователи.ТекущийПользователь();
Запрос.Параметры.Вставить("УчетнаяЗапись", УчетнаяЗаписьОбмена);
Запрос.Параметры.Вставить("ОтборОрганизация", Организация);
Запрос.Параметры.Вставить("ТекущийПользователь", ТекущийПользователь);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
ВсеСообщения = Результат.Выгрузить();
Для Каждого ТС из ВсеСообщения Цикл
Сообщение = Новый Структура;
Для Каждого Колонка из ВсеСообщения.Колонки цикл
Значение = ТС[Колонка.Имя];
Сообщение.Вставить(Колонка.Имя, Значение);
КонецЦикла;
Если НЕ ТС.Ссылка.ЦиклОбмена.Пустая() Тогда
Сообщение.Вставить("идентификаторДокументооборота", ТС.Ссылка.ЦиклОбмена.Идентификатор);
Иначе
Стр = ТС.Ссылка.ДополнительныеРеквизитыЗаголовка.Найти(Перечисления.ТипыДополнительныхРеквизитов.ИдентификаторПервичногоСообщения, "Тип");
Если Стр = Неопределено Тогда
Если ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПервичноеСообщениеСодержащееОтчетностьПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПодтверждениеПолученияОтчетностиПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПротоколПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПротоколКвитанцияПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПисьмоИсходящееКвитанцияПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.УведомлениеОбОшибкеПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ПодтверждениеПолученияЗапросаПФР
ИЛИ ТС.Ссылка.Тип = Перечисления.ТипыТранспортныхСообщений.ОтветНаЗапросПФР Тогда
Стр = ТС.Ссылка.ДополнительныеРеквизитыЗаголовка.Найти("X-PFR-Message-ID", "Тип");
КонецЕсли;
Если Стр = Неопределено Тогда
Стр = ТС.Ссылка.ДополнительныеРеквизитыЗаголовка.Найти("X-Message-ID", "Тип");
КонецЕсли;
Если Стр = Неопределено Тогда
Сообщение.Вставить("идентификаторДокументооборота", "");
Иначе
Сообщение.Вставить("идентификаторДокументооборота", Стр.Значение);
КонецЕсли;
Иначе
Сообщение.Вставить("идентификаторДокументооборота", Стр.Значение);
КонецЕсли;
КонецЕсли;
Сообщение.Вставить("СодержимоеТранспортныхКонтейнеров", ПолучитьДанныеТКС(ТС.Ссылка, УИД));
Куда.Добавить(Сообщение);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ДобавитьИнформациюОВнешнемМодуле(Куда)
ВнешнийМодульИспользуется = Неопределено;
ВнешнийМодульВерсия = Неопределено;
Если ПравоДоступа("Чтение", Метаданные.Константы.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль) Тогда
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Константы.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль,
| Константы.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль,
| Константы.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля,
| Константы.ДокументооборотСКонтролирующимиОрганами_ИмяКриптопровайдера,
| Константы.ДокументооборотСКонтролирующимиОрганами_ТипКриптопровайдера,
| Константы.ДокументооборотСКонтролирующимиОрганами_РежимТестирования
|ИЗ
| Константы КАК Константы");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ИспользоватьВнешнийМодуль = Выборка.ДокументооборотСКонтролирующимиОрганами_ИспользоватьВнешнийМодуль;
ДанныеМодуля = Выборка.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль.Получить();
ВерсияМодуля = Выборка.ДокументооборотСКонтролирующимиОрганами_ВерсияВнешнегоМодуля;
ВнешнийМодульИспользуется = ИспользоватьВнешнийМодуль;
Если ВнешнийМодульИспользуется Тогда
ВнешнийМодульВерсия = ВерсияМодуля;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Куда.Вставить("ВнешнийМодульИспользуется", ВнешнийМодульИспользуется);
Куда.Вставить("ВнешнийМодульВерсия", ВнешнийМодульВерсия);
КонецПроцедуры
&НаКлиенте
Процедура ВсеПроверкиЗавершены(Результат, ДополнительныеПараметры) Экспорт
ОчиститьФормуСОбновлением();
РезультатыДиагностики.Отчет.Вставить("Сводка", Новый Массив);
ОбновитьПрогресс(90);
Если Результат = 0 Тогда
ЗаполнитьПрочуюИнформацию();
Если Не ЗаполнитьПрочуюИнформациюЕще() Тогда
Возврат;
КонецЕсли;
КонецЕсли;
ВсеПроверкиИСборСведенийЗавершены();
КонецПроцедуры
&НаКлиенте
Процедура ВсеПроверкиИСборСведенийЗавершены() Экспорт
ОбновитьПрогресс(95);
ВсегоОшибок = 0;
ВсегоПредупреждений = 0;
ЗаполнитьСводку(РезультатыДиагностики, ВсегоОшибок, ВсегоПредупреждений);
ПараметрыОткрытия = Новый Структура("Отчет, Сводка", Неопределено, Неопределено);
ПараметрыОткрытия.Вставить("Организация", РезультатыДиагностики.Параметры.Организация.Ссылка);
ПараметрыОткрытия.Вставить("УчетнаяЗаписьДокументооборота", РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена.Ссылка);
ПараметрыОткрытия.Вставить("Автонастройка", РезультатыДиагностики.Автонастройка);
ПараметрыОткрытия.Вставить("ТелефонСлужбыПоддержки", ТелефонСлужбыПоддержки);
ИмяФормыПодробности = "Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.ДиагностикаОтчетности_ПодробностиИРекомендации";
ОбщиеКлиентскиеМетоды = ПолучитьФорму(ИмяФормыПодробности, ПараметрыОткрытия, ЭтотОбъект);
ОбновитьПрогресс(100,, Ложь);
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьЗавершениеЗаданияЖР", 3, Ложь);
КонецПроцедуры
#КонецОбласти
#Область ПроверкаУчетнойЗаписи
&НаСервере
Функция ПолучитьФИОДоверенности(Доверенность, Субъект)
КонтекстМодуля = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ИмяТипаСправочникаМашиночитаемыеДоверенности = "МашиночитаемыеДоверенности";
Если ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует() И ТипЗнч(Доверенность.Ссылка) =
Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенности) Тогда
Возврат Строка(Доверенность.Ссылка);
КонецЕсли;
Результат = Доверенность.Ссылка.ФИО.НайтиСтроки(Новый Структура("Владелец", Субъект));
Если Результат = Неопределено Тогда
Возврат "";
КонецЕсли;
Если Результат.Количество() = 0 Тогда
Возврат "";
КонецЕсли;
Возврат КонтекстМодуля.НормализованныеФИО(Результат[0].Фамилия, Результат[0].Имя, Результат[0].Отчество);
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьСписокНаправленийУчетнойЗаписи(УчетнаяЗаписьОбмена, ТипПолучателя = Неопределено)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.УчетнаяЗапись,
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.ТипПолучателя,
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.КодПолучателя,
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.КПП
|ИЗ
| РегистрСведений.ДополнительныеРеквизитыУчетнойЗаписиПолучатели КАК ДополнительныеРеквизитыУчетнойЗаписиПолучатели
|ГДЕ
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.УчетнаяЗапись = &УчетнаяЗапись";
Запрос.Параметры.Вставить("УчетнаяЗапись", УчетнаяЗаписьОбмена);
Если ТипПолучателя <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + "
| И ДополнительныеРеквизитыУчетнойЗаписиПолучатели.ТипПолучателя = &ТипПолучателя";
Запрос.Параметры.Вставить("ТипПолучателя", ТипПолучателя);
КонецЕсли;
Направления = Запрос.Выполнить().Выгрузить();
Если Направления.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Направления;
КонецФункции
&НаСервере
Функция ПолучитьФИОФизлица(ФЛ)
ФлФИО = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ФИОФизЛица(ФЛ);
Возврат ФлФИО;
КонецФункции
&НаСервере
Функция ПолучитьСписокПроблемСДоверенностями(ОрганизацияСсылка, ВладелецЭП, СведенияОРегистрации, СертификатВыданНаПредставителя)
КонтекстМодуля = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Руководитель = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.Руководитель(ОрганизацияСсылка);
ГлБухгалтер = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.ГлБухгалтер(ОрганизацияСсылка);
ВладелецЭП_ФЛ = Мультирежим.ФизЛицоПоФИОиСНИЛС(
ВладелецЭП.Фамилия,
ВладелецЭП.Имя,
ВладелецЭП.Отчество,
ВладелецЭП.СНИЛС);
ВладелецЭП_ФИО = КонтекстМодуля.НормализованныеФИО(ВладелецЭП.Фамилия, ВладелецЭП.Имя, ВладелецЭП.Отчество);
Руководитель_ФИО_ = ПолучитьФИОФизлица(Руководитель);
Руководитель_ФИО = КонтекстМодуля.НормализованныеФИО(Руководитель_ФИО_);
ВсеПроблемы = Новый Массив;
Если ВладелецЭП_ФЛ.Пустая() Тогда
Если ВладелецЭП_ФИО = Руководитель_ФИО Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
Если ВладелецЭП_ФЛ = Руководитель Тогда
Возврат Неопределено;
КонецЕсли;
СертификатВыданНаПредставителя = Истина;
ВсеРегистрации = ДокументооборотСКОВызовСервера.РегистрацииВНалоговомОргане(ОрганизацияСсылка);
Направления = ПолучитьСписокНаправленийУчетнойЗаписи(ОрганизацияСсылка.УчетнаяЗаписьОбмена, Перечисления.ТипыКонтролирующихОрганов.ФНС);
Если Направления = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если Направления.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Направления.Колонки.Добавить("ДоверенностьОК", Новый ОписаниеТипов("Булево"));
Направления.Колонки.Добавить("ЕстьДоверенность", Новый ОписаниеТипов("Булево"));
Для Каждого Регистрация из ВсеРегистрации Цикл
Доверенность = Регистрация.Доверенность;
РегистрацияСсылка = Регистрация.РегистрацияСсылка;
Результат = Направления.НайтиСтроки(Новый Структура("КодПолучателя, КПП", РегистрацияСсылка.Код, РегистрацияСсылка.КПП));
Если Результат.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Запись = Новый Структура("Направление, КодПолучателя, КПП, Регистрация, Доверенность, Проблемы", "ИФНС",
РегистрацияСсылка.Код, РегистрацияСсылка.КПП, РегистрацияСсылка, Неопределено, Новый Массив);
Если НЕ ЗначениеЗаполнено(Доверенность) Тогда
Запись.Проблемы.Добавить(ПолучитьОписаниеСобытия(1, 2, 10));
Иначе
Запись.Доверенность = ИзвлечьПоля(Доверенность);
ПолномочияОК = Ложь;
ПредставительОК = Ложь;
СрокОК = Ложь;
Если Результат.Количество() > 0 Тогда
Для Каждого СтрокаТаблицы из Результат Цикл
СтрокаТаблицы.ЕстьДоверенность = Истина;
КонецЦикла;
КонецЕсли;
ДатаОкончания = Доверенность.ДатаОкончания;
Если ДатаОкончания = '00010101' Тогда
ДатаОкончания = '20990101';
КонецЕсли;
ТекущаяДата = ТекущаяДатаСеанса();
Если ТекущаяДата >= Доверенность.ДатаВыдачи И ТекущаяДата <= ДатаОкончания Тогда
СрокОК = Истина;
ИначеЕсли ТекущаяДата < Доверенность.ДатаВыдачи Тогда
Запись.Проблемы.Добавить(ПолучитьОписаниеСобытия(1, 2, 12));
ИначеЕсли ТекущаяДата > ДатаОкончания Тогда
Запись.Проблемы.Добавить(ПолучитьОписаниеСобытия(1, 2, 11));
КонецЕсли;
ДоверенностьПредставитель_ФИО = ПолучитьФИОДоверенности(
Доверенность,
Перечисления.СубъектыДоверенностиНалогоплательщика.ПредставительФЛ);
Если ДоверенностьПредставитель_ФИО = ВладелецЭП_ФИО тогда
ПредставительОК = Истина;
Иначе
Если НЕ ЗначениеЗаполнено(ДоверенностьПредставитель_ФИО) Тогда
ДоверенностьПредставитель_ФИО = НСтр("ru = '<не заполнено>'");
КонецЕсли;
Проблема = ПолучитьОписаниеСобытия(1, 2, 13);
Представители = Новый Структура("Ожидаемый, Фактический", ВладелецЭП_ФИО, ДоверенностьПредставитель_ФИО);
Проблема.Вставить("Представитель", Представители);
Запись.Проблемы.Добавить(Проблема);
КонецЕсли;
ИмяТипаСправочникаМашиночитаемыеДоверенности = "МашиночитаемыеДоверенности";
Если ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует() И
ТипЗнч(Доверенность) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенности) Тогда
ПолномочияОК = Истина;
ИначеЕсли Доверенность.ПолномочияПредставителя.Количество() = 0 Тогда
Если ТипЗнч(Доверенность) <> Тип("СправочникСсылка.МашиночитаемыеДоверенностиФНС")
И ТипЗнч(Доверенность) <> Тип("СправочникСсылка.МашиночитаемыеДоверенностиРаспределенныйРеестр") Тогда
Запись.Проблемы.Добавить(ПолучитьОписаниеСобытия(1, 1, 12));
КонецЕсли;
ПолномочияОК = Истина;
ИначеЕсли Доверенность.ПолномочияПредставителя.Количество() > 0 Тогда
ПолномочияОК = Истина;
КонецЕсли;
Если Результат.Количество() > 0 Тогда
Для каждого СтрокаТаблицы Из Результат Цикл
СтрокаТаблицы.ДоверенностьОК = ПолномочияОК И ПредставительОК И СрокОК;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ВсеПроблемы.Добавить(Запись);
КонецЦикла;
Возврат ВсеПроблемы;
КонецФункции
&НаСервереБезКонтекста
Процедура ДобавитьЗаписьИзменения(Вид, Знач Было, Знач Стало, Куда)
ВидТекстом = ИмяЗначенияПеречисления(Вид);
МассивВажных = новый Массив;
МассивВажных.Добавить("ИНН");
МассивВажных.Добавить("ОГРН");
МассивВажных.Добавить("КодРегионаФСРАР");
МассивВажных.Добавить("КраткоеНаименование");
МассивВажных.Добавить("ВладелецЭЦПФИО");
МассивВажных.Добавить("ВладелецЭЦПДолжность");
МассивВажных.Добавить("ЭлектроннаяПочта");
Строчка = Новый Структура("Атрибут, АтрибутВнутренний, СтароеЗначение, НовоеЗначение, Важно",,,,, Ложь);
Строчка.Атрибут = ВидТекстом;
Строчка.АтрибутВнутренний = Вид;
Строчка.СтароеЗначение = СокрЛП_Врег(Было);
Строчка.НовоеЗначение = СокрЛП_Врег(Стало);
Если МассивВажных.Найти(ВидТекстом) <> Неопределено Тогда
Строчка.Важно = Истина;
КонецЕсли;
Куда.Добавить(Строчка);
КонецПроцедуры
&НаСервере
Функция ПолучитьСписокИзменившихсяРеквизитовПодключенияК1СОтчетности(ОрганизацияСсылка, УчетнаяЗаписьОбменаСсылка)
ТекстСообщения = "";
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО(ТекстСообщения);
Если КонтекстЭДОСервер = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Изменения = Новый Массив;
СтруктураРеквизитов = Новый Структура("Организация", ОрганизацияСсылка);
СтруктураРеквизитов.Вставить("АдресЮридический", );
СтруктураРеквизитов.Вставить("АдресФактический", );
СтруктураРеквизитов.Вставить("ПриОткрытии", Истина);
КонтекстЭДОСервер.ЗаполнитьДанныеОрганизации(СтруктураРеквизитов);
ДанныеЗаполнения = КонтекстЭДОСервер.ДополнитьДанныеОрганизацииДаннымиПоОтветственнымЛицам(СтруктураРеквизитов);
ДанныеОрганизации = ДанныеЗаполнения.СтруктураДанныхОрганизации;
Руководитель = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.Руководитель(ОрганизацияСсылка);
ГлБухгалтер = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.ГлБухгалтер(ОрганизацияСсылка);
ЭтоЮридическоеЛицо = ДанныеОрганизации.ТипОрганизации;
КраткоеНаименование = ДанныеОрганизации.КраткоеНаименование;
ИНН = СокрП(ДанныеОрганизации.ИННЮЛ);
КПП = СокрП(ДанныеОрганизации.КППЮЛ);
ОГРН = ДанныеОрганизации.ОГРН;
РегНомерПФР = ДанныеОрганизации.РегНомПФР;
ТелефонОсновной = ДанныеОрганизации.ТелОрганизации;
ЭлектроннаяПочта = ДанныеОрганизации.ЭлектроннаяПочта;
КодРегионаФСРАР = КонтекстЭДОСервер.КодРегионаФСРАР(ДанныеЗаполнения.АдресЮридическийЗначение);
КодПФР = КодПФР(ДанныеОрганизации);
Спецоператор = УчетнаяЗаписьОбменаСсылка.СпецоператорСвязи;
ДопРеквизиты = ПолучитьДополнительныеРеквизитыУчетнойЗаписи(УчетнаяЗаписьОбменаСсылка);
Если ДопРеквизиты <> Неопределено Тогда
КраткоеНаименованиеИсходное = ДопРеквизиты.КраткоеНаименование;
ИННИсходный = ДопРеквизиты.ИНН;
КППИсходный = ДопРеквизиты.КПП;
ОГРНИсходный = ДопРеквизиты.ОГРН;
РегНомерПФРИсходный = ДопРеквизиты.РегНомерПФР;
ЭлектроннаяПочтаИсходная = ДопРеквизиты.ЭлектроннаяПочта;
ВладелецЭЦПФамилияИсходный = ДопРеквизиты.ВладелецЭЦПФамилия;
ВладелецЭЦПИмяИсходный = ДопРеквизиты.ВладелецЭЦПИмя;
ВладелецЭЦПОтчествоИсходный = ДопРеквизиты.ВладелецЭЦПОтчество;
ВладелецЭЦППодразделениеИсходное = ДопРеквизиты.ВладелецЭЦППодразделение;
ВладелецЭЦПСНИЛСИсходный = ДопРеквизиты.ВладелецЭЦПСНИЛС;
ВладелецЭЦПДолжностьИсходная = ДопРеквизиты.ВладелецЭЦПДолжность;
ТелефонОсновнойИсходный = ДопРеквизиты.ТелефонОсновной;
КодРегионаФСРАРИсходный = ДопРеквизиты.КодРегионаФСРАР;
Иначе
Возврат Неопределено;
КонецЕсли;
Направления = ПолучитьДополнительныеРеквизитыУчетнойЗаписиПолучатели(УчетнаяЗаписьОбменаСсылка);
СдаватьВФССИсходный = Ложь;
СдаватьВФСРАРИсходный = Ложь;
СдаватьВПФРИсходный = Ложь;
КодПФРИсходный = "";
Для Каждого СтрокаНаправлений Из Направления Цикл
Если СтрокаНаправлений.ТипПолучателя = Перечисления.ТипыКонтролирующихОрганов.ПФР Тогда
СдаватьВПФРИсходный = Истина;
КодПФРИсходный = СокрЛП_Врег(СтрокаНаправлений.КодПолучателя);
ИначеЕсли СтрокаНаправлений.ТипПолучателя = Перечисления.ТипыКонтролирующихОрганов.ФСС Тогда
СдаватьВФССИсходный = Истина;
ИначеЕсли СтрокаНаправлений.ТипПолучателя = Перечисления.ТипыКонтролирующихОрганов.ФСРАР Тогда
СдаватьВФСРАРИсходный = Истина;
КонецЕсли;
КонецЦикла;
ЭтоЮрЛицо = РегламентированнаяОтчетностьПереопределяемый.ЭтоЮридическоеЛицо(ОрганизацияСсылка);
КраткоеНаименованиеИзменилось =
ЭтоЮрЛицо
И СокрЛП_Врег(КраткоеНаименование) <> СокрЛП_Врег(КраткоеНаименованиеИсходное);
Сертификат = Мультирежим.СертификатПользователя(УчетнаяЗаписьОбменаСсылка, "ЭлектроннаяПодписьВМоделиСервиса");
ЭлектроннаяПочтаИзменилась =
НЕ Сертификат.ЭлектроннаяПодписьВМоделиСервиса
И СокрЛП_Врег(ЭлектроннаяПочта) <> СокрЛП_Врег(ЭлектроннаяПочтаИсходная)
И ЗначениеЗаполнено(ЭлектроннаяПочта);
ИсходныйВладелец = ОбработкаЗаявленийАбонента.ИсходныйВладелецСертификатаПоФИОиСНИЛС(
Организация,
ВладелецЭЦПФамилияИсходный,
ВладелецЭЦПИмяИсходный,
ВладелецЭЦПОтчествоИсходный,
ВладелецЭЦПСНИЛСИсходный);
ВладелецЭЦПТипИсходный = ИсходныйВладелец.ВладелецЭЦПТипИсходный;
ВладелецЭЦП = ИсходныйВладелец.ВладелецЭЦПИсходный;
ВладелецЭЦПИсходный = ИсходныйВладелец.ВладелецЭЦПИсходный;
ДанныеОрганизации.Вставить("Организация", Организация);
ДанныеСотрудника = ОбработкаЗаявленийАбонента.ПолучитьДанныеСотрудника(
ВладелецЭЦПТипИсходный,
ДанныеОрганизации,
ВладелецЭЦП);
ВладелецЭЦПИмя = ДанныеСотрудника.ФИО.Имя;
ВладелецЭЦПФамилия = ДанныеСотрудника.ФИО.Фамилия;
ВладелецЭЦПОтчество = ДанныеСотрудника.ФИО.Отчество;
ВладелецЭЦПДолжность = ДанныеСотрудника.Должность;
ВладелецЭЦППодразделение = ДанныеСотрудника.Подразделение;
ВладелецЭЦПСНИЛС = ДанныеСотрудника.СНИЛС;
ВладелецЭЦПИсходныйНайден = ВладелецЭЦПИсходный <> ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");
ВладелецЭЦПИзменился =
((СокрЛП_Врег(ВладелецЭЦПФамилия) <> СокрЛП_Врег(ВладелецЭЦПФамилияИсходный)
ИЛИ СокрЛП_Врег(ВладелецЭЦПИмя) <> СокрЛП_Врег(ВладелецЭЦПИмяИсходный)
ИЛИ СокрЛП_Врег(ВладелецЭЦПОтчество) <> СокрЛП_Врег(ВладелецЭЦПОтчествоИсходный)))
И ВладелецЭЦПИсходныйНайден;
КППИзменился =
СокрЛП_Врег(КПП) <> СокрЛП_Врег(КППИсходный)
И ЗначениеЗаполнено(КПП);
ОГРНИзменился =
СокрЛП_Врег(ОГРН) <> СокрЛП_Врег(ОГРНИсходный)
И ЗначениеЗаполнено(СтрокаБезДефисов(ОГРН));
РегНомерПФРИзменился =
СокрЛП_Врег(РегНомерПФР) <> СокрЛП_Врег(РегНомерПФРИсходный)
И (СдаватьВПФРИсходный ИЛИ СдаватьВФССИсходный)
И ЗначениеЗаполнено(СтрокаБезДефисов(РегНомерПФР));
КодРегионаФСРАРИзменился =
СокрЛП_Врег(КодРегионаФСРАРИсходный) <> СокрЛП_Врег(КодРегионаФСРАР)
И СдаватьВФСРАРИсходный
И ЗначениеЗаполнено(КодРегионаФСРАР)
И ЗначениеЗаполнено(КодРегионаФСРАРИсходный);
ВладелецЭЦППодразделениеИзменилось =
СокрЛП_Врег(ВладелецЭЦППодразделение) <> СокрЛП_Врег(ВладелецЭЦППодразделениеИсходное)
И ВладелецЭЦПИсходныйНайден
И ЗначениеЗаполнено(СокрЛП_Врег(ВладелецЭЦППодразделение));
ВладелецЭЦПДолжностьИзменилась =
СокрЛП_Врег(ВладелецЭЦПДолжность) <> СокрЛП_Врег(ВладелецЭЦПДолжностьИсходная)
И ВладелецЭЦПИсходныйНайден
И ЗначениеЗаполнено(СокрЛП_Врег(ВладелецЭЦПДолжность));
ВладелецЭЦПСНИЛСИзменился =
СокрЛП_Врег(ВладелецЭЦПСНИЛС) <> СокрЛП_Врег(ВладелецЭЦПСНИЛСИсходный)
И ВладелецЭЦПИсходныйНайден
И ЗначениеЗаполнено(СтрокаБезДефисов(ВладелецЭЦПСНИЛС))
И ВладелецЭЦПСНИЛС <> "000-000-000 00"
И (ВладелецЭЦПТипИсходный = Перечисления.ТипыВладельцевЭЦП.Руководитель
ИЛИ ВладелецЭЦПТипИсходный = Перечисления.ТипыВладельцевЭЦП.ГлавныйБухгалтер);
КодПФРИзменился =
СокрЛП_Врег(КодПФР) <> СокрЛП_Врег(КодПФРИсходный)
И (СдаватьВПФРИсходный ИЛИ СдаватьВФССИсходный)
И ЗначениеЗаполнено(СтрокаБезДефисов(КодПФР));
ИННИзменился = СокрЛП_Врег(ИНН) <> СокрЛП_Врег(ИННИсходный);
Перечисление = Перечисления.ПараметрыПодключенияК1СОтчетности;
Если КППИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.КПП, КППИсходный, КПП, Изменения);
КонецЕсли;
Если ОГРНИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.ОГРН, ОГРНИсходный, ОГРН, Изменения);
КонецЕсли;
Если РегНомерПФРИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.РегНомерПФР, РегНомерПФРИсходный, РегНомерПФР, Изменения);
КонецЕсли;
Если КодРегионаФСРАРИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.КодРегионаФСРАР, КодРегионаФСРАРИсходный, КодРегионаФСРАР, Изменения);
КонецЕсли;
Если ВладелецЭЦППодразделениеИзменилось Тогда
ДобавитьЗаписьИзменения(
Перечисление.ВладелецЭЦППодразделение,
ВладелецЭЦППодразделениеИсходное,
ВладелецЭЦППодразделение,
Изменения);
КонецЕсли;
Если ВладелецЭЦПДолжностьИзменилась Тогда
ДобавитьЗаписьИзменения(
Перечисление.ВладелецЭЦПДолжность,
ВладелецЭЦПДолжностьИсходная,
ВладелецЭЦПДолжность,
Изменения);
КонецЕсли;
Если ВладелецЭЦПСНИЛСИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.ВладелецЭЦПСНИЛС, ВладелецЭЦПСНИЛСИсходный, ВладелецЭЦПСНИЛС, Изменения);
КонецЕсли;
Если КодПФРИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.КодПФР, КодПФРИсходный, КодПФР, Изменения);
КонецЕсли;
Если ИННИзменился Тогда
ДобавитьЗаписьИзменения(Перечисление.ИНН, ИННИсходный, ИНН, Изменения);
КонецЕсли;
Если КраткоеНаименованиеИзменилось Тогда
ДобавитьЗаписьИзменения(Перечисление.КраткоеНаименование, КраткоеНаименованиеИсходное, КраткоеНаименование, Изменения);
КонецЕсли;
Если ЭлектроннаяПочтаИзменилась Тогда
ДобавитьЗаписьИзменения(Перечисление.ЭлектроннаяПочта, ЭлектроннаяПочтаИсходная, ЭлектроннаяПочта, Изменения);
КонецЕсли;
Возврат Изменения;
КонецФункции
&НаСервере
Функция ПолучитьНезавершенныеЗаявления(ЕстьРеквизиты = Ложь, ЕстьЛицензия = Ложь, ЕстьСертификат = Ложь, ЕстьНаправления = Ложь)
Заявления = Новый Массив;
ЕстьРеквизиты = Ложь;
ЕстьЛицензия = Ложь;
ЕстьСертификат = Ложь;
ЕстьНаправления = Ложь;
ЗапросЗаявлений = Новый Запрос;
ЗапросЗаявлений.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаявлениеАбонентаСпецоператораСвязи.Ссылка КАК Ссылка
|ИЗ
| Документ.ЗаявлениеАбонентаСпецоператораСвязи КАК ЗаявлениеАбонентаСпецоператораСвязи
|ГДЕ
| ЗаявлениеАбонентаСпецоператораСвязи.Организация = &Организация
| И ЗаявлениеАбонентаСпецоператораСвязи.Дата > &ДатаСреза
| И ЗаявлениеАбонентаСпецоператораСвязи.ПометкаУдаления = Ложь
| И ЗаявлениеАбонентаСпецоператораСвязи.НастройкаЗавершена = Ложь
| И (
| ЗаявлениеАбонентаСпецоператораСвязи.Статус = Значение(Перечисление.СтатусыЗаявленияАбонентаСпецоператораСвязи.Подготовлено)
| ИЛИ ЗаявлениеАбонентаСпецоператораСвязи.Статус = Значение(Перечисление.СтатусыЗаявленияАбонентаСпецоператораСвязи.Отправлено)
| ИЛИ ЗаявлениеАбонентаСпецоператораСвязи.Статус = Значение(Перечисление.СтатусыЗаявленияАбонентаСпецоператораСвязи.Одобрено)
| )";
ЗапросЗаявлений.Параметры.Вставить("Организация", Организация);
ЗапросЗаявлений.Параметры.Вставить("ДатаСреза", ДобавитьМесяц(ТекущаяДатаСеанса(), -1));
Результат = ЗапросЗаявлений.Выполнить();
Если Результат.Пустой() Тогда
Возврат Заявления;
КонецЕсли;
ПараметрыПодключения = Перечисления.ПараметрыПодключенияК1СОтчетности;
Направления = Новый Массив;
Направления.Добавить(ПараметрыПодключения.СдаватьВПФР);
Направления.Добавить(ПараметрыПодключения.СдаватьВРосстат);
Направления.Добавить(ПараметрыПодключения.СдаватьВРПН);
Направления.Добавить(ПараметрыПодключения.СдаватьВФНС);
Направления.Добавить(ПараметрыПодключения.СдаватьВФСРАР);
Направления.Добавить(ПараметрыПодключения.СдаватьВФСС);
Направления.Добавить(ПараметрыПодключения.СдаватьВФТС);
Направления.Добавить(ПараметрыПодключения.КодыФНС);
Направления.Добавить(ПараметрыПодключения.КодПФР);
Направления.Добавить(ПараметрыПодключения.КодРосстата);
Направления.Добавить(ПараметрыПодключения.КодРегионаФСРАР);
НезавершенныеЗаявления = Результат.Выгрузить();
Для Каждого Заявление из НезавершенныеЗаявления Цикл
Занятых = 0;
Заявления.Добавить(Новый Структура("Заявление, Лицензия, Сертификат, Направления, Реквизиты", Заявление.Ссылка, Ложь, Ложь, Ложь, Ложь));
Для Каждого Изменение ИЗ Заявление.Ссылка.ИзменившиесяРеквизитыВторичногоЗаявления Цикл
Если Изменение.ИзмененныйРеквизит = ПараметрыПодключения.ПродлениеЛицензии Тогда
Занятых = Занятых + 1;
Если НЕ ЕстьЛицензия Тогда
ЕстьЛицензия = Истина;
КонецЕсли;
Заявления[Заявления.Количество()-1].Лицензия = Истина;
ИначеЕсли Изменение.ИзмененныйРеквизит = ПараметрыПодключения.ПродлениеАбонентскогоСертификата Тогда
Занятых = Занятых + 1;
Если НЕ ЕстьСертификат Тогда
ЕстьСертификат = Истина;
КонецЕсли;
Заявления[Заявления.Количество()-1].Сертификат = Истина;
ИначеЕсли Изменение.ИзмененныйРеквизит = ПараметрыПодключения.ПереизданиеСертификата Тогда
Занятых = Занятых + 1;
Если НЕ ЕстьСертификат Тогда
ЕстьСертификат = Истина;
КонецЕсли;
Заявления[Заявления.Количество()-1].Сертификат = Истина;
ИначеЕсли Направления.Найти(Изменение.ИзмененныйРеквизит) <> Неопределено Тогда
Занятых = Занятых + 1;
Если НЕ ЕстьНаправления Тогда
ЕстьНаправления = Истина;
КонецЕсли;
Заявления[Заявления.Количество()-1].Направления = Истина;
КонецЕсли;
КонецЦикла;
Если Занятых < Заявление.Ссылка.ИзменившиесяРеквизитыВторичногоЗаявления.Количество() Тогда
Если НЕ ЕстьРеквизиты Тогда
ЕстьРеквизиты = Истина;
КонецЕсли;
Заявления[Заявления.Количество()-1].Реквизиты = Истина;
КонецЕсли;
КонецЦикла;
Возврат Заявления;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьИнформациюЗаявлений()
Перем ЕстьРеквизиты, ЕстьЛицензия, ЕстьСертификат, ЕстьНаправления;
ВсеДокументы = ПолучитьНезавершенныеЗаявления(ЕстьРеквизиты, ЕстьЛицензия, ЕстьСертификат, ЕстьНаправления);
Если ВсеДокументы.Количество() > 0 Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента.Документы = ВсеДокументы;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента.ЕстьРеквизиты = ЕстьРеквизиты;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента.ЕстьЛицензия = ЕстьЛицензия;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента.ЕстьСертификат = ЕстьСертификат;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента.ЕстьНаправления = ЕстьНаправления;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИнформациюЛичногоСертификата(Знач ОтпечатокСертификата)
ПараметрыОповещения = Новый Структура("ОтпечатокСертификата", ОтпечатокСертификата);
ОповещениеОЗавершении = Новый ОписаниеОповещения("СоздатьМенеджерКриптографииИПерейтиКПоискуСертификата", ЭтотОбъект, ПараметрыОповещения);
КриптографияЭДКОКлиент.СоздатьМенеджерКриптографии(ОповещениеОЗавершении, Ложь);
КонецПроцедуры
&НаКлиенте
Функция СоздатьМенеджерКриптографииИПерейтиКПоискуСертификата(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
СписокСертификатовДляПоиска = Новый Массив;
СписокСертификатовДляПоиска.Добавить(Новый Структура("Отпечаток", ВходящийКонтекст.ОтпечатокСертификата));
ПараметрыОповещения = Новый Структура("СертификатыХранятсяУдаленно, ОтпечатокСертификата", Ложь, ВходящийКонтекст.ОтпечатокСертификата);
ОповещениеОЗавершении = новый ОписаниеОповещения("НайтиСертификатИЭкспортироватьЕго", ЭтотОбъект, ПараметрыОповещения);
КриптографияЭДКОКлиент.НайтиСертификаты(ОповещениеОЗавершении, СписокСертификатовДляПоиска, Истина, Ложь, Результат.МенеджерКриптографии);
КонецЕсли;
КонецФункции
&НаКлиенте
Функция НайтиСертификатИЭкспортироватьЕго(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
Если Результат.Сертификаты.Количество() > 0 Тогда
ВходящийКонтекст.Вставить("ПоляСертификата", Результат.Сертификаты[0]);
Оповещение = новый ОписаниеОповещения("ИзвлечьИнформациюСертификата", ЭтотОбъект, ВходящийКонтекст);
КриптографияЭДКОКлиент.ЭкспортироватьСертификатВBase64(Оповещение, Результат.Сертификаты[0]);
КонецЕсли;
Иначе
ДобавитьОшибкуСертификатНеНайден(ВходящийКонтекст);
КонецЕсли;
КонецФункции
&НаСервере
Функция ИзвлечьИнформациюОКриптопровайдереПоСертификатуНаСервере(Знач СтрокаBase64)
СертификатыBase64 = Новый Массив();
СертификатыBase64.Добавить(Новый Структура("Сертификат", Base64Значение(СтрокаBase64) ));
Возврат КриптографияЭДКОСлужебныйВызовСервера.ИзвлечьИнформациюОКриптопровайдереПоСертификату(СертификатыBase64);
КонецФункции
&НаКлиенте
Функция ИзвлечьИнформациюСертификата(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
КПСертификата = ИзвлечьИнформациюОКриптопровайдереПоСертификатуНаСервере(Результат.СтрокаBase64);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Найден = Истина;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Отпечаток = ВходящийКонтекст.ПоляСертификата.Отпечаток;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Выдан = ВходящийКонтекст.ПоляСертификата.ДействителенС;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.ДействуетПо = ВходящийКонтекст.ПоляСертификата.ДействителенПо;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Криптопровайдер = КПСертификата[0].Криптопровайдер;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Содержимое = Результат.СтрокаBase64;
ТекущаяДатаСервер = РезультатыДиагностики.Параметры.ДатаКлиента;
СекундВОдномДне = 24 * 60 * 60;
КоличествоДнейЗаКотороеНужноПредупреждатьОбИстеченииСрока = 30;
ПораПродлитьСертификат = Ложь;
Если ТекущаяДатаСервер >= ВходящийКонтекст.ПоляСертификата.ДействителенС И ТекущаяДатаСервер <= ВходящийКонтекст.ПоляСертификата.ДействителенПо Тогда
СрокГодности = 0;
КоличествоДнейДоОкончания = (НачалоДня(ВходящийКонтекст.ПоляСертификата.ДействителенПо) - НачалоДня(ТекущаяДатаСервер)) / СекундВОдномДне;
ПораПродлитьСертификат = КоличествоДнейДоОкончания <= КоличествоДнейЗаКотороеНужноПредупреждатьОбИстеченииСрока;
Если ПораПродлитьСертификат Тогда
СрокГодности = 1;
КонецЕсли;
ИначеЕсли ТекущаяДатаСервер < ВходящийКонтекст.ПоляСертификата.ДействителенС Тогда
СрокГодности = 3;
ИначеЕсли ТекущаяДатаСервер > ВходящийКонтекст.ПоляСертификата.ДействителенПо Тогда
ПораПродлитьСертификат = Истина;
СрокГодности = 2;
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.ПораПродлить = ПораПродлитьСертификат;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.СрокГодности = СрокГодности;
Если СрокГодности = 1 ИЛИ СрокГодности = 2 Тогда
РезультатыДиагностики.Отчет.ФлагиМастераИзмененияПараметров.ПродлитьСертификат = Истина;
РезультатыДиагностики.Отчет.ФлагиМастераИзмененияПараметров.ПереиздатьСертификат = Истина;
КонецЕсли;
ОписаниеСертификата = Новый Структура("Отпечаток, Наименование, Хранилище, Выдан, ГоденДо, Найден, Содержимое, Ошибка",
ВходящийКонтекст.ПоляСертификата.Отпечаток, "", "MY",,, Истина, "", "");
ОписаниеСертификата.Вставить("Наименование", ВходящийКонтекст.ПоляСертификата.Наименование);
ОписаниеСертификата.Вставить("Выдан", РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Выдан);
ОписаниеСертификата.Вставить("ГоденДо", РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.ДействуетПо);
РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов.Добавить(ОписаниеСертификата);
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ВыполнитьПроверкуУчетнойЗаписи()
ОрганизацияКлиент = РезультатыДиагностики.Параметры.Организация;
УчетнаяЗаписьОбменаКлиент = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена;
СтатусыУчетнойЗаписиДокументооборотаКлиент = ПолучитьЗначенияПеречисления("СтатусыУчетнойЗаписиДокументооборота");
РезультатыДиагностики.Отчет.Проверки.Вставить("ПроверкаУчетнойЗаписи", Новый Структура);
УчеткаАктивна = УчетнаяЗаписьОбменаКлиент.СтатусУчетнойЗаписи = СтатусыУчетнойЗаписиДокументооборотаКлиент.Активна;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("Активна", УчеткаАктивна);
РезультатыДиагностики.Отчет.Проверки.Вставить("ПроверкаСертификатов", Новый Массив);
Если РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Активна Тогда
Событие = ПолучитьОписаниеСобытия(1, 0, 1);
Иначе
Событие = ПолучитьОписаниеСобытия(1, 2, 2);
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("АктивностьСобытие", Событие);
ТекущаяДатаСервер = РезультатыДиагностики.Параметры.ДатаКлиента;
СекундВОдномДне = 24 * 60 * 60;
Начало = УчетнаяЗаписьОбменаКлиент.ЛицензияДатаНачала;
Окончание = УчетнаяЗаписьОбменаКлиент.ЛицензияДатаОкончания;
Если Параметры.Тестирование Тогда
Окончание = ДобавитьМесяц(ТекущаяДатаСервер, -1);
Начало = ДобавитьМесяц(Окончание, -12);
КонецЕсли;
КоличествоДнейДоОкончанияЛицензии = (НачалоДня(Окончание) - НачалоДня(ТекущаяДатаСервер)) / СекундВОдномДне;
ПораПродлитьЛицензиюНа1СОтчетность = КоличествоДнейДоОкончанияЛицензии <= КоличествоДнейЗаКотороеНужноПредупреждатьОбИстеченииСрока;
Событие = Неопределено;
Если ТекущаяДатаСервер >= Начало И ТекущаяДатаСервер <= Окончание Тогда
СрокГодности = 0;
Событие = ПолучитьОписаниеСобытия(1, 0, 0);
Если ПораПродлитьЛицензиюНа1СОтчетность Тогда
СрокГодности = 1;
Событие = ПолучитьОписаниеСобытия(1, 1, 0);
РезультатыДиагностики.Отчет.ФлагиМастераИзмененияПараметров.ПродлитьЛицензиюНа1СОтчетность = Истина;
КонецЕсли;
ИначеЕсли ТекущаяДатаСервер < Начало Тогда
СрокГодности = 3;
Событие = ПолучитьОписаниеСобытия(1, 2, 1);
ИначеЕсли ТекущаяДатаСервер > Окончание Тогда
СрокГодности = 2;
Событие = ПолучитьОписаниеСобытия(1, 2, 0);
РезультатыДиагностики.Отчет.ФлагиМастераИзмененияПараметров.ПродлитьЛицензиюНа1СОтчетность = Истина;
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ЛицензияДатаНачала", Начало);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ЛицензияДатаОкончания", Окончание);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ЛицензияНаименование", УчетнаяЗаписьОбменаКлиент.ЛицензияНаименование);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("СрокГодностиЧислом", СрокГодности);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("СрокГодностиСобытие", Событие);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("РазличияРеквизитовСведений", Новый Массив);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ИнформацияДоверенности", Новый Массив);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("РазличияРеквизитовСведенийСобытие", Неопределено);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ИнформацияДоверенностиСобытие", Неопределено);
Различия = ПолучитьСписокИзменившихсяРеквизитовПодключенияК1СОтчетности(
Организация,
ОрганизацияКлиент.УчетнаяЗаписьОбмена);
Если Различия <> Неопределено Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.РазличияРеквизитовСведений = Различия;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.РазличияРеквизитовСведенийСобытие = ПолучитьОписаниеСобытия(1, 2, 8);
РезультатыДиагностики.Отчет.ФлагиМастераИзмененияПараметров.ИзменитьРеквизитыПодключенияК1СОтчетности = Истина;
КонецЕсли;
НетОшибок = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.РазличияРеквизитовСведений.Количество() = 0;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("РазличияРеквизитовНетОшибок", НетОшибок);
СертификатВыданНаПредставителя = Ложь;
Проблемы = ПолучитьСписокПроблемСДоверенностями(
Организация,
РезультатыДиагностики.Автонастройка.ВладелецЭП,
РезультатыДиагностики.Автонастройка.СведенияРегистрации,
СертификатВыданНаПредставителя);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("СертификатВыданНаПредставителя", СертификатВыданНаПредставителя);
Если Проблемы <> Неопределено Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности = Проблемы;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенностиСобытие = ПолучитьОписаниеСобытия(1, 2, 9);
КонецЕсли;
ВсегоПроблем = 0;
ВсегоДоверенностей = РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности.Количество();
Для Каждого Доверенность Из РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияДоверенности Цикл
ВсегоПроблем = ВсегоПроблем + Доверенность.Проблемы.Количество();
КонецЦикла;
НетОшибок = ВсегоДоверенностей = 0 ИЛИ ВсегоПроблем = 0;
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ИнформацияДоверенностиНетОшибок", НетОшибок);
Личный = Новый Структура("Отпечаток, Содержимое, Выдан, ДействуетПо, Найден, Криптопровайдер, ПораПродлить, СрокГодности",,,,, Ложь,, Ложь, -1);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ИнформацияЛичногоСертификата", Личный);
Сертификат = МультирежимВызовСервера.СертификатПользователя(РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена.Ссылка);
Если Сертификат.Найден Тогда
ЗаполнитьИнформациюЛичногоСертификата(Сертификат.Отпечаток);
Иначе
Контекст = Новый Структура("ОтпечатокСертификата", Сертификат.Отпечаток);
ДобавитьОшибкуСертификатНеНайден(Контекст);
КонецЕсли;
Заявления = Новый Структура("Документы, ЕстьРеквизиты, ЕстьЛицензия, ЕстьСертификат, ЕстьНаправления", Новый Массив, Ложь, Ложь, Ложь, Ложь);
РезультатыДиагностики.Отчет.Проверки.ПроверкаУчетнойЗаписи.Вставить("ЗаявленияАбонента", Заявления);
ЗаполнитьИнформациюЗаявлений();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СокрЛП_Врег(Строка)
Возврат ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.СтрокаВФорматеДляСравнения(Строка);
КонецФункции
&НаКлиенте
Функция ДобавитьОшибкуСертификатНеНайден(ВходящийКонтекст) Экспорт
ОписаниеСертификата = Новый Структура("Отпечаток, Наименование, Хранилище, Выдан, ГоденДо, Найден, Содержимое, Ошибка",
ВходящийКонтекст.ОтпечатокСертификата, "", "MY",,, Ложь, "", "Не найден в хранилище");
РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов.Добавить(ОписаниеСертификата);
КонецФункции
#КонецОбласти
#Область ПроверкаПодключений
&НаКлиенте
Функция ВыполнитьПроверкуПодключений()
РезультатыДиагностики.Отчет.Проверки.Вставить("ПроверкаПодключений", Новый Структура);
РезультатыДиагностики.Отчет.Проверки.Вставить("ПроверяемыеХосты", Новый Массив);
РезультатыДиагностики.Отчет.Проверки.Вставить("СостояниеСервисаПроверки", 0);
РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Вставить("Ресурсы", Новый Массив);
РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Вставить("Предупреждения", Новый Массив);
Предупреждения = Новый Массив;
Ресурсы = Новый Массив;
Для Каждого Направление Из РезультатыДиагностики.Автонастройка.Получатели Цикл
Если Не Направление.Пометка Тогда
ИндексНаправления = РезультатыДиагностики.Автонастройка.Получатели.Индекс(Направление);
Продолжить;
КонецЕсли;
Если Направление.Значение = "ФСРАР" Тогда
Адрес = ПолучитьЗаменяемоеЗначениеТестовогоСервера1С("service.fsrar.ru");
Порт = 443;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Псевдоним", Ложь, Адрес, Порт, "Росалкогольтабакконтроль (производство)");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
Адрес = ПолучитьЗаменяемоеЗначениеТестовогоСервера1С("service.alcolicenziat.ru");
Порт = 443;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Псевдоним", Ложь, Адрес, Порт, "Росалкогольтабакконтроль (розница)");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
ИначеЕсли Направление.Значение = "ПФР" Тогда
ИначеЕсли Направление.Значение = "ФНС" Тогда
ИначеЕсли Направление.Значение = "ФСГС" Тогда
ИначеЕсли Направление.Значение = "РПН" Тогда
ИначеЕсли Направление.Значение = "ФТС" Тогда
Адрес = КонтекстЭДОКлиент.СерверПриемаОтчетностиФТС().АдресСервера;
Порт = 443;
Урл = ПолучитьЗаменяемоеЗначениеТестовогоСервера1С("/FtsPersonalCabinetWeb", "{FTS}/FtsPersonalCabinetWeb");
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Псевдоним, Урл", Ложь, Адрес, Порт, "ФТС", Урл);
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
ИначеЕсли Направление.Значение = "ФСС" Тогда
Адрес = КонтекстЭДОКлиент.СерверПриемаОтчетностиФСС(
ПредопределенноеЗначение("Перечисление.ТипыОтправляемыхДокументов.Отчет4ФСС"));
Порт = 80;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Псевдоним", Ложь, Адрес, Порт, "ФСС (форма 4)");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
Адрес = КонтекстЭДОКлиент.СерверПриемаОтчетностиФСС(
ПредопределенноеЗначение("Перечисление.ТипыОтправляемыхДокументов.РеестрСведенийФСС"));
Порт = 80;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Псевдоним", Ложь, Адрес, Порт, "ФСС (реестр)");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
КонецЕсли;
КонецЦикла;
Адрес = КонтекстЭДОКлиент.СерверПриемаОтчетностиФСС(
ПредопределенноеЗначение("Перечисление.ТипыОтправляемыхДокументов.ДанныеЭЛНФСС"),, Организация);
ОтпечаткиСертификатов = КонтекстЭДОКлиент.ПолучитьОтпечаткиСертификатовИзНастроекОрганизацииДляФССНаСервере(
Организация);
ЭтоТестовыйСерверФССЭЛН = ОтпечаткиСертификатов <> Неопределено И ОтпечаткиСертификатов.ТестовыйСерверФССЭЛН = Истина;
Порт = 443;
Урл = ПолучитьЗаменяемоеЗначениеТестовогоСервера1С(?(ЭтоТестовыйСерверФССЭЛН,
"/eln/ws-insurer-crypto/api/soap/FileOperationsLnService?wsdl", "/ws-insurer-crypto-v20/FileOperationsLnService?wsdl"),
"{FSS}/ws-insurer-crypto-v20/FileOperationsLnService?wsdl");
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Урл, Псевдоним", Ложь, Адрес, Порт, Урл, "ФСС (б/л)");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
Спецоператор = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена.СпецоператорСвязи;
СтруктураПараметра = Новый Структура("ВебСервисОпределение");
АдресПолный = КонтекстЭДОКлиент.ПолучитьПараметрСпецоператораКлиент(Спецоператор, СтруктураПараметра).ВебСервисОпределение;
Адрес = Сред(АдресПолный, Найти(АдресПолный, "://") + 3);
Урл = Сред(Адрес, Найти(Адрес, "/"));
Адрес = Лев(Адрес, Найти(Адрес, "/") - 1);
Порт = 80;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Урл, Псевдоним", Ложь, Адрес, Порт, Урл, "1С-Отчетность");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Урл, УчетнаяЗаписьОбмена, Псевдоним", Ложь, Неопределено, Неопределено, Неопределено, Неопределено, "ФНС, ПФР И Росстат");
ДанныеХоста.УчетнаяЗаписьОбмена = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена;
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
ПараметрыСервераОбновлений1С = КонтекстЭДОКлиент.ПолучитьПараметрыИнтернета();
Адрес = ПараметрыСервераОбновлений1С.URLСервера;
Урл = ПараметрыСервераОбновлений1С.КаталогФайловНаСервере + ПараметрыСервераОбновлений1С.ИмяКлючевогоФайлаНаСервере;
Порт = Неопределено;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Урл, Псевдоним", Ложь, Адрес, Порт, Урл, "1С-Отчетность (обновления)");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
Адрес = "getserial.infotecs.ru";
Урл = "/partner/csp/service/GetSerialNumberByAbonentInfo/";
Порт = 443;
ДанныеХоста = Новый Структура("Проверен, Адрес, Порт, Урл, Псевдоним", Ложь, Адрес, Порт, Урл, "Установка ViPNet CSP");
РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Добавить(ДанныеХоста);
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьСписокХостов", 1, Ложь);
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьЗаменяемоеЗначениеТестовогоСервера1С(ИсходноеЗначение, ЗначениеДляОтправки = Неопределено) Экспорт
Возврат ДокументооборотСКО.ПолучитьЗаменяемоеЗначениеТестовогоСервера1С(ИсходноеЗначение, ЗначениеДляОтправки, Неопределено);
КонецФункции
&НаКлиенте
Процедура ПроверитьНедоступныеЧерезСервисПроверки()
Хосты = "";
СписокНедоступных = Новый СписокЗначений;
Индекс = -1;
Для Каждого Ресурс из РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Ресурсы Цикл
Индекс = Индекс + 1;
Если Ресурс.Результат Тогда
Продолжить;
КонецЕсли;
Если Хосты <> "" Тогда
Хосты = Хосты + Символы.ПС;
КонецЕсли;
Хост = Ресурс.ПараметрыПодключения.ПредставлениеХоста;
Хосты = Хосты + Хост;
СписокНедоступных.Добавить(НРег(Хост), Формат(Индекс, "ЧДЦ=; ЧН=; ЧГ="));
КонецЦикла;
Если Хосты = "" Тогда
Возврат;
КонецЕсли;
ОписаниеОшибки = "";
СтруктураJSON = ЗапроситьДоступностьУСервисаПроверки(Хосты, ОписаниеОшибки);
Если СтруктураJSON = Неопределено Тогда
РезультатыДиагностики.Отчет.Проверки.СостояниеСервисаПроверки = 2;
Иначе
Если СтруктураJSON.Свойство("error") Тогда
РезультатыДиагностики.Отчет.Проверки.СостояниеСервисаПроверки = 3;
ИначеЕсли СтруктураJSON.Свойство("result") Тогда
Если ТипЗнч(СтруктураJSON.result) = Тип("Массив") Тогда
Для Каждого РезультатыХоста Из СтруктураJSON.result Цикл
Результат = СписокНедоступных.НайтиПоЗначению(НРег(РезультатыХоста.qu));
Если Результат = Неопределено Тогда
Продолжить;
КонецЕсли;
Индекс = Число(Результат.Представление);
Ресурс = РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Ресурсы[Индекс];
Ресурс.СервисПроверки.Использовался = Истина;
Ресурс.СервисПроверки.Доступен = РезультатыХоста.online = 1;
Ресурс.СервисПроверки.ДоступностьЗаЧас = Число(РезультатыХоста.ratioH);
Ресурс.СервисПроверки.ДоступностьЗаДень = Число(РезультатыХоста.ratioD);
КонецЦикла;
Иначе
РезультатыДиагностики.Отчет.Проверки.СостояниеСервисаПроверки = 3;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПроверитьСписокХостов() Экспорт
Перем Адрес, Порт, Урл, УчетнаяЗаписьОбмена;
НастройкиХоста = Неопределено;
Для ИндексТекущего = 1 по РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Количество() цикл
НастройкиХоста = РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты[ИндексТекущего-1];
Если НастройкиХоста.Проверен Тогда
НастройкиХоста = Неопределено;
Продолжить;
КонецЕсли;
НастройкиХоста.Проверен = Истина;
Прервать;
КонецЦикла;
Если НастройкиХоста = Неопределено Тогда
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьСписокХостов");
ОбновитьПрогресс(15+РезультатыДиагностики.Отчет.Проверки.ПроверяемыеХосты.Количество()+1);
ПроверитьНедоступныеЧерезСервисПроверки();
ВыполнитьПроверку(2,, Истина);
Возврат;
КонецЕсли;
Псевдоним = "";
НастройкиХоста.Свойство("Адрес", Адрес);
НастройкиХоста.Свойство("Порт", Порт);
НастройкиХоста.Свойство("Урл", Урл);
НастройкиХоста.Свойство("УчетнаяЗаписьОбмена", УчетнаяЗаписьОбмена);
НастройкиХоста.Свойство("Псевдоним", Псевдоним);
Результат2 = Неопределено;
Результат = ПроверитьХост(Адрес, Порт, Урл, УчетнаяЗаписьОбмена, Псевдоним, Ложь, Результат2);
РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Ресурсы.Добавить(Результат);
Если Результат2 <> Неопределено Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаПодключений.Ресурсы.Добавить(Результат2);
КонецЕсли;
ОбновитьПрогресс(15+ИндексТекущего);
ОбновитьОтображениеДанных();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПараметрыДоступаКПочтеВерны(Объект, УспешноPOP3, УспешноSMTP, ОписаниеОшибки = "", ОписаниеОшибки2 = "")
ОписаниеОшибки = "";
ОписаниеОшибки2 = "";
УспешноPOP3 = Ложь;
УспешноSMTP = Ложь;
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;
ПочтовыйПрофиль.АдресСервераPOP3 = Объект.СерверPOP3;
ПочтовыйПрофиль.ПортPOP3 = Объект.ПортPOP3;
ПочтовыйПрофиль.Пользователь = Объект.ИмяПользователяPOP3;
ПочтовыйПрофиль.Пароль = Объект.ПарольPOP3;
ПочтовыйПрофиль.ВремяОжидания = 10;
ПочтовыйПрофиль.Таймаут = 10;
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(ПочтовыйПрофиль);
Почта.ПолучитьКоличествоСообщений();
Почта.Отключиться();
УспешноPOP3 = Истина;
Исключение
Инф = ИнформацияОбОшибке();
Если Инф.Причина = Неопределено Тогда
ОписаниеОшибки = Инф.Описание;
Иначе
ОписаниеОшибки = Инф.Причина.Описание;
КонецЕсли;
КонецПопытки;
ПочтовыйПрофиль2 = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль2.АдресСервераSMTP = Объект.СерверSMTP;
ПочтовыйПрофиль2.ПортSMTP = Объект.ПортSMTP;
ПочтовыйПрофиль2.ПортPOP3 = 0;
ПочтовыйПрофиль2.АутентификацияSMTP = СпособSMTPАутентификации.Login;
ПочтовыйПрофиль2.ПользовательSMTP = Объект.ИмяПользователяSMTP;
ПочтовыйПрофиль2.ПарольSMTP = Объект.ПарольSMTP;
ПочтовыйПрофиль2.ВремяОжидания = 10;
ПочтовыйПрофиль2.Таймаут = 10;
Почта2 = Новый ИнтернетПочта;
Попытка
Почта2.Подключиться(ПочтовыйПрофиль2);
Почта2.Отключиться();
УспешноSMTP = Истина;
Исключение
Инф = ИнформацияОбОшибке();
Если Инф.Причина = Неопределено Тогда
ОписаниеОшибки2 = Инф.Описание;
Иначе
ОписаниеОшибки2 = Инф.Причина.Описание;
КонецЕсли;
КонецПопытки;
Возврат УспешноSMTP И УспешноPOP3;
КонецФункции
&НаСервере
Функция ЗапроситьДоступностьУСервисаПроверки(Знач Хосты, ОписаниеОшибки)
Перем Пользователь, Пароль, ЗащищенноеСоединение, Прокси;
Таймаут = 10;
ОписаниеОшибки = "";
Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("https");
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(
Неопределено,
Новый СертификатыУдостоверяющихЦентровОС);
Запрос = Новый HTTPЗапрос("/static/online_stats.json");
Соединение = Новый HTTPСоединение(Параметры.ХОХост, 443, Пользователь, Пароль, Прокси, Таймаут, ЗащищенноеСоединение);
Попытка
Ответ = Соединение.Получить(Запрос);
Исключение
Инф = ИнформацияОбОшибке();
Если Инф.Причина = Неопределено Тогда
ОписаниеОшибки = Инф.Описание;
Иначе
ОписаниеОшибки = Инф.Причина.Описание;
КонецЕсли;
Возврат Неопределено;
КонецПопытки;
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
Если ОтветСтрокой = Неопределено Тогда
ОтветСтрокой = "{""error"": ""generic""}";
КонецЕсли;
ЧтJSON = Новый ЧтениеJSON;
ЧтJSON.УстановитьСтроку(ОтветСтрокой);
Попытка
СтруктураJSON = ПрочитатьJSON(ЧтJSON, Ложь);
Исключение
Инф = ИнформацияОбОшибке();
Если Инф.Причина = Неопределено Тогда
ОписаниеОшибки = Инф.Описание;
Иначе
ОписаниеОшибки = Инф.Причина.Описание;
КонецЕсли;
Возврат Неопределено
КонецПопытки;
Возврат СтруктураJSON;
КонецФункции
&НаСервереБезКонтекста
Функция ЕстьПодключениеHTTPНаСервере(Хост, Знач Порт = Неопределено, Знач Урл = Неопределено, ОписаниеОшибки, КодСостояния = Неопределено)
Перем ЗащищенноеСоединение, Пользователь, Пароль, Прокси;
Таймаут = 10;
Если (Порт = Неопределено) Тогда
Порт = 80
КонецЕсли;
Порт = Число(Порт);
Если Порт = 443 Тогда
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("https");
Иначе
Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("http");
ЗащищенноеСоединение = Неопределено;
КонецЕсли;
Запрос = Новый HTTPЗапрос(?(Урл = Неопределено, "/", Урл));
Соединение = Новый HTTPСоединение(Хост, Порт, Пользователь, Пароль, Прокси, Таймаут, ЗащищенноеСоединение);
Попытка
Результат = Соединение.Получить(Запрос);
Исключение
Инф = ИнформацияОбОшибке();
Если Инф.Причина = Неопределено Тогда
ОписаниеОшибки = Инф.Описание;
Иначе
ОписаниеОшибки = Инф.Причина.Описание;
КонецЕсли;
Возврат Ложь;
КонецПопытки;
КодСостояния = Результат.КодСостояния;
Если (КодСостояния = 200) или (КодСостояния = 302) или (КодСостояния = 401) Тогда
ОписаниеОшибки="";
Возврат Истина;
Иначе
ОписаниеОшибки = ОписаниеHTTPКода(КодСостояния);
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере
Функция ПроверитьХост(Адрес = Неопределено,
Порт = Неопределено,
Урл = Неопределено,
ПочтовыйПрофиль = Неопределено,
Псевдоним = Неопределено,
Тестирование = Ложь,
РезультатПроверки2 = Неопределено)
КонтекстМодуля = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ОписаниеОшибки = "";
КодСостояния = 0;
ВнешняяПроверка = новый Структура("Использовался, Доступен, ДоступностьЗаЧас, ДоступностьЗаДень", Ложь, Неопределено, Неопределено, Неопределено);
РезультатПроверки = новый Структура("ПараметрыПодключения, Результат, Ошибка, СервисПроверки",,,, ВнешняяПроверка);
Если ПочтовыйПрофиль = Неопределено Тогда
РезультатПроверки.ПараметрыПодключения = новый Структура("Адрес, Порт, Урл, Псевдоним", Адрес, Порт, Урл, Псевдоним);
РезультатПроверки.ПараметрыПодключения.Вставить("ПредставлениеХоста", КонтекстМодуля.ПолучитьURL(РезультатПроверки.ПараметрыПодключения));
Иначе
ВнешняяПроверка2 = новый Структура("Использовался, Доступен, ДоступностьЗаЧас, ДоступностьЗаДень", Ложь, Неопределено, Неопределено, Неопределено);
РезультатПроверки2 = новый Структура("ПараметрыПодключения, Результат, Ошибка, СервисПроверки",,,, ВнешняяПроверка2);
РезультатПроверки.ПараметрыПодключения = новый Структура("АдресPOP3, АдресSMTP, ПортPOP3, ПортSMTP, Псевдоним",
ПочтовыйПрофиль.СерверPOP3, "", ПочтовыйПрофиль.ПортPOP3, 0, Псевдоним);
РезультатПроверки2.ПараметрыПодключения = новый Структура("АдресPOP3, АдресSMTP, ПортPOP3, ПортSMTP, Псевдоним", "",
ПочтовыйПрофиль.СерверSMTP, 0, ПочтовыйПрофиль.ПортSMTP, Псевдоним);
РезультатПроверки.ПараметрыПодключения.Вставить("ПредставлениеХоста", КонтекстМодуля.ПолучитьURL(РезультатПроверки.ПараметрыПодключения));
РезультатПроверки2.ПараметрыПодключения.Вставить("ПредставлениеХоста", КонтекстМодуля.ПолучитьURL(РезультатПроверки2.ПараметрыПодключения));
КонецЕсли;
Если Тестирование Тогда
Возврат РезультатПроверки;
КонецЕсли;
ОписаниеОшибки1 = "";
ОписаниеОшибки2 = "";
Результат1 = Ложь;
Результат2 = Ложь;
Если ПочтовыйПрофиль = Неопределено Тогда
Успешно = ЕстьПодключениеHTTPНаСервере(Адрес, Порт, Урл, ОписаниеОшибки, КодСостояния);
Если Параметры.Тестирование Тогда
Если СлучайноеБулево() Тогда
Успешно = Ложь;
ОписаниеОшибки = "Service Unavailable, искусственная ошибка";
КодСостояния = "503";
КонецЕсли;
КонецЕсли;
РезультатПроверки.Результат = Успешно;
Если Успешно Тогда
РезультатПроверки.Ошибка = Неопределено;
Иначе
РезультатПроверки.Ошибка = Новый Структура("Код, Описание", КодСостояния, ОписаниеОшибки);
КонецЕсли;
Иначе
Успешно = ПараметрыДоступаКПочтеВерны(ПочтовыйПрофиль, Результат1, Результат2, ОписаниеОшибки1, ОписаниеОшибки2);
КодСостояния = 0;
ОписаниеОшибки = ОписаниеОшибки1;
РезультатПроверки.Результат = Результат1;
РезультатПроверки2.Результат = Результат2;
Если Результат1 Тогда
РезультатПроверки.Ошибка = Неопределено;
Иначе
РезультатПроверки.Ошибка = Новый Структура("Код, Описание", КодСостояния, ОписаниеОшибки1);
КонецЕсли;
Если Результат2 Тогда
РезультатПроверки2.Ошибка = Неопределено;
Иначе
РезультатПроверки2.Ошибка = Новый Структура("Код, Описание", КодСостояния, ОписаниеОшибки2);
КонецЕсли;
КонецЕсли;
Возврат РезультатПроверки;
КонецФункции
#КонецОбласти
#Область ПроверкаКомпонентов
&НаКлиенте
Функция ВыполнитьПроверкуКомпонентов()
РезультатыДиагностики.Отчет.Проверки.Вставить("ПроверкаКомпонентов", Новый Структура("Криптокомпонент, Криптопровайдеры, РасширениеРаботыСФайлами"));
РезультатыПодключенияКК = Новый Структура("Криптокомпонент, Криптопровайдеры", Неопределено, Неопределено);
Если КриптографияЭДКОКлиентСервер.ЭтоЛокальнаяПодпись(РезультатыДиагностики.Параметры) Тогда
ОповещениеОЗавершении = Новый ОписаниеОповещения("СоздатьМенеджерКриптографииРезультат", ЭтотОбъект, Неопределено);
КриптографияЭДКОКлиент.СоздатьМенеджерКриптографии(ОповещениеОЗавершении, Ложь);
ОповещениеОЗавершении = Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект, Неопределено, "ПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект);
НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеОЗавершении);
Иначе
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры = Новый Структура("Подключен, КодОшибки, ОписаниеОшибки, Состояние");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Подключен = Истина;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент = Новый Структура("Подключен, КодОшибки, ОписаниеОшибки, Состояние");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.Подключен = Истина;
ВыполнитьПроверку(3, Истина);
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура СоздатьМенеджерКриптографииРезультат(Результат, ДополнительныеПараметры) Экспорт
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент = Новый Структура("Подключен, КодОшибки, ОписаниеОшибки");
Если Результат.Выполнено Тогда
РезультатыПодключенияКК.Криптокомпонент = Результат.МенеджерКриптографии;
ОповещениеОЗавершении = новый ОписаниеОповещения("МенеджерКриптографииПолучитьКриптопровайдеровРезультат", ЭтотОбъект, Неопределено);
КриптографияЭДКОКлиент.ПолучитьКриптопровайдеры(ОповещениеОЗавершении, Ложь, РезультатыПодключенияКК.Криптокомпонент);
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.КодОшибки = 0;
Иначе
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.КодОшибки = 1;
Попытка
МенеджерКриптографии = Новый("Addin.ЭДОNative.CryptS");
Исключение
МенеджерКриптографии = Неопределено;
КонецПопытки;
РезультатыПодключенияКК.Криптокомпонент = Неопределено;
Если МенеджерКриптографии <> Неопределено Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.КодОшибки = 2;
КонецЕсли;
ОписаниеОшибки="";
Если НЕ Результат.Свойство("ОписаниеОшибки", ОписаниеОшибки) Тогда
ОписаниеОшибки = "Не удалось подключить внешнюю компоненту Для работы с криптографией.";
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.ОписаниеОшибки = ОписаниеОшибки;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры = Новый Структура("Подключен, КодОшибки, ОписаниеОшибки, Состояние");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Подключен = Ложь;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.КодОшибки = 3;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.ОписаниеОшибки = "Невозможно получить криптопровайдеров из ошибки подключения криптокомпоненты";
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Состояние = 3;
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент.Подключен = Результат.Выполнено;
ВсеПроверкиКомпонентЗавершены(1, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура МенеджерКриптографииПолучитьКриптопровайдеровРезультат(Результат, ДополнительныеПараметры) Экспорт
РезультатыПодключенияКК.Криптопровайдеры = Новый СписокЗначений;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры = Новый Структура("Подключен, КодОшибки, ОписаниеОшибки, Состояние");
Если Результат.Выполнено Тогда
ЭтоLinux = ОбщегоНазначенияЭДКОКлиент.ЭтоКриптопровайдерLinux();
ПоддерживаемыеКриптопровайдеры = КриптографияЭДКОКлиентСервер.ПоддерживаемыеКриптопровайдеры(, ЭтоLinux);
ИндексКриптопровайдеров = Неопределено;
Для Каждого Криптопровайдер из Результат.Криптопровайдеры Цикл
Если РезультатыПодключенияКК.Криптопровайдеры.НайтиПоЗначению(Криптопровайдер.Тип) <> Неопределено Тогда
Продолжить;
КонецЕсли;
СвойстваКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдера(
Криптопровайдер.Имя,
Криптопровайдер.Тип,
ПоддерживаемыеКриптопровайдеры,
ИндексКриптопровайдеров);
Если СвойстваКриптопровайдера <> Неопределено Тогда
СвойстваКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдераПоУмолчанию(
СвойстваКриптопровайдера.ТипКриптопровайдера);
Если РезультатыПодключенияКК.Криптопровайдеры.НайтиПоЗначению(СвойстваКриптопровайдера.Тип) = Неопределено Тогда
РезультатыПодключенияКК.Криптопровайдеры.Добавить(СвойстваКриптопровайдера.Тип, СвойстваКриптопровайдера.Имя);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Параметры.Тестирование Тогда
Если СлучайноеБулево() Тогда
РезультатыПодключенияКК.Криптопровайдеры.Добавить("99", "Эмулятор SCP");
КонецЕсли;
КонецЕсли;
Если РезультатыПодключенияКК.Криптопровайдеры.Количество() = 0 тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Подключен = Ложь;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.КодОшибки = 2;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.ОписаниеОшибки = "Не установлено поддерживаемых криптопровайдеров";
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Состояние = 2;
ИначеЕсли РезультатыПодключенияКК.Криптопровайдеры.Количество() > 1 тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Подключен = Ложь;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.КодОшибки = 1;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.ОписаниеОшибки = "Установлено несколько поддерживаемых криптопровайдеров";
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Состояние = 1;
Иначе
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Подключен = Истина;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.КодОшибки = 0;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.ОписаниеОшибки = "";
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры.Состояние = 0;
КонецЕсли;
ВсеПроверкиКомпонентЗавершены(2, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ПодключениеРасширенияРаботыСФайламиЗавершение(Результат, ДополнительныеПараметры) Экспорт
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами = Новый Структура("Подключен, КодОшибки, ОписаниеОшибки");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами.Подключен = Результат;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами.КодОшибки = 0;
Если НЕ Результат Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами.КодОшибки = 2;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами.ОписаниеОшибки = "Ошибка подключения расширения работы с файлами";
КонецЕсли;
Если Параметры.Тестирование Тогда
Если СлучайноеБулево() Тогда
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами.КодОшибки = 9;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами.ОписаниеОшибки = "Симуляция ошибки подключения расширения работы с файлами";
КонецЕсли;
КонецЕсли;
ВсеПроверкиКомпонентЗавершены(0, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ВсеПроверкиКомпонентЗавершены(Результат, ДополнительныеПараметры) Экспорт
Если РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптокомпонент <> Неопределено
И РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.Криптопровайдеры <> Неопределено
И РезультатыДиагностики.Отчет.Проверки.ПроверкаКомпонентов.РасширениеРаботыСФайлами <> Неопределено Тогда
РезультатыДиагностики.Отчет.Вставить("Криптопровайдеры", РезультатыПодключенияКК.Криптопровайдеры);
ВыполнитьПроверку(3, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПроверкаСертификатов
&НаКлиенте
Функция ВыполнитьПроверкуСертификатов()
СписокСертификатовДляПоиска = Новый Массив;
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
Для Каждого Сертификат из РезультатыДиагностики.Автонастройка.СертификатыCA Цикл
НоваяСтрока = Новый Структура("Отпечаток", Сертификат.Ключ);
КриптографияЭДКОКлиентСервер.ЗаполнитьМестоХраненияКлюча(МестоХраненияКлюча, НоваяСтрока);
СписокСертификатовДляПоиска.Добавить(НоваяСтрока);
КонецЦикла;
Для Каждого Сертификат из РезультатыДиагностики.Автонастройка.СертификатыROOT Цикл
НоваяСтрока = Новый Структура("Отпечаток", Сертификат.Ключ);
КриптографияЭДКОКлиентСервер.ЗаполнитьМестоХраненияКлюча(МестоХраненияКлюча, НоваяСтрока);
СписокСертификатовДляПоиска.Добавить(НоваяСтрока);
КонецЦикла;
ПараметрыОповещения = Новый Структура("СертификатыХранятсяУдаленно", Ложь);
ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьПроверкуСертификатовНайтиСертификатЗавершение", ЭтотОбъект, ПараметрыОповещения);
КриптографияЭДКОКлиент.НайтиСертификаты(ОповещениеОЗавершении, СписокСертификатовДляПоиска, Истина, Ложь, РезультатыПодключенияКК.Криптокомпонент);
КонецФункции
&НаКлиенте
Функция ПолучитьСертификатПоОтпечатку(Знач Отпечаток, Хранилище)
Тело="";
Сертификат = РезультатыДиагностики.Автонастройка.СертификатыCA.Получить(Отпечаток);
Если Сертификат <> Неопределено Тогда
Хранилище = "CA";
Тело = Сертификат;
КонецЕсли;
Сертификат = РезультатыДиагностики.Автонастройка.СертификатыROOT.Получить(Отпечаток);
Если Сертификат <> Неопределено Тогда
Хранилище = "ROOT";
Тело = Сертификат;
КонецЕсли;
Возврат Тело;
КонецФункции
&НаКлиенте
Процедура ВыполнитьПоискВНайденныхСертификатах(Результат, ВхПараметры) Экспорт
ТекущееХранилище = ВхПараметры.ВсеХранилища[0];
ВхПараметры.ВсеХранилища.Удалить(0);
Если Результат.Выполнено Тогда
Для Каждого Сертификат Из ВхПараметры.Ненайденные Цикл
Если Сертификат.Найден Тогда
Продолжить;
КонецЕсли;
Для Каждого Найденный Из Результат.Сертификаты Цикл
Если Сертификат.Отпечаток = Найденный.Отпечаток Тогда
Сертификат.Найден = Истина;
Сертификат.Вставить("ДействителенС", Найденный.ДействителенС);
Сертификат.Вставить("ДействителенПо", Найденный.ДействителенПо);
Сертификат.Вставить("Наименование", Найденный.Наименование);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если ВхПараметры.ВсеХранилища.Количество() = 0 Тогда
ТекущаяДата = РезультатыДиагностики.Параметры.ДатаКлиента;
Для Каждого Сертификат Из ВхПараметры.Ненайденные Цикл
Если Сертификат.Найден Тогда
ОписаниеСертификата = Новый Структура("Отпечаток, Наименование, Хранилище, Выдан, ГоденДо, Найден, Содержимое, Ошибка",
Сертификат.Отпечаток, Сертификат.Наименование, Сертификат.Хранилище, Сертификат.ДействителенС, Сертификат.ДействителенПо, Истина, "", Неопределено);
Если (ТекущаяДата >= Сертификат.ДействителенС) И (ТекущаяДата <= Сертификат.ДействителенПо) Тогда
Если (ТекущаяДата > ДобавитьМесяц(Сертификат.ДействителенПо, -1)) Тогда
ОписаниеСертификата.Ошибка = "Истекает срок годности";
КонецЕсли;
Иначе
ОписаниеСертификата.Ошибка = "Срок годности истёк";
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов.Добавить(ОписаниеСертификата);
Иначе
ОписаниеСертификата = Новый Структура("Отпечаток, Наименование, Хранилище, Выдан, ГоденДо, Найден, Содержимое, Ошибка",
Сертификат.Отпечаток, "", Сертификат.Хранилище,,, Ложь, Сертификат.Тело, "Не найден в хранилище");
РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов.Добавить(ОписаниеСертификата);
КонецЕсли;
КонецЦикла;
ВсеПроверкиСертификатовЗавершены(0, Неопределено);
Иначе
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
Хранилище = Новый Структура();
Хранилище.Вставить("ЭтоЛокальноеХранилище", КриптографияЭДКОКлиентСервер.ЭтоЛокальнаяПодпись(МестоХраненияКлюча));
Хранилище.Вставить("Хранилище", ВхПараметры.ВсеХранилища[0]);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПредлагатьУстановкуВнешнейКомпоненты", Истина);
ДополнительныеПараметры.Вставить("ВыводитьСообщения", Ложь);
ОповещениеОЗавершении = новый ОписаниеОповещения("ВыполнитьПоискВНайденныхСертификатах", ЭтотОбъект, ВхПараметры);
КриптографияЭДКОСлужебныйКлиент.ПолучитьСертификаты(ОповещениеОЗавершении, Хранилище, ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПроверкуСертификатовНайтиСертификатЗавершение(Результат, ВхПараметры) Экспорт
ТекущаяДата = РезультатыДиагностики.Параметры.ДатаКлиента;
Если Результат.Выполнено Тогда
Ненайденные = Новый Массив;
НенайденныеХранилища = Новый Массив;
Для Каждого Сертификат из Результат.Сертификаты Цикл
ПрефиксНазвания = "";
Сертификат_Наименование = ПрефиксНазвания + Сертификат.Наименование;
Если Параметры.Тестирование Тогда
Если СлучайноеБулево() Тогда
Хранилище = "";
Тело = ПолучитьСертификатПоОтпечатку(Сертификат.Отпечаток, Хранилище);
ОписаниеСертификата = Новый Структура("Отпечаток, Наименование, Хранилище, Выдан, ГоденДо, Найден, Содержимое, Ошибка",
Сертификат.Отпечаток,, Хранилище,,, Ложь, Тело, "Не найден в хранилище");
РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов.Добавить(ОписаниеСертификата);
Продолжить;
КонецЕсли;
КонецЕсли;
ОписаниеСертификата = Новый Структура("Отпечаток, Наименование, Хранилище, Выдан, ГоденДо, Найден, Содержимое, Ошибка",
Сертификат.Отпечаток, Сертификат_Наименование, Сертификат.Хранилище, Сертификат.ДействителенС, Сертификат.ДействителенПо, Истина, "", Неопределено);
Если (ТекущаяДата >= Сертификат.ДействителенС) И (ТекущаяДата <= Сертификат.ДействителенПо) Тогда
Если (ТекущаяДата > ДобавитьМесяц(Сертификат.ДействителенПо, -1)) Тогда
ОписаниеСертификата.Ошибка = "Истекает срок годности";
КонецЕсли;
Иначе
ОписаниеСертификата.Ошибка = "Срок годности истёк";
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаСертификатов.Добавить(ОписаниеСертификата);
КонецЦикла;
Для Каждого Сертификат из Результат.НенайденныеСертификаты Цикл
Хранилище = "";
Тело = ПолучитьСертификатПоОтпечатку(Сертификат.Отпечаток, Хранилище);
Ненайденные.Добавить(Новый Структура("Отпечаток, Хранилище, Тело, Найден", Сертификат.Отпечаток, Хранилище, Тело, Ложь));
Если НенайденныеХранилища.Найти(Хранилище) = Неопределено Тогда
НенайденныеХранилища.Добавить(Хранилище);
КонецЕсли;
КонецЦикла;
Если Ненайденные.Количество() > 0 И Не Параметры.Тестирование Тогда
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("ВсеХранилища", НенайденныеХранилища);
ПараметрыОповещения.Вставить("Ненайденные", Ненайденные);
ОповещениеОЗавершении = новый ОписаниеОповещения("ВыполнитьПоискВНайденныхСертификатах", ЭтотОбъект, ПараметрыОповещения);
Хранилище = Новый Структура();
Хранилище.Вставить("ЭтоЛокальноеХранилище", КриптографияЭДКОКлиентСервер.ЭтоЛокальнаяПодпись(МестоХраненияКлюча));
Хранилище.Вставить("Хранилище", НенайденныеХранилища[0]);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПредлагатьУстановкуВнешнейКомпоненты", Истина);
ДополнительныеПараметры.Вставить("ВыводитьСообщения", Ложь);
КриптографияЭДКОСлужебныйКлиент.ПолучитьСертификаты(ОповещениеОЗавершении, Хранилище, ДополнительныеПараметры);
Возврат;
КонецЕсли;
КонецЕсли;
ВсеПроверкиСертификатовЗавершены(0, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ВсеПроверкиСертификатовЗавершены(Результат, ДополнительныеПараметры) Экспорт
ВыполнитьПроверку(4, Истина);
КонецПроцедуры
#КонецОбласти
#Область ПроверкаКриптоопераций
&НаКлиенте
Функция НайтиСертификатИПерейтиКШифрованию(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
Если Результат.Сертификаты.Количество() > 0 Тогда
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
ТекущаяДата = РезультатыДиагностики.Параметры.ДатаКлиента;
Сертификат = Результат.Сертификаты[0];
ОтпечатокСертификата = Новый Структура("Отпечаток, Поставщик, СерийныйНомер, Сертификат");
ЗаполнитьЗначенияСвойств(ОтпечатокСертификата, Сертификат);
КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(МестоХраненияКлюча, ОтпечатокСертификата);
Сертификаты = Новый Массив;
Сертификаты.Добавить(ОтпечатокСертификата);
Данные = ДанныеДляТеста();
Контекст = Новый Структура("Данные", Данные);
АдресВХранилище = ПоместитьВоВременноеХранилище(Данные, Новый УникальныйИдентификатор);
АдресВХранилищеПП = ПоместитьВоВременноеХранилище(Данные, Новый УникальныйИдентификатор);
Контекст.Вставить("ДанныеАдрес", АдресВХранилищеПП);
Контекст.Вставить("Сертификат", ОтпечатокСертификата);
Контекст.Вставить("ИнтерактивныеУведомления", ВходящийКонтекст.ИнтерактивныеУведомления);
Контекст.Вставить("ИнтерактивныйКонтекст", ВходящийКонтекст.ИнтерактивныйКонтекст);
Контекст.Вставить("АдресВХранилище", АдресВХранилище);
Контекст.Вставить("АдресВХранилищеПП", АдресВХранилищеПП);
Контекст.Вставить("Сертификаты", Сертификаты);
Оповещение = Новый ОписаниеОповещения("ПолучитьСписокОшибокПередШифрованием", ЭтотОбъект, Контекст);
Если КриптографияЭДКОКлиентСервер.ЭтоЛокальнаяПодпись(МестоХраненияКлюча) Тогда
РезультатыПодключенияКК.Криптокомпонент.НачатьПолучениеСписокОшибок(Оповещение);
Иначе
ВыполнитьОбработкуОповещения(Оповещение, Неопределено);
КонецЕсли;
Иначе
ОписаниеОшибки = "Сертификат с отпечатком """+ВходящийКонтекст.ОтпечатокСертификата+""" в хранилище не найден";
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Шифрование", Ложь, ОписаниеОшибки);
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Ложь, "Нет данных для расшифровки");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
ОписаниеОповещения = Новый ОписаниеОповещения("ВсеПроверкиЗавершены", ЭтотОбъект, Неопределено);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, ?(ВходящийКонтекст.ИнтерактивныеУведомления, 2, 0) );
КонецЕсли;
Иначе
Если Результат.Свойство("ОписаниеОшибки") Тогда
ОписаниеОшибки = Результат.ОписаниеОшибки;
Иначе
ОписаниеОшибки = "Не удалось получить описание ошибки операции ""поиск сертификата""";
КонецЕсли;
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Шифрование", Ложь, ОписаниеОшибки);
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Ложь, "Нет данных Для расшифровки");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
ОписаниеОповещения = Новый ОписаниеОповещения("ВсеПроверкиЗавершены", ЭтотОбъект, Неопределено);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, ?(ВходящийКонтекст.ИнтерактивныеУведомления, 2, 0) );
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПолучитьСписокОшибокПередШифрованием(Результат, ВходящийКонтекст) Экспорт
Если Результат = Неопределено Тогда
ВходящийКонтекст.Вставить("ДлинаОшибок", 0);
Иначе
ВходящийКонтекст.Вставить("ДлинаОшибок", СтрДлина(Результат));
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ВыполнитьТестовыеОперацииЗашифровать", ЭтотОбъект, ВходящийКонтекст);
КриптографияЭДКОКлиент.ЗашифроватьPKCS7(Оповещение, ВходящийКонтекст.АдресВХранилище, ВходящийКонтекст.Сертификаты, Неопределено, Ложь, РезультатыПодключенияКК.Криптокомпонент);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСписокОшибокПередРасшифровкой(Результат, ВходящийКонтекст) Экспорт
Если Результат = Неопределено Тогда
ВходящийКонтекст.Вставить("ДлинаОшибок", 0);
Иначе
ВходящийКонтекст.Вставить("ДлинаОшибок", СтрДлина(Результат));
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ВыполнитьТестовыеОперацииРасшифроватьЗавершение", ЭтотОбъект, ВходящийКонтекст);
КриптографияЭДКОКлиент.РасшифроватьPKCS7(Оповещение, ВходящийКонтекст.АдресВХранилище, Неопределено, ВходящийКонтекст.Сертификат, Ложь, РезультатыПодключенияКК.Криптокомпонент);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСписокОшибокПослеШифрования(СписокОшибок, ВходящийКонтекст) Экспорт
ОписаниеОшибки = "";
Результат = ВходящийКонтекст.Результат;
Если СписокОшибок = Неопределено Тогда
СписокОшибок = "";
КонецЕсли;
Если ВходящийКонтекст.ДлинаОшибок <> СтрДлина(СписокОшибок) Тогда
ОписаниеОшибки = СокрЛП(Сред(СписокОшибок, ВходящийКонтекст.ДлинаОшибок+1));
КонецЕсли;
Если Результат.Свойство("ОписаниеОшибки") Тогда
ОписаниеОшибки = Результат.ОписаниеОшибки + ?(ОписаниеОшибки="", "", " ") + ОписаниеОшибки;
Иначе
КонецЕсли;
Если ОписаниеОшибки = "" Тогда
ОписаниеОшибки = "Не удалось получить описание ошибки операции ""шифрование""";
КонецЕсли;
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Новый Структура("Операция, Успешно, ОписаниеОшибки", "Шифрование", Ложь, ОписаниеОшибки));
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Ложь, "Нет данных для расшифровки"));
ОписаниеОповещения = Новый ОписаниеОповещения("ВсеПроверкиЗавершены", ЭтотОбъект, Неопределено);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, ?(ВходящийКонтекст.ИнтерактивныеУведомления, 2, 0) );
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьСписокОшибокПослеРасшифровки(СписокОшибок, ВходящийКонтекст) Экспорт
ОписаниеОшибки = "";
Результат = ВходящийКонтекст.Результат;
Если СписокОшибок = Неопределено Тогда
СписокОшибок = "";
КонецЕсли;
Если ВходящийКонтекст.ДлинаОшибок <> СтрДлина(СписокОшибок) Тогда
ОписаниеОшибки = СокрЛП(Сред(СписокОшибок, ВходящийКонтекст.ДлинаОшибок+1));
КонецЕсли;
Если Результат.Свойство("ОписаниеОшибки") Тогда
ОписаниеОшибки = Результат.ОписаниеОшибки + ?(ОписаниеОшибки="", "", " ") + ОписаниеОшибки;
КонецЕсли;
Если ОписаниеОшибки = "" Тогда
ОписаниеОшибки = "Не удалось получить описание ошибки операции ""расшифровка""";
КонецЕсли;
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Ложь, ОписаниеОшибки);
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
Если ВходящийКонтекст.ИнтерактивныеУведомления Тогда
Сообщение = НСтр("ru = 'Тестовая операция расшифровки завершилась неудачей'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
ВыполнитьОбработкуОповещения(ВходящийКонтекст.ИнтерактивныйКонтекст, Ложь);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВсеПроверкиЗавершены", ЭтотОбъект, Неопределено);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, ?(ВходящийКонтекст.ИнтерактивныеУведомления, 2, 0) );
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьТестовыеОперацииЗашифровать(Результат, ВходящийКонтекст) Экспорт
РезультатВыполнения = Новый Структура("Результат, Комментарий");
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
Если Результат.Выполнено Тогда
Если Результат.Свойство("ЗашифрованныйФайл") Тогда
АдресВХранилище = Результат.ЗашифрованныйФайл;
Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Шифрование", Истина, "");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
КонецЕсли;
Иначе
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Шифрование", Ложь, "Ожидаемое свойство результата шифрования отсутствует");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Ложь, "Нет данных для расшифровки");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
ОписаниеОповещения = Новый ОписаниеОповещения("ВсеПроверкиЗавершены", ЭтотОбъект, Неопределено);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, ?(ВходящийКонтекст.ИнтерактивныеУведомления, 2, 0) );
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ПолучитьСписокОшибокПередРасшифровкой", ЭтотОбъект, ВходящийКонтекст);
Если КриптографияЭДКОКлиентСервер.ЭтоЛокальнаяПодпись(МестоХраненияКлюча) Тогда
РезультатыПодключенияКК.Криптокомпонент.НачатьПолучениеСписокОшибок(Оповещение);
Иначе
ВыполнитьОбработкуОповещения(Оповещение, Неопределено);
КонецЕсли;
Иначе
ОписаниеОшибки = "";
ВходящийКонтекст.Вставить("Результат", Результат);
ВходящийКонтекст.Вставить("ОписаниеОшибки", ОписаниеОшибки);
Оповещение = Новый ОписаниеОповещения("ПолучитьСписокОшибокПослеШифрования", ЭтотОбъект, ВходящийКонтекст);
Если КриптографияЭДКОКлиентСервер.ЭтоЛокальнаяПодпись(МестоХраненияКлюча) Тогда
РезультатыПодключенияКК.Криптокомпонент.НачатьПолучениеСписокОшибок(Оповещение);
Иначе
ВыполнитьОбработкуОповещения(Оповещение, "Ошибка");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьТестовыеОперацииРасшифроватьЗавершение(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
Если Результат.Свойство("РасшифрованныйФайл") Тогда
АдресВХранилище = Результат.РасшифрованныйФайл;
Если ЭтоАдресВременногоХранилища(АдресВХранилище) Тогда
РасшифрованныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
Если ВходящийКонтекст.Данные = РасшифрованныеДанные Тогда
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Истина, "");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
КонецЕсли;
КонецЕсли;
Иначе
Операция = Новый Структура("Операция, Успешно, ОписаниеОшибки", "Расшифровка", Ложь, "Ожидаемое свойство результата расшифровки отсутствует");
РезультатыДиагностики.Отчет.Проверки.ПроверкаКриптоопераций.Добавить(Операция);
КонецЕсли;
Если ВходящийКонтекст.ИнтерактивныеУведомления Тогда
Сообщение = НСтр("ru = 'Тестовые криптооперации шифрования и расшифровки завершились успешно'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
ВыполнитьОбработкуОповещения(ВходящийКонтекст.ИнтерактивныйКонтекст, Истина);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВсеПроверкиЗавершены", ЭтотОбъект, Неопределено);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, ?(ВходящийКонтекст.ИнтерактивныеУведомления, 2, 0) );
Иначе
ОписаниеОшибки = "";
ВходящийКонтекст.Вставить("Результат", Результат);
ВходящийКонтекст.Вставить("ОписаниеОшибки", ОписаниеОшибки);
Оповещение = Новый ОписаниеОповещения("ПолучитьСписокОшибокПослеРасшифровки", ЭтотОбъект, ВходящийКонтекст);
РезультатыПодключенияКК.Криптокомпонент.НачатьПолучениеСписокОшибок(Оповещение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ВыполнитьПроверкуКриптооперацийИзФормыПодробностей(Результат, ВходящийКонтекст) Экспорт
ВыполнитьПроверкуКриптоопераций(Истина, ВходящийКонтекст);
КонецФункции
&НаКлиенте
Процедура ВыполнитьПроверкуКриптоопераций(ИнтерактивныеУведомления = Ложь, ВходящийКонтекст = Неопределено)
РезультатыДиагностики.Отчет.Проверки.Вставить("ПроверкаКриптоопераций", Новый Массив);
Сертификат = МультирежимВызовСервера.СертификатПользователя(РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена.Ссылка);
Если НЕ Сертификат.Найден Тогда
Результат = Новый Структура();
Результат.Вставить("Выполнено", Ложь);
Результат.Вставить("ОписаниеОшибки", Сертификат.ТекстОшибки);
Результат.Вставить("ИнтерактивныйКонтекст", ИнтерактивныеУведомления);
НайтиСертификатИПерейтиКШифрованию(Результат, Результат);
Возврат;
КонецЕсли;
Отпечаток = Сертификат.Отпечаток;
МестоХраненияКлюча = КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(РезультатыДиагностики.Параметры);
НоваяСтрока = Новый Структура("Отпечаток", Отпечаток);
КриптографияЭДКОКлиентСервер.ЗаполнитьМестоХраненияКлюча(МестоХраненияКлюча, НоваяСтрока);
СписокСертификатовДляПоиска = Новый Массив;
СписокСертификатовДляПоиска.Добавить(НоваяСтрока);
ПараметрыОповещения = Новый Структура(
"СертификатыХранятсяУдаленно, ОтпечатокСертификата, ИнтерактивныеУведомления, ИнтерактивныйКонтекст",
Ложь, Отпечаток, ИнтерактивныеУведомления, ВходящийКонтекст);
ОповещениеОЗавершении = новый ОписаниеОповещения("НайтиСертификатИПерейтиКШифрованию", ЭтотОбъект, ПараметрыОповещения);
КриптографияЭДКОКлиент.НайтиСертификаты(
ОповещениеОЗавершении,
СписокСертификатовДляПоиска,
Истина,
Ложь,
РезультатыПодключенияКК.Криптокомпонент);
КонецПроцедуры
#КонецОбласти
#Область ЗаполнениеИОтправкаОтчета
&НаСервере
Функция ЗаданиеЧтенияЖРВыполнено(Знач ИдентификаторЗадания)
Если ИдентификаторЗадания = "ffffffff-d0ne-d0ne-d0ne-ffffffffffff" Тогда
Возврат Истина;
КонецЕсли;
Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
КонецФункции
&НаКлиенте
Процедура Подключаемый_ПроверитьЗавершениеЗаданияЖР() Экспорт
Если Не РезультатыДиагностики.Отчет.Свойство("ИдентификаторЗаданияЖР") Или РезультатыДиагностики.Отчет.ИдентификаторЗаданияЖР = Неопределено Тогда
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьЗавершениеЗаданияЖР");
Возврат;
КонецЕсли;
Если ЗаданиеЧтенияЖРВыполнено(РезультатыДиагностики.Отчет.ИдентификаторЗаданияЖР) Тогда
Если РезультатыДиагностики.Отчет.Свойство("АдресСодержимогоЖР") Тогда
РезультатыДиагностики.Отчет.Вставить("СодержимоеЖРПолучено", Истина);
КонецЕсли;
ОтключитьОбработчикОжидания("Подключаемый_ПроверитьЗавершениеЗаданияЖР");
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПосмотретьДиагностическийОтчет()
ТекстОтчета = ОтправитьОтчетНаСервере(РезультатыДиагностики.Отчет,, Истина);
Если ТипЗнч(ТекстОтчета) = Тип("Строка") Тогда
Текст = Новый ТекстовыйДокумент;
Текст.УстановитьТекст(ТекстОтчета);
Текст.Показать("Содержимое отчета");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьДиагностическийОтчет(Команда)
Если НЕ РезультатыДиагностики.Свойство("Отчет") Тогда
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Ложь;
РезультатыДиагностики = Новый Структура;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Ложь;
КонецЕсли;
ОтправленУспешно = ОтправитьОтчетНаСервере(РезультатыДиагностики.Отчет);
Если ОтправленУспешно Тогда
Элементы.ДекорацияУспешноОтправлен.Видимость = Истина;
Элементы.ГруппаГоризонтальнаяСредняя.Видимость = Ложь;
ЭтотОбъект.ТекущийЭлемент = Элементы.ТелефонСлужбыПоддержки1;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОтправитьОтчетНаСервере(ОтчетДиагностики, ОписаниеОшибки = "", Знач ТолькоСформировать = Ложь)
Перем ЗащищенноеСоединение, Прокси;
Ген = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
ВтораяТриада = Ген.СлучайноеЧисло(100, 999);
Если ВтораяТриада = 666 Тогда
ВтораяТриада = ВтораяТриада - 1;
КонецЕсли;
ТретьяТриада = Ген.СлучайноеЧисло(100, 999);
Если ТретьяТриада = 666 Тогда
ТретьяТриада = ТретьяТриада - 1;
КонецЕсли;
Идентификатор = "911-"+Формат(ВтораяТриада, "ЧЦ=3; ЧВН=")+"-"+Формат(ТретьяТриада, "ЧЦ=3; ЧВН=");
РеквизитыПодключения = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВнутренний.РеквизитыПодключенияСервисаОтчетов();
ПолучательОтчета = Параметры.ХОХост;
Обработка = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ТекстовыйМакет = Обработка.ПолучитьМакет("ДиагностикаОтчетности_СхемаXML");
СхемаТекстом = ТекстовыйМакет.ПолучитьТекст();
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(СхемаТекстом);
Построитель = Новый ПостроительDOM;
Дом = Построитель.Прочитать(Чтение);
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(Дом);
НаборСхем = Новый НаборСхемXML;
НаборСхем.Добавить(Схема);
Определение = Новый Структура();
Определение.Вставить("ФабрикаXDTO", Новый ФабрикаXDTO(НаборСхем));
Отчет = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипОтчет") );
Отчет_Абонент = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипАбонент") );
Отчет_Абонент_УчетнаяЗапись = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипУчетнаяЗапись") );
Отчет_Проверки_ПроверкаУчетнойЗаписи = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПроверкаУЗ") );
Отчет_Проверки_ПроверкаДоступностиРесурсов = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПроверкаРесурса") );
Отчет_Проверки_ПроверкаКриптографии = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПроверкаКриптографии") );
Отчет_Проверки_ПроверкаСертификатов = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПроверкаСертификатов") );
Отчет_Проверки_ПроверкаКриптоопераций = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПроверкаКриптоопераций") );
Отчет.ВерсияФормата = "1.1";
Отчет.ВерсияПрограммы = ОтчетДиагностики.ДополнительнаяИнформация["Метаданные.Синоним"];
Отчет.ДатаВремя = ОтчетДиагностики.ДатаВремя;
Отчет_Абонент.НазваниеАбонента = СокрЛП(ОтчетДиагностики.Абонент.НазваниеАбонента);
Отчет_Абонент.ИНН = ОтчетДиагностики.Абонент.ИНН;
Отчет_Абонент.КПП = ОтчетДиагностики.Абонент.КПП;
Отчет_Абонент_УчетнаяЗапись.ИдентификаторАбонента = ОтчетДиагностики.Абонент.УчетнаяЗапись.ИдентификаторАбонента;
Отчет_Абонент_УчетнаяЗапись.НачалоДействияЛицензии = XMLСтрока(ОтчетДиагностики.Абонент.УчетнаяЗапись.НачалоДействияЛицензииДата);
Отчет_Абонент_УчетнаяЗапись.ОкончаниеДействияЛицензии = XMLСтрока(ОтчетДиагностики.Абонент.УчетнаяЗапись.ОкончаниеДействияЛицензииДата);
Отчет_Абонент_УчетнаяЗапись.ТипЛицензии = ОтчетДиагностики.Абонент.УчетнаяЗапись.ЛицензияНаименование;
Отчет_Абонент_УчетнаяЗапись.ЭПВоблаке = XMLСтрока(ОтчетДиагностики.Абонент.УчетнаяЗапись.ЭПВоблаке);
Отчет_Абонент_УчетнаяЗапись.МодельХраненияЗакрытогоКлюча = XMLСтрока(ОтчетДиагностики.Абонент.УчетнаяЗапись.МодельХраненияЗакрытогоКлюча);
КриптопровайдерВОтчет = ?(ОтчетДиагностики.Абонент.УчетнаяЗапись.КриптопровайдерXML = "CryptoPro CSP",
"КриптоПро CSP", ОтчетДиагностики.Абонент.УчетнаяЗапись.КриптопровайдерXML);
Если Не ЗначениеЗаполнено(КриптопровайдерВОтчет) Тогда
КриптопровайдерВОтчет = "ViPNet CSP";
КонецЕсли;
Отчет_Абонент_УчетнаяЗапись.Криптопровайдер = КриптопровайдерВОтчет;
Отчет_Абонент.УчетнаяЗапись = Отчет_Абонент_УчетнаяЗапись;
Отчет_Абонент.РегНомерПФР = ОтчетДиагностики.Абонент.РегНомерПФР;
Отчет_Абонент.РегНомерФСС = "";
Отчет.Абонент = Отчет_Абонент;
ТекущаяПроверка = ОтчетДиагностики.Проверки.ПроверкаУчетнойЗаписи;
Отчет_Проверки_ПроверкаУчетнойЗаписи.Активна = ТекущаяПроверка.Активна;
Отчет_Проверки_ПроверкаУчетнойЗаписи.СрокГодности = XMLСтрока(ТекущаяПроверка.СрокГодностиЧислом);
Отчет_Проверки_ПроверкаУчетнойЗаписи.СертификатВыданНаПредставителя = ТекущаяПроверка.СертификатВыданНаПредставителя;
МассивЧувствительных = новый Массив;
МассивЧувствительных.Добавить(Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦП);
МассивЧувствительных.Добавить(Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПДолжность);
МассивЧувствительных.Добавить(Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПСНИЛС);
РезультатСведенияУЗ = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРезультатСведенияУЗ") );
РезультатСведенияУЗ.Состояние = XMLСтрока(ТекущаяПроверка.РазличияРеквизитовНетОшибок);
Если НЕ ТекущаяПроверка.РазличияРеквизитовНетОшибок Тогда
ОтличиеСведений = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипОтличиеСведений") );
Для Каждого Отличие из ТекущаяПроверка.РазличияРеквизитовСведений Цикл
ПоляОтличия = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОтличия") );
ПоляОтличия.Реквизит = Отличие.Атрибут;
СтароеЗначение = Отличие.СтароеЗначение;
НовоеЗначение = Отличие.НовоеЗначение;
Если МассивЧувствительных.Найти(Отличие.АтрибутВнутренний) <> Неопределено Тогда
СтароеЗначение = "*";
НовоеЗначение = "***";
КонецЕсли;
ПоляОтличия.СтароеЗначение = СтароеЗначение;
ПоляОтличия.НовоеЗначение = НовоеЗначение;
ОтличиеСведений.Отличие.Добавить(ПоляОтличия);
КонецЦикла;
РезультатСведенияУЗ.Различия = ОтличиеСведений;
КонецЕсли;
Отчет_Проверки_ПроверкаУчетнойЗаписи.СведенияСовпадают = РезультатСведенияУЗ;
РезультатСведенияУЗДоверенности = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРезультатСведенияУЗДоверенности") );
Для Каждого Направление из ТекущаяПроверка.ИнформацияДоверенности Цикл
РеквизитыДоверенности = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляДоверенности") );
Если Направление.Доверенность <> Неопределено Тогда
РеквизитыДоверенности.ДатаВыдачи = XMLСтрока(Направление.Доверенность.ДатаВыдачи);
РеквизитыДоверенности.ДатаОкончанияДействия = XMLСтрока(Направление.Доверенность.ДатаОкончания);
РеквизитыДоверенности.Номер = ?(ТипЗнч(Направление.Доверенность) = Тип("Структура")
И Направление.Доверенность.Свойство("НомерДоверенности"), Направление.Доверенность.НомерДоверенности,
Направление.Доверенность.НомерДовер);
Представитель1_ФИО = ПолучитьФИОДоверенности(Направление.Доверенность, Перечисления.СубъектыДоверенностиНалогоплательщика.ПредставительФЛ);
Представитель2_ФИО = ПолучитьФИОДоверенности(Направление.Доверенность, Перечисления.СубъектыДоверенностиНалогоплательщика.ПредставительЮЛ);
Представитель = ?(ПустаяСтрока(Представитель1_ФИО), Представитель2_ФИО, Представитель1_ФИО);
РеквизитыДоверенности.Представитель = "***";
РеквизитыДоверенности.ОписаниеКратко = Строка(Направление.Доверенность.Ссылка);
Иначе
РеквизитыДоверенности.ОписаниеКратко = "Нет доверенности";
КонецЕсли;
РеквизитыДоверенности.КПП = Направление.КПП;
РеквизитыДоверенности.КодОрганаИФНС = Направление.КодПолучателя;
Если Направление.Проблемы.Количество() = 0 Тогда
РеквизитыДоверенности.Состояние = "0";
Иначе
РеквизитыДоверенности.Состояние = "2";
ПростаяОшибка = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПростаяОшибка") );
Для Каждого Проблема из Направление.Проблемы Цикл
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОшибки") );
ПоляОшибки.Код = Проблема.Код;
ПоляОшибки.Описание = Проблема.Описание;
ПростаяОшибка.Ошибка.Добавить(ПоляОшибки);
КонецЦикла;
РеквизитыДоверенности.Ошибки = ПростаяОшибка;
КонецЕсли;
РезультатСведенияУЗДоверенности.Доверенность.Добавить(РеквизитыДоверенности);
КонецЦикла;
Отчет_Проверки_ПроверкаУчетнойЗаписи.ИнформацияДоверенности = РезультатСведенияУЗДоверенности;
Если ОтчетДиагностики.Проверки.Свойство("ПроверкаПодключений") Тогда
ТекущаяПроверка = ОтчетДиагностики.Проверки.ПроверкаПодключений;
Для Каждого Сервис из ТекущаяПроверка.Ресурсы цикл
Ресурс = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРесурс") );
ПП = Сервис.ПараметрыПодключения;
Адрес = ПП.ПредставлениеХоста;
Если ПП.Свойство("Адрес") Тогда
Если (ПП.Порт = Неопределено) Тогда
Ресурс.Порт = 80;
Иначе
Ресурс.Порт = ПП.Порт;
КонецЕсли;
Иначе
Если ПП.ПортSMTP <> 0 Тогда
Ресурс.Порт = ПП.ПортSMTP;
Иначе
Ресурс.Порт = ПП.ПортPOP3;
КонецЕсли;
КонецЕсли;
Ресурс.Хост = Адрес;
Ресурс.Доступен = Сервис.Результат;
Если НЕ Сервис.Результат Тогда
Ресурс.HTTPКодОтвета = Сервис.Ошибка.Код;
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОшибки") );
ПоляОшибки.Код = Сервис.Ошибка.Код;
ПоляОшибки.Описание = Сервис.Ошибка.Описание;
Ресурс.Ошибка = ПоляОшибки;
КонецЕсли;
Если Сервис.СервисПроверки <> Неопределено И Сервис.СервисПроверки.Использовался Тогда
ПоказателиВнешнейПроверки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоказателиВнешнейПроверки") );
ПоказателиВнешнейПроверки.Доступен = ПривестиТип(Сервис.СервисПроверки.Доступен, "boolean");
ПоказателиВнешнейПроверки.ДоступностьЗаПоследнийЧас = ПривестиТип(Сервис.СервисПроверки.ДоступностьЗаЧас, "unsignedByte");
ПоказателиВнешнейПроверки.ДоступностьЗаПоследниеСутки = ПривестиТип(Сервис.СервисПроверки.ДоступностьЗаДень, "unsignedByte");
Ресурс.ПоказателиВнешнейПроверки = ПоказателиВнешнейПроверки;
КонецЕсли;
Отчет_Проверки_ПроверкаДоступностиРесурсов.Ресурс.Добавить(Ресурс);
КонецЦикла;
КонецЕсли;
Если ОтчетДиагностики.Проверки.Свойство("ПроверкаКомпонентов") Тогда
ТекущаяПроверка = ОтчетДиагностики.Проверки.ПроверкаКомпонентов;
РезультатПроверкиКомпоненты = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРезультатПроверкиКомпоненты") );
РезультатПроверкиКомпоненты.Состояние = ?(ТекущаяПроверка.Криптокомпонент.Подключен, 0, 2);
Если НЕ ТекущаяПроверка.Криптокомпонент.Подключен Тогда
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОшибки") );
ПоляОшибки.Код = ТекущаяПроверка.Криптокомпонент.КодОшибки;
ПоляОшибки.Описание = ТекущаяПроверка.Криптокомпонент.ОписаниеОшибки;
РезультатПроверкиКомпоненты.Ошибка = ПоляОшибки;
КонецЕсли;
Отчет_Проверки_ПроверкаКриптографии.КомпонентКриптографии = РезультатПроверкиКомпоненты;
РезультатПроверкиCSP = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРезультатПроверкиCSP") );
РезультатПроверкиCSP.Состояние = ТекущаяПроверка.Криптопровайдеры.Состояние;
Если НЕ ТекущаяПроверка.Криптопровайдеры.Подключен Тогда
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОшибки") );
ПоляОшибки.Код = ТекущаяПроверка.Криптопровайдеры.КодОшибки;
ПоляОшибки.Описание = ТекущаяПроверка.Криптопровайдеры.ОписаниеОшибки;
РезультатПроверкиCSP.Ошибка = ПоляОшибки;
КонецЕсли;
Отчет_Проверки_ПроверкаКриптографии.СовместимыйCSP = РезультатПроверкиCSP;
РезультатПроверкиКомпоненты = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРезультатПроверкиКомпоненты") );
РезультатПроверкиКомпоненты.Состояние = ?(ТекущаяПроверка.РасширениеРаботыСФайлами.Подключен, 0, 2);
Если НЕ ТекущаяПроверка.РасширениеРаботыСФайлами.Подключен Тогда
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОшибки") );
ПоляОшибки.Код = ТекущаяПроверка.РасширениеРаботыСФайлами.КодОшибки;
ПоляОшибки.Описание = ТекущаяПроверка.РасширениеРаботыСФайлами.ОписаниеОшибки;
РезультатПроверкиКомпоненты.Ошибка = ПоляОшибки;
КонецЕсли;
Отчет_Проверки_ПроверкаКриптографии.РасширениеРаботыСФайлами = РезультатПроверкиКомпоненты;
КонецЕсли;
Если ОтчетДиагностики.Проверки.Свойство("ПроверкаСертификатов") Тогда
ТекущаяПроверка = ОтчетДиагностики.Проверки.ПроверкаСертификатов;
Для Каждого Сертификат из ТекущаяПроверка Цикл
ПроверкаСертификат = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипСертификат") );
Если Сертификат.Найден Тогда
ПроверкаСертификат.НаименованиеПолучателя = Сертификат.Наименование;
ПроверкаСертификат.Выдан = Сертификат.Выдан;
ПроверкаСертификат.ГоденДо = Сертификат.ГоденДо;
Иначе
Если Сертификат.Ошибка <> Неопределено Тогда
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПростоеСобытие") );
ПоляОшибки.Код = 0;
ПоляОшибки.Описание = Сертификат.Ошибка;
ПроверкаСертификат.Ошибка = ПоляОшибки;
КонецЕсли;
ПроверкаСертификат.Содержимое = Сертификат.Содержимое;
КонецЕсли;
ПроверкаСертификат.Хранилище = Сертификат.Хранилище;
ПроверкаСертификат.Отпечаток = Сертификат.Отпечаток;
ПроверкаСертификат.Найден = Сертификат.Найден;
Отчет_Проверки_ПроверкаСертификатов.Сертификат.Добавить(ПроверкаСертификат);
КонецЦикла;
КонецЕсли;
Если ОтчетДиагностики.Проверки.Свойство("ПроверкаКриптоопераций") Тогда
ТекущаяПроверка = ОтчетДиагностики.Проверки.ПроверкаКриптоопераций;
Для Каждого Криптооперация из ТекущаяПроверка Цикл
ПроверкаКриптооперация = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипКриптооперация") );
Если Криптооперация.Операция = "Шифрование" Тогда
КодКО = 0;
ИначеЕсли Криптооперация.Операция = "Расшифровка" Тогда
КодКО = 1;
ИначеЕсли Криптооперация.Операция = "Подпись" Тогда
КодКО = 2;
ИначеЕсли Криптооперация.Операция = "Проверка подписи" Тогда
КодКО = 3;
Иначе
КодКО = 9;
КонецЕсли;
ПроверкаКриптооперация.Код = КодКО;
ПроверкаКриптооперация.Описание = Криптооперация.Операция;
ПроверкаКриптооперация.Успешно = Криптооперация.Успешно;
Если НЕ Криптооперация.Успешно Тогда
ПоляОшибки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляОшибки") );
ПоляОшибки.Код = 0;
ПоляОшибки.Описание = Криптооперация.ОписаниеОшибки;
ПроверкаКриптооперация.Ошибка = ПоляОшибки;
КонецЕсли;
Отчет_Проверки_ПроверкаКриптоопераций.Криптооперация.Добавить(ПроверкаКриптооперация);
КонецЦикла;
КонецЕсли;
Отчет_Проверки = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипВсеПроверки") );
Отчет.Проверки = Отчет_Проверки;
Отчет.Проверки.ПроверкаУчетнойЗаписи = Отчет_Проверки_ПроверкаУчетнойЗаписи;
Отчет.Проверки.ПроверкаДоступностиРесурсов = Отчет_Проверки_ПроверкаДоступностиРесурсов;
Отчет.Проверки.ПроверкаКриптографии = Отчет_Проверки_ПроверкаКриптографии;
Отчет.Проверки.ПроверкаСертификатов = Отчет_Проверки_ПроверкаСертификатов;
Отчет.Проверки.ПроверкаКриптоопераций = Отчет_Проверки_ПроверкаКриптоопераций;
Отчет_ДополнительнаяИнформация = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипИнформация") );
ТекущаяПроверка = ОтчетДиагностики.ДополнительнаяИнформация;
Для Каждого Информация из ТекущаяПроверка Цикл
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = Информация.Ключ;
Если Информация.Ключ = "ПодключенныеНаправления" Тогда
ЭлементСписка = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипИнформацияСписками") );
Для Каждого Элемент из Информация.Значение Цикл
ПоляНаправления = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляНаправления") );
ПоляНаправления.ТипПолучателя = Элемент.ТипПолучателяСтрокой;
ПоляНаправления.КодПолучателя = Элемент.КодПолучателя;
ПоляНаправления.КПП = Элемент.КПП;
ЭлементСписка.Направление.Добавить(ПоляНаправления);
КонецЦикла;
ПоляИнформации.Значения = ЭлементСписка;
ИначеЕсли Информация.Ключ = "Нерасшифрованные" Тогда
ЭлементСписка = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипИнформацияСписками") );
Для Каждого Элемент из Информация.Значение Цикл
ПоляНерасшифрованногоСообщения = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляНерасшифрованногоСообщения") );
Если Элемент.Отправитель = Неопределено Тогда
Отправитель = "<неизвестный>"
ИначеЕсли Элемент.Отправитель.Наименование = "" Тогда
Отправитель = Элемент.Отправитель.Код;
ИначеЕсли Найти(НРег(Строка(ТипЗнч(Элемент.Отправитель))), "органы") > 0 Тогда
Отправитель = Элемент.Отправитель.Код + " - " + Элемент.Отправитель.Наименование;
Иначе
Отправитель = Элемент.Отправитель.Наименование;
КонецЕсли;
ПоляНерасшифрованногоСообщения.ИдентификаторСообщения = Элемент.ИдентификаторСообщения;
ПоляНерасшифрованногоСообщения.ДатаТранспорта = Элемент.ДатаТранспорта;
ПоляНерасшифрованногоСообщения.Тема = Элемент.Тема;
ПоляНерасшифрованногоСообщения.Отправитель = Отправитель;
ПоляНерасшифрованногоСообщения.ИдентификаторДокументооборота = Элемент.идентификаторДокументооборота;
ПоляНерасшифрованногоСообщения.Контейнеры = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипКонтейнеры") );
Для Каждого ТК Из Элемент.СодержимоеТранспортныхКонтейнеров Цикл
Контейнер = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипКонтейнер") );
Контейнер.ОшибкаКонтейнера = ТК.ОшибкаКонтейнера;
Контейнер.Размер = ТК.РазмерКонтейнера;
Контейнер.Вложения = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипВложенияКонтейнера") );
Для Каждого Вложение Из ТК.Документы Цикл
ВложениеXML = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипВложение") );
ВложениеXML.ОшибкаВложения = Вложение.ОшибкаДокумента;
ВложениеXML.Размер = Вложение.РазмерДокумента;
ВложениеXML.Представление = Вложение.Представление;
ВложениеXML.ТранспортныеСертификаты = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипТранспортныеСертификаты") );
Для Каждого Сертификат Из Вложение.Сведения Цикл
ТранспортныйСертификат = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипТранспортныйСертификат") );
ТранспортныйСертификат.СерийныйНомер = Сертификат.serial_number;
ТранспортныйСертификат.Поставщик = Сертификат.issuer;
ТранспортныйСертификат.Найден = Сертификат.found;
ВложениеXML.ТранспортныеСертификаты.ТранспортныйСертификат.Добавить(ТранспортныйСертификат);
КонецЦикла;
Контейнер.Вложения.Вложение.Добавить(ВложениеXML);
КонецЦикла;
ПоляНерасшифрованногоСообщения.Контейнеры.Контейнер.Добавить(Контейнер);
КонецЦикла;
ЭлементСписка.Сообщение.Добавить(ПоляНерасшифрованногоСообщения);
КонецЦикла;
ПоляИнформации.Значения = ЭлементСписка;
ИначеЕсли Информация.Ключ = "АнтивирусноеПО" Тогда
ЭлементСписка = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипИнформацияСписками") );
Для Каждого Элемент из Информация.Значение Цикл
КомпонентАВ = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипКомпонентАВ") );
КомпонентАВ.Группа = Элемент.Группа;
КомпонентАВ.DisplayName = Элемент.DisplayName;
КомпонентАВ.ImagePath = Элемент.ImagePath;
КомпонентАВ.Start = Строка(Элемент.Start);
КомпонентАВ.Запущен = Элемент.Запущен;
ЭлементСписка.Компонент.Добавить(КомпонентАВ);
КонецЦикла;
ПоляИнформации.Значения = ЭлементСписка;
Иначе
ПоляИнформации.Значение = ?(Информация.Значение = Неопределено, "", Информация.Значение);
КонецЕсли;
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
КонецЦикла;
ПоляИнформацииЖРПолучен = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформацииЖРПолучен.Вид = "ЖурналРегистрации.Получен";
ПоляИнформацииЖРПолучен.Значение = Ложь;
Если ОтчетДиагностики.Свойство("СодержимоеЖРПолучено") Тогда
Если ОтчетДиагностики.СодержимоеЖРПолучено Тогда
ФоновоеЗадание_ЖурналРегистрации = ПолучитьИзВременногоХранилища(ОтчетДиагностики.АдресСодержимогоЖР);
Если ФоновоеЗадание_ЖурналРегистрации = Неопределено Тогда
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = "ЖурналРегистрации.Медленный";
ПоляИнформации.Значение = Истина;
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
ТекущаяПроверка = ОтчетДиагностики.ЖурналРегистрации;
Иначе
ПоляИнформацииЖРПолучен.Значение = Истина;
ТекущаяПроверка = ФоновоеЗадание_ЖурналРегистрации.Журнал;
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = "ЖурналРегистрации.Начало";
ПоляИнформации.Значение = XMLСтрока(ФоновоеЗадание_ЖурналРегистрации.Начало);
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = "ЖурналРегистрации.Окончание";
ПоляИнформации.Значение = XMLСтрока(ФоновоеЗадание_ЖурналРегистрации.Окончание);
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = "ЖурналРегистрации.ЗатраченоСек";
ПоляИнформации.Значение = XMLСтрока(ФоновоеЗадание_ЖурналРегистрации.ЗатраченоВремениСекунд);
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
КонецЕсли;
Иначе
ТекущаяПроверка = ОтчетДиагностики.ЖурналРегистрации;
КонецЕсли;
Иначе
ТекущаяПроверка = ОтчетДиагностики.ЖурналРегистрации;
КонецЕсли;
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформацииЖРПолучен);
Если ТекущаяПроверка.Количество() > 0 Тогда
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = "ЖурналРегистрации";
ЭлементСписка = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипИнформацияСписками") );
Для Каждого ЗаписьЖР из ТекущаяПроверка Цикл
РеквизитыЖР = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРеквизитыЗаписиЖР") );
ЗаполнитьЗначенияСвойств(РеквизитыЖР, ЗаписьЖР);
ЭлементСписка.ЗаписьЖурнала.Добавить(РеквизитыЖР);
КонецЦикла;
ПоляИнформации.Значения = ЭлементСписка;
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
КонецЕсли;
ЧастьОтчета = ОтчетДиагностики.Проверки.ПроверкаУчетнойЗаписи.ЗаявленияАбонента;
Если ЧастьОтчета.Документы.Количество() > 0 Тогда
ПоляИнформации = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипПоляИнформации") );
ПоляИнформации.Вид = "НеобработанныеЗаявления";
ЭлементСписка = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипИнформацияСписками") );
Для Каждого Запись из ЧастьОтчета.Документы Цикл
Реквизиты = Определение.ФабрикаXDTO.Создать( Определение.ФабрикаXDTO.Тип("1c.services", "ТипРеквизитыИнформацииЗаявления") );
ЗаполнитьЗначенияСвойств(Реквизиты, Запись, "Лицензия, Сертификат, Направления, Реквизиты");
Реквизиты.Представление = "Заявление оператору ЭДО № " + Строка(Запись.Заявление.Номер) + " от " + Строка(Запись.Заявление.Дата);
ЭлементСписка.Заявление.Добавить(Реквизиты);
КонецЦикла;
ПоляИнформации.Значения = ЭлементСписка;
Отчет_ДополнительнаяИнформация.Инфо.Добавить(ПоляИнформации);
КонецЕсли;
Отчет.ДополнительнаяИнформация = Отчет_ДополнительнаяИнформация;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
Определение.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Отчет);
ОтчетСтрокойXML = ЗаписьXML.Закрыть();
Если ТолькоСформировать Тогда
Возврат ОтчетСтрокойXML;
КонецЕсли;
Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("https");
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(
Неопределено,
Новый СертификатыУдостоверяющихЦентровОС);
Если СтрДлина(ОтчетСтрокойXML) > 50000 Тогда
ИспользоватьСжатие = Истина;
Иначе
ИспользоватьСжатие = Ложь;
КонецЕсли;
СжатыйОтчетXML = "";
Если ИспользоватьСжатие Тогда
СжатыйОтчет = Новый ХранилищеЗначения(ОтчетСтрокойXML, Новый СжатиеДанных(9));
СжатыйОтчетXML = XMLСтрока(СжатыйОтчет);
КонецЕсли;
Таймаут = 20;
ОписаниеОшибки = "";
Если ИспользоватьСжатие Тогда
Запрос = Новый HTTPЗапрос("/diag/hs/api/v1/AddReportZip");
Запрос.УстановитьТелоИзСтроки(СжатыйОтчетXML,, ИспользованиеByteOrderMark.НеИспользовать);
Иначе
Запрос = Новый HTTPЗапрос("/diag/hs/api/v1/AddReport");
Запрос.УстановитьТелоИзСтроки(ОтчетСтрокойXML,, ИспользованиеByteOrderMark.НеИспользовать);
КонецЕсли;
Соединение = Новый HTTPСоединение(ПолучательОтчета, 443, РеквизитыПодключения.Реквизит, РеквизитыПодключения.Значение, Прокси, Таймаут, ЗащищенноеСоединение);
ОтправленУспешно = Ложь;
Для ш = 1 по 3 Цикл
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
Если ОтветСтрокой = Неопределено Тогда
ОтветСтрокой = "{""error"": ""generic""}";
КонецЕсли;
ЗаписьЖурналаРегистрации("Диагностика 1С-Отчетность. Отправка отчета", УровеньЖурналаРегистрации.Ошибка,,, ОтветСтрокой);
Продолжить;
КонецЕсли;
ОтправленУспешно = Истина;
Прервать;
Исключение
Инф = ИнформацияОбОшибке();
Если Инф.Причина = Неопределено Тогда
ОписаниеОшибки = Инф.Описание;
Иначе
ОписаниеОшибки = Инф.Причина.Описание;
КонецЕсли;
ЗаписьЖурналаРегистрации("Диагностика 1С-Отчетность. Отправка отчета", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки);
КонецПопытки;
КонецЦикла;
Если НЕ ОтправленУспешно Тогда
ИдентификаторОтчета = Идентификатор;
Элементы.ДекорацияУспешноОтправлен.Видимость = Ложь;
Элементы.ГруппаГоризонтальная.Видимость = Истина;
Возврат Ложь;
КонецЕсли;
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
Если ОтветСтрокой = Неопределено Тогда
ОтветСтрокой = "{""error"": ""generic""}";
КонецЕсли;
ЧтJSON = Новый ЧтениеJSON;
ЧтJSON.УстановитьСтроку(ОтветСтрокой);
Попытка
СтруктураJSON = ПрочитатьJSON(ЧтJSON, Ложь);
Исключение
СтруктураJSON = Новый Структура("error", "Не удалось разобрать ответ сервера");
ЗаписьЖурналаРегистрации("Диагностика 1С-Отчетность. Отправка отчета", УровеньЖурналаРегистрации.Ошибка,,, СтруктураJSON.error);
КонецПопытки;
Если СтруктураJSON.Свойство("error") Тогда
ОписаниеОшибки = СтруктураJSON.error;
ИдентификаторОтчета = Идентификатор;
Элементы.ДекорацияУспешноОтправлен.Видимость = Ложь;
Элементы.ГруппаГоризонтальная.Видимость = Истина;
Возврат Ложь;
КонецЕсли;
ИдентификаторОтчета = СтруктураJSON.result;
Элементы.ДекорацияУспешноОтправлен.Видимость = Истина;
Элементы.ГруппаГоризонтальная.Видимость = Истина;
Возврат Истина;
КонецФункции
#КонецОбласти
#Область ОбработчикиДействий
&НаКлиенте
Процедура ДействиеПосмотретьОтсутствующиеДоверенности(Результат, ДополнительныеПараметры) Экспорт
СтандартнаяОбработка = Ложь;
ДекорацияТекстОбщийНажатие(Результат, ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ДействиеПосмотретьОшибочныеДоверенности(Результат, ДополнительныеПараметры) Экспорт
СтандартнаяОбработка = Ложь;
ДекорацияТекстОбщийНажатие(Результат, ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ДинамическийЭлементОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
Если Лев(Ссылка, 6)="e1cib/" Тогда
СтандартнаяОбработка = Истина;
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если Найти(Ссылка, ".") > 0 Тогда
Обработчик = Лев(Ссылка, Найти(Ссылка, ".")-1);
НепосредственноСсылка = Сред(Ссылка, Найти(Ссылка, ".")+1);
Параметр = Новый Структура("НавигационнаяСсылкаФорматированнойСтроки, Отчет, Автонастройка, ФлагиВМастер", Элемент.Имя, РезультатыДиагностики.Отчет, РезультатыДиагностики.Автонастройка, РезультатыДиагностики.Отчет.ФлагиМастераИзмененияПараметров);
Попытка
ОО = Новый ОписаниеОповещения(Обработчик, ЭтотОбъект, Параметр);
Исключение
ОО = Новый ОписаниеОповещения(Обработчик, ОбщиеКлиентскиеМетоды, Параметр);
КонецПопытки;
ВыполнитьОбработкуОповещения(ОО, НепосредственноСсылка);
Иначе
Сообщение = НСтр("ru = 'Не удалось найти обработчик данного элемента'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНастройкуСистемы(Результат, ВхКонтекст) Экспорт
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ЭтоТолькоНастройка", Истина);
ОткрытьФорму("Обработка.НачалоРаботыОблачной1СО.Форма.БыстрыйСтарт", ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияТекстОбщийНажатие(Ссылка, ВхПараметры) Экспорт
РазделНайден = Ложь;
ИндексСводки = НайтиСводкуПоСсылке(Ссылка, РезультатыДиагностики.Отчет);
РазделНайден = ИндексСводки <> Неопределено;
ОрганизацияКлиент = РезультатыДиагностики.Параметры.Организация;
УчетнаяЗаписьОбменаКлиент = РезультатыДиагностики.Параметры.УчетнаяЗаписьОбмена;
Если РазделНайден Тогда
Запись = РезультатыДиагностики.Отчет.Сводка[ИндексСводки];
ПараметрыОткрытия = Новый Структура("Отчет", РезультатыДиагностики.Отчет);
ПараметрыОткрытия.Вставить("Сводка", Запись);
ПараметрыОткрытия.Вставить("Организация", ОрганизацияКлиент.Ссылка);
ПараметрыОткрытия.Вставить("УчетнаяЗаписьДокументооборота", УчетнаяЗаписьОбменаКлиент.Ссылка);
ПараметрыОткрытия.Вставить("Автонастройка", РезультатыДиагностики.Автонастройка);
ПараметрыОткрытия.Вставить("ТелефонСлужбыПоддержки", ТелефонСлужбыПоддержки);
ИмяФормыПодробности = "Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.ДиагностикаОтчетности_ПодробностиИРекомендации";
ОткрытьФорму(ИмяФормыПодробности, ПараметрыОткрытия, ЭтаФорма);
Иначе
Сообщение = НСтр("ru = 'Не удалось найти подробное описание данного элемента'");
ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НадписьОтправитьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Найти(НРег(НавигационнаяСсылкаФорматированнойСтроки), "отправь")>0 Тогда
ОтправитьДиагностическийОтчет(Неопределено);
ИначеЕсли Найти(НРег(НавигационнаяСсылкаФорматированнойСтроки), "просмотреть")>0 Тогда
ПосмотретьДиагностическийОтчет();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбщегоНазначения
&НаСервереБезКонтекста
Функция СлучайноеБулево() Экспорт
Ген = Новый ГенераторСлучайныхЧисел();
СлЧисло = Ген.СлучайноеЧисло(1, 999999);
Если СлЧисло%2 = 0 Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьСведенияОбОрганизации(Организация) Экспорт
ЭтоЮридическоеЛицо = РегламентированнаяОтчетностьПереопределяемый.ЭтоЮридическоеЛицо(Организация);
СтруктураДанныхОрганизации = РегламентированнаяОтчетностьПереопределяемый.ПолучитьСведенияОбОрганизации(Организация);
Если ЭтоЮридическоеЛицо Тогда
ПараметрыОрганизации = Новый Структура("ИНН, КПП",
СокрЛП(СтруктураДанныхОрганизации["ИННЮЛ"]),
СокрЛП(СтруктураДанныхОрганизации["КППЮЛ"]));
Иначе
ПараметрыОрганизации = Новый Структура("ИНН, КПП",
СокрЛП(СтруктураДанныхОрганизации["ИННФЛ"]), "");
КонецЕсли;
Возврат ПараметрыОрганизации;
КонецФункции
&НаСервереБезКонтекста
Функция ИПИспользуетТрудНаемныхРаботников(Организация) Экспорт
Если ТипЗнч(Организация) = Тип("СправочникОбъект.Организации")
ИЛИ ТипЗнч(Организация) = Тип("СправочникСсылка.Организации") Тогда
ОрганизацияСсылка = Организация.Ссылка;
Иначе
Возврат Ложь;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОрганизацияСсылка) Тогда
Возврат Ложь;
Иначе
ПараметрыБР = Новый Структура;
ПараметрыБР.Вставить("Организация", ОрганизацияСсылка);
ПараметрыБР.Вставить("ИПИспользуетТрудНаемныхРаботников", Ложь);
Попытка
ОбщегоНазначения.ВыполнитьВБезопасномРежиме("РегламентированнаяОтчетностьПереопределяемый.ПолучитьПризнакИспользованияИПТрудаНаемныхРаботников(Параметры.Организация, Параметры.ИПИспользуетТрудНаемныхРаботников)", ПараметрыБР);
Исключение
ОбщегоНазначения.ВыполнитьВБезопасномРежиме("Параметры.ИПИспользуетТрудНаемныхРаботников = РегламентированнаяОтчетностьПереопределяемый.ИПИспользуетТрудНаемныхРаботников(Параметры.Организация)", ПараметрыБР);
КонецПопытки;
Возврат ПараметрыБР.ИПИспользуетТрудНаемныхРаботников;
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция СпецоператорСвязиПоддерживается(СС)
Если СС.Пустая() Тогда
Возврат Ложь;
КонецЕсли;
Поддерживаемые = Новый Массив();
Поддерживаемые.Добавить(Перечисления.СпецоператорыСвязи.КалугаАстрал);
Поддерживаемые.Добавить(Перечисления.СпецоператорыСвязи.Форус);
Если Поддерживаемые.Найти(СС) = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьРеквизитыМетаданных()
УстановитьПривилегированныйРежим(Истина);
Уровни = ПолучитьИспользованиеЖурналаРегистрации();
УстановитьПривилегированныйРежим(Ложь);
Возврат Новый Структура("Версия, Синоним, УровниЖР", Метаданные.Версия, Метаданные.Синоним, Уровни.Количество());
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьДоступныеОрганизации()
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Организации.Ссылка КАК Организация
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.ПометкаУдаления = ЛОЖЬ
| И Организации.ВидОбменаСКонтролирующимиОрганами = ЗНАЧЕНИЕ(Перечисление.ВидыОбменаСКонтролирующимиОрганами.ОбменВУниверсальномФормате)
| И Организации.УчетнаяЗаписьОбмена <> ЗНАЧЕНИЕ(Справочник.УчетныеЗаписиДокументооборота.ПустаяСсылка)
| И Организации.УчетнаяЗаписьОбмена.СпецоператорСвязи В (ЗНАЧЕНИЕ(Перечисление.СпецоператорыСвязи.КалугаАстрал), ЗНАЧЕНИЕ(Перечисление.СпецоператорыСвязи.Форус))
| И Организации.УчетнаяЗаписьОбмена В(&УчетнаяЗаписьОбмена)";
Запрос.УстановитьПараметр("УчетнаяЗаписьОбмена", ДокументооборотСКО.ТекущиеУчетныеЗаписиНалогоплательщика());
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Организация");
КонецФункции
&НаСервереБезКонтекста
Процедура ПолучитьЗначенияНастроек(ИспользуетсяОднаОрганизация, ОсновнаяОрганизация)
ОсновнаяОрганизация = Справочники.Организации.ПустаяСсылка();
ИспользуетсяОднаОрганизация = РегламентированнаяОтчетностьВызовСервера.ИспользуетсяОднаОрганизация();
Если ИспользуетсяОднаОрганизация Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("Справочники.Организации");
ОсновнаяОрганизация = Модуль.ОрганизацияПоУмолчанию();
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьУчетнуюЗапись(Организация)
Результат = Неопределено;
Если Организация.Пустая() Тогда
Возврат Результат;
КонецЕсли;
УчетнаяЗапись = Организация.УчетнаяЗаписьОбмена;
Если ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ПоляУчетнойЗаписи = Новый Структура;
ПоляУчетнойЗаписи.Вставить("Наименование", УчетнаяЗапись.Наименование);
ПоляУчетнойЗаписи.Вставить("ЛицензияДатаНачала", УчетнаяЗапись.ЛицензияДатаНачала);
ПоляУчетнойЗаписи.Вставить("ЛицензияДатаОкончания", УчетнаяЗапись.ЛицензияДатаОкончания);
ПоляУчетнойЗаписи.Вставить("ЛицензияНаименование", УчетнаяЗапись.ЛицензияНаименование);
ПоляУчетнойЗаписи.Вставить("Активна", УчетнаяЗапись.СтатусУчетнойЗаписи = Перечисления.СтатусыУчетнойЗаписиДокументооборота.Активна);
ПоляУчетнойЗаписи.Вставить("ОбменВУниверсальномФормате", Организация.ВидОбменаСКонтролирующимиОрганами = Перечисления.ВидыОбменаСКонтролирующимиОрганами.ОбменВУниверсальномФормате);
ПоляУчетнойЗаписи.Вставить("СпецоператорСвязи", УчетнаяЗапись.СпецоператорСвязи);
ПоляУчетнойЗаписи.Вставить("Ссылка", УчетнаяЗапись.Ссылка);
ПоляУчетнойЗаписи.Вставить("СерверSMTP", УчетнаяЗапись.СерверSMTP);
КриптографияЭДКОКлиентСервер.КонтекстМоделиХраненияКлюча(УчетнаяЗапись, ПоляУчетнойЗаписи);
Результат = ПоляУчетнойЗаписи;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьДополнительныеРеквизитыУчетнойЗаписиПолучатели(УчетнаяЗаписьОбмена)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.ТипПолучателя,
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.КодПолучателя,
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.КПП
|ИЗ
| РегистрСведений.ДополнительныеРеквизитыУчетнойЗаписиПолучатели КАК ДополнительныеРеквизитыУчетнойЗаписиПолучатели
|ГДЕ
| ДополнительныеРеквизитыУчетнойЗаписиПолучатели.УчетнаяЗапись = &УчетнаяЗапись";
Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗаписьОбмена);
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() = 0 Тогда
Возврат Новый Массив;
КонецЕсли;
ВсеЗаписи = Новый Массив;
Для Каждого Запись из Результат цикл
Строчка = Новый Структура();
Для Каждого Колонка из Результат.Колонки цикл
Строчка.Вставить(Колонка.Имя, Запись[Колонка.Имя]);
КонецЦикла;
Строчка.Вставить("ТипПолучателяСтрокой", ВРег(ИмяЗначенияПеречисления(Запись.ТипПолучателя)));
ВсеЗаписи.Добавить(Строчка);
КонецЦикла;
Возврат ВсеЗаписи;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьДополнительныеРеквизитыУчетнойЗаписи(УчетнаяЗаписьОбмена)
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ДопРеквизиты = КонтекстЭДОСервер.ДополнительныеРеквизитыУчетнойЗаписи(УчетнаяЗаписьОбмена);
Если НЕ ЗначениеЗаполнено(ДопРеквизиты) Тогда
Возврат Неопределено;
КонецЕсли;
КолонкиСтрокой =
"ТипКриптопровайдера,
|КраткоеНаименование,
|ИНН,
|КПП,
|ОГРН,
|РегНомерПФР,
|ЭлектроннаяПочта,
|ВладелецЭЦПФамилия,
|ВладелецЭЦПИмя,
|ВладелецЭЦПОтчество,
|ВладелецЭЦППодразделение,
|ВладелецЭЦПСНИЛС,
|ВладелецЭЦПДолжность,
|ТелефонМобильный,
|ТелефонОсновной,
|КодРегионаФСРАР";
Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КолонкиСтрокой, ",", Ложь, Истина);
Результат = Новый Структура();
Для Каждого Колонка из Колонки цикл
Значение = ДопРеквизиты[Колонка];
Результат.Вставить(Колонка, Значение);
Результат.Вставить(Колонка + "Исходный", Значение);
КонецЦикла;
Результат.Вставить("КраткоеНаименованиеИсходное", ДопРеквизиты.КраткоеНаименование);
Результат.Вставить("ВладелецЭЦППодразделениеИсходное", ДопРеквизиты.ВладелецЭЦППодразделение);
Результат.Вставить("ЭлектроннаяПочтаИсходная", ДопРеквизиты.ЭлектроннаяПочта);
Результат.Вставить("ВладелецЭЦПДолжностьИсходная", ДопРеквизиты.ВладелецЭЦПДолжность);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ТипКлиента(ТипЧислом = -1) Экспорт
ТипЧислом = 2;
Возврат "Тонкий клиент";
КонецФункции
&НаКлиенте
Функция ДанныеДляТеста()
Возврат Base64Значение("MDEyMzQ1Njc5OEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla");
КонецФункции
&НаСервереБезКонтекста
Функция ИмяЗначенияПеречисления(Вид)
Индекс = Перечисления[Вид.Метаданные().Имя].Индекс(Вид);
Возврат Метаданные.Перечисления[Вид.Метаданные().Имя].ЗначенияПеречисления.Получить(Индекс).Имя;
КонецФункции
&НаСервереБезКонтекста
Функция ОрганизацияЯвляетсяИП(Организация)
Возврат НЕ РегламентированнаяОтчетностьПереопределяемый.ЭтоЮридическоеЛицо(Организация.Ссылка);
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьЗначенияПеречисления(Вид)
Если Метаданные.Перечисления.Найти(Вид) = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ЗначенияПеречисления = Новый Структура();
Для Каждого Значение из Метаданные.Перечисления[Вид].ЗначенияПеречисления Цикл
ЗначенияПеречисления.Вставить(Значение.Имя, Перечисления[Вид][Значение.Имя]);
КонецЦикла;
Возврат ЗначенияПеречисления;
КонецФункции
&НаСервереБезКонтекста
Функция ИзвлечьПоля(Ссылка)
Реквизиты = Новый Структура();
ТипСсылки = ТипЗнч(Ссылка);
Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Коллекция = Метаданные.Справочники;
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Коллекция = Метаданные.Документы;
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Коллекция = Метаданные.Перечисления;
Иначе
Возврат Реквизиты;
КонецЕсли;
ОбъектМ = Коллекция.Найти(Ссылка.Метаданные().Имя);
Для Каждого Реквизит из ОбъектМ.Реквизиты Цикл
Реквизиты.Вставить(Реквизит.Имя, Ссылка[Реквизит.Имя]);
КонецЦикла;
Для Каждого Реквизит из ОбъектМ.СтандартныеРеквизиты Цикл
Реквизиты.Вставить(Реквизит.Имя, Ссылка[Реквизит.Имя]);
КонецЦикла;
Для Каждого ТЧ из ОбъектМ.ТабличныеЧасти Цикл
Реквизиты.Вставить(ТЧ.Имя, Новый Массив);
Для Каждого Стр из Ссылка[ТЧ.Имя] Цикл
СтрокаТаблицы = Новый Структура();
Для Каждого Кол из ТЧ.Реквизиты Цикл
СтрокаТаблицы.Вставить(Кол.Имя, Стр[Кол.Имя]);
КонецЦикла;
Для Каждого Кол из ТЧ.СтандартныеРеквизиты Цикл
СтрокаТаблицы.Вставить(Кол.Имя, Стр[Кол.Имя]);
КонецЦикла;
Реквизиты[ТЧ.Имя].Добавить(СтрокаТаблицы);
КонецЦикла;
КонецЦикла;
Возврат Реквизиты;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьВсеСобытия() Экспорт
События = Новый Соответствие;
События.Вставить(0, "Нет ошибок");
События.Вставить(0 + 256 + 0, "Ошибка");
События.Вставить(0 + 256 + 1, "Не найдено описание ошибки");
События.Вставить(0 + 128 + 0, "Предупреждение");
События.Вставить(0 + 128 + 1, "Не найдено описание предупреждения");
События.Вставить(0 + 128 + 2, "Есть сообщения которые нельзя расшифровать");
События.Вставить(0 + 0 + 0, "Информация");
События.Вставить(0 + 0 + 1, "Не найдено описание информации");
События.Вставить(512 + 256 + 0, "Период действия лицензии закончился");
События.Вставить(512 + 256 + 1, "Период действия лицензии ещё не начался");
События.Вставить(512 + 256 + 2, "Учетная запись документооборота неактивна");
События.Вставить(512 + 256 + 8, "Один или несколько реквизитов учетной записи различаются");
События.Вставить(512 + 256 + 9, "Одна или несколько доверенностей содержат ошибки");
События.Вставить(512 + 256 + 10, "Отсутствует доверенность");
События.Вставить(512 + 256 + 11, "Срок действия доверенности уже истёк");
События.Вставить(512 + 256 + 12, "Срок действия доверенности ещё не начался");
События.Вставить(512 + 256 + 13, "Доверенность должна быть выдана на владельца ЭП");
События.Вставить(512 + 256 + 20, "Не удалось выполнить тестовую криптооперацию");
События.Вставить(512 + 128 + 0, "Период действия лицензии заканчивается");
События.Вставить(512 + 128 + 5, "Есть необработанные заявления");
События.Вставить(512 + 128 + 10, "В регистрации в налоговом органе указан представитель отличный от такового в доверенности");
События.Вставить(512 + 128 + 11, "Владельца ЭЦП нет в справочнике физических лиц");
События.Вставить(512 + 128 + 12, "В доверенности не указаны полномочия представителя");
События.Вставить(512 + 0 + 0, "Период действия лицензии в порядке");
События.Вставить(512 + 0 + 1, "Учетная запись документооборота активна");
События.Вставить(512 + 0 + 10, "Представитель найден в базе");
События.Вставить(512 + 0 + 11, "ФИО представителя И владельца ЭП совпали");
События.Вставить(512 + 0 + 12, "Представитель не найден в базе");
События.Вставить(1024 + 256 + 0, "");
События.Вставить(1024 + 256 + 1, "Не удалось подключиться к службе");
События.Вставить(1024 + 128 + 0, "");
События.Вставить(1024 + 128 + 1, "Включен тестовый режим, адреса тестовых серверов получателей могут отличаться от продуктивных");
События.Вставить(1024 + 128 + 2, "Направление ФСРАР отключено");
События.Вставить(1024 + 128 + 3, "Направление ПФР отключено");
События.Вставить(1024 + 128 + 4, "Направление ФНС отключено");
События.Вставить(1024 + 128 + 5, "Направление ФСГС отключено");
События.Вставить(1024 + 128 + 6, "Направление РПН отключено");
События.Вставить(1024 + 128 + 7, "Направление ФТС отключено");
События.Вставить(1024 + 128 + 8, "Направление ФСС отключено");
События.Вставить(1024 + 0 + 0, "");
События.Вставить(2048 + 256 + 0, "Есть ошибки криптографии");
События.Вставить(2048 + 128 + 0, "");
События.Вставить(2048 + 0 + 0, "");
События.Вставить(4096 + 256 + 0, "");
События.Вставить(4096 + 256 + 1, "Сертификат не установлен");
События.Вставить(4096 + 128 + 0, "");
События.Вставить(4096 + 0 + 0, "");
События.Вставить(8192 + 256 + 0, "Не удалось выполнить криптооперацию");
События.Вставить(8192 + 256 + 1, "Не удалось выполнить шифрование");
События.Вставить(8192 + 256 + 2, "Не удалось выполнить расшифровку");
События.Вставить(8192 + 128 + 0, "");
События.Вставить(8192 + 0 + 0, "");
Возврат События;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьОписаниеСобытия(Категория = 0, Вид = 0, Событие = 0) Экспорт
КодКатегории = 0;
КодВида = 0;
Если Категория > 0 Тогда
КодКатегории = Pow(2, 8 + Категория);
КонецЕсли;
Если Вид > 0 Тогда
КодВида = Pow(2, 6 + Вид);
КонецЕсли;
КодОшибки = КодКатегории+КодВида+Событие;
События = ПолучитьВсеСобытия();
Событие = События.Получить(КодОшибки);
Если Событие = Неопределено Тогда
Событие = События.НайтиПоЗначению(257);
КонецЕсли;
Возврат Новый Структура("Код, Описание", КодОшибки, Событие)
КонецФункции
&НаСервереБезКонтекста
Функция ПривестиТип(Значение, СтандартныйТипXML)
ТипЗначения = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", СтандартныйТипXML);
Если ТипЗначения = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Результат = ФабрикаXDTO.Создать(ТипЗначения, Значение);
Возврат Результат.ЛексическоеЗначение;
КонецФункции
&НаКлиенте
Функция НайтиСводкуПоСсылке(Знач Ссылка, Отчет)
Для ш = 1 по Отчет.Сводка.Количество() Цикл
Запись = Отчет.Сводка[ш-1];
Если Запись.Ссылка = Ссылка Тогда
Возврат ш-1;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Функция ПодготовитьСсылку(Сообщение, Знач ТекстСсылки, Знач Ссылка = Неопределено, Знач Действие = Неопределено)
НоваяСсылка = Новый Структура("Текст, Ссылка, Действие", ТекстСсылки, Ссылка, Действие);
Сообщение = СтрЗаменить(Сообщение, ТекстСсылки, "%1");
Возврат НоваяСсылка;
КонецФункции
&НаСервере
Функция НайтиОписаниеПоКоду(Код, МакетПодсказки = Неопределено,
Ссылка1 = Неопределено,
Ссылка2 = Неопределено,
ВхПараметр1 = Неопределено,
ВхПараметр2 = Неопределено,
ВхПараметр3 = Неопределено,
ВхПараметр4 = Неопределено,
ВхПараметр5 = Неопределено)
Ссылка1 = Новый Структура("Текст, Ссылка, Действие", "", Неопределено, Неопределено);
Ссылка2 = Новый Структура("Текст, Ссылка, Действие", "", Неопределено, Неопределено);
Если МакетПодсказки = Неопределено Тогда
Обработка = ДокументооборотСКО.ПолучитьОбработкуЭДО();
МакетПодсказки = Обработка.ПолучитьМакет("ДиагностикаОтчетности_Подсказки");
КонецЕсли;
КолонкаКод = МакетПодсказки.Область("C1");
Область = МакетПодсказки.НайтиТекст(Код,, КолонкаКод);
Если Область = Неопределено Тогда
Возврат "";
КонецЕсли;
НомерСтроки = Область.Низ;
СсылкаТекст1 = СокрЛП(МакетПодсказки.Область(НомерСтроки, 2, НомерСтроки, 2).Текст);
СсылкаТекст2 = СокрЛП(МакетПодсказки.Область(НомерСтроки, 3, НомерСтроки, 3).Текст);
СсылкаДействие1 = СокрЛП(МакетПодсказки.Область(НомерСтроки, 4, НомерСтроки, 4).Текст);
СсылкаДействие2 = СокрЛП(МакетПодсказки.Область(НомерСтроки, 5, НомерСтроки, 5).Текст);
НайденныйТекст = МакетПодсказки.Область(НомерСтроки, 6, НомерСтроки, 6).Текст;
Если ВхПараметр5 <> Неопределено Тогда
НайденныйТекст = СтрЗаменить(НайденныйТекст, "%5", ВхПараметр5);
КонецЕсли;
Если ВхПараметр4 <> Неопределено Тогда
НайденныйТекст = СтрЗаменить(НайденныйТекст, "%4", ВхПараметр4);
КонецЕсли;
Если ВхПараметр3 <> Неопределено Тогда
НайденныйТекст = СтрЗаменить(НайденныйТекст, "%3", ВхПараметр3);
КонецЕсли;
Если ВхПараметр2 <> Неопределено Тогда
НайденныйТекст = СтрЗаменить(НайденныйТекст, "%2", ВхПараметр2);
КонецЕсли;
Если ВхПараметр1 <> Неопределено Тогда
НайденныйТекст = СтрЗаменить(НайденныйТекст, "%1", ВхПараметр1);
КонецЕсли;
Если СсылкаТекст1 <> "" Тогда
Ссылка1.Текст = СсылкаТекст1;
Если СсылкаДействие1 <> "" Тогда
Ссылка1.Действие = СсылкаДействие1;
КонецЕсли;
НайденныйТекст = СтрЗаменить(НайденныйТекст, СсылкаТекст1, "%1");
КонецЕсли;
Если СсылкаТекст2 <> "" Тогда
Ссылка2.Текст = СсылкаТекст2;
Если СсылкаДействие2 <> "" Тогда
Ссылка2.Действие = СсылкаДействие2;
КонецЕсли;
НайденныйТекст = СтрЗаменить(НайденныйТекст, СсылкаТекст2, "%2");
КонецЕсли;
Возврат НайденныйТекст;
КонецФункции
&НаСервере
Функция ПолучитьКриптопровайдераОтчета(Отчет, Автонастройка, ПараметрыКП = Неопределено)
Если Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Криптопровайдер = Неопределено Тогда
Если ЗначениеЗаполнено(Автонастройка.ВладелецЭП.КриптопровайдерENUM) Тогда
ПараметрыКП = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдераПоУмолчанию(Автонастройка.ВладелецЭП.КриптопровайдерENUM);
КонецЕсли;
Возврат Автонастройка.ВладелецЭП.КриптопровайдерENUM;
КонецЕсли;
НеизвестныйКП = Отчет.Проверки.ПроверкаУчетнойЗаписи.ИнформацияЛичногоСертификата.Криптопровайдер;
СвойстваКриптопровайдера = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдера(НеизвестныйКП.Имя, НеизвестныйКП.Тип);
Если СвойстваКриптопровайдера <> Неопределено Тогда
ПараметрыКП = КриптографияЭДКОКлиентСервер.СвойстваКриптопровайдераПоУмолчанию(СвойстваКриптопровайдера.ТипКриптопровайдера);
Возврат СвойстваКриптопровайдера.ТипКриптопровайдера;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеHTTPКода(Код)
СписокКодовHTTP = Новый СписокЗначений;
СписокКодовHTTP.Добавить(100, "Continue");
СписокКодовHTTP.Добавить(101, "Switching Protocols");
СписокКодовHTTP.Добавить(102, "Processing");
СписокКодовHTTP.Добавить(200, "OK");
СписокКодовHTTP.Добавить(201, "Created");
СписокКодовHTTP.Добавить(202, "Accepted");
СписокКодовHTTP.Добавить(203, "Non-Authoritative Information");
СписокКодовHTTP.Добавить(204, "No Content");
СписокКодовHTTP.Добавить(205, "Reset Content");
СписокКодовHTTP.Добавить(206, "Partial Content");
СписокКодовHTTP.Добавить(207, "Multi-Status");
СписокКодовHTTP.Добавить(208, "Already Reported");
СписокКодовHTTP.Добавить(226, "IM Used");
СписокКодовHTTP.Добавить(300, "Multiple Choices");
СписокКодовHTTP.Добавить(301, "Moved Permanently");
СписокКодовHTTP.Добавить(302, "Found");
СписокКодовHTTP.Добавить(303, "See Other");
СписокКодовHTTP.Добавить(304, "Not Modified");
СписокКодовHTTP.Добавить(305, "Use Proxy");
СписокКодовHTTP.Добавить(306, "Switch Proxy");
СписокКодовHTTP.Добавить(307, "Temporary Redirect");
СписокКодовHTTP.Добавить(308, "Permanent Redirect");
СписокКодовHTTP.Добавить(400, "Bad Request");
СписокКодовHTTP.Добавить(401, "Unauthorized ");
СписокКодовHTTP.Добавить(402, "Payment Required");
СписокКодовHTTP.Добавить(403, "Forbidden");
СписокКодовHTTP.Добавить(404, "Not Found");
СписокКодовHTTP.Добавить(405, "Method Not Allowed");
СписокКодовHTTP.Добавить(406, "Not Acceptable");
СписокКодовHTTP.Добавить(407, "Proxy Authentication Required");
СписокКодовHTTP.Добавить(408, "Request Timeout");
СписокКодовHTTP.Добавить(409, "Conflict");
СписокКодовHTTP.Добавить(410, "Gone");
СписокКодовHTTP.Добавить(411, "Length Required");
СписокКодовHTTP.Добавить(412, "Precondition Failed");
СписокКодовHTTP.Добавить(413, "Payload Too Large");
СписокКодовHTTP.Добавить(414, "URI Too Long");
СписокКодовHTTP.Добавить(415, "Unsupported Media Type");
СписокКодовHTTP.Добавить(416, "Range Not Satisfiable");
СписокКодовHTTP.Добавить(417, "Expectation Failed");
СписокКодовHTTP.Добавить(418, "I'm a teapot");
СписокКодовHTTP.Добавить(421, "Misdirected Request");
СписокКодовHTTP.Добавить(422, "Unprocessable Entity");
СписокКодовHTTP.Добавить(423, "Locked");
СписокКодовHTTP.Добавить(424, "Failed Dependency");
СписокКодовHTTP.Добавить(426, "Upgrade Required");
СписокКодовHTTP.Добавить(428, "Precondition Required");
СписокКодовHTTP.Добавить(429, "Too Many Requests");
СписокКодовHTTP.Добавить(431, "Request Header Fields Too Large");
СписокКодовHTTP.Добавить(449, "Retry With");
СписокКодовHTTP.Добавить(451, "Unavailable For Legal Reasons");
СписокКодовHTTP.Добавить(500, "Internal Server Error");
СписокКодовHTTP.Добавить(501, "Not Implemented");
СписокКодовHTTP.Добавить(502, "Bad Gateway");
СписокКодовHTTP.Добавить(503, "Service Unavailable");
СписокКодовHTTP.Добавить(504, "Gateway Timeout");
СписокКодовHTTP.Добавить(505, "HTTP Version Not Supported");
СписокКодовHTTP.Добавить(506, "Variant Also Negotiates");
СписокКодовHTTP.Добавить(507, "Insufficient Storage");
СписокКодовHTTP.Добавить(508, "Loop Detected");
СписокКодовHTTP.Добавить(510, "Not Extended");
СписокКодовHTTP.Добавить(511, "Network Authentication Required");
СписокКодовHTTP.Добавить(103, "Checkpoint");
СписокКодовHTTP.Добавить(450, "Blocked by Windows Parental Controls");
СписокКодовHTTP.Добавить(499, "Request has been forbidden by antivirus");
СписокКодовHTTP.Добавить(509, "Bandwidth Limit Exceeded");
СписокКодовHTTP.Добавить(530, "Site is frozen");
СписокКодовHTTP.Добавить(440, "Login Timeout");
СписокКодовHTTP.Добавить(449, "Retry With");
СписокКодовHTTP.Добавить(451, "Redirect");
СписокКодовHTTP.Добавить(444, "No Response");
СписокКодовHTTP.Добавить(495, "SSL Certificate Error");
СписокКодовHTTP.Добавить(496, "SSL Certificate Required");
СписокКодовHTTP.Добавить(497, "HTTP Request Sent to HTTPS Port");
СписокКодовHTTP.Добавить(499, "Client Closed Request");
СписокКодовHTTP.Добавить(520, "Unknown Error");
СписокКодовHTTP.Добавить(521, "Web Server Is Down");
СписокКодовHTTP.Добавить(522, "Connection Timed Out");
СписокКодовHTTP.Добавить(523, "Origin Is Unreachable");
СписокКодовHTTP.Добавить(524, "A Timeout Occurred");
СписокКодовHTTP.Добавить(525, "SSL Handshake Failed");
СписокКодовHTTP.Добавить(526, "Invalid SSL Certificate");
Результат = СписокКодовHTTP.НайтиПоЗначению(Код);
Если Результат = Неопределено Тогда
Возврат Формат(Код, "ЧЦ=3; ЧДЦ=; ЧГ=") + " Unknown HTTP Status Code"
КонецЕсли;
Возврат Формат(Код, "ЧЦ=3; ЧДЦ=; ЧГ=") + " " + Результат.Представление;
КонецФункции
&НаСервереБезКонтекста
Функция СтрокаБезДефисов(Текст) Экспорт
Возврат СтрЗаменить(Текст, "-", "");
КонецФункции
&НаСервереБезКонтекста
Функция КодПФР(РеквизитыОрганизации)
ПолученыйКодПФР = "";
Если ПустаяСтрока(РеквизитыОрганизации.КодОрганаПФР) ИЛИ СтрДлина(РеквизитыОрганизации.КодОрганаПФР) < 7 Тогда
ПолученыйКодПФР = Лев(РеквизитыОрганизации.КодОрганаПФР, 7);
Иначе
ПолученыйКодПФР = РеквизитыОрганизации.КодОрганаПФР;
КонецЕсли;
Возврат ПолученыйКодПФР;
КонецФункции
#КонецОбласти