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

файл

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Результат = ПолучитьИзВременногоХранилища(Параметры.АдресДанныхСверки);
	Если Результат.Количество() > 0 Тогда
		
		Расшифровка = СтрРазделить(Параметры.НомерСтрокиСверки, ";");
		
		ДанныеАктаСверки = Результат[Число(Расшифровка[0])]; // выбор акта сверки из таблицы сверок
		
		// Передаем строку сверки, по которой нужно вывести расшифровку.
		КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
		СформироватьРасшифровку(ДанныеАктаСверки, Число(Расшифровка[1]));
		
	Иначе
		
		ВызватьИсключение НСтр("ru = 'Данные для расшифровки отсутствуют'");
		
	КонецЕсли;
	
КонецПроцедуры

// Функция - формирует табличный документ с расшифровкой поля акта сверки.
//
// Параметры:
//  ДанныеАктаСверки	 - 	Структура - данные акта сверки с ФНС.
//  НомерСтрокиСверки	 - 	Число - строка, по которой нужно сформировать расшифровку.
// 
// Возвращаемое значение:
//  ТабличныйДокумент - табличный документ с расшифровкой строки акта сверки.
//
&НаСервере
Функция СформироватьРасшифровку(ДанныеАктаСверки, НомерСтрокиСверки) Экспорт
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	
	МакетРасшифровки      = КонтекстЭДОСервер.ПолучитьМакет("РасшифровкаАктаСверкиСФНС");
	СтрокаДанныхНалога    = ДанныеАктаСверки.Раздел2[НомерСтрокиСверки];
	РасшифровкаАктаСверки = Новый ТабличныйДокумент;
	
	// ШАПКА -------------------------------------------------
	Шапка = МакетРасшифровки.ПолучитьОбласть("Шапка");
	Шапка.Параметры.НаименованиеИФНС         = ДанныеАктаСверки.НаименованиеИФНС;
	Шапка.Параметры.НаименованиеОрганизации  = ДанныеАктаСверки.НаименованиеОрганизации;
	Шапка.Параметры.ИННОрганизации           = ДанныеАктаСверки.ИНН;
	Если ДанныеАктаСверки.ЭтоЮрЛицо Тогда
		Шапка.Параметры.ЗаголовокИНН         = НСтр("ru = 'ИНН / КПП:'");
		Шапка.Параметры.КППОрганизации       = " / " + ДанныеАктаСверки.КПП;
	Иначе
		Шапка.Параметры.ЗаголовокИНН         = НСтр("ru = 'ИНН:'");
	КонецЕсли;
	
	Шапка.Параметры.НаименованиеНалога       = СтрокаДанныхНалога.НаименованиеНалога;
	Шапка.Параметры.НаименованиеПолное       = СтрокаДанныхНалога.НаименованиеПолное;
	Шапка.Параметры.КБК                      = СтрокаДанныхНалога.КБК;
	Шапка.Параметры.ОКТМО                    = СтрокаДанныхНалога.ОКТМО;
	
	РасшифровкаАктаСверки.Вывести(Шапка);
	
	// САЛЬДО НА НАЧАЛО --------------------------------------
	
	ДанныеРаздела = ПодготовкаДанныхРасшифровки(МакетРасшифровки, "СальдоНаНачалоТело", СтрокаДанныхНалога);
	Если ДанныеРаздела.ЕстьДанные Тогда
		
		МакетДанных = МакетРасшифровки.ПолучитьОбласть("СальдоНаНачалоШапка");
		МакетДанных.Параметры.ДатаНачала = Формат(ДанныеАктаСверки.ДатаНачала, "ДЛФ=D");
		
		РасшифровкаАктаСверки.Вывести(МакетДанных);
		
		РасшифровкаАктаСверки.Вывести(ДанныеРаздела.ТабДокумент);
		
	КонецЕсли;
	
	// ОБОРОТЫ ЗА ПЕРИОД --------------------------------------
	
	ДанныеРаздела = ПодготовкаДанныхРасшифровки(МакетРасшифровки, "ОборотыЗаПериодТело", СтрокаДанныхНалога);
	Если ДанныеРаздела.ЕстьДанные Тогда
		
		МакетДанных = МакетРасшифровки.ПолучитьОбласть("ОборотыЗаПериодШапка");
		МакетДанных.Параметры.ПериодСверки = ПредставлениеПериода(
			НачалоДня(ДанныеАктаСверки.ДатаНачала), КонецДня(ДанныеАктаСверки.ДатаОкончания), "ФП = Истина");
		
		РасшифровкаАктаСверки.Вывести(МакетДанных);
		
		РасшифровкаАктаСверки.Вывести(ДанныеРаздела.ТабДокумент);
		
	КонецЕсли;
	
	// САЛЬДО НА КОНЕЦ ---------------------------------------
	
	ДанныеРаздела = ПодготовкаДанныхРасшифровки(МакетРасшифровки, "СальдоНаКонецТело", СтрокаДанныхНалога);
	Если ДанныеРаздела.ЕстьДанные Тогда
	
		МакетДанных = МакетРасшифровки.ПолучитьОбласть("СальдоНаКонецШапка");
		МакетДанных.Параметры.ДатаОкончания = Формат(ДанныеАктаСверки.ДатаОкончания, "ДЛФ=D");
		
		РасшифровкаАктаСверки.Вывести(МакетДанных);
	
		РасшифровкаАктаСверки.Вывести(ДанныеРаздела.ТабДокумент);
		
	КонецЕсли;
	
	// НЕЗАЧИСЛЕННЫЕ ПЛАТЕЖИ ---------------------------------
	
	ДанныеРаздела = ПодготовкаДанныхРасшифровки(МакетРасшифровки, "НезачисленныеСредстваТело", СтрокаДанныхНалога);
	Если ДанныеРаздела.ЕстьДанные Тогда
		
		МакетДанных = МакетРасшифровки.ПолучитьОбласть("НезачисленныеСредстваШапка");
		
		РасшифровкаАктаСверки.Вывести(МакетДанных);
		
		РасшифровкаАктаСверки.Вывести(ДанныеРаздела.ТабДокумент);
		
	КонецЕсли;
	
	Возврат РасшифровкаАктаСверки;
	
