Расчетная ведомость по средствам ФСС (форма 4-ФСС) / Настройки загрузки из файла XML 2017 (кв.3) / Содержимое макета

файл
// Область "Настройки" описывает параметры инициализации механизма загрузки
// регламентированных отчетов из файлов выгрузки. Формат области настроек - JSON.
//
// Описание параметров:
//  * Установкой параметра "РазрешитьЗагрузку" в "true" или "false" регулируем видимость
//    кнопки "Загрузить" и возможность загрузки из файла в форме отчета.
//  * Параметр "ФорматыСхемВыгрузки" описывает соответствие имен макетов схем выгрузки
//    поддерживаемым форматам загрузки. Если у формы единственная схема выгрузки или
//    нужно всегда использовать схему по умолчанию - указываем значение "null".
//  * Параметр "ОбластиОбработчиков" содержит список имен используемых обработчиков
//    загружаемых данных. Имена соответствуют областям макета, в которых можно размещать
//    произвольные алгоритмы на языке "1С:Предприятие" для обработки доступных объектов.
//
// Примечание:
//  Сопоставление имен узлов из файла XML и имен показателей отчета выполняется по данным схемы выгрузки,
//  поэтому обработчики используются для получения значений показателей не описанных в схеме выгрузки.
//
#Область Настройки
{
	"РазрешитьЗагрузку"   : true,
	
	"ФорматыСхемВыгрузки" : null,
	"ОбластиОбработчиков" : {
		"ПередЗагрузкой"  : "ПредОбработкаСхемыЗагрузки",
		"ПослеЗагрузки"   : "ПостОбработкаДокументаОтчета",
	}
}
#КонецОбласти

// Доступны параметры:
//
//  П.ДеревоДляЗагрузки - выбранное дерево схемы загрузки, не заполненное данными;
//  П.ПараметрыОтчета   - параметры, сформированные в форме отчета, используются для выгрузки.
//
#Область ПредОбработкаСхемыЗагрузки
	
#КонецОбласти

