&НаКлиенте
Перем КонтекстЭДО Экспорт;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
МассивОшибок = Параметры.Ошибки;
Параметры.Свойство("ЭтоОбмен", ЭтоОбмен);
Параметры.Свойство("ЭтоОтправка", ЭтоОтправка);
Параметры.Свойство("ЭтоРасшифровка", ЭтоРасшифровка);
Параметры.Свойство("ЭтоОбменИзОтчета", ЭтоОбменИзОтчета);
Параметры.Свойство("ЭтоОбменИзЭтаповОтправки", ЭтоОбменИзЭтаповОтправки);
Параметры.Свойство("ЭтоАвтозапрос", ЭтоАвтозапрос);
Параметры.Свойство("ЭтоОтправкаЗаявления", ЭтоОтправкаЗаявления);
ИспользуетсяОднаОрганизация = РегламентированнаяОтчетностьВызовСервера.ИспользуетсяОднаОрганизация();
ЗаполнитьДеревоОшибок(МассивОшибок);
УстановитьЗаголовок(Параметры);
ВывестиНадписьПроОшибки(МассивОшибок);
ДокументооборотСКОВызовСервера.ДобавитьСсылкуНаРекомендации(ЭтотОбъект, Элементы.Группа2, МассивОшибок, "ПолучениеСписка");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НадписьРекомендацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "РекомендацииСЭДО" Тогда
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Действие", "ПолучениеСписка");
Если ЕстьРеквизитРекомендаций() Тогда
ИмяРеквизита = ИмяРеквизитаДанныхРекомендацийСЭДО();
ПараметрыФормы.Вставить("ДанныеОшибок", ЭтаФорма[ИмяРеквизита]);
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.РекомендацииСЭДО",
ПараметрыФормы,
ЭтотОбъект,
УникальныйИдентификатор, , , ,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
КонтекстЭДО = Неопределено;
ВыполняемоеОповещение = Новый ОписаниеОповещения("ПослеПолученияКонтекстаЭДО", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ВыполняемоеОповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПолученияКонтекстаЭДО(ВхКонтекст, ДопПараметры) Экспорт
Если ВхКонтекст.КонтекстЭДО <> Неопределено Тогда
КонтекстЭДО = ВхКонтекст.КонтекстЭДО;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормы
&НаКлиенте
Процедура ОшибкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Перем КонтекстРасшифровки, КонтекстОбработки;
Если Поле.Имя = "ОписаниеОшибки"
Или Поле.Имя = "ОписаниеОшибкиСсылка" Тогда
Контекст = Элемент.ТекущиеДанные.ДанныеКонтекста;
Если Контекст <> Неопределено И Контекст.Свойство("ПриРасшифровке", КонтекстРасшифровки) Тогда
СтандартнаяОбработка = Ложь;
ОрганизацияРасшифровки = "";
Контекст.Свойство("ПриРасшифровкеОрганизация", ОрганизацияРасшифровки);
ОписаниеОшибки = "";
Контекст.Свойство("ОписаниеОшибки", ОписаниеОшибки);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Контекст", КонтекстРасшифровки);
ПараметрыФормы.Вставить("Организация", ОрганизацияРасшифровки);
ПараметрыФормы.Вставить("ОписаниеОшибки", ОписаниеОшибки);
Если Контекст.Свойство("ПараметрыПоказа") Тогда
ПараметрыФормы.Вставить("ПараметрыПоказа", Контекст.ПараметрыПоказа);
КонецЕсли;
Если КонтекстЭДО = Неопределено Тогда
ПоказатьПредупреждение(, "Не удалось инициализировать контекст ЭДО, форма управления нерасшифровываемыми сообщениями не может быть открыта");
Иначе
ФормаРезультат = ПолучитьФорму(
КонтекстЭДО.ПутьКОбъекту + ".Форма.Нерасшифровываемые_УправлениеОшибкамиОбмена",
ПараметрыФормы,
ЭтотОбъект);
ФормаРезультат.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ФормаРезультат.Открыть();
КонецЕсли;
Возврат;
ИначеЕсли Контекст <> Неопределено И Контекст.Свойство("ПриОбработке", КонтекстОбработки) Тогда
СтандартнаяОбработка = Ложь;
ОрганизацияОбработки = "";
Контекст.Свойство("ПриОбработкеОрганизация", ОрганизацияОбработки);
Если ЗначениеЗаполнено(КонтекстОбработки) И КонтекстОбработки[0].Свойство("АдресСсылки")
И ЗначениеЗаполнено(КонтекстОбработки[0].АдресСсылки) Тогда
АдресСсылки = КонтекстОбработки[0].АдресСсылки;
Если АдресСсылки = "НастройкиОбменаФСС" ИЛИ АдресСсылки = "НастройкиОбменаФСРАР"
ИЛИ АдресСсылки = "НастройкиОбменаРПН" ИЛИ АдресСсылки = "НастройкиОбменаФТС" Тогда
ПараметрыФормы = Новый Структура("ОрганизацияСсылка", ОрганизацияОбработки);
ОткрытьФорму(
"РегистрСведений." + АдресСсылки + ".ФормаЗаписи",
ПараметрыФормы,,,,,,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ИначеЕсли АдресСсылки = "НастройкиМЧДДляФСГС" Тогда
Если КонтекстЭДО = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не удалось инициализировать контекст ЭДО, форма настройки машиночитаемых доверенностей для Росстата не может быть открыта'"));
Иначе
ПараметрыПодключенияНаправления = Новый Структура;
ПараметрыПодключенияНаправления.Вставить("ЭтоПредставитель", Истина);
КонтекстЭДО.ОткрытьФормуПодключенияНаправленияСдачиОтчетности(
Неопределено,
ОрганизацияОбработки,
Неопределено,
ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС"),
Неопределено,,
ПараметрыПодключенияНаправления,
Истина);
КонецЕсли;
ИначеЕсли АдресСсылки = "НастройкиМЧДДляПФР" Тогда
Если КонтекстЭДО = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не удалось инициализировать контекст ЭДО, форма настройки машиночитаемых доверенностей для Росстата не может быть открыта'"));
Иначе
ПараметрыОтключенияНаправления = Новый Структура;
ПараметрыОтключенияНаправления.Вставить("ЭтоПредставитель", Истина);
КонтекстЭДО.ОткрытьФормуОтключенияНаправленияСдачиОтчетности(
Неопределено,
ОрганизацияОбработки,
ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ПФР"),
ПараметрыОтключенияНаправления,
Истина);
КонецЕсли;
Иначе
ПерейтиПоНавигационнойСсылке(АдресСсылки);
КонецЕсли;
КонецЕсли;
Возврат;
ИначеЕсли Контекст <> Неопределено И Контекст.Свойство("ПриИзвлеченииАрхива", КонтекстРасшифровки) Тогда
СтандартнаяОбработка = Ложь;
ОрганизацияАрхива = "";
Контекст.Свойство("ПриИзвлеченииАрхиваОрганизация", ОрганизацияАрхива);
ОписаниеОшибки = "";
Контекст.Свойство("ОписаниеОшибки", ОписаниеОшибки);
Если КонтекстЭДО = Неопределено Тогда
ПоказатьПредупреждение(, "Не удалось инициализировать контекст ЭДО, форма управления нерасшифровываемыми сообщениями не может быть открыта");
Иначе
КонтекстЭДО.ПолучениеПеремещенныхФайлов(КонтекстРасшифровки, ОрганизацияАрхива, "ДлительнаяОперация", Неопределено);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
ОписаниеОшибки = Элемент.ТекущиеДанные.ОписаниеОшибки;
ПоказатьЗначение(,ОписаниеОшибки);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьЗаголовок(Параметры)
Если ЭтоРасшифровка Тогда
Заголовок = НСтр("ru = 'Ошибки расшифровки'");
ИначеЕсли ЭтоОбмен Тогда
Заголовок = НСтр("ru = 'Ошибки обновления'");
ИначеЕсли ЭтоАвтозапрос Тогда
Заголовок = НСтр("ru = 'Протокол не получен'");
Иначе
Заголовок = Параметры.Заголовок;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УбратьТочкуВКонце(Знач Сообщение)
Сообщение = СокрП(Сообщение);
Пока Прав(Сообщение, 1) = "." Цикл
Сообщение = Сред(Сообщение, 1, СтрДлина(Сообщение) - 1);
КонецЦикла;
Возврат Сообщение;
КонецФункции
&НаСервере
Процедура ЗаполнитьДеревоОшибок(МассивОшибок)
Перем КонтекстРасшифровки, КонтекстОбработки, КонтекстАрхива;
Ошибки = Новый ТаблицаЗначений;
Ошибки.Колонки.Добавить("ОписаниеОшибки");
Ошибки.Колонки.Добавить("Организация");
Ошибки.Колонки.Добавить("Контекст");
КонтекстЭДО = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Организации = Новый Массив;
Для каждого Ошибка Из МассивОшибок Цикл
НоваяОшибка = Ошибки.Добавить();
НоваяОшибка.ОписаниеОшибки = Ошибка.ОписаниеОшибки;
НоваяОшибка.Организация = Ошибка.Организация;
Ошибка.Свойство("ПриРасшифровке", КонтекстРасшифровки);
Ошибка.Свойство("ПриИзвлеченииАрхива", КонтекстАрхива);
Если ЗначениеЗаполнено(КонтекстРасшифровки) Тогда
НоваяОшибка.Контекст = Новый Структура;
НоваяОшибка.Контекст.Вставить("ПриРасшифровке", КонтекстРасшифровки);
НоваяОшибка.Контекст.Вставить("ПриРасшифровкеОрганизация", Ошибка.Организация);
НоваяОшибка.Контекст.Вставить("ОписаниеОшибки", НоваяОшибка.ОписаниеОшибки);
Если КонтекстРасшифровки.Количество() > 1 Тогда
НоваяОшибка.ОписаниеОшибки =
СтрШаблон("%1 (%2 ошиб%3).",
УбратьТочкуВКонце(НоваяОшибка.ОписаниеОшибки),
КонтекстРасшифровки.Количество(),
КонтекстЭДО.ПростоеСклонение(КонтекстРасшифровки.Количество(), "ка", "ки", "ок"));
КонецЕсли;
Если Ошибка.Свойство("ПараметрыПоказа") Тогда
НоваяОшибка.Контекст.Вставить("ПараметрыПоказа", Ошибка.ПараметрыПоказа);
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(КонтекстАрхива) Тогда
НоваяОшибка.Контекст = Новый Структура;
НоваяОшибка.Контекст.Вставить("ПриИзвлеченииАрхива", КонтекстАрхива);
НоваяОшибка.Контекст.Вставить("ПриИзвлеченииАрхиваОрганизация", Ошибка.Организация);
НоваяОшибка.Контекст.Вставить("ОписаниеОшибки", НоваяОшибка.ОписаниеОшибки);
Если КонтекстАрхива.Количество() > 1 Тогда
НоваяОшибка.ОписаниеОшибки =
СтрШаблон("%1 (%2 ошиб%3).",
УбратьТочкуВКонце(НоваяОшибка.ОписаниеОшибки),
КонтекстАрхива.Количество(),
КонтекстЭДО.ПростоеСклонение(КонтекстАрхива.Количество(), "ка", "ки", "ок"));
КонецЕсли;
Иначе
Ошибка.Свойство("ПриОбработке", КонтекстОбработки);
Если ЗначениеЗаполнено(КонтекстОбработки) Тогда
НоваяОшибка.Контекст = Новый Структура;
НоваяОшибка.Контекст.Вставить("ПриОбработке", КонтекстОбработки);
НоваяОшибка.Контекст.Вставить("ПриОбработкеОрганизация", Ошибка.Организация);
НоваяОшибка.Контекст.Вставить("ОписаниеОшибки", НоваяОшибка.ОписаниеОшибки);
Если КонтекстОбработки.Количество() > 1 Тогда
НоваяОшибка.ОписаниеОшибки =
СтрШаблон("%1 (%2 ошиб%3).",
УбратьТочкуВКонце(НоваяОшибка.ОписаниеОшибки),
КонтекстОбработки.Количество(),
КонтекстЭДО.ПростоеСклонение(КонтекстОбработки.Количество(), "ка", "ки", "ок"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Организации.Найти(Ошибка.Организация) = Неопределено Тогда
Организации.Добавить(Ошибка.Организация);
КонецЕсли;
КонецЦикла;
ДеревоОшибок = РеквизитФормыВЗначение("ОшибкиПоОрганизациям");
Если ИспользуетсяОднаОрганизация
ИЛИ ЭтоОбменИзОтчета
ИЛИ ЭтоОбменИзЭтаповОтправки
ИЛИ ЭтоОтправка
ИЛИ ЭтоОтправкаЗаявления Тогда
СформироватьДеревоОшибокПлоско(ДеревоОшибок, Ошибки);
Иначе
СформироватьДеревоОшибокПоОрганизациям(ДеревоОшибок, Организации, Ошибки);
КонецЕсли;
ЗначениеВРеквизитФормы(ДеревоОшибок, "ОшибкиПоОрганизациям");
КонецПроцедуры
&НаСервере
Процедура СформироватьДеревоОшибокПоОрганизациям(ДеревоОшибок, Организации, Ошибки)
Корень = ДеревоОшибок.Строки;
Для каждого Организация Из Организации Цикл
УровеньОрганизации = Корень.Добавить();
УровеньОрганизации.ОписаниеОшибки = Организация;
УровеньОрганизации.ЭтоЗаголовок = Истина;
Отбор = Новый Структура();
Отбор.Вставить("Организация", Организация);
ОшибкиПоОрганизации = Ошибки.НайтиСтроки(Отбор);
Для каждого ОшибкаПоОрганизации Из ОшибкиПоОрганизации Цикл
УровеньОшибки = УровеньОрганизации.Строки.Добавить();
УровеньОшибки.ОписаниеОшибки = ОшибкаПоОрганизации.ОписаниеОшибки;
Если ЗначениеЗаполнено(ОшибкаПоОрганизации.Контекст) Тогда
УровеньОшибки.ДанныеКонтекста = ОшибкаПоОрганизации.Контекст;
УровеньОшибки.ОписаниеОшибкиСсылка = УровеньОшибки.ОписаниеОшибки;
УровеньОшибки.ИспользоватьКолонкуСсылки = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Элементы.ОшибкиПоОрганизациям.Отображение = ОтображениеТаблицы.Список;
КонецПроцедуры
&НаСервере
Процедура СформироватьДеревоОшибокПлоско(ДеревоОшибок, Ошибки)
Корень = ДеревоОшибок.Строки;
Для каждого Ошибка Из Ошибки Цикл
УровеньОшибки = Корень.Добавить();
УровеньОшибки.ОписаниеОшибки = Ошибка.ОписаниеОшибки;
Если ЗначениеЗаполнено(Ошибка.Контекст) Тогда
УровеньОшибки.ДанныеКонтекста = Ошибка.Контекст;
УровеньОшибки.ОписаниеОшибкиСсылка = УровеньОшибки.ОписаниеОшибки;
УровеньОшибки.ИспользоватьКолонкуСсылки = Истина;
КонецЕсли;
КонецЦикла;
Элементы.ОшибкиПоОрганизациям.Отображение = ОтображениеТаблицы.Список;
КонецПроцедуры
&НаСервере
Процедура ВывестиНадписьПроОшибки(МассивОшибок)
Если ЭтоРасшифровка Тогда
Надпись = НСтр("ru = 'Обратите внимание, при расшифровке возникли следующие ошибки:'");
ИначеЕсли ЭтоОбмен Тогда
Надпись = НСтр("ru = 'Обратите внимание, при обновлении возникли следующие ошибки:'");
ИначеЕсли ЭтоОтправка Тогда
Надпись = НСтр("ru = 'Возникли следующие ошибки:'");
ИначеЕсли ЭтоОтправкаЗаявления Тогда
Надпись = НСтр("ru = 'Обратите внимание, при отправке заявления возникли следующие ошибки:'");
Иначе
Надпись = НСтр("ru = 'Обратите внимание, при обновлении возникли следующие ошибки:'");
КонецЕсли;
Элементы.НадписьПроКоличествоОшибок.Заголовок = Надпись;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИмяРеквизитаДанныхРекомендацийСЭДО()
Возврат "РекомендацияСЭДО_ДанныеОшибок";
КонецФункции
&НаСервере
Функция ЕстьРеквизитРекомендаций()
Результат = Ложь;
Реквизиты = ЭтотОбъект.ПолучитьРеквизиты();
Для каждого Реквизит Из Реквизиты Цикл
Если Реквизит.Имя = ИмяРеквизитаДанныхРекомендацийСЭДО() Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
#Область ПереключениеНаОбменЧерезОператораСЭДО
&НаКлиенте
Процедура Подключаемый_НадписьПереключениеНаОператораСЭДООбработкаНавигационнойСсылки(
Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "РекомендацииСЭДО" Тогда
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Действие", "ПолучениеСписка");
Если ЕстьРеквизитРекомендаций() Тогда
ИмяРеквизита = ИмяРеквизитаДанныхРекомендацийСЭДО();
ПараметрыФормы.Вставить("ДанныеОшибок", ЭтаФорма[ИмяРеквизита]);
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.РекомендацииСЭДО",
ПараметрыФормы,
ЭтотОбъект,
УникальныйИдентификатор, , , ,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ЭлектронныйДокументооборотСФССКлиент.ПереключениеНаОператораСЭДООбработкаНавигационнойСсылки(
ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти