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

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Сейчас = Параметры.Сейчас;
	
	ИспользуетсяОднаОрганизация = РегламентированнаяОтчетностьВызовСервера.ИспользуетсяОднаОрганизация();
	
	ЗаполнитьТаблицуТребований();
	
	Если ТаблицаТребований.Количество() = 0 Тогда
		Отказ = Истина;
	Иначе
		УправлениеФормой();
	КонецЕсли;
	
	Если ТаблицаТребований.Количество() > 1 Тогда
		Ширина = 100;
		КлючСохраненияПоложенияОкна = "НесколькоТребований";
	Иначе
		Ширина = 80;
		КлючСохраненияПоложенияОкна = "ОдноТребование";
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
	ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
	// В процедуре ниже ничего не писать - это асинхронный метод!

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

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

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

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

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

&НаКлиенте
Процедура ТаблицаТребованийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтрТребование = ТаблицаТребований.НайтиПоИдентификатору(ВыбраннаяСтрока);
	ПоказатьЗначение(,СтрТребование.Требование);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НеПоказывать(Команда)
	
	Закрыть(Ложь);
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьОбщиеСведения(НоваяСтрока, КонтекстЭДОСервер, Требование, РасчетСрока)

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

&НаСервере
Процедура ЗаполнитьТаблицуТребований()

	ДобавитьТребующиеПодтверждения();
	ДобавитьТребующиеОтвета();
	
	Если ИспользуетсяОднаОрганизация Тогда
		ТаблицаТребований.Сортировать("Приоритет");
	Иначе
		ТаблицаТребований.Сортировать("Организация, Приоритет");
		СгруппироватьПоОрганизациям();
	КОнецЕсли;

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

&НаСервере
Процедура СгруппироватьПоОрганизациям()
	
	Если ИспользуетсяОднаОрганизация Тогда
		Возврат;
	КонецЕсли;
	
	Организация = "";
	й = 0;
	Пока й < ТаблицаТребований.Количество() Цикл
		
		Строка = ТаблицаТребований[й];
		Если Строка.Организация <> Организация Тогда
			НоваяСтрока = ТаблицаТребований.Вставить(й);
			НоваяСтрока.ВидДокумента = Строка.Организация;
			НоваяСтрока.Жирным = Истина;
			Организация = Строка.Организация;
		КонецЕсли;
		
		й = й + 1;

	КонецЦикла;

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

&НаСервере
Процедура ДобавитьТребующиеПодтверждения()

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

&НаСервере
Процедура ДобавитьТребующиеОтвета()

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

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

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

&НаСервере
Процедура УсловноеОформлениеТребований()
	
	ВыделитьЦветом(ЦветаСтиля.ЦветОшибкиОтправкиБРО);
	 
КонецПроцедуры

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

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

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

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