// Доступны параметры:
//
//  П.ДанныеОтчета      - заполненные данные документа регламентированного отчета;
//  П.ДеревоДляЗагрузки - выбранное дерево схемы загрузки, не заполненное данными;
//  П.ПараметрыОтчета   - параметры, сформированные в форме отчета, используются для выгрузки.
//
#Область ПостОбработкаДокументаОтчета
	
	НачалоПоследнегоМесяцаОП     = НачалоМесяца(П.ДанныеОтчета.ДокументОтчета.ДатаОкончания);
	НачалоПредпоследнегоМесяцаОП = НачалоМесяца(НачалоПоследнегоМесяцаОП - 1);
	
	ЗначениеПараметра = Неопределено;
	П.ПараметрыОтчета.Свойство("Табл2Стр16Месяц1", ЗначениеПараметра);
	СуммаМесяц1 = ?(ЗначениеЗаполнено(ЗначениеПараметра), ЧислоИзСтроки(ЗначениеПараметра), 0);
	П.ПараметрыОтчета.Свойство("Табл2Стр16Месяц2", ЗначениеПараметра);
	СуммаМесяц2 = ?(ЗначениеЗаполнено(ЗначениеПараметра), ЧислоИзСтроки(ЗначениеПараметра), 0);
	П.ПараметрыОтчета.Свойство("Табл2Стр16Месяц3", ЗначениеПараметра);
	СуммаМесяц3 = ?(ЗначениеЗаполнено(ЗначениеПараметра), ЧислоИзСтроки(ЗначениеПараметра), 0);
	
	ГруппыТаблица2 = УзлыПоXPath(П.ДеревоДляЗагрузки, "/F4INFO/PAYM_ORDER"); // группы строк таблицы 2
	
	Если СуммаМесяц1 + СуммаМесяц2 + СуммаМесяц3 <> 0 Тогда
		
		НачИндекс = 0;
		
		НомСтроки = 0; ТекСуммаМесяц1 = 0;
		Для Инд = НачИндекс По ГруппыТаблица2.Количество() - 1 Цикл
			НачИндекс = НачИндекс + 1;
			ГруппаРаздела = ГруппыТаблица2[Инд];
			УзелСумма = УзлыПоXPath(ГруппаРаздела, "@SUM")[0];
			ТекСуммаМесяц1 = ТекСуммаМесяц1 + ЧислоИзСтроки(УзелСумма.Значение);
			Если ТекСуммаМесяц1 > СуммаМесяц1 Тогда
				НачИндекс = Инд;
				Прервать;
			КонецЕсли;
			НомСтроки = НомСтроки + 1;
			
			УзелСумма.Ключ = "П000020016101";
			УзлыПоXPath(ГруппаРаздела, "@NUM")[0].Ключ = "П000020016105";
			УзлыПоXPath(ГруппаРаздела, "@DT" )[0].Ключ = "П000020016104";
			ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(ГруппаРаздела, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
		КонецЦикла;
		
		НомСтроки = 0; ТекСуммаМесяц2 = 0;
		Для Инд = НачИндекс По ГруппыТаблица2.Количество() - 1 Цикл
			НачИндекс = НачИндекс + 1;
			ГруппаРаздела = ГруппыТаблица2[Инд];
			УзелСумма = УзлыПоXPath(ГруппаРаздела, "@SUM")[0];
			ТекСуммаМесяц2 = ТекСуммаМесяц2 + ЧислоИзСтроки(УзелСумма.Значение);
			Если ТекСуммаМесяц2 > СуммаМесяц2 Тогда
				НачИндекс = Инд;
				Прервать;
			КонецЕсли;
			НомСтроки = НомСтроки + 1;
			
			УзелСумма.Ключ = "П000020016201";
			УзлыПоXPath(ГруппаРаздела, "@NUM")[0].Ключ = "П000020016205";
			УзлыПоXPath(ГруппаРаздела, "@DT" )[0].Ключ = "П000020016204";
			ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(ГруппаРаздела, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
		КонецЦикла;
		
		НомСтроки = 0; ТекСуммаМесяц3 = 0;
		Для Инд = НачИндекс По ГруппыТаблица2.Количество() - 1 Цикл
			НачИндекс = НачИндекс + 1;
			ГруппаРаздела = ГруппыТаблица2[Инд];
			УзелСумма = УзлыПоXPath(ГруппаРаздела, "@SUM")[0];
			ТекСуммаМесяц3 = ТекСуммаМесяц3 + ЧислоИзСтроки(УзелСумма.Значение);
			Если ТекСуммаМесяц3 > СуммаМесяц3 Тогда
				НачИндекс = Инд;
				Прервать;
			КонецЕсли;
			НомСтроки = НомСтроки + 1;
			
			УзелСумма.Ключ = "П000020016301";
			УзлыПоXPath(ГруппаРаздела, "@NUM")[0].Ключ = "П000020016305";
			УзлыПоXPath(ГруппаРаздела, "@DT" )[0].Ключ = "П000020016304";
			ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(ГруппаРаздела, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
		КонецЦикла;
	
	Иначе
		
		НомСтроки = 0;
		Для Каждого ГруппаРаздела Из ГруппыТаблица2 Цикл
			УзелДата = УзлыПоXPath(ГруппаРаздела, "@DT" )[0];
			Если ДатаИзСтрокиЛюбогоФормата(УзелДата.Значение) >= НачалоПредпоследнегоМесяцаОП Тогда
				Продолжить;
			КонецЕсли;
			НомСтроки = НомСтроки + 1;
			
			УзелДата.Ключ = "П000020016104";
			УзлыПоXPath(ГруппаРаздела, "@NUM")[0].Ключ = "П000020016105";
			УзлыПоXPath(ГруппаРаздела, "@SUM")[0].Ключ = "П000020016101";
			ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(ГруппаРаздела, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
		КонецЦикла;
		
		НомСтроки = 0;
		Для Каждого ГруппаРаздела Из ГруппыТаблица2 Цикл
			УзелДата = УзлыПоXPath(ГруппаРаздела, "@DT" )[0];
			Если ДатаИзСтрокиЛюбогоФормата(УзелДата.Значение) < НачалоПредпоследнегоМесяцаОП
				ИЛИ ДатаИзСтрокиЛюбогоФормата(УзелДата.Значение) >= НачалоПоследнегоМесяцаОП Тогда
				Продолжить;
			КонецЕсли;
			НомСтроки = НомСтроки + 1;
			
			УзелДата.Ключ = "П000020016204";
			УзлыПоXPath(ГруппаРаздела, "@NUM")[0].Ключ = "П000020016205";
			УзлыПоXPath(ГруппаРаздела, "@SUM")[0].Ключ = "П000020016201";
			ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(ГруппаРаздела, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
		КонецЦикла;
		
		НомСтроки = 0;
		Для Каждого ГруппаРаздела Из ГруппыТаблица2 Цикл
			УзелДата = УзлыПоXPath(ГруппаРаздела, "@DT" )[0];
			Если ДатаИзСтрокиЛюбогоФормата(УзелДата.Значение) < НачалоПоследнегоМесяцаОП Тогда
				Продолжить;
			КонецЕсли;
			НомСтроки = НомСтроки + 1;
			
			УзелДата.Ключ = "П000020016304";
			УзлыПоXPath(ГруппаРаздела, "@NUM")[0].Ключ = "П000020016305";
			УзлыПоXPath(ГруппаРаздела, "@SUM")[0].Ключ = "П000020016301";
			ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(ГруппаРаздела, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
		КонецЦикла;
		
	КонецЕсли;
	
	ГруппаТаблица11 = УзлыПоXPath(П.ДеревоДляЗагрузки, "/F4DOGOV"); // группа строк таблицы 1.1
	
	Для НомСтроки = 1 По ГруппаТаблица11.Количество() Цикл
		УзелСтрокаСведений = ГруппаТаблица11[НомСтроки - 1];
		УзелЧислоВремРаб = УзлыПоXPath(УзелСтрокаСведений, "@WRK_P")[0];
		
		УзелНомерСтроки = СкопированныйУзел(УзелСтрокаСведений, УзелЧислоВремРаб);
		УзелНомерСтроки.Код  = "НомСтроки";
		УзелНомерСтроки.Ключ = "П000110000101";
		УзелНомерСтроки.Значение = Формат(НомСтроки, "ЧГ=0");
		
		ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(УзелСтрокаСведений, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
	КонецЦикла;
	
	ГруппаТаблица91 = УзлыПоXPath(П.ДеревоДляЗагрузки, "/F4DECODE"); // группа строк таблицы 9.1
	
	Для НомСтроки = 1 По ГруппаТаблица91.Количество() Цикл
		УзелИсточникиФинансирования = ГруппаТаблица91[НомСтроки - 1];
		УзелЧислоКлассРиска = УзлыПоXPath(УзелИсточникиФинансирования, "@ID_RISC")[0];
		
		УзелНомерСтроки = СкопированныйУзел(УзелИсточникиФинансирования, УзелЧислоКлассРиска);
		УзелНомерСтроки.Код  = "НомСтроки";
		УзелНомерСтроки.Ключ = "П000910000101";
		УзелНомерСтроки.МаксРазмерность = 6;
		УзелНомерСтроки.Значение = Формат(НомСтроки, "ЧГ=0");
		
		ЗаполнитьДаннымиСохраненныйДокументИзДереваДляЗагрузки(УзелИсточникиФинансирования, П.ДанныеОтчета, П.ПараметрыОтчета, , , НомСтроки);
	КонецЦикла;
	
	Таблица1 = Неопределено;
	
	П.ДанныеОтчета.ПоказателиОтчета.Свойство("ПолеТабличногоДокументаТаблица1", Таблица1);
	Если Таблица1 <> Неопределено Тогда
		ЗначениеПоказателя = Неопределено;
		Если Таблица1.Свойство("П000010000001", ЗначениеПоказателя) Тогда
			Таблица1.Вставить("П000010000001", ?(ЗначениеЗаполнено(ЗначениеПоказателя) И ЗначениеПоказателя <> "0", "Х", ""));
		КонецЕсли;
		Если Таблица1.Свойство("П000010000002", ЗначениеПоказателя) Тогда
			Таблица1.Вставить("П000010000002", ?(ЗначениеЗаполнено(ЗначениеПоказателя) И ЗначениеПоказателя <> "0", "Х", ""));
		КонецЕсли;
		
		Таблица1.Вставить("П000010000103", Таблица1.П000010000203 + Таблица1.П000010000303);
		Таблица1.Вставить("П000010000104", Таблица1.П000010000204 + Таблица1.П000010000304);
		Таблица1.Вставить("П000010000105", Таблица1.П000010000205 + Таблица1.П000010000305);
		Таблица1.Вставить("П000010000106", Таблица1.П000010000206 + Таблица1.П000010000306);
		
		П000010000903 = Окр(Таблица1.П000010000503 * (1 - Таблица1.П000010000603 / 100 + Таблица1.П000010000703 / 100), 2);
		Таблица1.Вставить("П000010000903", П000010000903);
	КонецЕсли;
	
	Титульный = Неопределено;
	
	П.ДанныеОтчета.ПоказателиОтчета.Свойство("ПолеТабличногоДокументаТитульный", Титульный);
	Если Титульный <> Неопределено Тогда
		
		БюджетнаяОрганизация = Неопределено;
		П.ПараметрыОтчета.Свойство("БюджетнаяОрганизация", БюджетнаяОрганизация);
		
		Титульный.КодПодчиненности = П.ПараметрыОтчета.КодПодчиненности;
		Титульный.НомДопРасчета    = ?(ЧислоИзСтроки(П.ПараметрыОтчета.НомДопРасчета) = 0, "", Прав("00" + П.ПараметрыОтчета.НомДопРасчета, 2));
		
		Титульный.ПрекращениеДеятельности = ?(ЧислоИзСтроки(П.ПараметрыОтчета.ПрекращениеДеятельности) = 1, "Л", "");
		Титульный.БюджетнаяОрганизация    = ?(ЧислоИзСтроки(БюджетнаяОрганизация) = 0, "", БюджетнаяОрганизация);
		
		Титульный.ЧислРаботников = П.ПараметрыОтчета.ЧислРаботников;
		Титульный.ЧислИнвалидов  = П.ПараметрыОтчета.ЧислИнвалидов;
		Титульный.ЧислВред       = П.ПараметрыОтчета.ЧислВред;
		
		Титульный.ПрПодп              = П.ПараметрыОтчета.ПризнакПодписанта;
		Титульный.ОргПодписантФамилия = П.ПараметрыОтчета.ОргДиректор;
		Титульный.ДокУпПред           = П.ПараметрыОтчета.ДокументПредставителя;
		
	КонецЕсли;
	
	Если ТипЗнч(П.ДанныеОтчета.ДеревоНастройкиСтраниц) = Тип("ДеревоЗначений") Тогда
		
		СписокЗаполненныхРазделов = П.ДанныеОтчета.СписокЗаполненныхРазделов;
		Для Каждого ОписаниеСтраницыРаздела Из П.ДанныеОтчета.ДеревоНастройкиСтраниц.Строки Цикл
			Если СписокЗаполненныхРазделов.НайтиПоЗначению(ОписаниеСтраницыРаздела.ИмяСтраницы) <> Неопределено
				И НЕ ЗначениеЗаполнено(ОписаниеСтраницыРаздела.ВыводНаПечать) Тогда
				ОписаниеСтраницыРаздела.ВыводНаПечать = 1;
				// Для автоматического включения страниц и записи изменений.
				ОписаниеСтраницыРаздела.ПоказатьСтраницу = 0;
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;
	
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = НСтр("ru='Снимите в меню ""Настройка"" флажок ""Отключить автоматический расчет вычисляемых ячеек"""
		+ " чтобы выполнить перерасчет всех рассчитываемых показателей.'");
	Сообщение.Сообщить();
	
#КонецОбласти

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