КонецФункции

&НаСервере
Функция ПодготовкаДанныхРасшифровки(МакетРасшифровки, ИмяОбласти, СтрокаДанныхНалога)

	ТабДокумент = Новый ТабличныйДокумент;
	
	ТабДокумент.НачатьАвтогруппировкуСтрок();
	
	МакетДанных = МакетРасшифровки.ПолучитьОбласть(ИмяОбласти);
	МакетДанных.Параметры.Заполнить(СтрокаДанныхНалога);
	
	ЕстьДанные = Ложь;
	ВывестиУровень3 = Истина;
	Для НомерСтроки = 1 По МакетДанных.ВысотаТаблицы Цикл
		
		УровеньГруппировки = Число(МакетДанных.Область(НомерСтроки, 5).Текст);
		Если УровеньГруппировки = 3 И Не ВывестиУровень3 Тогда
			
			Продолжить; // не выводим 3 уровень группировки, в расшифровке дохода бюджета только 1 строка
			
		Иначе
			ВывестиУровень3 = Истина;
		КонецЕсли;
		
		// Проверка условий вывода 3 уровня
		НаименованиеПараметра = МакетДанных.Область(НомерСтроки, 6).Текст;
		Если (НаименованиеПараметра = "НалогЗадолженностьНаНачало"
			И СтрокаДанныхНалога.НалогЗадолженностьНаНачало = СтрокаДанныхНалога.НачальныйОстатокНалогОтрицательноеСальдо)
			
			ИЛИ (НаименованиеПараметра = "ПеняЗадолженностьНаНачало"
				И СтрокаДанныхНалога.ПеняЗадолженностьНаНачало = СтрокаДанныхНалога.НачальныйОстатокПениОтрицательноеСальдо)
				
			ИЛИ (НаименованиеПараметра = "ШтрафЗадолженностьНаНачало"
				И СтрокаДанныхНалога.ШтрафЗадолженностьНаНачало = СтрокаДанныхНалога.НачальныйОстатокШтрафОтрицательноеСальдо)
			
			ИЛИ (НаименованиеПараметра = "УплаченоНалогВсего"
				И СтрокаДанныхНалога.УплаченоНалогВсего = СтрокаДанныхНалога.УплаченоНалог)
				
			ИЛИ (НаименованиеПараметра = "УплаченоПениВсего"
				И СтрокаДанныхНалога.УплаченоПениВсего = СтрокаДанныхНалога.УплаченоПени)
				
			ИЛИ (НаименованиеПараметра = "УплаченоШтрафВсего"
				И СтрокаДанныхНалога.УплаченоШтрафВсего = СтрокаДанныхНалога.УплаченоШтраф)
				
			ИЛИ (НаименованиеПараметра = "НалогЗадолженностьНаКонец"
				И СтрокаДанныхНалога.НалогЗадолженностьНаКонец = СтрокаДанныхНалога.КонечныйОстатокНалогОтрицательноеСальдо)
				
			ИЛИ (НаименованиеПараметра = "ПеняЗадолженностьНаКонец"
				И СтрокаДанныхНалога.ПеняЗадолженностьНаКонец = СтрокаДанныхНалога.КонечныйОстатокПениОтрицательноеСальдо)
				
			ИЛИ (НаименованиеПараметра = "ШтрафЗадолженностьНаКонец"
				И СтрокаДанныхНалога.ШтрафЗадолженностьНаКонец = СтрокаДанныхНалога.КонечныйОстатокШтрафОтрицательноеСальдо)
				
			Тогда
			
			ВывестиУровень3 = Ложь;
			
		КонецЕсли;
		
		МакетСтрокиДанных = МакетДанных.ПолучитьОбласть(НомерСтроки, 1, НомерСтроки, 4);
		Для Каждого ПараметрМакета Из МакетСтрокиДанных.Параметры Цикл
			
			Если ЗначениеЗаполнено(ПараметрМакета) Тогда
				
				ТабДокумент.Вывести(МакетСтрокиДанных, УровеньГруппировки,, Истина);
				ЕстьДанные = Истина;
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;
	
	ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
	
	Возврат Новый Структура("ТабДокумент, ЕстьДанные", ТабДокумент, ЕстьДанные);
	
КонецФункции

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