Документооборот с контролирующими органами / Отправка УПУП после одобрения ЗПЭД / Модуль формы

файл

#Область ОписаниеПеременных

#КонецОбласти

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СформироватьТаблицуУПУПов(Отказ);
	ИзменитьОформлениеФормы(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	Если ПрограммноеЗакрытие Тогда
		Возврат;
	КонецЕсли;
	
	Отказ = Истина;
	ПодключитьОбработчикОжидания("Подключаемый_ПередЗакрытием", 0.1, Истина);
		
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДокументов

&НаКлиенте
Процедура ТаблицаДокументовПометкаПриИзменении(Элемент)
	
	ИзменитьОформлениеФормы(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДокументовПредставлениеОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекущиеДанные = Элементы.ТаблицаДокументов.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
		ПоказатьЗначение(,ТекущиеДанные.Ссылка);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОтправитьМЧДСейчас(Команда)
	
	Для каждого Строка Из ТаблицаДокументов Цикл
		Строка.ОписаниеОшибки = "";
		Строка.Выполнено = Ложь;
		Строка.СостояниеОтправки = "";
	КонецЦикла;
	
	ИзменитьОформлениеФормы(Истина);
	Заголовок = НСтр("ru = 'Подождите, пожалуйста...'");
	
	ОтправитьМЧДЦикл(0);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ИзменитьОформлениеФормы(ЭтоОтправка)
	
	Нужно = НужноОтправить();
	
	Элементы.ОтправитьМЧДСейчас.Видимость = Нужно И НЕ ЭтоОтправка;
	Элементы.ОтправитьМЧДЗакрыть.Видимость = НЕ Нужно И НЕ ЭтоОтправка;
	
	ЕстьОшибки = ЕстьОшибкиОтправки();
	Элементы.Ошибка_ЧтоДелать.Видимость = НЕ ЭтоОтправка И ЕстьОшибки;
	
	Если НЕ ЭтоОтправка И ЕстьОшибки Тогда
		Элементы.ОтправитьМЧДСейчас.Заголовок = НСтр("ru = 'Повторить отправку'");
	КонецЕсли;
		
КонецФункции

&НаСервере
Процедура СформироватьТаблицуУПУПов(Отказ)
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	УПУПы = КонтекстЭДОСервер.УПУПыКОтправкеПослеОдобренияЗПЭД();
	
	Для каждого УПУП Из УПУПы Цикл
		
		Отбор = Новый Структура();
		Отбор.Вставить("Организация", УПУП.Организация);
		
		ЭтоДубль = ТаблицаДокументов.НайтиСтроки(Отбор).Количество() > 0;

		Если НЕ ЭтоДубль Тогда
			НоваяСтрока = ТаблицаДокументов.Добавить();
			НоваяСтрока.Ссылка = УПУП.Ссылка;
			НоваяСтрока.Организация = УПУП.Организация;
			НоваяСтрока.Пометка = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Если ТаблицаДокументов.Количество() = 0 Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПередЗакрытием()
	
	ПередЗакрытиемНаСервере();
	ПрограммноеЗакрытие = Истина;
	Закрыть();
		
КонецПроцедуры

&НаСервере
Процедура ПередЗакрытиемНаСервере()
	
	ПараметрыСеанса.ОрганизацииПринятыхЗПЭД = Новый ФиксированныйМассив(Новый Массив);
		
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьМЧДЦикл(ТекущийНомер)

	Если ТекущийНомер = ТаблицаДокументов.Количество() Тогда
		
		ИзменитьОформлениеФормы(Ложь);
		
		Заголовок = НСтр("ru = 'Результат отправки МЧД'");
		
	Иначе
		
		ТекущаяСтрока = ТаблицаДокументов[ТекущийНомер];
		ТекущаяСтрока.СостояниеОтправки = НСтр("ru = 'Отправляется...'");
		Ссылка = ТекущаяСтрока.Ссылка;
		
		СертификатРуководителяОтпечаток = ОтпечатокРуководителя(ТекущаяСтрока.Организация);
		
		ОписаниеОповещения = Новый ОписаниеОповещения(
			"ОтправитьМЧД_ПослеОбработкиОдного", 
			ЭтотОбъект,
			ТекущийНомер);
			
		ДокументооборотСКОКлиент.ОтправитьМЧД(ОписаниеОповещения, Ссылка, СертификатРуководителяОтпечаток);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ОтпечатокРуководителя(Организация)
	
	Возврат ДокументооборотСКОВызовСервера.ОтпечатокРуководителя(Организация);

КонецФункции

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

&НаСервере
Функция НужноОтправить()
	
	Отбор = Новый Структура();
	Отбор.Вставить("Пометка", Истина);
	
	Возврат ТаблицаДокументов.НайтиСтроки(Отбор).Количество();
		
КонецФункции

&НаСервере
Функция ЕстьОшибкиОтправки()
	
	Отбор = Новый Структура();
	Отбор.Вставить("Пометка", Истина);
	Отбор.Вставить("Выполнено", Ложь);
	
	Строки = ТаблицаДокументов.НайтиСтроки(Отбор);
	Для каждого Строка Из Строки Цикл
		Если ЗначениеЗаполнено(Строка.ОписаниеОшибки) Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Ложь;
		
КонецФункции

&НаКлиенте
Процедура ТаблицаДокументовПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры


#КонецОбласти

Связанные материалы