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