Документооборот с контролирующими органами / Новые события / Модуль формы

файл
&НаКлиенте
Перем КонтекстЭДОКлиент;

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Параметры.Свойство("АдресСведенийПоОшибкам", АдресСведенийПоОшибкам);
	Элементы.ОшибкиОбновления.Видимость = ЭтоАдресВременногоХранилища(АдресСведенийПоОшибкам);
	
	ОткрыватьВЛюбомСлучае = Параметры.Свойство("АдресДереваНовых") И ЗначениеЗаполнено(Параметры.АдресДереваНовых);
	
	АдресДереваНовых = Неопределено;
	Параметры.Свойство("АдресДереваНовых", АдресДереваНовых);
	ЗаполнитьДеревоНовое(АдресДереваНовых);
	
	Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = 'Обмен с контролирующими органами %1'"), Формат(ДатаПоследнегоОбновления, "ДФ='dd.MM.yyyy H:mm'"));
		
	Если Не КоличествоНовых И НЕ ОткрыватьВЛюбомСлучае Тогда
		Отказ = Истина;
	КонецЕсли;
	
	Попытка
		МодульСверкаСФНС = ОбщегоНазначения.ОбщийМодуль("СверкаСФНС");
	Исключение
	    МодульСверкаСФНС = Неопределено;
	КонецПопытки;
	
	Если МодульСверкаСФНС <> Неопределено Тогда
		МодульСверкаСФНС.ФормаНовыхСобытий_ПриСозданииНаСервере(ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// Оповещение в форму 1С-Отчетности для того, чтобы вместо формы новых открыть закладку Новые.
	Оповестить("Получены новые сообщения 1С-Отчетности", АдресСведенийПоОшибкам, ЭтаФорма);

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

&НаКлиенте
Процедура ИнициализацияКонтекстЭДОЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;
	ТекстОшибкиИнициализацииКонтекстаЭДО = Результат.ТекстОшибки;
	
	ОтметитьДеревоПросмотренным();
	
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ФормаНовыхСобытий_ПослеОткрытия();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТаблицаНовоеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Ссылка = Элемент.ТекущиеДанные.Ссылка;
	Если Поле.Имя = "ТаблицаНовоеОбъектНаименованиеСсылка" Тогда
		Если Элемент.ТекущиеДанные.ЕстьОтвет Тогда // есть ответ
			Если КонтекстЭДОКлиент <> Неопределено И НЕ ПереопределитьОткрытие(Элемент) Тогда
				Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗапросНаИнформационноеОбслуживаниеНалогоплательщика") Тогда
					КонтекстЭДОКлиент.ПоказатьОтветНаЗапросИОН(Ссылка);
				ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗапросНаИнформационноеОбслуживаниеСтрахователя") Тогда
					КонтекстЭДОКлиент.ПоказатьОтветНаЗапросИОС(Ссылка);
				ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗапросНаВыпискуИзЕГРЮЛ_ЕГРИП") Тогда
					КонтекстЭДОКлиент.ПоказатьОтветНаЗапросВыпискиЕГРЮЛ_ЕГРИП(Ссылка);
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли НЕ ПереопределитьОткрытие(Элемент) Тогда
			РедактироватьОбъект(Элемент);
		КонецЕсли;
	ИначеЕсли Поле.Имя = "ТаблицаНовоеСтатус" Тогда
		ПоказатьФормуСтатусовОтправкиИзСписка(Элемент);
	ИначеЕсли Поле.Имя = "ТаблицаНовоеЕстьКритическиеОшибкиОтправки" И Элемент.ТекущиеДанные.ЕстьКритическиеОшибкиОтправки Тогда
		ПоказатьКритическиеОшибкиПоСсылке(Ссылка);
	ИначеЕсли НЕ ПереопределитьОткрытие(Элемент) Тогда
		РедактироватьОбъект(Элемент);
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СообщениеПроОшибкиОбменаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;

	ВходящийКонтекст = ПолучитьИзВременногоХранилища(АдресСведенийПоОшибкам);
	
	ДлительнаяОтправкаКлиент.ПоказатьОшибки(КонтекстЭДОКлиент.ПутьКОбъекту, ВходящийКонтекст);
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОтметитьДеревоПросмотренным()
	
	ЭлектронныйДокументооборотСКонтролирующимиОрганами.ОтметитьДеревоПросмотренным(Новое);
	
КонецПроцедуры

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

КонецПроцедуры

&НаКлиенте
Процедура ПоказатьКритическиеОшибкиПоСсылке(Ссылка)
	
	Если КонтекстЭДОКлиент = Неопределено Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибкиИнициализацииКонтекстаЭДО);
		Возврат;
	КонецЕсли;
	
	КонтекстЭДОКлиент.ПоказатьКритическиеОшибкиПоСсылке(Ссылка);
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьКоличествоНовых(Форма)
	
	Форма.КоличествоНовых = ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ОбновитьКоличествоНовых(Форма);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДеревоНовое(АдресДереваНовых = Неопределено)
	
	Если АдресДереваНовых = Неопределено Тогда
	
		ИнициаторСеанса = Перечисления.ИнициаторыСеансовСвязиСКонтролирующимиОрганами.Автообмен;
		
		ДеревоНовое = РеквизитФормыВЗначение("Новое");
		ЭлектронныйДокументооборотСКонтролирующимиОрганами.ЗаполнитьДеревоНовое(ДеревоНовое, ИнициаторСеанса);
		ЗначениеВРеквизитФормы(ДеревоНовое, "Новое");
		
	Иначе
		
		ЗначениеВРеквизитФормы(ПолучитьИзВременногоХранилища(АдресДереваНовых), "Новое");
		
	КонецЕсли;
			
	ДатаПоследнегоОбновления = ЭлектронныйДокументооборотСКонтролирующимиОрганами.ДатаПоследнегоОбновленияСобытий(ИнициаторСеанса);
	
	Если Не ЗначениеЗаполнено(ДатаПоследнегоОбновления) Тогда
		ДатаПоследнегоОбновления = ТекущаяУниверсальнаяДата();
	КонецЕсли;
	
	ДатаПоследнегоОбновления = МестноеВремя(ДатаПоследнегоОбновления);
	
	ОбновитьКоличествоНовых(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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