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