#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ДиагностикаОтчетности_ФоновыеЗадания
Функция ТестПроизводительностиЖР(ДатаНачала, ДатаОкончания, Уровни, Событие, Знач ПороговоеЗначениеСекунд = 30) Экспорт
ВремяНачалаВыборки = ТекущаяУниверсальнаяДатаВМиллисекундах();
Таб = Новый ТаблицаЗначений;
Фильтр = Новый Структура("ДатаНачала, ДатаОкончания, Уровень, Событие", ДатаНачала, ДатаОкончания, Уровни, Событие);
Попытка
УстановитьПривилегированныйРежим(Истина);
ВыгрузитьЖурналРегистрации(Таб, Фильтр, "Уровень, Дата, Событие, Комментарий, ПредставлениеДанных");
Исключение
УстановитьПривилегированныйРежим(Ложь);
Возврат Истина;
КонецПопытки;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ВремяОкончанияВыборки = ТекущаяУниверсальнаяДатаВМиллисекундах();
ВремяВыборкиИнтервала = (ВремяОкончанияВыборки - ВремяНачалаВыборки) / 1000;
Возврат ВремяВыборкиИнтервала > ПороговоеЗначениеСекунд;
КонецФункции
Процедура ДобавитьИнформациюЖР(Параметры, АдресРезультата) Экспорт
Результат = ПолучитьИнформациюЖР(Параметры.Начало, Параметры.Окончание);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
Процедура ДобавитьПодсистемы(Куда, ПодсистемаРодитель)
Для Каждого Объект из ПодсистемаРодитель.Состав Цикл
Куда.Добавить(Объект);
КонецЦикла;
Для Каждого Подсистема из ПодсистемаРодитель.Подсистемы Цикл
ДобавитьПодсистемы(Куда, Подсистема);
КонецЦикла;
КонецПроцедуры
Функция ПредставлениеМетаданных(МетаданныеЖурнала)
Если ТипЗнч(МетаданныеЖурнала) = Тип("Массив") Тогда
Представление = "";
Для Каждого ОбъектМетаданных Из МетаданныеЖурнала Цикл
Представление = Представление + ?(Представление = "", "", ", ") + СокрЛП(ОбъектМетаданных);
КонецЦикла;
Возврат Представление;
Иначе
Возврат СокрЛП(МетаданныеЖурнала);
КонецЕсли;
КонецФункции
Функция ПолучитьИнформациюЖР(Знач Начало = Неопределено, Знач Окончание = Неопределено) Экспорт
ВремяНачалаВыборки = ТекущаяУниверсальнаяДатаВМиллисекундах();
МетаданныеПодсистемы = Новый Массив;
ЭДОсКО = Метаданные.Подсистемы.РегламентированнаяОтчетность.Подсистемы.ЭлектронныйДокументооборотСКонтролирующимиОрганами;
ДобавитьПодсистемы(МетаданныеПодсистемы, ЭДОсКО);
Событие = Новый Массив;
Событие.Добавить("Автоматический обмен с контролирующими органами");
Событие.Добавить("Электронная подпись в модели сервиса.Криптосервис.ПодписатьИЗашифровать");
Событие.Добавить("Получение текущего состояния отправки, критических ошибок И неотправленных извещений");
Событие.Добавить("Ошибка при заполнении регистра ЖурналОтправокВКонтролирующиеОрганы");
Событие.Добавить("Корректировка состояния отправки 2-НДФЛ");
Событие.Добавить("Электронный документооборот с контролирующими органами");
Событие.Добавить("Электронный документооборот с контролирующими органами. Транспортное сообщение");
Событие.Добавить("Электронный документооборот с контролирующими органами. Распаковка пакета");
Событие.Добавить("Электронный документооборот с контролирующими органами. Чтение ZIP");
Событие.Добавить("Электронный документооборот с контролирующими органами. Менеджер криптографии");
Уровни = Новый Массив;
Уровни.Добавить(УровеньЖурналаРегистрации.Ошибка);
Уровни.Добавить(УровеньЖурналаРегистрации.Предупреждение);
Если Начало = Неопределено И Окончание = Неопределено Тогда
ДатаОкончания = ТекущаяДатаСеанса();
ДатаНачала = НачалоДня(ДатаОкончания) - 86400;
Если ДеньНедели(ДатаНачала) = 7 Тогда
ДатаНачала = ДатаНачала - 2 * 86400;
ИначеЕсли ДеньНедели(ДатаНачала) = 6 Тогда
ДатаНачала = ДатаНачала - 1 * 86400;
КонецЕсли;
ИначеЕсли Начало = Неопределено И Окончание <> Неопределено Тогда
ДатаОкончания = Окончание;
ДатаНачала = НачалоДня(ДатаОкончания) - 86400;
Если ДеньНедели(ДатаНачала) = 7 Тогда
ДатаНачала = ДатаНачала - 2 * 86400;
ИначеЕсли ДеньНедели(ДатаНачала) = 6 Тогда
ДатаНачала = ДатаНачала - 1 * 86400;
КонецЕсли;
ИначеЕсли Начало <> Неопределено И Окончание = Неопределено Тогда
ДатаНачала = Начало;
ДатаОкончания = ТекущаяДатаСеанса();
ИначеЕсли Начало <> Неопределено И Окончание <> Неопределено Тогда
ДатаНачала = Начало;
ДатаОкончания = Окончание;
КонецЕсли;
МедленныйЖурнал = ТестПроизводительностиЖР(ДатаНачала, ДатаНачала + 3 * 3600, Уровни, Событие);
Если МедленныйЖурнал Тогда
Возврат Неопределено;
КонецЕсли;
Куда = Новый Массив;
Таб = Новый ТаблицаЗначений;
Фильтр = Новый Структура("ДатаНачала, ДатаОкончания, Уровень, Событие", ДатаНачала, ДатаОкончания, Уровни, Событие);
Попытка
УстановитьПривилегированныйРежим(Истина);
ВыгрузитьЖурналРегистрации(Таб, Фильтр, "Уровень, Дата, Событие, Комментарий, Метаданные, ПредставлениеДанных");
Успешно = Истина;
Исключение
УстановитьПривилегированныйРежим(Ложь);
Успешно = Ложь;
КонецПопытки;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если Успешно Тогда
Для Каждого Стр Из Таб Цикл
Запись = Новый Структура("Уровень, Дата, Событие, Комментарий, ПредставлениеДанных, Метаданные");
ЗаполнитьЗначенияСвойств(Запись, Стр,, "Уровень, Метаданные");
Запись.Уровень = СокрЛП(Стр.Уровень);
Запись.Метаданные = ПредставлениеМетаданных(Стр.Метаданные);
Куда.Добавить(Запись);
КонецЦикла;
КонецЕсли;
Таб = Новый ТаблицаЗначений;
Фильтр = Новый Структура("ДатаНачала, ДатаОкончания, Уровень, Метаданные", ДатаНачала, ДатаОкончания, Уровни, МетаданныеПодсистемы);
Попытка
УстановитьПривилегированныйРежим(Истина);
ВыгрузитьЖурналРегистрации(Таб, Фильтр, "Уровень, Дата, Событие, Комментарий, Метаданные, ПредставлениеДанных");
Успешно = Истина;
Исключение
УстановитьПривилегированныйРежим(Ложь);
Успешно = Ложь;
КонецПопытки;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если Успешно Тогда
Для Каждого Стр Из Таб Цикл
Запись = Новый Структура("Уровень, Дата, Событие, Комментарий, ПредставлениеДанных, Метаданные");
ЗаполнитьЗначенияСвойств(Запись, Стр,, "Уровень, Метаданные");
Запись.Уровень = СокрЛП(Стр.Уровень);
Запись.Метаданные = ПредставлениеМетаданных(Стр.Метаданные);
Куда.Добавить(Запись);
КонецЦикла;
КонецЕсли;
ВремяОкончанияВыборки = ТекущаяУниверсальнаяДатаВМиллисекундах();
ВремяВыборки = (ВремяОкончанияВыборки - ВремяНачалаВыборки) / 1000;
ВсеДанные = Новый Структура("Журнал, Начало, Окончание, ЗатраченоВремениСекунд", Куда);
ВсеДанные.Начало = ДатаНачала;
ВсеДанные.Окончание = ДатаОкончания;
ВсеДанные.ЗатраченоВремениСекунд = Цел(ВремяВыборки);
Возврат ВсеДанные;
КонецФункции
#КонецОбласти
#Область СервисыОбратногоЗвонка_КалугаАстрал
Функция ПолучитьЗапрос(Знач Телефон, Знач Имя)
ЗапросSoap = Новый ЗаписьXML;
ЗапросSoap.УстановитьСтроку("UTF-8");
ЗапросSoap.ЗаписатьОбъявлениеXML();
ЗапросSoap.ЗаписатьНачалоЭлемента("soap:Envelope");
ЗапросSoap.ЗаписатьСоответствиеПространстваИмен("cal", "http://callback.keydisk.ru/");
ЗапросSoap.ЗаписатьСоответствиеПространстваИмен("soap", "http://www.w3.org/2003/05/soap-envelope");
ЗапросSoap.ЗаписатьНачалоЭлемента("soap:Header");
ЗапросSoap.ЗаписатьКонецЭлемента();
ЗапросSoap.ЗаписатьНачалоЭлемента("soap:Body");
ЗапросSoap.ЗаписатьНачалоЭлемента("cal:SendCallbackRequestForNewConnection");
ЗапросSoap.ЗаписатьНачалоЭлемента("cal:phone");
ЗапросSoap.ЗаписатьТекст(СокрЛП(Телефон));
ЗапросSoap.ЗаписатьКонецЭлемента();
ЗапросSoap.ЗаписатьНачалоЭлемента("cal:name");
ЗапросSoap.ЗаписатьТекст(СокрЛП(Имя));
ЗапросSoap.ЗаписатьКонецЭлемента();
ЗапросSoap.ЗаписатьНачалоЭлемента("cal:inn");
ЗапросSoap.ЗаписатьКонецЭлемента();
ЗапросSoap.ЗаписатьКонецЭлемента();
ЗапросSoap.ЗаписатьКонецЭлемента();
ЗапросSoap.ЗаписатьКонецЭлемента();
Возврат ЗапросSoap.Закрыть();
КонецФункции
Функция ВыполнитьЗапросКСервисуСлужебная(Знач Телефон, Знач Имя) Экспорт
Таймаут = 60;
ОписаниеОшибки = "";
Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("https");
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(
Неопределено,
Новый СертификатыУдостоверяющихЦентровОС);
Хост = "callback.keydisk.ru";
Порт = 443;
Пользователь = Неопределено;
Пароль = Неопределено;
Запрос = Новый HTTPЗапрос("/callbackservice.asmx");
Запрос.УстановитьТелоИзСтроки(ПолучитьЗапрос(Телефон, Имя), "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
Запрос.Заголовки.Вставить("SOAPAction", "http://callback.keydisk.ru/SendCallbackRequestForNewConnection");
Запрос.Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");
Соединение = Новый HTTPСоединение(Хост, Порт, Пользователь, Пароль, Прокси, Таймаут, ЗащищенноеСоединение);
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Исключение
ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Возврат Новый Структура("Успешно, Код, ОписаниеОшибки", Ложь, 1, ТекстОшибки);
КонецПопытки;
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
Если ОтветСтрокой = Неопределено Тогда
ОтветСтрокой = "";
Возврат Новый Структура("Успешно, Код, ОписаниеОшибки", Ложь, 2, "Запрос не вернул никаких данных");
КонецЕсли;
ОтветСтрокой = СтрЗаменить(ОтветСтрокой, "xmlns=""","xmlns:dummy=""");
ОбработкаОтвета = Новый ЧтениеXML;
Попытка
ОбработкаОтвета.УстановитьСтроку(ОтветСтрокой);
Исключение
Возврат Новый Структура("Успешно, Код, ОписаниеОшибки", Ложь, 3, "Не удалось разобрать ответ");
КонецПопытки;
КодЗавершения = "";
ТекстОшибкиСервиса = "";
Построитель = Новый ПостроительDOM;
ДокументDOM = Построитель.Прочитать(ОбработкаОтвета);
Разыменователь = Новый РазыменовательПространствИменDOM("", "");
Результат = ДокументDOM.ВычислитьВыражениеXPath("//SendCallbackRequestForNewConnectionResult/Code", ДокументDOM, Разыменователь, ТипРезультатаDOMXPath.ПервыйУпорядоченныйУзел);
Если ТипЗнч(Результат.ОдиночныйУзелЗначение) = Тип("ЭлементDOM") Тогда
КодЗавершения = СокрЛП(Результат.ОдиночныйУзелЗначение.ТекстовоеСодержимое);
КонецЕсли;
Результат = ДокументDOM.ВычислитьВыражениеXPath("//SendCallbackRequestForNewConnectionResult/ErrorMessage", ДокументDOM, Разыменователь, ТипРезультатаDOMXPath.ПервыйУпорядоченныйУзел);
Если ТипЗнч(Результат.ОдиночныйУзелЗначение) = Тип("ЭлементDOM") Тогда
ТекстОшибкиСервиса = СокрЛП(Результат.ОдиночныйУзелЗначение.ТекстовоеСодержимое);
КонецЕсли;
Если КодЗавершения = "0" Тогда
Возврат Новый Структура("Успешно, Код, ОписаниеОшибки", Истина, 0, "");
Иначе
Возврат Новый Структура("Успешно, Код, ОписаниеОшибки, КодОшибкиСервиса", Ложь, 9, ТекстОшибкиСервиса, КодЗавершения);
КонецЕсли;
КонецФункции
Процедура ВыполнитьЗапросКСервису(Параметры, АдресРезультата) Экспорт
Результат = ВыполнитьЗапросКСервисуСлужебная(Параметры.Телефон, Параметры.Имя);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
#КонецОбласти
#Область ОрганизацияФоновыхЗаданий
Процедура ОбменССерверомСписокСерверовОблачнойПодписиФоновое(ПараметрыФункции, АдресРезультата) Экспорт
Результат = ПолучитьОбновленныйМодуль().ОбменССерверомСписокСерверовОблачнойПодписи(ПараметрыФункции);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
Процедура ОбменССерверомПроверитьЛогинФоновое(ПараметрыФункции, АдресРезультата) Экспорт
Результат = ПолучитьОбновленныйМодуль().ОбменССерверомПроверитьЛогин(ПараметрыФункции);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
Процедура ОбменССерверомАктивироватьУчетнуюЗаписьФоновое(ПараметрыФункции, АдресРезультата = Неопределено) Экспорт
Результат = ПолучитьОбновленныйМодуль().ОбменССерверомАктивироватьУчетнуюЗапись(ПараметрыФункции);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
Процедура ОбменССерверомАктивироватьКлючПриложенияУчетнойЗаписиФоновое(ПараметрыФункции, АдресРезультата = Неопределено) Экспорт
Результат = ПолучитьОбновленныйМодуль().ОбменССерверомАктивироватьКлючПриложенияУчетнойЗаписи(ПараметрыФункции);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
Процедура ОбменССерверомОтправитьКодАктивацииКлючаФоновое(ПараметрыФункции, АдресРезультата = Неопределено) Экспорт
Результат = ПолучитьОбновленныйМодуль().ОбменССерверомОтправитьКодАктивацииКлюча(ПараметрыФункции);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
Функция ПолучитьОбновленныйМодуль()
Результат = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Возврат Результат;
КонецФункции
Процедура ОтправитьЗапросСервисуСЭДОФССФоновое(ПараметрыФункции, АдресРезультата = Неопределено) Экспорт
Результат = ПолучитьОбновленныйМодуль().ОтправитьЗапросСервисуСЭДОФССФоновое(ПараметрыФункции);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
#КонецОбласти
#КонецЕсли