1940 lines
144 KiB
Plaintext
1940 lines
144 KiB
Plaintext
#Область СлужебныеПроцедурыИФункции
|
|
|
|
#Область ДиагностикаИнтернетСоединения
|
|
|
|
Процедура ДиагностикаИнтернетСоединения(РезультатДиагностики, ПараметрыВыполненияДиагностики, Контекст)
|
|
|
|
ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение();
|
|
РезультатДиагностикиИнтернетСоединения = Неопределено;
|
|
Если Не ЕстьВидДиагностики(РезультатДиагностики, ВидДиагностики, РезультатДиагностикиИнтернетСоединения) Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
Результаты = РезультатДиагностикиИнтернетСоединения.Результаты;
|
|
НаличиеИнтернетСоединения = Результаты.НаличиеИнтернетСоединения;
|
|
ПроверитьИнтернетСоединение(НаличиеИнтернетСоединения);
|
|
|
|
Если НаличиеИнтернетСоединения.Результат Тогда
|
|
УчетныеЗаписи = РезультатДиагностики.ДоступныеУчетныеЗаписи;
|
|
ПроверяемыеСервисы = ПроверяемыеСервисыИнтернетСоединение(РезультатДиагностики, УчетныеЗаписи);
|
|
ПроверитьАктивностьСервисов(Результаты.АктивностьСервисов, ПроверяемыеСервисы);
|
|
ПроверитьДоступностьСервисов(Результаты, ПроверяемыеСервисы);
|
|
ПроверитьКорневыеСертификаты(Результаты.НаличиеКорневыхСертификатов, ПроверяемыеСервисы, Контекст);
|
|
КонецЕсли;
|
|
|
|
ОбщийРезультат = Истина;
|
|
Для каждого РезультатВидаДиагностики Из Результаты Цикл
|
|
ОбщийРезультат = ОбщийРезультат И РезультатВидаДиагностики.Значение.Результат <> Ложь;
|
|
КонецЦикла;
|
|
РезультатДиагностикиИнтернетСоединения.Результат = ОбщийРезультат;
|
|
РезультатДиагностикиИнтернетСоединения.ОтчетДляАдминистратора =
|
|
ОтчетДляАдминистратораИнтернетСоединение(РезультатДиагностикиИнтернетСоединения,
|
|
ПараметрыВыполненияДиагностики);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьИнтернетСоединение(НаличиеИнтернетСоединения)
|
|
|
|
АдресРесурса = "1c.ru";
|
|
НаличиеИнтернетСоединения.Результат = ИнтернетРесурсДоступен(АдресРесурса);
|
|
НаличиеИнтернетСоединения.Рекомендация.Краткая = НСтр("ru = 'Обратитесь к администратору'");
|
|
НаличиеИнтернетСоединения.Рекомендация.Подробная = НСтр("ru = 'Проверьте доступ к сети интернет'");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьАктивностьСервисов(АктивностьСервисов, ПроверяемыеСервисы)
|
|
|
|
РезультатПолученияФайла = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере("https://reputils.1c.ru/static/online_stats.json");
|
|
Ошибка = Неопределено;
|
|
ШаблонСообщенияОбОшибке = НСтр("ru = 'Ошибка проверки активности сервисов:
|
|
|%1
|
|
|%2'");
|
|
ТекстОшибкиЧтениеJSON = СтрШаблон(ШаблонСообщенияОбОшибке,
|
|
НСтр("ru = 'Чтение JSON:'"),
|
|
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
|
Если РезультатПолученияФайла.Статус Тогда
|
|
Попытка
|
|
ОбщийРезультат = Истина;
|
|
СтруктураJSON = ОбщегоНазначенияБЭД.JSONЗначение(Новый ДвоичныеДанные(РезультатПолученияФайла.Путь));
|
|
ОбработанныеСервисы = Новый Массив;
|
|
Если СтруктураJSON.Свойство("error") Тогда
|
|
Ошибка = ТекстОшибкиЧтениеJSON;
|
|
ИначеЕсли СтруктураJSON.Свойство("result") Тогда
|
|
Если ТипЗнч(СтруктураJSON.result) = Тип("Массив") Тогда
|
|
Для каждого Сервис Из СтруктураJSON.result Цикл
|
|
ПредставлениеСервиса = ПроверяемыеСервисы.Получить(Сервис.qu);
|
|
Если ПредставлениеСервиса <> Неопределено Тогда
|
|
ДобавитьИнформациюОбАктивностиСервиса(АктивностьСервисов,
|
|
ПредставлениеСервиса, Сервис.online);
|
|
ОбщийРезультат = ОбщийРезультат И Сервис.online;
|
|
ОбработанныеСервисы.Добавить(Сервис.qu);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
Иначе
|
|
Ошибка = ТекстОшибкиЧтениеJSON;
|
|
КонецЕсли;
|
|
КонецЕсли;
|
|
// Считаем, что сервисы, отсутствующие в результатах проверок всегда доступны.
|
|
Для каждого ПроверяемыйСервис Из ПроверяемыеСервисы Цикл
|
|
Если ОбработанныеСервисы.Найти(ПроверяемыйСервис.Ключ) = Неопределено Тогда
|
|
ДобавитьИнформациюОбАктивностиСервиса(АктивностьСервисов,
|
|
ПроверяемыйСервис.Значение, Истина);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
АктивностьСервисов.Результат = ОбщийРезультат;
|
|
Исключение
|
|
АктивностьСервисов.Результат = Ложь;
|
|
Ошибка = ТекстОшибкиЧтениеJSON;
|
|
КонецПопытки;
|
|
Иначе
|
|
Ошибка = СтрШаблон(ШаблонСообщенияОбОшибке,
|
|
НСтр("ru = 'Получение файла из интернета:'"),
|
|
РезультатПолученияФайла.СообщениеОбОшибке);
|
|
КонецЕсли;
|
|
Если Ошибка <> Неопределено Тогда
|
|
ЗаписатьОшибкуВЖурналРегистрации(ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение(), Ошибка);
|
|
КонецЕсли;
|
|
АктивностьСервисов.Рекомендация.Краткая = НСтр("ru = 'Повторите действие позднее.'");
|
|
АктивностьСервисов.Рекомендация.Подробная = НСтр("ru = 'Повторите действие позднее.'");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьИнформациюОбАктивностиСервиса(АктивностьСервисов, Адрес, Активность)
|
|
|
|
ОписаниеСервиса = Новый Структура;
|
|
ОписаниеСервиса.Вставить("Адрес", Адрес);
|
|
ОписаниеСервиса.Вставить("Результат", Активность);
|
|
АктивностьСервисов.Сервисы.Добавить(ОписаниеСервиса);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьИнформациюОКорневомСертификатеСервиса(НаличиеКорневыхСертификатов, Адрес, Результат, Сертификаты)
|
|
|
|
ОписаниеСервиса = Новый Структура;
|
|
ОписаниеСервиса.Вставить("Адрес", Адрес);
|
|
ОписаниеСервиса.Вставить("Результат", Результат);
|
|
ОписаниеСервиса.Вставить("Сертификаты", Сертификаты);
|
|
НаличиеКорневыхСертификатов.Сервисы.Добавить(ОписаниеСервиса);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьДоступностьСервисов(РезультатыДиагностикиСоединения, ПроверяемыеСервисы)
|
|
|
|
ДоступностьСервисов = РезультатыДиагностикиСоединения.ДоступностьСервисов;
|
|
ОбщийРезультат = Истина;
|
|
Для каждого Сервис Из ПроверяемыеСервисы Цикл
|
|
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(Сервис.Ключ);
|
|
ОписаниеСервера = Новый Структура;
|
|
ОписаниеСервера.Вставить("Адрес", СтруктураURI.ИмяСервера);
|
|
Если АктивностьСервиса(РезультатыДиагностикиСоединения, СтруктураURI.ИмяСервера) = Ложь Тогда
|
|
// Если сервис неактивен, считаем, что он доступен.
|
|
ОписаниеСервера.Вставить("Результат", Истина);
|
|
Иначе
|
|
ОписаниеСервера.Вставить("Результат", ИнтернетРесурсДоступен(СтруктураURI.Схема + "://" + СтруктураURI.ИмяСервера));
|
|
КонецЕсли;
|
|
ОбщийРезультат = ОбщийРезультат И ОписаниеСервера.Результат <> Ложь;
|
|
РезультатыДиагностикиСоединения.ДоступностьСервисов.Сервисы.Добавить(ОписаниеСервера);
|
|
КонецЦикла;
|
|
ДоступностьСервисов.Результат = ОбщийРезультат;
|
|
ДоступностьСервисов.Рекомендация.Краткая = НСтр("ru = 'Обратитесь к администратору'");
|
|
ТекстПодробнойОшибки = НСтр("ru = 'На сервере ""%1"" нет доступа к сервисам.
|
|
|Возможно, заблокированы порты для доступа к серверам 1С и/или Такском.
|
|
|Их доступность необходимо проверить. Также рекомендуем проверить
|
|
|правильность настроек прокси-сервера, если он используется
|
|
|в сети предприятия.'");
|
|
ДоступностьСервисов.Рекомендация.Подробная = СтрШаблон(ТекстПодробнойОшибки, ИмяКомпьютера());
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьКорневыеСертификаты(НаличиеКорневыхСертификатов, ПроверяемыеСервисы, Контекст)
|
|
|
|
Если ОбщегоНазначения.КлиентПодключенЧерезВебСервер()
|
|
Или Контекст.ДанныеКорневыхСертификатов = Неопределено Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("", Ложь);
|
|
|
|
Если МенеджерКриптографии = Неопределено И Не ОбщегоНазначения.ЭтоWindowsСервер() Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
Если МенеджерКриптографии = Неопределено Тогда
|
|
ОписаниеМенеджераКриптографии = ДиагностикаЭДОКлиентСервер.ОписаниеМенеджераКриптографииWindows();
|
|
МенеджерКриптографии = Новый МенеджерКриптографии(ОписаниеМенеджераКриптографии.ИмяПрограммы,
|
|
ОписаниеМенеджераКриптографии.ПутьКПрограмме, ОписаниеМенеджераКриптографии.ТипПрограммы);
|
|
КонецЕсли;
|
|
|
|
Хранилище = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.КорневыеСертификаты);
|
|
ОбщийРезультат = Истина;
|
|
Для каждого ПроверяемыйСервис Из ПроверяемыеСервисы Цикл
|
|
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(ПроверяемыйСервис.Ключ);
|
|
СервисБезПути = СтруктураURI.Схема + "://" + СтруктураURI.ИмяСервера;
|
|
Сервис = Контекст.ДанныеКорневыхСертификатов["Services"].Получить(СервисБезПути);
|
|
Если Сервис <> Неопределено Тогда
|
|
Сертификаты = Новый Массив;
|
|
РезультатДляСервиса = Истина;
|
|
Для каждого Отпечаток Из Сервис["Thumbprints"] Цикл
|
|
ОписаниеСертификата = Новый Структура;
|
|
ОписаниеСертификата.Вставить("Результат", Хранилище.НайтиПоОтпечатку(ПолучитьДвоичныеДанныеИзHexСтроки(Отпечаток)) <> Неопределено);
|
|
РезультатДляСервиса = РезультатДляСервиса И ОписаниеСертификата.Результат;
|
|
Если Не ОписаниеСертификата.Результат Тогда
|
|
АдресСертификата = АдресСертификатаПоОтпечатку(Отпечаток);
|
|
РезультатЗагрузки = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(АдресСертификата);
|
|
Если РезультатЗагрузки.Статус Тогда
|
|
Сертификат = ПолучитьИзВременногоХранилища(РезультатЗагрузки.Путь);
|
|
УдалитьИзВременногоХранилища(РезультатЗагрузки.Путь);
|
|
Иначе
|
|
ЗаписатьОшибкуВЖурналРегистрации(ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение(),
|
|
РезультатЗагрузки.СообщениеОбОшибке);
|
|
Сертификат = Неопределено;
|
|
КонецЕсли;
|
|
Иначе
|
|
Сертификат = Неопределено;
|
|
КонецЕсли;
|
|
ОписаниеСертификата.Вставить("Сертификат", Сертификат);
|
|
Сертификаты.Добавить(ОписаниеСертификата);
|
|
КонецЦикла;
|
|
ДобавитьИнформациюОКорневомСертификатеСервиса(НаличиеКорневыхСертификатов,
|
|
ПредставлениеСервисаЭДО(СервисБезПути), РезультатДляСервиса, Сертификаты);
|
|
Иначе
|
|
// Считаем, что сертификаты сервисов, отсутствующих в результатах проверок всегда установлены.
|
|
РезультатДляСервиса = Истина;
|
|
ДобавитьИнформациюОКорневомСертификатеСервиса(НаличиеКорневыхСертификатов,
|
|
ПредставлениеСервисаЭДО(СервисБезПути), РезультатДляСервиса, Новый Массив);
|
|
КонецЕсли;
|
|
ОбщийРезультат = ОбщийРезультат И РезультатДляСервиса;
|
|
КонецЦикла;
|
|
НаличиеКорневыхСертификатов.Результат = ОбщийРезультат;
|
|
|
|
Если ДоступнаУстановкаСертификатов() Тогда
|
|
КраткаяРекомендация = НСтр("ru = 'Необходимо установить корневые сертификаты.'");
|
|
Иначе
|
|
КраткаяРекомендация = НСтр("ru = 'Обратитесь к администратору.'");
|
|
КонецЕсли;
|
|
|
|
ПодробнаяРекомендация = НСтр("ru = 'Необходимо установить корневые сертификаты.
|
|
|Инструкция по установке: http://1c-edo.ru/handbook/24/2516/'");
|
|
НаличиеКорневыхСертификатов.Рекомендация.Краткая = КраткаяРекомендация;
|
|
|
|
НаличиеКорневыхСертификатов.Рекомендация.Подробная = ПодробнаяРекомендация;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ИнтернетРесурсДоступен(АдресРесурса)
|
|
|
|
ОписаниеСоединения = ИнтернетСоединениеБЭД.ОписаниеHTTPСоединения(АдресРесурса, 7);
|
|
HTTPЗапрос = Новый HTTPЗапрос("");
|
|
КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики();
|
|
РезультатВыполненияЗапроса = ИнтернетСоединениеБЭД.ВызватьHTTPМетод(ОписаниеСоединения, HTTPЗапрос,
|
|
ИнтернетСоединениеБЭД.HTTPМетоды().HEAD, НСтр("ru = 'Диагностика ЭДО: проверка доступности интернет-ресурса'"),
|
|
КонтекстДиагностики);
|
|
Результат = РезультатВыполненияЗапроса.Успех;
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
Функция АктивностьСервиса(РезультатыДиагностикиСоединения, ИмяСервера)
|
|
|
|
Активность = Неопределено;
|
|
Для каждого Сервис Из РезультатыДиагностикиСоединения.АктивностьСервисов.Сервисы Цикл
|
|
Если ВРег(Сервис.Адрес) = ВРег(ИмяСервера) Тогда
|
|
Активность = Сервис.Результат;
|
|
Прервать;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Возврат Активность;
|
|
|
|
КонецФункции
|
|
|
|
Функция ОтчетДляАдминистратораИнтернетСоединение(РезультатВидаДиагностики, ПараметрыВыполнения)
|
|
|
|
ПредставленияПроверок = Новый Массив;
|
|
ДобавитьПроверку(ПредставленияПроверок, "НаличиеИнтернетСоединения", НСтр("ru = '* Проверка интернет-соединения'"));
|
|
|
|
ШаблонТекстСервис = Символы.Таб + НСтр("ru = '%1'");
|
|
|
|
ВложенныеПроверки = Новый Массив;
|
|
Для каждого Сервис Из РезультатВидаДиагностики.Результаты.АктивностьСервисов.Сервисы Цикл
|
|
ДобавитьПроверку(ВложенныеПроверки, "АктивностьСервисов", СтрШаблон(ШаблонТекстСервис, Сервис.Адрес),);
|
|
КонецЦикла;
|
|
ДобавитьПроверку(ПредставленияПроверок, "АктивностьСервисов",
|
|
НСтр("ru = '* Проверка активности сервиса'"),, ВложенныеПроверки, "Сервисы");
|
|
|
|
ВложенныеПроверки = Новый Массив;
|
|
Для каждого Сервис Из РезультатВидаДиагностики.Результаты.ДоступностьСервисов.Сервисы Цикл
|
|
ДобавитьПроверку(ВложенныеПроверки, "ДоступностьСервисов", СтрШаблон(ШаблонТекстСервис, Сервис.Адрес));
|
|
КонецЦикла;
|
|
ДобавитьПроверку(ПредставленияПроверок, "ДоступностьСервисов", НСтр("ru = '* Проверка доступа к сервису'"),, ВложенныеПроверки, "Сервисы");
|
|
|
|
Если РезультатВидаДиагностики.Результаты.НаличиеКорневыхСертификатов.Результат <> Неопределено Тогда
|
|
ВложенныеПроверки = Новый Массив;
|
|
Для каждого Сервис Из РезультатВидаДиагностики.Результаты.НаличиеКорневыхСертификатов.Сервисы Цикл
|
|
ДобавитьПроверку(ВложенныеПроверки, "НаличиеКорневыхСертификатов", СтрШаблон(ШаблонТекстСервис, Сервис.Адрес));
|
|
КонецЦикла;
|
|
ДобавитьПроверку(ПредставленияПроверок, "НаличиеКорневыхСертификатов",
|
|
НСтр("ru = '* Проверка наличия корневого сертификата
|
|
|в хранилище операционной системы'"),, ВложенныеПроверки, "Сервисы");
|
|
КонецЕсли;
|
|
|
|
Возврат ОтчетДляАдминистратора(РезультатВидаДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение(), ПараметрыВыполнения, ПредставленияПроверок);
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область ДиагностикаКриптографии
|
|
|
|
// Выполняется диагностика криптографии
|
|
//
|
|
// Параметры:
|
|
// РезультатДиагностики - См. НовыйРезультатДиагностики
|
|
// ПараметрыВыполненияДиагностики - см. ДиагностикаЭДОКлиентСервер.НовыеПараметрыВыполненияДиагностики
|
|
// Контекст - Структура:
|
|
// * ДанныеКорневыхСертификатов - Неопределено, См. ДанныеКорневыхСертификатов
|
|
Процедура ДиагностикаКриптографии(РезультатДиагностики, ПараметрыВыполненияДиагностики, Контекст)
|
|
|
|
ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография();
|
|
|
|
РезультатДиагностикиКриптографии = Неопределено;
|
|
Если Не ЕстьВидДиагностики(РезультатДиагностики, ВидДиагностики, РезультатДиагностикиКриптографии) Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("", Ложь);
|
|
Если ТипЗнч(МенеджерКриптографии) = Тип("МенеджерКриптографии") Тогда
|
|
ПараметрыВыполненияДиагностики.ЕстьМенеджерКриптографииНаСервере = Истина;
|
|
КонецЕсли;
|
|
|
|
ЗаполнитьРезультатыПолученияОтпечатков(ПараметрыВыполненияДиагностики);
|
|
|
|
ОпределитьНаличиеКорневогоСертификатаГУЦ(РезультатДиагностики, ПараметрыВыполненияДиагностики, Контекст);
|
|
УчетныеЗаписи = УчетныеЗаписиИзОтбора(ПараметрыВыполненияДиагностики.Отбор.УчетнаяЗапись);
|
|
ОпределитьНеполученныеСертификаты(РезультатДиагностики, УчетныеЗаписи);
|
|
ОпределитьНепривязанныеСертификатыИНаличиеСертификатов(РезультатДиагностики, ПараметрыВыполненияДиагностики);
|
|
ЗаполнитьПаролиСертификатов(РезультатДиагностики, ПараметрыВыполненияДиагностики);
|
|
ОпределитьДоступностьСлужбМетокВремени(РезультатДиагностики, ПараметрыВыполненияДиагностики);
|
|
|
|
ОбщийРезультат = Истина;
|
|
Для каждого РезультатВидаДиагностики Из РезультатДиагностикиКриптографии.Результаты Цикл
|
|
ОбщийРезультат = ОбщийРезультат И РезультатВидаДиагностики.Значение.Результат <> Ложь;
|
|
КонецЦикла;
|
|
РезультатДиагностикиКриптографии.Результат = ОбщийРезультат;
|
|
|
|
Если Не ЗначениеЗаполнено(ПараметрыВыполненияДиагностики.ИмяКомпьютераКлиент) Тогда
|
|
РезультатДиагностикиКриптографии.ОтчетДляАдминистратора =
|
|
ОтчетДляАдминистратораКриптография(РезультатДиагностикиКриптографии, ПараметрыВыполненияДиагностики);
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ОпределитьНаличиеКорневогоСертификатаГУЦ(РезультатДиагностики, ПараметрыВыполненияДиагностики, Контекст)
|
|
|
|
Если Контекст.ДанныеКорневыхСертификатов = Неопределено Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
РезультатКриптография = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография());
|
|
|
|
Для каждого АдресЗагрузки Из Контекст.ДанныеКорневыхСертификатов["MainCertificationCenterCertificates"] Цикл
|
|
|
|
РезультатЗагрузки = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(АдресЗагрузки);
|
|
Если РезультатЗагрузки.Статус Тогда
|
|
ТипКонтента = РезультатЗагрузки.Заголовки["Content-Type"];
|
|
Если ТипКонтента <> Неопределено И СтрНайти(НРег(ТипКонтента), "text/html") > 0 Тогда // Загрузилась страница с ошибкой
|
|
СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить корневой сертификат по адресу %1'");
|
|
ЗаписатьОшибкуВЖурналРегистрации(ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография(),
|
|
СтрШаблон(СообщениеОбОшибке, АдресЗагрузки));
|
|
Иначе
|
|
ДвоичныеДанныеСертификатГУЦ = ПолучитьИзВременногоХранилища(РезультатЗагрузки.Путь);
|
|
УдалитьИзВременногоХранилища(РезультатЗагрузки.Путь);
|
|
Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификатГУЦ);
|
|
Отпечаток = Сертификат.Отпечаток;
|
|
ОписаниеСертификата = Новый Структура;
|
|
ОписаниеСертификата.Вставить("Сертификат", ДвоичныеДанныеСертификатГУЦ);
|
|
ОписаниеСертификата.Вставить("Отпечаток", Отпечаток);
|
|
ОписаниеСертификата.Вставить("Результат", Неопределено);
|
|
РезультатКриптография.Результаты.НаличиеКорневогоСертификатаГУЦСервер.Сертификаты.Добавить(ОписаниеСертификата);
|
|
Если ПараметрыВыполненияДиагностики.ЕстьМенеджерКриптографииНаСервере И ПараметрыВыполненияДиагностики.ЕстьКриптографияНаСервере Тогда
|
|
МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("", Ложь);
|
|
ХранилищеКорневыхСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.КорневыеСертификаты);
|
|
СертификатГУЦ = ХранилищеКорневыхСертификатов.НайтиПоОтпечатку(Отпечаток);
|
|
ОписаниеСертификата.Вставить("Результат", ТипЗнч(СертификатГУЦ) = Тип("СертификатКриптографии"));
|
|
КонецЕсли;
|
|
КонецЕсли;
|
|
Иначе
|
|
ЗаписатьОшибкуВЖурналРегистрации(ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография(),
|
|
РезультатЗагрузки.СообщениеОбОшибке);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Если ПараметрыВыполненияДиагностики.ЕстьМенеджерКриптографииНаСервере И ПараметрыВыполненияДиагностики.ЕстьКриптографияНаСервере Тогда
|
|
ДиагностикаЭДОКлиентСервер.ЗаполнитьРезультатПроверкиКорневыхСертификатовГУЦ(РезультатКриптография.Результаты.НаличиеКорневогоСертификатаГУЦСервер);
|
|
КонецЕсли;
|
|
|
|
РезультатКриптография.Результаты.НаличиеКорневогоСертификатаГУЦСервер.Рекомендация.Подробная = НСтр("ru = 'Установите корневой сертификат ГУЦ
|
|
|Инструкция: http://1c-edo.ru/handbook/28/2655/'");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ОпределитьНепривязанныеСертификатыИНаличиеСертификатов(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
ЕстьКриптографияНаСервере = ПараметрыВыполненияДиагностики.ЕстьКриптографияНаСервере;
|
|
ЕстьКриптографияНаКлиенте = ПараметрыВыполненияДиагностики.ЕстьКриптографияНаКлиенте;
|
|
ЕстьМенеджерКриптографииНаСервере = ПараметрыВыполненияДиагностики.ЕстьМенеджерКриптографииНаСервере;
|
|
ЕстьМенеджерКриптографииНаКлиенте = ПараметрыВыполненияДиагностики.ЕстьМенеджерКриптографииНаКлиенте;
|
|
|
|
ТаблицаДоступныхСертификатов = ТаблицаДоступныхСертификатов(ПараметрыВыполненияДиагностики);
|
|
ПривязанныеКУчетнымЗаписямСертификаты = ТаблицаДоступныхСертификатов.Скопировать(Новый Структура("ПривязанКУчетнойЗаписи", Истина));
|
|
|
|
РезультатКриптография = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография());
|
|
|
|
ВсеОтпечатки = КриптографияБЭД.ПолучитьВсеОтпечаткиСертификатов(
|
|
ПараметрыВыполненияДиагностики.РезультатыПолученияОтпечатков);
|
|
|
|
Для каждого СтрокаТЗ Из ТаблицаДоступныхСертификатов Цикл
|
|
Если ВсеОтпечатки.Найти(СтрокаТЗ.Отпечаток) = Неопределено Тогда
|
|
РезультатКриптография.СертификатыОтсутствующиеВЛичномХранилище.Добавить(СтрокаТЗ.Ссылка);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Если ТаблицаДоступныхСертификатов.Количество() = 0 Тогда
|
|
РезультатКриптография.УчетныеЗаписиБезСертификатов = УчетныеЗаписиБезСертификатов(ВсеОтпечатки);
|
|
КонецЕсли;
|
|
|
|
УчетныеЗаписиБезДоступныхСертификатов = УчетныеЗаписиЭДО.УчетныеЗаписиБезДоступныхСертификатов(ВсеОтпечатки);
|
|
|
|
РезультатКриптография.ИспользоватьЭлектроннуюПодписьВМоделиСервиса =
|
|
КриптографияБЭД.ИспользоватьЭлектроннуюПодписьВМоделиСервиса();
|
|
|
|
НеоблачныеСертификаты = Новый Массив;
|
|
СвойстваСертификатов = КриптографияБЭД.ЭтоСертификатыОблачногоСервиса(
|
|
ТаблицаДоступныхСертификатов.ВыгрузитьКолонку("Ссылка"));
|
|
Для каждого КлючИЗначение Из СвойстваСертификатов Цикл
|
|
Если КлючИЗначение.Значение Тогда
|
|
РезультатКриптография.ОблачныеСертификаты.Добавить(КлючИЗначение.Ключ);
|
|
Иначе
|
|
НеоблачныеСертификаты.Добавить(КлючИЗначение.Ключ);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
РезультатКриптография.ЕстьНеоблачныеСертификаты = НеоблачныеСертификаты.Количество() > 0;
|
|
|
|
Если (ЕстьКриптографияНаСервере И ЕстьМенеджерКриптографииНаСервере)
|
|
Или (ЕстьКриптографияНаКлиенте И ЕстьМенеджерКриптографииНаКлиенте) Тогда
|
|
РезультатКриптография.Результаты.НаличиеСертификатов.Результат = ТаблицаДоступныхСертификатов.Количество() > 0;
|
|
Если РезультатКриптография.Результаты.НаличиеСертификатов.Результат = Ложь
|
|
И РезультатДиагностики.Результаты.Криптография.Результаты.НеполученныеСертификаты.Результат = Ложь Тогда
|
|
РезультатДиагностики.Результаты.Криптография.Результаты.НеполученныеСертификаты.Результат = Неопределено;
|
|
РезультатКриптография.Результаты.НаличиеСертификатов.ВариантСостояния = "ОжидаетсяВыпуск";
|
|
КонецЕсли;
|
|
КонецЕсли;
|
|
|
|
РезультатКриптография.Результаты.НаличиеСертификатов.Сертификаты = ТаблицаДоступныхСертификатов.ВыгрузитьКолонку("Ссылка");
|
|
ПривязанныеКУчетнымЗаписямСертификаты.Свернуть("Ссылка");
|
|
РезультатКриптография.ПривязанныеКУчетнымЗаписямСертификаты = ПривязанныеКУчетнымЗаписямСертификаты.ВыгрузитьКолонку("Ссылка");
|
|
|
|
НепривязанныеСертификаты = ТаблицаДоступныхСертификатов.НайтиСтроки(
|
|
Новый Структура("ТребуетсяПривязкаКУчетнойЗаписи", Истина));
|
|
|
|
Если УчетныеЗаписиБезДоступныхСертификатов.Количество() Тогда
|
|
Для каждого СтрокаТЗ Из НепривязанныеСертификаты Цикл
|
|
Если СтрокаТЗ.ОжидаетсяВыпускСертификата Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
РезультатКриптография.Результаты.НепривязанныеСертификаты.Сертификаты.Добавить(СтрокаТЗ.Ссылка);
|
|
КонецЦикла;
|
|
Если ТаблицаДоступныхСертификатов.Количество() > 0 Тогда
|
|
РезультатКриптография.Результаты.НепривязанныеСертификаты.Результат = НепривязанныеСертификаты.Количество() = 0;
|
|
КонецЕсли;
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ЗаполнитьПаролиСертификатов(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
ВсеОтпечатки = КриптографияБЭД.ПолучитьВсеОтпечаткиСертификатов(
|
|
ПараметрыВыполненияДиагностики.РезультатыПолученияОтпечатков);
|
|
|
|
РезультатКриптография = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография());
|
|
|
|
Сертификаты = КриптографияБЭД.НайтиСертификаты(ВсеОтпечатки);
|
|
|
|
УстановитьПривилегированныйРежим(Истина);
|
|
ПаролиСертификатов = КриптографияБЭД.ПаролиСертификатов(Сертификаты);
|
|
УстановитьПривилегированныйРежим(Ложь);
|
|
|
|
Для каждого КлючИЗначение Из ПаролиСертификатов Цикл
|
|
Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда
|
|
РезультатКриптография.ПаролиСертификатов.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
// Определяет заполнены ли адреса служб меток времени и доступны ли они с клиентского компьютера
|
|
//
|
|
// Параметры:
|
|
// РезультатДиагностики - См. НовыйРезультатДиагностики
|
|
// ПараметрыВыполненияДиагностики - см. ДиагностикаЭДОКлиентСервер.НовыеПараметрыВыполненияДиагностики
|
|
Процедура ОпределитьДоступностьСлужбМетокВремени(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
Если Не ПараметрыВыполненияДиагностики.ПараметрыФормы.Свойство("Ошибки")
|
|
Или ПараметрыВыполненияДиагностики.ПараметрыФормы.Ошибки.Количество() = 0 Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
ЕстьТипПодписиСМеткойВремени = Ложь;
|
|
МеткаДоверенногоВремениCAdEST = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST");
|
|
Для Каждого Ошибка Из ПараметрыВыполненияДиагностики.ПараметрыФормы.Ошибки Цикл
|
|
Если ТипЗнч(Ошибка.ДополнительныеДанные) = Тип("Структура")
|
|
И Ошибка.ДополнительныеДанные.Свойство("ТипПодписи")
|
|
И Ошибка.ДополнительныеДанные.ТипПодписи = МеткаДоверенногоВремениCAdEST Тогда
|
|
ЕстьТипПодписиСМеткойВремени = Истина;
|
|
Прервать;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Если Не ЕстьТипПодписиСМеткойВремени Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
РезультатКриптография = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография());
|
|
|
|
АдресаСерверовМетокВремени = Константы.АдресаСерверовМетокВремени.Получить();
|
|
Если Не ПустаяСтрока(АдресаСерверовМетокВремени) Тогда
|
|
СлужбыАдресовМетокВремени = СтрРазделить(АдресаСерверовМетокВремени, ", ;" + Символы.ПС);
|
|
Иначе
|
|
СлужбыАдресовМетокВремени = Новый Массив;
|
|
КонецЕсли;
|
|
|
|
Граница = СлужбыАдресовМетокВремени.ВГраница();
|
|
Для Счетчик = 0 По Граница Цикл
|
|
ТекущийИндекс = Граница - Счетчик;
|
|
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(СлужбыАдресовМетокВремени[ТекущийИндекс]);
|
|
Если СтруктураURI.ИмяСервера = "" Тогда
|
|
СлужбыАдресовМетокВремени.Удалить(ТекущийИндекс);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
РезультатКриптография.Результаты.АдресаСлужбМетокВремени.Результат = СлужбыАдресовМетокВремени.Количество() > 0;
|
|
|
|
Для Каждого Строка Из СлужбыАдресовМетокВремени Цикл
|
|
Результат = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Строка);
|
|
Если Результат.КодСостояния = 200 Тогда
|
|
РезультатКриптография.Результаты.ДоступностьСлужбМетокВремени.Сервисы.Добавить(Строка);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
РезультатКриптография.Результаты.ДоступностьСлужбМетокВремени.Результат =
|
|
РезультатКриптография.Результаты.ДоступностьСлужбМетокВремени.Сервисы.Количество() > 0;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ЗаполнитьРезультатыПолученияОтпечатков(ПараметрыВыполненияДиагностики)
|
|
|
|
ЕстьКриптографияНаСервере = ПараметрыВыполненияДиагностики.ЕстьКриптографияНаСервере;
|
|
ЕстьМенеджерКриптографииНаСервере = ПараметрыВыполненияДиагностики.ЕстьМенеджерКриптографииНаСервере;
|
|
|
|
Если ЕстьКриптографияНаСервере И ЕстьМенеджерКриптографииНаСервере Тогда
|
|
КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики();
|
|
ПараметрыВыполненияДиагностики.РезультатыПолученияОтпечатков = КриптографияБЭД.ПолучитьОтпечаткиСертификатов(
|
|
НСтр("ru = 'Выполнение диагностики ЭДО'"), КонтекстДиагностики,
|
|
ПараметрыВыполненияДиагностики.РезультатыПолученияОтпечатков);
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ЗаполнитьДоступныеУчетныеЗаписи(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
ОтборУчетнаяЗапись = ПараметрыВыполненияДиагностики.Отбор.УчетнаяЗапись;
|
|
Если ЗначениеЗаполнено(ОтборУчетнаяЗапись) Тогда
|
|
РезультатДиагностики.ДоступныеУчетныеЗаписи = УчетныеЗаписиИзОтбора(ОтборУчетнаяЗапись);
|
|
Иначе
|
|
ОтборСертификатов = КриптографияБЭД.НовыйОтборСертификатов();
|
|
ОтборСертификатов.ТолькоДействительные = Ложь;
|
|
ОтборСертификатов.ТолькоНепомеченныеНаУдаление = Ложь;
|
|
ТаблицаДоступныхСертификатов = ТаблицаДоступныхСертификатов(ПараметрыВыполненияДиагностики, ОтборСертификатов);
|
|
|
|
Запросы = Новый Массив;
|
|
|
|
Отбор = СинхронизацияЭДО.НовыйОтборСертификатовУчетныхЗаписей();
|
|
Отбор.Сертификат = "&Сертификаты";
|
|
ЗапросСертификатовУчетныхЗаписей = СинхронизацияЭДО.ЗапросСертификатовУчетныхЗаписей(
|
|
"СертификатыУчетныхЗаписей", Отбор);
|
|
Запросы.Добавить(ЗапросСертификатовУчетныхЗаписей);
|
|
|
|
ЗапросУчетныхЗаписей = СинхронизацияЭДО.ЗапросУчетныхЗаписей("УчетныеЗаписи");
|
|
Запросы.Добавить(ЗапросУчетныхЗаписей);
|
|
|
|
Запрос = Новый Запрос;
|
|
Запрос.Текст =
|
|
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|
|
| УчетныеЗаписи.ИдентификаторЭДО КАК ИдентификаторЭДО
|
|
|ИЗ
|
|
| СертификатыУчетныхЗаписей КАК СертификатыУчетныхЗаписей
|
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ УчетныеЗаписи КАК УчетныеЗаписи
|
|
| ПО СертификатыУчетныхЗаписей.ИдентификаторЭДО = УчетныеЗаписи.ИдентификаторЭДО";
|
|
|
|
ИтоговыйЗапрос = ОбщегоНазначенияБЭД.СоединитьЗапросы(Запрос, Запросы);
|
|
ИтоговыйЗапрос.УстановитьПараметр("Сертификаты", ТаблицаДоступныхСертификатов.ВыгрузитьКолонку("Ссылка"));
|
|
|
|
РезультатЗапроса = ИтоговыйЗапрос.Выполнить();
|
|
|
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
|
|
|
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
|
|
|
РезультатДиагностики.ДоступныеУчетныеЗаписи.Добавить(ВыборкаДетальныеЗаписи.ИдентификаторЭДО);
|
|
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция УчетныеЗаписиБезСертификатов(Отпечатки)
|
|
|
|
ПользователиДоступныхСертификатов = Новый Массив;
|
|
ПользователиДоступныхСертификатов.Добавить(Пользователи.АвторизованныйПользователь());
|
|
ПользователиДоступныхСертификатов.Добавить(Справочники.Пользователи.ПустаяСсылка());
|
|
ПользователиДоступныхСертификатов.Добавить(Пользователи.СсылкаНеуказанногоПользователя());
|
|
|
|
Запрос = Новый Запрос;
|
|
Запрос.Текст =
|
|
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|
|
| УчетныеЗаписиЭДО.ИдентификаторЭДО КАК ИдентификаторЭДО,
|
|
| СертификатыКлючейЭлектроннойПодписиИШифрования.Пользователь КАК Пользователь,
|
|
| СертификатыКлючейЭлектроннойПодписиИШифрования.ПометкаУдаления КАК ПометкаУдаления
|
|
|ИЗ
|
|
| РегистрСведений.УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СертификатыУчетныхЗаписейЭДО КАК СертификатыУчетныхЗаписейЭДО
|
|
| ПО УчетныеЗаписиЭДО.ИдентификаторЭДО = СертификатыУчетныхЗаписейЭДО.ИдентификаторЭДО
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыКлючейЭлектроннойПодписиИШифрования
|
|
| ПО (СертификатыУчетныхЗаписейЭДО.Сертификат = СертификатыКлючейЭлектроннойПодписиИШифрования.Ссылка)
|
|
|ГДЕ
|
|
| СертификатыКлючейЭлектроннойПодписиИШифрования.Отпечаток В(&Отпечатки)
|
|
|
|
|
|ОБЪЕДИНИТЬ ВСЕ
|
|
|
|
|
|ВЫБРАТЬ
|
|
| УчетныеЗаписиЭДО.ИдентификаторЭДО,
|
|
| НЕОПРЕДЕЛЕНО,
|
|
| ИСТИНА
|
|
|ИЗ
|
|
| РегистрСведений.УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СертификатыУчетныхЗаписейЭДО КАК СертификатыУчетныхЗаписейЭДО
|
|
| ПО УчетныеЗаписиЭДО.ИдентификаторЭДО = СертификатыУчетныхЗаписейЭДО.ИдентификаторЭДО
|
|
|ГДЕ
|
|
| СертификатыУчетныхЗаписейЭДО.ИдентификаторЭДО ЕСТЬ NULL
|
|
|ИТОГИ ПО
|
|
| ИдентификаторЭДО";
|
|
|
|
Запрос.УстановитьПараметр("Отпечатки", Отпечатки);
|
|
|
|
РезультатЗапроса = Запрос.Выполнить();
|
|
|
|
ВыборкаИдентификаторЭДО = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
|
|
|
|
УчетныеЗаписиБезСертификатов = Новый Массив;
|
|
Пока ВыборкаИдентификаторЭДО.Следующий() Цикл
|
|
|
|
ВыборкаДетальныеЗаписи = ВыборкаИдентификаторЭДО.Выбрать();
|
|
ЕстьСертификат = Ложь;
|
|
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
|
Если ПользователиДоступныхСертификатов.Найти(ВыборкаДетальныеЗаписи.Пользователь) <> Неопределено
|
|
И Не ВыборкаДетальныеЗаписи.ПометкаУдаления Тогда
|
|
ЕстьСертификат = Истина;
|
|
Прервать;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Если Не ЕстьСертификат Тогда
|
|
УчетныеЗаписиБезСертификатов.Добавить(ВыборкаИдентификаторЭДО.ИдентификаторЭДО);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Возврат УчетныеЗаписиБезСертификатов;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ОпределитьНеполученныеСертификаты(РезультатДиагностики, УчетныеЗаписи)
|
|
|
|
Запросы = Новый Массив;
|
|
ЗапросНеполученныхСертификатов = КриптографияБЭД.ЗапросНеполученныхСертификатов("Сертификаты");
|
|
Запросы.Добавить(ЗапросНеполученныхСертификатов);
|
|
|
|
ЗапросУчетныхЗаписей = СинхронизацияЭДО.ЗапросУчетныхЗаписей("УчетныеЗаписиЭДО");
|
|
Запросы.Добавить(ЗапросУчетныхЗаписей);
|
|
|
|
Запрос = Новый Запрос;
|
|
Запрос.Текст =
|
|
"ВЫБРАТЬ
|
|
| Сертификаты.Ссылка КАК Ссылка
|
|
|ИЗ
|
|
| Сертификаты КАК Сертификаты
|
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО
|
|
| ПО Сертификаты.Организация = УчетныеЗаписиЭДО.Организация
|
|
| И (НЕ &ЕстьОтборПоИдентификаторам
|
|
| ИЛИ УчетныеЗаписиЭДО.ИдентификаторЭДО В (&ИдентификаторыЭДО))";
|
|
|
|
ИтоговыйЗапрос = ОбщегоНазначенияБЭД.СоединитьЗапросы(Запрос, Запросы);
|
|
|
|
ИтоговыйЗапрос.УстановитьПараметр("ИдентификаторыЭДО", УчетныеЗаписи);
|
|
ИтоговыйЗапрос.УстановитьПараметр("ЕстьОтборПоИдентификаторам", УчетныеЗаписи.Количество() > 0);
|
|
РезультатЗапроса = ИтоговыйЗапрос.Выполнить();
|
|
|
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
|
|
|
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
|
РезультатДиагностики.Результаты.Криптография.Результаты.НеполученныеСертификаты.Сертификаты.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
|
|
КонецЦикла;
|
|
|
|
РезультатДиагностики.Результаты.Криптография.Результаты.НеполученныеСертификаты.Результат =
|
|
РезультатДиагностики.Результаты.Криптография.Результаты.НеполученныеСертификаты.Сертификаты.Количество() = 0;
|
|
|
|
КонецПроцедуры
|
|
|
|
#Область ОтчетДляАдминистратораКриптография
|
|
|
|
// Параметры:
|
|
// РезультатДиагностикиКриптографии - См. ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики
|
|
// ПараметрыВыполнения - Структура:
|
|
// * ИнформационнаяБазаФайловая - Строка
|
|
// * ИмяКомпьютераКлиент - Строка
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура:
|
|
// * Заголовок - Строка
|
|
// * Текст - Строка
|
|
Функция ОтчетДляАдминистратораКриптография(РезультатДиагностикиКриптографии, ПараметрыВыполнения) Экспорт
|
|
|
|
ПредставленияПроверок = Новый Массив;
|
|
ВложенныеПроверки = Новый Массив;
|
|
|
|
МассивРезультатовПроверок = Новый Массив;
|
|
Для каждого КлючИЗначение Из РезультатДиагностикиКриптографии.Результаты.ПроверкиСертификатов.Сертификаты Цикл
|
|
МассивРезультатовПроверок.Добавить(КлючИЗначение.Значение);
|
|
КонецЦикла;
|
|
|
|
Для каждого КлючИЗначение Из РезультатДиагностикиКриптографии.Результаты.ПроверкиСертификатов.Сертификаты Цикл
|
|
|
|
ДобавитьПроверкиСертификата(ВложенныеПроверки, КлючИЗначение.Значение.ПроверкиНаКлиенте,
|
|
КлючИЗначение.Ключ, Истина);
|
|
ДобавитьПроверкиСертификата(ВложенныеПроверки, КлючИЗначение.Значение.ПроверкиНаСервере,
|
|
КлючИЗначение.Ключ, Ложь);
|
|
|
|
КонецЦикла;
|
|
|
|
ДобавитьПроверку(ПредставленияПроверок, "НаличиеПрограммыКриптографииКлиент",
|
|
НСтр("ru = '* Проверка программы криптографии (клиент)'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "НаличиеПрограммыКриптографииСервер",
|
|
НСтр("ru = '* Проверка программы криптографии (сервер)'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "НаличиеКорневогоСертификатаГУЦКлиент",
|
|
НСтр("ru = '* Проверка наличия корневого сертификата ГУЦ
|
|
|в хранилище операционной системы (клиент)'"));
|
|
ДобавитьПроверку(ПредставленияПроверок,"НаличиеКорневогоСертификатаГУЦСервер",
|
|
НСтр("ru = '* Проверка наличия корневого сертификата ГУЦ
|
|
|в хранилище операционной системы (сервер)'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "НаличиеСертификатов",
|
|
НСтр("ru = '* Проверка наличия сертификатов'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "НеполученныеСертификаты",
|
|
НСтр("ru = '* Проверка наличия неполученных сертификатов'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "НепривязанныеСертификаты",
|
|
НСтр("ru = '* Проверка наличия сертификатов, непривязанных к учетным записям'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "ПроверкиСертификатов",
|
|
НСтр("ru = '* Проверка наличия ошибок сертификатов'"),, ВложенныеПроверки, "Сертификаты");
|
|
ДобавитьПроверку(ПредставленияПроверок, "АдресаСлужбМетокВремени",
|
|
НСтр("ru = '* Проверка заполнения адресов меток времени'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "ДоступностьСлужбМетокВремени",
|
|
НСтр("ru = '* Проверка доступности серверов меток времени'"));
|
|
|
|
Возврат ОтчетДляАдминистратора(РезультатДиагностикиКриптографии,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография(),
|
|
ПараметрыВыполнения, ПредставленияПроверок);
|
|
|
|
КонецФункции
|
|
|
|
Процедура ДобавитьПроверкиСертификата(ВложенныеПроверки, КоллекцияПроверок, Сертификат, КлиентскиеПроверки)
|
|
|
|
Если КоллекцияПроверок <> Неопределено Тогда
|
|
Если КлиентскиеПроверки Тогда
|
|
ШаблонПервойПроверки = НСтр("ru = '%1 * %2
|
|
|%3 На клиенте'");
|
|
Иначе
|
|
ШаблонПервойПроверки = НСтр("ru = '%1 * %2
|
|
|%3 На сервере'");
|
|
КонецЕсли;
|
|
ПредставлениеПервойПроверки = СтрШаблон(ШаблонПервойПроверки, Символы.ПС + Символы.Таб, Сертификат, Символы.Таб);
|
|
Сч = 0;
|
|
|
|
Для каждого КлючИЗначениеПроверка Из КоллекцияПроверок Цикл
|
|
Если СтрЗаканчиваетсяНа(КлючИЗначениеПроверка.Ключ, "Ошибка") Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
ПредставлениеПроверки = ПредставлениеПроверкиСертификата(КлючИЗначениеПроверка.Ключ);
|
|
Если Сч = 0 Тогда
|
|
ПредставлениеПроверки = ПредставлениеПервойПроверки + Символы.ПС + ПредставлениеПроверки
|
|
КонецЕсли;
|
|
Рекомендация = НоваяРекомендация();
|
|
Рекомендация.Отступ = ОтступПроверокСертификата() + " ";
|
|
ОшибкаПоКлассификатору = ЭлектроннаяПодпись.ОшибкаПоКлассификатору(
|
|
КоллекцияПроверок[КлючИЗначениеПроверка.Ключ + "Ошибка"]);
|
|
Если ОшибкаПоКлассификатору <> Неопределено Тогда
|
|
Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.Решение) Тогда
|
|
Рекомендация.Подробная = ОшибкаПоКлассификатору.Решение;
|
|
КонецЕсли;
|
|
КонецЕсли;
|
|
РезультатПроверки = Новый Структура;
|
|
РезультатПроверки.Вставить("Результат", КлючИЗначениеПроверка.Значение);
|
|
РезультатПроверки.Вставить("Рекомендация", Рекомендация);
|
|
ДобавитьПроверку(ВложенныеПроверки, "ОшибкиСертификатов", ПредставлениеПроверки,
|
|
РезультатПроверки);
|
|
Сч = Сч + 1;
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ПредставлениеПроверкиСертификата(ЗначениеПроверки)
|
|
|
|
ПредставленияПроверок = Новый Соответствие;
|
|
ПредставленияПроверок.Вставить("НаличиеСертификата", НСтр("ru = 'Проверка наличия сертификата в личном списке'"));
|
|
ПредставленияПроверок.Вставить("ДанныеСертификата", НСтр("ru = 'Проверка корректности данных сертификата'"));
|
|
ПредставленияПроверок.Вставить("НаличиеПрограммы", НСтр("ru = 'Проверка наличия программы для подписания и расшифровки'"));
|
|
ПредставленияПроверок.Вставить("Подписание", НСтр("ru = 'Проверка подписания данных'"));
|
|
ПредставленияПроверок.Вставить("ПроверкаПодписи", НСтр("ru = 'Проверка созданной подписи'"));
|
|
ПредставленияПроверок.Вставить("Шифрование", НСтр("ru = 'Проверка шифрования данных'"));
|
|
ПредставленияПроверок.Вставить("Расшифровка", НСтр("ru = 'Проверка расшифровки данных'"));
|
|
ПредставленияПроверок.Вставить("ЗаконныйСертификат", НСтр("ru = 'Проверка наличия в описании субъекта сертификата поля ""SN""'"));
|
|
|
|
ПредставлениеПроверки = ПредставленияПроверок[ЗначениеПроверки];
|
|
Если Не ЗначениеЗаполнено(ПредставлениеПроверки) Тогда
|
|
ПредставлениеПроверки = ЗначениеПроверки;
|
|
КонецЕсли;
|
|
|
|
Возврат ОтступПроверокСертификата() + ПредставлениеПроверки;
|
|
|
|
КонецФункции
|
|
|
|
Функция ОтступПроверокСертификата()
|
|
|
|
Возврат Символы.Таб + Символы.Таб;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#КонецОбласти
|
|
|
|
#Область ДиагностикаИнтернетПоддержки
|
|
|
|
Процедура ДиагностикаИнтернетПоддержки(РезультатДиагностики, ПараметрыВыполненияДиагностики, Контекст)
|
|
|
|
ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетПоддержка();
|
|
|
|
РезультатДиагностикиИнтернетПоддержки = Неопределено;
|
|
Если Не ЕстьВидДиагностики(РезультатДиагностики, ВидДиагностики, РезультатДиагностикиИнтернетПоддержки) Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
ПроверитьВнедрениеБИП(РезультатДиагностики, ПараметрыВыполненияДиагностики);
|
|
ПроверитьПравильностьЛогинаПароля(РезультатДиагностики, ПараметрыВыполненияДиагностики);
|
|
|
|
ОбщийРезультат = Истина;
|
|
Для каждого РезультатВидаДиагностики Из РезультатДиагностикиИнтернетПоддержки.Результаты Цикл
|
|
ОбщийРезультат = ОбщийРезультат И РезультатВидаДиагностики.Значение.Результат;
|
|
КонецЦикла;
|
|
РезультатДиагностикиИнтернетПоддержки.Результат = ОбщийРезультат;
|
|
РезультатДиагностикиИнтернетПоддержки.ОтчетДляАдминистратора =
|
|
ОтчетДляАдминистратораИнтернетПоддержка(РезультатДиагностикиИнтернетПоддержки, ПараметрыВыполненияДиагностики);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьВнедрениеБИП(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
РезультатИнтернетПоддержка = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетПоддержка());
|
|
|
|
РезультатИнтернетПоддержка.Результаты.ВнедрениеБИП.Результат = ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей");
|
|
РезультатИнтернетПоддержка.Результаты.ВнедрениеБИП.Рекомендация.Подробная = НСтр("ru = 'Внедрите в конфигурацию библиотеку интернет-поддержки.
|
|
|Инструкция: https://its.1c.ru/db/uisldoc'");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьПравильностьЛогинаПароля(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
РезультатИнтернетПоддержка = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетПоддержка());
|
|
|
|
УстановитьПривилегированныйРежим(Истина);
|
|
Результат = ИнтернетПоддержкаПользователей.ТикетАутентификацииНаПорталеПоддержки("1C-EDO");
|
|
УстановитьПривилегированныйРежим(Ложь);
|
|
|
|
Если ЗначениеЗаполнено(Результат.КодОшибки) И Результат.КодОшибки = "НеверныйЛогинИлиПароль" Тогда
|
|
РезультатИнтернетПоддержка.Результаты.КорректностьДанныхИнтернетПоддержки.Результат = Ложь;
|
|
РезультатИнтернетПоддержка.Результаты.КорректностьДанныхИнтернетПоддержки.Рекомендация.Подробная = НСтр("ru = 'Введите корректные данные интернет-поддержки.
|
|
|Инструкция: https://its.1c.ru/db/uisldoc#content:172:hdoc:issogl2_подключение_интернет-поддержки'");
|
|
Иначе
|
|
РезультатИнтернетПоддержка.Результаты.КорректностьДанныхИнтернетПоддержки.Результат = Истина;
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ОтчетДляАдминистратораИнтернетПоддержка(РезультатВидаДиагностики, ПараметрыВыполнения)
|
|
|
|
ПредставленияПроверок = Новый Массив;
|
|
ДобавитьПроверку(ПредставленияПроверок, "ВнедрениеБИП", НСтр("ru = '* Проверка наличия библиотеки интернет-поддержки в конфигурации'"));
|
|
ДобавитьПроверку(ПредставленияПроверок, "КорректностьДанныхИнтернетПоддержки",
|
|
НСтр("ru = '* Проверка правильности логина/пароля интернет-поддержки'"));
|
|
|
|
Возврат ОтчетДляАдминистратора(РезультатВидаДиагностики, ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетПоддержка(),
|
|
ПараметрыВыполнения, ПредставленияПроверок);
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область ДиагностикаРаботыСФайлами
|
|
|
|
Процедура ДиагностикаРаботыСФайлами(РезультатДиагностики, ПараметрыВыполненияДиагностики, Контекст)
|
|
|
|
ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиРаботаСФайлами();
|
|
|
|
РезультатДиагностикиРаботыСФайлами = Неопределено;
|
|
Если Не ЕстьВидДиагностики(РезультатДиагностики, ВидДиагностики, РезультатДиагностикиРаботыСФайлами) Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
ПроверитьДлинуПутиКаталогаВременныхФайлов(РезультатДиагностики, ПараметрыВыполненияДиагностики);
|
|
|
|
ОбщийРезультат = Истина;
|
|
Для каждого РезультатВидаДиагностики Из РезультатДиагностикиРаботыСФайлами.Результаты Цикл
|
|
ОбщийРезультат = ОбщийРезультат И РезультатВидаДиагностики.Значение.Результат;
|
|
КонецЦикла;
|
|
РезультатДиагностикиРаботыСФайлами.Результат = ОбщийРезультат;
|
|
РезультатДиагностикиРаботыСФайлами.ОтчетДляАдминистратора =
|
|
ОтчетДляАдминистратораРаботаСФайлами(РезультатДиагностикиРаботыСФайлами, ПараметрыВыполненияДиагностики);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьДлинуПутиКаталогаВременныхФайлов(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
РезультатРаботаСФайлами = ДиагностикаЭДОКлиентСервер.РезультатВидаДиагностики(РезультатДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиРаботаСФайлами());
|
|
|
|
МаксимальнаяДопустимаяДлинаПути = 256;
|
|
ДлинаПутиКФайлу = РезультатРаботаСФайлами.Результаты.ДлинаПутиКФайлу;
|
|
Если ПараметрыВыполненияДиагностики.ДиагностикаРаботыСФайламиВРежимеОтображенияРезультата Тогда
|
|
ДлинаПутиКФайлу.Результат = Ложь;
|
|
Иначе
|
|
// На примере файла:
|
|
// ON_KORSCHFDOPPOKMARK_2AEA1A8BC27-E950-4E6A-AA04-D54BF4DFCBCA_2AE4DF1667F-1E85-4E3D-8D2F-C10B9A232503_20190801_e2296ada-b46c-11e9-87e2-b06ebf2faeb9-1.p7s
|
|
МаксимальнаяДлинаИмениФайла = 152;
|
|
|
|
Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда
|
|
// Допустимая длина пути в Linux составляет 4096 байт с использованием кодировки utf-8, т.к. один символ
|
|
// в данной кодировке может занимать от 1 до 4 байт, то в самом пессимистичном варианте это 1024 символа.
|
|
МаксимальнаяДопустимаяДлинаПути = 1024;
|
|
КонецЕсли;
|
|
|
|
ДлинаПутиКФайлу.Результат =
|
|
СтрДлина(КаталогВременныхФайлов()) < МаксимальнаяДопустимаяДлинаПути - МаксимальнаяДлинаИмениФайла;
|
|
|
|
КонецЕсли;
|
|
|
|
ДлинаПутиКФайлу.Рекомендация.Подробная = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
|
НСтр("ru = 'Путь к файлам в каталоге временных файлов должен быть короче %1 символов.
|
|
|В настройках операционной системы, в переменных среды, измените путь
|
|
|к временным файлам на более короткий.'"),
|
|
Формат(МаксимальнаяДопустимаяДлинаПути, "ЧГ=0"));
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ОтчетДляАдминистратораРаботаСФайлами(РезультатВидаДиагностики, ПараметрыВыполнения)
|
|
|
|
ПредставленияПроверок = Новый Массив;
|
|
ДобавитьПроверку(ПредставленияПроверок, "ДлинаПутиКФайлу", НСтр("ru = '* Проверка длины пути к файлу в каталоге временных файлов'"));
|
|
|
|
Возврат ОтчетДляАдминистратора(РезультатВидаДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиРаботаСФайлами(), ПараметрыВыполнения, ПредставленияПроверок);
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область ТестАутентификации
|
|
|
|
Функция ОтчетДляАдминистратораТестАутентификации(РезультатВидаДиагностики, ПараметрыВыполнения) Экспорт
|
|
|
|
ПредставленияПроверок = Новый Массив;
|
|
|
|
Если РезультатВидаДиагностики.Результаты.ТестАутентификации.Результат Тогда
|
|
ДобавитьПроверку(ПредставленияПроверок, "ТестАутентификации", НСтр("ru = '* Тест аутентификации'"));
|
|
Иначе
|
|
Для каждого ОписаниеУчетнойЗаписи Из РезультатВидаДиагностики.Результаты.ТестАутентификации.УчетныеЗаписи Цикл
|
|
ШаблонПроверки = НСтр("ru = '* Тест аутентификации %1'");
|
|
ПредставлениеПроверки = СтрШаблон(ШаблонПроверки, ОписаниеУчетнойЗаписи.УчетнаяЗапись);
|
|
ДобавитьПроверку(ПредставленияПроверок, "ТестАутентификации", ПредставлениеПроверки);
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
|
|
Возврат ОтчетДляАдминистратора(РезультатВидаДиагностики,
|
|
ДиагностикаЭДОКлиентСервер.ВидДиагностикиТестАутентификации(), ПараметрыВыполнения, ПредставленияПроверок);
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область РезультатДиагностики
|
|
|
|
// Возвращает результат диагностики электронного документооборота.
|
|
//
|
|
// Параметры:
|
|
// ВидыДиагностики - Массив из Строка - виды диагностики, см. область ВидыДиагностики общего
|
|
// модуля ДиагностикаЭДОКлиентСервер.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево - истина, если все виды диагностики выполнены успешно.
|
|
// * Результаты - Структура - результаты диагностики:
|
|
// ** Ключ - Строка - вид диагностики.
|
|
// ** Значение - Структура - результат вида диагностики, см. НовыйРезультатВидаДиагностики.
|
|
//
|
|
Функция НовыйРезультатДиагностики(ВидыДиагностики)
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Ложь);
|
|
|
|
Результаты = Новый Структура;
|
|
|
|
Для каждого ВидДиагностики Из ПоддерживаемыеВидыДиагностики() Цикл
|
|
Если ДиагностикаЭДОКлиентСервер.ЕстьВидДиагностики(ВидыДиагностики, ВидДиагностики) Тогда
|
|
Результаты.Вставить(ВидДиагностики, НовыйРезультатВидаДиагностики(ВидДиагностики));
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Результат.Вставить("Результаты", Результаты);
|
|
Результат.Вставить("ДоступныеУчетныеЗаписи", Новый Массив);
|
|
Результат.Вставить("ДанныеУчетныхЗаписей", Новый Соответствие);
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает результат вида диагностики электронного документооборота.
|
|
//
|
|
// Параметры:
|
|
// ВидДиагностики - Строка - виды диагностики, см. область ВидыДиагностики общего
|
|
// модуля ДиагностикаЭДОКлиентСервер.
|
|
//
|
|
// Возвращаемое значение:
|
|
// - Структура - см. НовыйРезультатДиагностикиСоединения.
|
|
// - Структура - см. НовыйРезультатДиагностикиКриптографии.
|
|
// - Структура - см. НовыйРезультатДиагностикиИнтернетПоддержки.
|
|
// - Структура - см. НовыйРезультатДиагностикиРаботыСФайлами.
|
|
//
|
|
Функция НовыйРезультатВидаДиагностики(ВидДиагностики)
|
|
|
|
Если ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение() Тогда
|
|
Возврат НовыйРезультатДиагностикиСоединения();
|
|
ИначеЕсли ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография() Тогда
|
|
Возврат НовыйРезультатДиагностикиКриптографии();
|
|
ИначеЕсли ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетПоддержка() Тогда
|
|
Возврат НовыйРезультатДиагностикиИнтернетПоддержки();
|
|
ИначеЕсли ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиРаботаСФайлами() Тогда
|
|
Возврат НовыйРезультатДиагностикиРаботыСФайлами();
|
|
ИначеЕсли ВидДиагностики = ДиагностикаЭДОКлиентСервер.ВидДиагностикиТестАутентификации() Тогда
|
|
Возврат НовыйРезультатДиагностикиТестАутентификации();
|
|
Иначе
|
|
Возврат Неопределено;
|
|
КонецЕсли;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает результат диагностики интернет-соединения.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - со свойствами:
|
|
// * Результат - Булево - истина, если диагностика интернет-соединения выполнена успешно.
|
|
// * Результаты - Структура - где:
|
|
// ** Ключ - Строка - вид выполненной проверки.
|
|
// ** Значение - см. НовыйРезультатНаличиеИнтернетСоединения.
|
|
// - см. НовыйРезультатДиагностикиСервисов.
|
|
// * ОтчетДляАдминистратора - см. НовыйОтчетДляАдминистратора.
|
|
//
|
|
Функция НовыйРезультатДиагностикиСоединения()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Ложь);
|
|
Результат.Вставить("ОтчетДляАдминистратора", НовыйОтчетДляАдминистратора());
|
|
|
|
Результаты = Новый Структура;
|
|
Результаты.Вставить("НаличиеИнтернетСоединения", НовыйРезультатНаличиеИнтернетСоединения());
|
|
Результаты.Вставить("АктивностьСервисов", НовыйРезультатДиагностикиСервисов());
|
|
Результаты.Вставить("ДоступностьСервисов", НовыйРезультатДиагностикиСервисов());
|
|
Результаты.Вставить("НаличиеКорневыхСертификатов", НовыйРезультатДиагностикиСервисов());
|
|
|
|
Результат.Вставить("Результаты", Результаты);
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает результат диагностики криптографии.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - со свойствами:
|
|
// * Результат - Булево - истина, если диагностика криптографии выполнена успешно.
|
|
// * Результаты - Структура - где:
|
|
// ** Ключ - Строка - вид выполненной проверки.
|
|
// ** Значение - см. НовыйРезультатНаличиеПрограммыКриптографии.
|
|
// - см. НовыйРезультатНаличиеКорневогоСертификатаГУЦ.
|
|
// - см. НовоеОписаниеРезультатаССертификатами.
|
|
// * ОтчетДляАдминистратора - см. НовыйОтчетДляАдминистратора.
|
|
//
|
|
Функция НовыйРезультатДиагностикиКриптографии()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Ложь);
|
|
Результат.Вставить("ОтчетДляАдминистратора", НовыйОтчетДляАдминистратора());
|
|
Результат.Вставить("СертификатыСУстановленнымиПаролями", Новый Массив);
|
|
Результат.Вставить("УчетныеЗаписиБезСертификатов", Новый Массив);
|
|
Результат.Вставить("СертификатыОтсутствующиеВЛичномХранилище", Новый Массив);
|
|
Результат.Вставить("ИспользоватьЭлектроннуюПодписьВМоделиСервиса", Ложь);
|
|
Результат.Вставить("ЕстьНеоблачныеСертификаты", Ложь);
|
|
Результат.Вставить("ОблачныеСертификаты", Новый Массив);
|
|
Результат.Вставить("ПаролиСертификатов", Новый Соответствие);
|
|
Результат.Вставить("ПривязанныеКУчетнымЗаписямСертификаты", Новый Массив);
|
|
|
|
Результаты = Новый Структура;
|
|
Результаты.Вставить("НаличиеПрограммыКриптографииКлиент", НовыйРезультатНаличиеПрограммыКриптографии());
|
|
Результаты.Вставить("НаличиеПрограммыКриптографииСервер", НовыйРезультатНаличиеПрограммыКриптографии());
|
|
Результаты.Вставить("НаличиеКорневогоСертификатаГУЦКлиент", НовыйРезультатНаличиеКорневогоСертификатаГУЦ());
|
|
Результаты.Вставить("НаличиеКорневогоСертификатаГУЦСервер", НовыйРезультатНаличиеКорневогоСертификатаГУЦ());
|
|
Результаты.Вставить("АдресаСлужбМетокВремени", НовыйРезультатПроверки());
|
|
Результаты.Вставить("ДоступностьСлужбМетокВремени", НовыйРезультатДиагностикиСервисов());
|
|
НаличиеСертификатов = НовоеОписаниеРезультатаССертификатами();
|
|
НаличиеСертификатов.Вставить("ВариантСостояния", "");
|
|
НаличиеСертификатов.Вставить("УчетныеЗаписиБезОграниченияПоПользователюСертификата", Новый Массив);
|
|
Результаты.Вставить("НаличиеСертификатов", НаличиеСертификатов);
|
|
Результаты.Вставить("НеполученныеСертификаты", НовоеОписаниеРезультатаССертификатами());
|
|
Результаты.Вставить("НепривязанныеСертификаты", НовоеОписаниеРезультатаССертификатами());
|
|
Результаты.Вставить("ПроверкиСертификатов", НовоеОписаниеРезультатаССертификатами(Истина));
|
|
|
|
Результат.Вставить("Результаты", Результаты);
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает результат диагностики работы с файлами.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - со свойствами:
|
|
// * Результат - Булево - истина, если диагностика работы с файлами выполнена успешно.
|
|
// * Результаты - Структура - где:
|
|
// ** Ключ - Строка - вид выполненной проверки.
|
|
// ** Значение - см. НовыйРезультатПроверки.
|
|
// * ОтчетДляАдминистратора - см. НовыйОтчетДляАдминистратора.
|
|
//
|
|
Функция НовыйРезультатДиагностикиРаботыСФайлами()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Ложь);
|
|
Результат.Вставить("ОтчетДляАдминистратора", НовыйОтчетДляАдминистратора());
|
|
|
|
Результаты = Новый Структура;
|
|
Результаты.Вставить("ДлинаПутиКФайлу", НовыйРезультатПроверки());
|
|
|
|
Результат.Вставить("Результаты", Результаты);
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает результат диагностики интернет-поддержки.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - со свойствами:
|
|
// * Результат - Булево - истина, если диагностика интернет-поддержки выполнена успешно.
|
|
// * Результаты - Структура - где:
|
|
// ** Ключ - Строка - вид выполненной проверки.
|
|
// ** Значение - см. НовыйРезультатПроверки.
|
|
// * ОтчетДляАдминистратора - см. НовыйОтчетДляАдминистратора.
|
|
//
|
|
Функция НовыйРезультатДиагностикиИнтернетПоддержки()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Ложь);
|
|
Результат.Вставить("ОтчетДляАдминистратора", НовыйОтчетДляАдминистратора());
|
|
|
|
Результаты = Новый Структура;
|
|
Результаты.Вставить("ВнедрениеБИП", НовыйРезультатПроверки());
|
|
Результаты.Вставить("КорректностьДанныхИнтернетПоддержки", НовыйРезультатПроверки());
|
|
|
|
Результат.Вставить("Результаты", Результаты);
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает результат теста аутентификации.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - со свойствами:
|
|
// * Результат - Булево - истина, если тест аутентификации выполнен успешно.
|
|
// * Результаты - Структура - где:
|
|
// ** Ключ - Строка - вид выполненной проверки.
|
|
// ** Значение - см. НовыйРезультатПроверки.
|
|
// * ОтчетДляАдминистратора - см. НовыйОтчетДляАдминистратора.
|
|
//
|
|
Функция НовыйРезультатДиагностикиТестАутентификации()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Ложь);
|
|
Результат.Вставить("ОтчетДляАдминистратора", НовыйОтчетДляАдминистратора());
|
|
|
|
Результаты = Новый Структура;
|
|
РезультатПроверки = НовыйРезультатПроверки();
|
|
РезультатПроверки.Вставить("УчетныеЗаписи", Новый Массив);
|
|
Результаты.Вставить("ТестАутентификации", РезультатПроверки);
|
|
|
|
Результат.Вставить("Результаты", Результаты);
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Инициализирует результат проверки.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево, Неопределено - результат выполнения проверки. Если Неопределено - проверка не выполнялась.
|
|
// * Рекомендация - см. НоваяРекомендация.
|
|
//
|
|
Функция НовыйРезультатПроверки()
|
|
|
|
РезультатПроверки = Новый Структура;
|
|
РезультатПроверки.Вставить("Результат", Неопределено);
|
|
РезультатПроверки.Вставить("Рекомендация", НоваяРекомендация());
|
|
|
|
Возврат РезультатПроверки;
|
|
|
|
КонецФункции
|
|
|
|
// Инициализирует результат проверки наличия интернет-соединения.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево, Неопределено - результат выполнения проверки. Если Неопределено - проверка не выполнялась.
|
|
// * Рекомендация - см. НоваяРекомендация.
|
|
//
|
|
Функция НовыйРезультатНаличиеИнтернетСоединения()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Неопределено);
|
|
Результат.Вставить("Рекомендация", НоваяРекомендация());
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Инициализирует результат диагностики сервисов.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево, Неопределено - результат диагностики проверки. Если Неопределено - диагностика не выполнялась.
|
|
// * Сервисы - Массив из Структура - описание проверяемых сервисов.
|
|
// * Рекомендация - см. НоваяРекомендация.
|
|
//
|
|
Функция НовыйРезультатДиагностикиСервисов()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Неопределено);
|
|
Результат.Вставить("Сервисы", Новый Массив);
|
|
Результат.Вставить("Рекомендация", НоваяРекомендация());
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Инициализирует результат проверки наличия программы криптографии.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево, Неопределено - результат выполнения проверки. Если Неопределено - проверка не выполнялась.
|
|
// * Рекомендация - см. НоваяРекомендация.
|
|
//
|
|
Функция НовыйРезультатНаличиеПрограммыКриптографии()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Неопределено);
|
|
Результат.Вставить("Рекомендация", НоваяРекомендация());
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Инициализирует результат проверки наличия корневого сертификата головного удостоверяющего центра.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево, Неопределено - результат выполнения проверки. Если Неопределено - проверка не выполнялась.
|
|
// * Сертификаты - Массив Из ДвоичныеДанные ,Неопределено - корневой сертификат головного удостоверяющего центра.
|
|
// * Рекомендация - см. НоваяРекомендация.
|
|
//
|
|
Функция НовыйРезультатНаличиеКорневогоСертификатаГУЦ()
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Неопределено);
|
|
Результат.Вставить("Сертификаты", Новый Массив);
|
|
Результат.Вставить("Рекомендация", НоваяРекомендация());
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Инициализирует описание результата проверки.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Результат - Булево, Неопределено - результат выполнения проверки. Если Неопределено - проверка не выполнялась.
|
|
// * Сертификаты - Соответствие Из КлючИЗначение,
|
|
// - Массив Из ДвоичныеДанные - сертификаты.
|
|
// * Рекомендация - см. НоваяРекомендация.
|
|
//
|
|
Функция НовоеОписаниеРезультатаССертификатами(ИспользоватьСоответствие = Ложь)
|
|
|
|
Результат = Новый Структура;
|
|
Результат.Вставить("Результат", Неопределено);
|
|
Результат.Вставить("Сертификаты", ?(ИспользоватьСоответствие, Новый Соответствие, Новый Массив));
|
|
Результат.Вставить("Рекомендация", НоваяРекомендация());
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает рекомендацию.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Краткая - Строка - краткая рекомендация для пользователя.
|
|
// * Подробная - Строка - подробная рекомендация для администратора.
|
|
// * Отступ - Строка - будет добавлен в отчет перед заголовком и текстом рекомендации.
|
|
//
|
|
Функция НоваяРекомендация()
|
|
|
|
Рекомендация = Новый Структура;
|
|
Рекомендация.Вставить("Краткая", "");
|
|
Рекомендация.Вставить("Подробная", "");
|
|
Рекомендация.Вставить("Отступ", "");
|
|
|
|
Возврат Рекомендация;
|
|
|
|
КонецФункции
|
|
|
|
// Возвращает отчет для администратора.
|
|
//
|
|
// Возвращаемое значение:
|
|
// Структура - с ключами:
|
|
// * Текст - Строка - подробный отчет с результатами диагностики.
|
|
// * Заголовок - Строка - заголовок отчета.
|
|
//
|
|
Функция НовыйОтчетДляАдминистратора()
|
|
|
|
НовыйОтчетДляАдминистратора = Новый Структура();
|
|
НовыйОтчетДляАдминистратора.Вставить("Текст", "");
|
|
НовыйОтчетДляАдминистратора.Вставить("Заголовок", "");
|
|
|
|
Возврат НовыйОтчетДляАдминистратора;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область ОтчетДляАдминистратора
|
|
|
|
Функция ОтчетДляАдминистратора(РезультатВидаДиагностики, ВидДиагностики, ПараметрыВыполнения, ПредставленияПроверок)
|
|
|
|
ПредставлениеВидаДиагностики = ДиагностикаЭДОКлиентСервер.ПолучитьСклонение(ВидДиагностики, "Родительный");
|
|
|
|
Отчет = Новый ТекстовыйДокумент;
|
|
|
|
Если ПараметрыВыполнения.ИнформационнаяБазаФайловая И ЗначениеЗаполнено(ПараметрыВыполнения.ИмяКомпьютераКлиент) Тогда
|
|
ПредставлениеКомпьютера = СтрШаблон(НСтр("ru = 'на компьютере ""%1""'"), ПараметрыВыполнения.ИмяКомпьютераКлиент);
|
|
Иначе
|
|
ИмяКомпьютера = ИмяКомпьютера();
|
|
ПредставлениеКомпьютера = СтрШаблон(НСтр("ru = 'на сервере ""%1""'"), ИмяКомпьютера);
|
|
КонецЕсли;
|
|
|
|
Шапка = СтрШаблон(НСтр("ru = 'Результаты диагностики %1 %2'"), ПредставлениеВидаДиагностики, ПредставлениеКомпьютера);
|
|
|
|
Результаты = РезультатВидаДиагностики.Результаты;
|
|
|
|
Отчет.ДобавитьСтроку(Шапка);
|
|
Отчет.ДобавитьСтроку("");
|
|
|
|
МаксимальнаяДлинаСтроки = 0;
|
|
Для каждого Проверка Из ПредставленияПроверок Цикл
|
|
МаксимальнаяДлинаСтроки = Макс(МаксимальнаяДлинаСтроки, ДлинаПоследнейСтрокиТекста(Проверка.ПредставлениеПроверки));
|
|
ВложенныеПроверки = Неопределено;
|
|
Если Проверка.Свойство("ВложенныеПроверки", ВложенныеПроверки) И ЗначениеЗаполнено(ВложенныеПроверки) Тогда
|
|
Для каждого ВложеннаяПроверка Из ВложенныеПроверки Цикл
|
|
МаксимальнаяДлинаСтроки = Макс(МаксимальнаяДлинаСтроки, ДлинаПоследнейСтрокиТекста(ВложеннаяПроверка.ПредставлениеПроверки));
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Для каждого Проверка Из ПредставленияПроверок Цикл
|
|
ВложенныеПроверки = Неопределено;
|
|
Проверка.Свойство("ВложенныеПроверки", ВложенныеПроверки);
|
|
ДобавитьСтрокуВОтчет(Отчет, Проверка.ПредставлениеПроверки, Результаты[Проверка.НазваниеПроверки], МаксимальнаяДлинаСтроки,
|
|
Не ЗначениеЗаполнено(ВложенныеПроверки));
|
|
Если ЗначениеЗаполнено(ВложенныеПроверки) Тогда
|
|
Сч = 0;
|
|
ИндексПоследнегоЭлемента = ВложенныеПроверки.ВГраница();
|
|
Для каждого ВложеннаяПроверка Из Проверка.ВложенныеПроверки Цикл
|
|
Если Сч > Результаты[Проверка.НазваниеПроверки][Проверка.ИмяКоллекцииВложенныхПроверок].Количество() - 1 Тогда
|
|
РезультатВложеннойПроверки = Неопределено;
|
|
Иначе
|
|
РезультатВложеннойПроверки = Результаты[Проверка.НазваниеПроверки][Проверка.ИмяКоллекцииВложенныхПроверок][Сч];
|
|
КонецЕсли;
|
|
Если РезультатВложеннойПроверки = Неопределено Тогда
|
|
ВложеннаяПроверка.Свойство("РезультатПроверки", РезультатВложеннойПроверки);
|
|
КонецЕсли;
|
|
ДобавитьСтрокуВОтчет(Отчет, ВложеннаяПроверка.ПредставлениеПроверки, РезультатВложеннойПроверки,
|
|
МаксимальнаяДлинаСтроки, Сч = ИндексПоследнегоЭлемента);
|
|
ДобавитьРекомендациюВОтчет(Отчет, РезультатВложеннойПроверки);
|
|
Сч = Сч + 1;
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
Если ДобавитьРекомендациюВОтчет(Отчет, Результаты[Проверка.НазваниеПроверки]) Тогда
|
|
Отчет.ДобавитьСтроку("");
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
ОтчетДляАдминистратора = Новый Структура;
|
|
ОтчетДляАдминистратора.Вставить("Заголовок", СтрШаблон(НСтр("ru = 'Диагностика %1. Отчет для администратора'"), ПредставлениеВидаДиагностики));
|
|
ОтчетДляАдминистратора.Вставить("Текст", Отчет.ПолучитьТекст());
|
|
|
|
Возврат ОтчетДляАдминистратора;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ДобавитьПроверку(ПредставленияПроверок, НазваниеПроверки, ПредставлениеПроверки,
|
|
РезультатПроверки = Неопределено, ВложенныеПроверки = Неопределено, ИмяКоллекцииВложенныхПроверок = "")
|
|
|
|
Проверка = Новый Структура;
|
|
Проверка.Вставить("НазваниеПроверки", НазваниеПроверки);
|
|
Проверка.Вставить("ПредставлениеПроверки", ПредставлениеПроверки);
|
|
Если РезультатПроверки <> Неопределено Тогда
|
|
Проверка.Вставить("РезультатПроверки", РезультатПроверки);
|
|
КонецЕсли;
|
|
Если ВложенныеПроверки <> Неопределено Тогда
|
|
Проверка.Вставить("ВложенныеПроверки", ВложенныеПроверки);
|
|
Проверка.Вставить("ИмяКоллекцииВложенныхПроверок", ИмяКоллекцииВложенныхПроверок);
|
|
КонецЕсли;
|
|
|
|
ПредставленияПроверок.Добавить(Проверка);
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ДобавитьРекомендациюВОтчет(Отчет, РезультатОперацииДиагностики)
|
|
|
|
Если РезультатОперацииДиагностики.Результат <> Ложь
|
|
Или (РезультатОперацииДиагностики.Свойство("Сервисы")
|
|
И РезультатОперацииДиагностики.Сервисы.Количество() = 0) Тогда
|
|
Возврат Ложь;
|
|
КонецЕсли;
|
|
|
|
Рекомендация = Неопределено;
|
|
Если Не РезультатОперацииДиагностики.Свойство("Рекомендация", Рекомендация)
|
|
Или Не ЗначениеЗаполнено(Рекомендация.Подробная) Тогда
|
|
Возврат Ложь;
|
|
КонецЕсли;
|
|
|
|
Отчет.ДобавитьСтроку(Рекомендация.Отступ + СтрШаблон(ШаблонРекомендации(), Рекомендация.Отступ + Рекомендация.Подробная));
|
|
|
|
Возврат Истина;
|
|
|
|
КонецФункции
|
|
|
|
Функция ДлинаСтроки(Текст)
|
|
|
|
Возврат СтрДлина(Текст) + СтрЧислоВхождений(Текст, Символы.Таб) * 3;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ДобавитьСтрокуВОтчет(Отчет, ПредставлениеРезультата, РезультатПроверки, МаксимальнаяДлинаСтроки,
|
|
ДобавлятьПустуюСтроку = Истина)
|
|
|
|
ДлинаПоследнейСтроки = ДлинаПоследнейСтрокиТекста(ПредставлениеРезультата);
|
|
|
|
ДлинаДополнения = (МаксимальнаяДлинаСтроки - ДлинаПоследнейСтроки) + 1;
|
|
|
|
Отчет.ДобавитьСтроку(ПредставлениеРезультата + ":"
|
|
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", ДлинаДополнения)
|
|
+ ПредставлениеРезультатаПроверки(РезультатПроверки.Результат));
|
|
|
|
Если ДобавлятьПустуюСтроку Тогда
|
|
Отчет.ДобавитьСтроку("");
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ПредставлениеРезультатаПроверки(Результат)
|
|
|
|
Если Результат = Истина Тогда
|
|
Возврат НСтр("ru = 'успешно'");
|
|
ИначеЕсли Результат = Ложь Тогда
|
|
Возврат НСтр("ru = 'неуспешно'");
|
|
Иначе
|
|
Возврат НСтр("ru = 'не выполнялась'");
|
|
КонецЕсли;
|
|
|
|
КонецФункции
|
|
|
|
Функция ДлинаПоследнейСтрокиТекста(МногострочнаяСтрока)
|
|
|
|
МассивСтрок = СтрРазделить(МногострочнаяСтрока, Символы.ПС);
|
|
ДлинаПоследнейСтроки = ДлинаСтроки(МассивСтрок[МассивСтрок.ВГраница()]);
|
|
|
|
Возврат ДлинаПоследнейСтроки;
|
|
|
|
КонецФункции
|
|
|
|
Функция ШаблонРекомендации()
|
|
|
|
Возврат НСтр("ru = 'Рекомендации:
|
|
|%1'");
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
#Область Прочее
|
|
|
|
// Выполняет диагностику обмена электронными документами.
|
|
// Виды выполняемых проверок:
|
|
// * Интернет-соединение
|
|
// ** Наличие интернет-соединения
|
|
// ** Активность сервисов: работоспособны ли ресурсы: https://1c-edo.ru, https://1c-api.taxcom.ru, и т.п.
|
|
// ** Доступность сервисов: доступны ли из клиентского приложения ресурсы: https://1c-edo.ru,
|
|
// https://1c-api.taxcom.ru, и т.п.
|
|
// ** Наличие корневых сертификатов сервисов: установлены ли в хранилище сертификатов корневые сертификаты ресурсов:
|
|
// https://1c-edo.ru, https://1c-api.taxcom.ru, и т.п.
|
|
// * Криптография
|
|
// ** Наличие программы криптографии: установлена ли программа для защиты информации.
|
|
// ** Наличие корневого сертификата ГУЦ: установлен ли в хранилище сертификатов сертификат
|
|
// головного удостоверяющего центра.
|
|
// ** Наличие сертификатов: имеются ли в программе сертификаты для работы с электронным документооборотом.
|
|
// ** Неполученные сертификаты: имеются ли заказанные, но не полученные сертификаты для работы
|
|
// с электронным документооборотом.
|
|
// ** Непривязанные сертификаты: имеются ли сертификаты, не привязанные к учетным записям (требующие
|
|
// регистрации в сервисе).
|
|
// ** Проверки сертификатов:
|
|
// *** Наличие сертификата в личном списке: установлен ли сертификат в личный список (личное хранилище)
|
|
// на компьютере.
|
|
// *** Корректность данных сертификата: проверка данных сертификата с помощью программы электронной подписи
|
|
// и шифрования.
|
|
// Данные сертификата, загруженные из файла сертификата или другим путем, могут быть некорректны по разным
|
|
// причинам, но самые частые следующие:
|
|
// - закончился срок действия сертификата;
|
|
// - сертификат в списке отозванных.
|
|
// *** Наличие программы для подписания и расшифровки: имеется ли на компьютере программа, указанная в сертификате
|
|
// для закрытого ключа, которая позволяет подписывать и расшифровывать данные.
|
|
// *** Подписание данных: возможно ли подписать данные закрытым ключом сертификата с помощью программы электронной
|
|
// подписи и шифрования. Требуется пароль.
|
|
// *** Проверка созданной подписи: возможна ли проверка имеющейся подписи открытым ключом сертификата с помощью
|
|
// программы электронной подписи и шифрования.
|
|
// *** Шифрование данных: возможно ли шифрование данных открытым ключом сертификата с помощью программы электронной
|
|
// подписи и шифрования.
|
|
// *** Расшифровка данных: возможна ли расшифровка данных закрытым ключом сертификата с помощью программы электронной
|
|
// подписи и шифрования. Требуется пароль.
|
|
// * Работа с файлами
|
|
// ** Длина пути к файлу: не превышает ли длина пути к файлу 256 символов.
|
|
// * Интернет-поддержка
|
|
// ** Внедрение БИП: внедрена ли в конфигурацию библиотека интернет-поддержки.
|
|
// ** Корректность данных интернет-поддержки: верно ли указаны логин и пароль от сервиса интернет-поддержки.
|
|
//
|
|
// Параметры:
|
|
// ПараметрыВыполнения - Структура - параметры выполнения диагностики,
|
|
// см. ДиагностикаЭДОКлиентСервер.НовыеПараметрыВыполненияДиагностики.
|
|
//
|
|
// Возвращаемое значение:
|
|
// - Структура - Результат диагностики, см. НовыйРезультатДиагностики.
|
|
//
|
|
// Пример:
|
|
// //Вариант 1
|
|
// ПараметрыВыполнения = ДиагностикаЭДОКлиентСервер.НовыеПараметрыВыполненияДиагностики();
|
|
// ПараметрыВыполнения.ВидыДиагностики.Добавить(ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение());
|
|
// РезультатДиагностики = ВыполнитьДиагностику(ПараметрыВыполнения);
|
|
// //Вариант 2
|
|
// РезультатДиагностики = ВыполнитьДиагностику().
|
|
//
|
|
Функция ВыполнитьДиагностику(ПараметрыВыполнения = Неопределено) Экспорт
|
|
|
|
Перем ВидыДиагностики;
|
|
|
|
Если ПараметрыВыполнения = Неопределено Тогда
|
|
ПараметрыВыполнения = ДиагностикаЭДОКлиентСервер.НовыеПараметрыВыполненияДиагностики();
|
|
КонецЕсли;
|
|
|
|
Если ПараметрыВыполнения.ИнформационнаяБазаФайловая = Неопределено Тогда
|
|
ПараметрыВыполнения.ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая();
|
|
КонецЕсли;
|
|
ПараметрыВыполнения.ИмяКомпьютераСервер = ИмяКомпьютера();
|
|
ПараметрыВыполнения.Свойство("ВидыДиагностики", ВидыДиагностики);
|
|
Если ВидыДиагностики = Неопределено Тогда
|
|
ВидыДиагностики = Новый Массив;
|
|
КонецЕсли;
|
|
|
|
РезультатДиагностики = НовыйРезультатДиагностики(ВидыДиагностики);
|
|
|
|
Если ЕстьВидДиагностики(РезультатДиагностики, ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение(), Неопределено)
|
|
Или ЕстьВидДиагностики(РезультатДиагностики, ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография(), Неопределено) Тогда
|
|
ДанныеКорневыхСертификатов = ДанныеКорневыхСертификатов();
|
|
Иначе
|
|
ДанныеКорневыхСертификатов = Неопределено;
|
|
КонецЕсли;
|
|
|
|
Контекст = Новый Структура;
|
|
Контекст.Вставить("ДанныеКорневыхСертификатов", ДанныеКорневыхСертификатов);
|
|
|
|
ЗаполнитьДоступныеУчетныеЗаписи(РезультатДиагностики, ПараметрыВыполнения);
|
|
ЗаполнитьДанныеУчетныхЗаписей(РезультатДиагностики, ПараметрыВыполнения);
|
|
|
|
ДиагностикаКриптографии(РезультатДиагностики, ПараметрыВыполнения, Контекст);
|
|
ДиагностикаИнтернетСоединения(РезультатДиагностики, ПараметрыВыполнения, Контекст);
|
|
ДиагностикаИнтернетПоддержки(РезультатДиагностики, ПараметрыВыполнения, Контекст);
|
|
ДиагностикаРаботыСФайлами(РезультатДиагностики, ПараметрыВыполнения, Контекст);
|
|
|
|
ОбщийРезультат = Истина;
|
|
Для каждого РезультатВидаДиагностики Из РезультатДиагностики.Результаты Цикл
|
|
ОбщийРезультат = ОбщийРезультат И РезультатВидаДиагностики.Значение.Результат;
|
|
КонецЦикла;
|
|
РезультатДиагностики.Результат = ОбщийРезультат;
|
|
|
|
Возврат РезультатДиагностики;
|
|
|
|
КонецФункции
|
|
|
|
Функция ПоддерживаемыеВидыДиагностики()
|
|
|
|
ПоддерживаемыеВидыДиагностики = Новый Массив;
|
|
ПоддерживаемыеВидыДиагностики.Добавить(ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение());
|
|
ПоддерживаемыеВидыДиагностики.Добавить(ДиагностикаЭДОКлиентСервер.ВидДиагностикиКриптография());
|
|
ПоддерживаемыеВидыДиагностики.Добавить(ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетПоддержка());
|
|
ПоддерживаемыеВидыДиагностики.Добавить(ДиагностикаЭДОКлиентСервер.ВидДиагностикиРаботаСФайлами());
|
|
ПоддерживаемыеВидыДиагностики.Добавить(ДиагностикаЭДОКлиентСервер.ВидДиагностикиТестАутентификации());
|
|
|
|
Возврат ПоддерживаемыеВидыДиагностики;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ЗаписатьОшибкуВЖурналРегистрации(ВидДиагностики, Ошибка)
|
|
|
|
ОбработкаНеисправностейБЭД.ОбработатьОшибку(НСтр("ru = 'Выполнение диагностики ЭДО'"),
|
|
ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами, Ошибка);
|
|
|
|
КонецПроцедуры
|
|
|
|
// Параметры:
|
|
// РезультатДиагностики - см. НовыйРезультатДиагностики
|
|
// УчетныеЗаписи - Массив из Строка
|
|
//
|
|
// Возвращаемое значение:
|
|
// Соответствие из КлючИЗначение:
|
|
// * Ключ - Строка
|
|
// * Значение - Строка
|
|
Функция ПроверяемыеСервисыИнтернетСоединение(РезультатДиагностики, УчетныеЗаписи)
|
|
|
|
Сервисы = Новый Соответствие;
|
|
|
|
Сервис = СервисНастроекЭДО.АдресСервисаНастроек();
|
|
Сервисы.Вставить(Сервис, ПредставлениеСервисаЭДО(Сервис));
|
|
|
|
Сервис = СервисНастроекЭДО.АдресОблачногоХранилищаНастроек();
|
|
Сервисы.Вставить(Сервис, ПредставлениеСервисаЭДО(Сервис));
|
|
|
|
ДобавитьСервисыЦентровЭДО(Сервисы, УчетныеЗаписи);
|
|
|
|
Если УчетныеЗаписи.Количество() = 0 Тогда
|
|
ДобавитьСервисы1СЭДО(Сервисы);
|
|
ДобавитьСервисыТакском(Сервисы);
|
|
Иначе
|
|
Для Каждого УчетнаяЗапись Из УчетныеЗаписи Цикл
|
|
ДанныеУчетнойЗаписи = РезультатДиагностики.ДанныеУчетныхЗаписей[УчетнаяЗапись];
|
|
Если ДанныеУчетнойЗаписи = Неопределено Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
Если ДанныеУчетнойЗаписи.СпособОбменаЭД = Перечисления.СпособыОбменаЭД.ЧерезСервис1СЭДО Тогда
|
|
ДобавитьСервисы1СЭДО(Сервисы);
|
|
ИначеЕсли ДанныеУчетнойЗаписи.СпособОбменаЭД = Перечисления.СпособыОбменаЭД.ЧерезОператораЭДОТакском Тогда
|
|
ДобавитьСервисыТакском(Сервисы);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
КонецЕсли;
|
|
|
|
Возврат Сервисы;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ДобавитьСервисы1СЭДО(Сервисы)
|
|
|
|
Сервис = СервисЭДО.ПараметрыСервиса1СЭДО().АдресДляПроверкиАктивности;
|
|
Сервисы.Вставить(Сервис, ПредставлениеСервисаЭДО(Сервис));
|
|
|
|
Сервис = "https://login.1c.ru/";
|
|
Сервисы.Вставить(Сервис, ПредставлениеСервисаЭДО(Сервис));
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьСервисыТакском(Сервисы)
|
|
|
|
Сервис = СервисЭДО.ПараметрыСервиса1СТакском().АдресДляПроверкиАктивности;
|
|
Сервисы.Вставить(Сервис, ПредставлениеСервисаЭДО(Сервис));
|
|
|
|
Сервис = "https://webits.1c.ru/services/WebItsSimpleService";
|
|
Сервисы.Вставить(Сервис, ПредставлениеСервисаЭДО(Сервис));
|
|
|
|
КонецПроцедуры
|
|
|
|
// Параметры:
|
|
// Сервисы - Соответствие из КлючИЗначение:
|
|
// * Ключ - Строка
|
|
// * Значение - Строка
|
|
// УчетныеЗаписи - Массив из Строка
|
|
Процедура ДобавитьСервисыЦентровЭДО(Сервисы, УчетныеЗаписи)
|
|
|
|
Если Не НастройкиЭДО.ИспользоватьИнтеграциюЦентраЭДО() Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
МодульИнтеграцияЦентраЭДО = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияЦентраЭДО");
|
|
ОписанияСервисов = МодульИнтеграцияЦентраЭДО.ОписанияСервисовУчетныхЗаписейЭДО(УчетныеЗаписи);
|
|
Для Каждого ОписаниеСервиса Из ОписанияСервисов Цикл
|
|
Сервисы.Вставить(ОписаниеСервиса.АдресРесурса, ПредставлениеСервисаЭДО(ОписаниеСервиса.АдресСервиса));
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция ДоступнаУстановкаСертификатов() Экспорт
|
|
|
|
Возврат ОбщегоНазначения.ИнформационнаяБазаФайловая()
|
|
И ОбщегоНазначения.ЭтоWindowsКлиент()
|
|
И Не ОбщегоНазначения.ЭтоВебКлиент();
|
|
|
|
КонецФункции
|
|
|
|
Функция ЕстьВидДиагностики(РезультатДиагностики, ВидДиагностики, ЗначениеВидаДиагностики)
|
|
|
|
Возврат РезультатДиагностики.Результаты.Свойство(ВидДиагностики, ЗначениеВидаДиагностики);
|
|
|
|
КонецФункции
|
|
|
|
Функция ПредставлениеСервисаЭДО(Сервис) Экспорт
|
|
|
|
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(Сервис);
|
|
ИмяСервера = СтруктураURI.ИмяСервера;
|
|
Возврат ИмяСервера;
|
|
|
|
КонецФункции
|
|
|
|
Функция ПараметрыКриптографии() Экспорт
|
|
|
|
ПроверятьЭлектронныеПодписиНаСервере = ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере();
|
|
СоздаватьЭлектронныеПодписиНаСервере = ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере();
|
|
|
|
ПараметрыКриптографии = Новый Структура;
|
|
ПараметрыКриптографии.Вставить("ЕстьКриптографияНаСервере", ПроверятьЭлектронныеПодписиНаСервере Или СоздаватьЭлектронныеПодписиНаСервере);
|
|
ПараметрыКриптографии.Вставить("ЕстьКриптографияНаКлиенте", Не ПроверятьЭлектронныеПодписиНаСервере Или Не СоздаватьЭлектронныеПодписиНаСервере);
|
|
|
|
Возврат ПараметрыКриптографии;
|
|
|
|
КонецФункции
|
|
|
|
Функция УчетныеЗаписиИзОтбора(ЗначениеОтбора)
|
|
|
|
Если Не ЗначениеЗаполнено(ЗначениеОтбора) Тогда
|
|
Возврат Новый Массив;
|
|
ИначеЕсли ТипЗнч(ЗначениеОтбора[0]) = Тип("РегистрСведенийКлючЗаписи.УчетныеЗаписиЭДО") Тогда
|
|
МассивУчетныхЗаписей = Новый Массив;
|
|
Для каждого КлючЗаписи Из ЗначениеОтбора Цикл
|
|
МассивУчетныхЗаписей.Добавить(КлючЗаписи.ИдентификаторЭДО);
|
|
КонецЦикла;
|
|
Иначе
|
|
МассивУчетныхЗаписей = ЗначениеОтбора;
|
|
КонецЕсли;
|
|
|
|
Возврат МассивУчетныхЗаписей;
|
|
|
|
КонецФункции
|
|
|
|
// Параметры:
|
|
// ПараметрыВыполненияДиагностики - см. ДиагностикаЭДОКлиентСервер.НовыеПараметрыВыполненияДиагностики
|
|
// ОтборСертификатов - Неопределено
|
|
// - см. КриптографияБЭД.НовыйОтборСертификатов
|
|
//
|
|
// Возвращаемое значение:
|
|
// ТаблицаЗначений:
|
|
// * Ссылка - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования
|
|
// * Отпечаток - Строка
|
|
// * ИдентификаторЭДО - Строка
|
|
// * ПривязанКУчетнойЗаписи - Булево
|
|
// * ТребуетсяПривязкаКУчетнойЗаписи - Булево
|
|
// * ОжидаетсяВыпускСертификата - Булево
|
|
Функция ТаблицаДоступныхСертификатов(ПараметрыВыполненияДиагностики, ОтборСертификатов = Неопределено)
|
|
|
|
Сертификаты = Новый Массив;
|
|
Если ПараметрыВыполненияДиагностики.Отбор.Свойство("Сертификат")
|
|
И ЗначениеЗаполнено(ПараметрыВыполненияДиагностики.Отбор.Сертификат) Тогда
|
|
Если ТипЗнч(ПараметрыВыполненияДиагностики.Отбор.Сертификат) = Тип("Массив") Тогда
|
|
Сертификаты = ПараметрыВыполненияДиагностики.Отбор.Сертификат;
|
|
Иначе
|
|
Сертификаты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПараметрыВыполненияДиагностики.Отбор.Сертификат);
|
|
КонецЕсли;
|
|
КонецЕсли;
|
|
|
|
УчетныеЗаписи = Новый Массив;
|
|
Если ПараметрыВыполненияДиагностики.Отбор.Свойство("УчетнаяЗапись")
|
|
И ЗначениеЗаполнено(ПараметрыВыполненияДиагностики.Отбор.УчетнаяЗапись)Тогда
|
|
УчетныеЗаписи = УчетныеЗаписиИзОтбора(ПараметрыВыполненияДиагностики.Отбор.УчетнаяЗапись);
|
|
КонецЕсли;
|
|
|
|
Запросы = Новый Массив;
|
|
|
|
ЗапросСертификатов = КриптографияБЭД.ЗапросДействующихСертификатов("Сертификаты", ОтборСертификатов);
|
|
Запросы.Добавить(ЗапросСертификатов);
|
|
|
|
ЗапросСертификатовУчетныхЗаписей = СинхронизацияЭДО.ЗапросСертификатовУчетныхЗаписей("СертификатыУчетныхЗаписей");
|
|
Запросы.Добавить(ЗапросСертификатовУчетныхЗаписей);
|
|
|
|
Запрос = Новый Запрос("ВЫБРАТЬ
|
|
|Сертификаты.Ссылка,
|
|
|Сертификаты.Отпечаток,
|
|
|ЕСТЬNULL(СертификатыУчетныхЗаписей.ИдентификаторЭДО, """") КАК ИдентификаторЭДО,
|
|
|НЕ СертификатыУчетныхЗаписей.ИдентификаторЭДО ЕСТЬ NULL КАК ПривязанКУчетнойЗаписи,
|
|
|Сертификаты.ВыпущенЧерезСервис1СПодпись И СертификатыУчетныхЗаписей.ИдентификаторЭДО ЕСТЬ NULL КАК ТребуетсяПривязкаКУчетнойЗаписи,
|
|
|Сертификаты.ОжидаетсяВыпускСертификата
|
|
|ИЗ
|
|
|Сертификаты КАК Сертификаты
|
|
|ЛЕВОЕ СОЕДИНЕНИЕ СертификатыУчетныхЗаписей КАК СертификатыУчетныхЗаписей
|
|
|ПО Сертификаты.Ссылка = СертификатыУчетныхЗаписей.Сертификат");
|
|
|
|
ИтоговыйЗапрос = ОбщегоНазначенияБЭД.СоединитьЗапросы(Запрос, Запросы);
|
|
|
|
ТаблицаСертификатовБезОтбора = ИтоговыйЗапрос.Выполнить().Выгрузить();
|
|
|
|
ТаблицаСертификатов = ТаблицаСертификатовБезОтбора.СкопироватьКолонки();
|
|
Для Каждого СтрокаТаблицы Из ТаблицаСертификатовБезОтбора Цикл
|
|
Если Сертификаты.Количество() Тогда
|
|
КопироватьСтроку = Сертификаты.Найти(СтрокаТаблицы.Ссылка) <> Неопределено;
|
|
Иначе
|
|
КопироватьСтроку = Истина;
|
|
КонецЕсли;
|
|
Если КопироватьСтроку И УчетныеЗаписи.Количество() Тогда
|
|
КопироватьСтроку = УчетныеЗаписи.Найти(СтрокаТаблицы.ИдентификаторЭДО) <> Неопределено;
|
|
КонецЕсли;
|
|
Если КопироватьСтроку Тогда
|
|
ЗаполнитьЗначенияСвойств(ТаблицаСертификатов.Добавить(), СтрокаТаблицы);
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Возврат ТаблицаСертификатов;
|
|
|
|
КонецФункции
|
|
|
|
Функция ДанныеКорневыхСертификатов()
|
|
|
|
АдресКаталога = АдресКаталогаССертификатами();
|
|
|
|
РезультатЗагрузки = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(АдресКаталога + "files_structure.json");
|
|
Если РезультатЗагрузки.Статус Тогда
|
|
ДанныеФайла = ПолучитьИзВременногоХранилища(РезультатЗагрузки.Путь);
|
|
УдалитьИзВременногоХранилища(РезультатЗагрузки.Путь);
|
|
ДанныеКорневыхСертификатов = ОбщегоНазначенияБЭД.JSONЗначение(ДанныеФайла, Истина);
|
|
Иначе
|
|
ЗаписатьОшибкуВЖурналРегистрации(ДиагностикаЭДОКлиентСервер.ВидДиагностикиИнтернетСоединение(),
|
|
РезультатЗагрузки.СообщениеОбОшибке);
|
|
ДанныеКорневыхСертификатов = Неопределено;
|
|
КонецЕсли;
|
|
|
|
Возврат ДанныеКорневыхСертификатов;
|
|
|
|
КонецФункции
|
|
|
|
Функция АдресКаталогаССертификатами()
|
|
|
|
АдресКаталогаССертификатами = СервисНастроекЭДО.АдресОблачногоХранилищаНастроек() + "/ServiceCertificates/";
|
|
Если Не СтрЗаканчиваетсяНа(АдресКаталогаССертификатами, "/") Тогда
|
|
АдресКаталогаССертификатами = АдресКаталогаССертификатами + "/";
|
|
КонецЕсли;
|
|
|
|
Возврат АдресКаталогаССертификатами;
|
|
|
|
КонецФункции
|
|
|
|
Функция АдресСертификатаПоОтпечатку(Отпечаток)
|
|
|
|
Возврат АдресКаталогаССертификатами() + Отпечаток + ".cer";
|
|
|
|
КонецФункции
|
|
|
|
Процедура ЗаполнитьДанныеУчетныхЗаписей(РезультатДиагностики, ПараметрыВыполненияДиагностики)
|
|
|
|
Запросы = Новый Массив;
|
|
Отбор = СинхронизацияЭДО.НовыйОтборУчетныхЗаписей();
|
|
Отбор.УчетныеЗаписи = "&УчетныеЗаписи";
|
|
ЗапросУчетныхЗаписей = СинхронизацияЭДО.ЗапросУчетныхЗаписей("УчетныеЗаписиЭДО", Отбор);
|
|
Запросы.Добавить(ЗапросУчетныхЗаписей);
|
|
|
|
Запрос = Новый Запрос;
|
|
Запрос.Текст =
|
|
"ВЫБРАТЬ
|
|
| УчетныеЗаписиЭДО.ИдентификаторЭДО КАК ИдентификаторЭДО,
|
|
| УчетныеЗаписиЭДО.НаименованиеУчетнойЗаписи КАК НаименованиеУчетнойЗаписи,
|
|
| УчетныеЗаписиЭДО.СпособОбменаЭД КАК СпособОбменаЭД
|
|
|ИЗ
|
|
| УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО";
|
|
|
|
ИтоговыйЗапрос = ОбщегоНазначенияБЭД.СоединитьЗапросы(Запрос, Запросы);
|
|
ИтоговыйЗапрос.УстановитьПараметр("УчетныеЗаписи", РезультатДиагностики.ДоступныеУчетныеЗаписи);
|
|
|
|
РезультатЗапроса = ИтоговыйЗапрос.Выполнить();
|
|
|
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
|
|
|
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
|
|
|
ДанныеУчетнойЗаписи = Новый Структура;
|
|
ДанныеУчетнойЗаписи.Вставить("НаименованиеУчетнойЗаписи");
|
|
ДанныеУчетнойЗаписи.Вставить("СпособОбменаЭД");
|
|
ДанныеУчетнойЗаписи.Вставить("ЭтоПрямойОбмен",
|
|
СинхронизацияЭДО.ЭтоПрямойОбмен(ВыборкаДетальныеЗаписи.СпособОбменаЭД));
|
|
ЗаполнитьЗначенияСвойств(ДанныеУчетнойЗаписи, ВыборкаДетальныеЗаписи);
|
|
|
|
РезультатДиагностики.ДанныеУчетныхЗаписей.Вставить(ВыборкаДетальныеЗаписи.ИдентификаторЭДО, ДанныеУчетнойЗаписи);
|
|
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
#КонецОбласти
|
|
|
|
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
|
|
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
|
|
|
|
Методы.Вставить("ВыполнитьДиагностику", Истина);
|
|
|
|
КонецПроцедуры
|
|
|
|
#КонецОбласти |