1s Отчет по неустойкам оплаченным и неоплаченным


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	НайденныйПараметрКоличествоДнейМоментаНачалаНачисленияПениДоОплаты = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КоличествоДнейМоментаНачалаНачисленияПениДоОплаты");
	НайденныйПараметрНачалоПериода = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
	НайденныйПараметрСрокОплатыРабочиеДни = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("СрокОплатыРабочиеДни");
	
	Если НайденныйПараметрКоличествоДнейМоментаНачалаНачисленияПениДоОплаты > Неопределено И НайденныйПараметрНачалоПериода > Неопределено И НайденныйПараметрСрокОплатыРабочиеДни > Неопределено Тогда
		НайденныйПараметрКоличествоДнейМоментаНачалаНачисленияПениДоОплаты.Использование = Истина;
		НайденныйПараметрНачалоПериода.Использование = Истина;
		
		НайденныйПараметрСрокОплатыРабочиеДни.Использование = Истина;
		
		Состояние("Обработка производственного календаря");
		Запрос = Новый Запрос;
		
		Если НайденныйПараметрСрокОплатыРабочиеДни.Значение Тогда
				
			Запрос.Текст = "ВЫБРАТЬ
			               |	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Дата
			               |ПОМЕСТИТЬ Даты
			               |ИЗ
			               |	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
						   |ГДЕ
						   |	НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) >= НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)
			               |;
			               |
			               |////////////////////////////////////////////////////////////////////////////////
			               |ВЫБРАТЬ
			               |	Даты.Дата,
			               |	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней,
			               |	МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДатаКалендаря,
			               |	РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки
			               |ПОМЕСТИТЬ ДатыПроизводственногоКалендаря
			               |ИЗ
			               |	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
			               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты
			               |		ПО (Даты.Дата 
			               |			И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, 30) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
			               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1
			               |		ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря 
			               |ГДЕ
			               |	(РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
			               |			ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий))
			               |
			               |СГРУППИРОВАТЬ ПО
			               |	РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря,
			               |	Даты.Дата
			               |
			               |ИМЕЮЩИЕ
			               |	МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря И
			               |	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &КоличествоДнейМоментаНачалаНачисленияПениДоОплаты + 2
			               |;
			               |
			               |////////////////////////////////////////////////////////////////////////////////
			               |ВЫБРАТЬ
			               |	Даты.Дата КАК ДатаКалендаря,
			               |	МИНИМУМ(ДатыПроизводственногоКалендаря.ДатаКалендаря) КАК РабочаяДата
			               |ПОМЕСТИТЬ РабочиеДаты
			               |ИЗ
			               |	Даты КАК Даты
			               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПроизводственногоКалендаря КАК ДатыПроизводственногоКалендаря
			               |		ПО Даты.Дата 
						   //|ГДЕ
						   //|	Даты.Дата >= &НачалоПериода
			               |
			               |СГРУППИРОВАТЬ ПО
			               |	Даты.Дата
			               |;
			               |
			               |////////////////////////////////////////////////////////////////////////////////
			               |ВЫБРАТЬ
			               |	РабочиеДаты.ДатаКалендаря КАК ДатаКалендаря,
			               |	РабочиеДаты.РабочаяДата КАК ДатаНачалаВозникновения
			               |ИЗ
			               |	РабочиеДаты КАК РабочиеДаты
			               |
			               |УПОРЯДОЧИТЬ ПО
			               |	ДатаКалендаря";
		Иначе
			Запрос.Текст = "ВЫБРАТЬ
			               |	РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря,
			               |	ДОБАВИТЬКДАТЕ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ, &КоличествоДнейМоментаНачалаНачисленияПениДоОплаты + 2) КАК ДатаНачалаВозникновения
			               |ИЗ
			               |	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
			               |ГДЕ
			               |	НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) >= НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)";
		КонецЕсли;
		
		Запрос.УстановитьПараметр("КоличествоДнейМоментаНачалаНачисленияПениДоОплаты", НайденныйПараметрКоличествоДнейМоментаНачалаНачисленияПениДоОплаты.Значение);
		Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НайденныйПараметрНачалоПериода.Значение));
		
		РабочиеДатыПроизводственногоКалендаря = Запрос.Выполнить().Выгрузить();
		//Процессор вывода в табл.документ
	    ВнешниеНаборыДанных = Новый Структура;
	    ВнешниеНаборыДанных.Вставить("РабочиеДатыПроизводственногоКалендаря", РабочиеДатыПроизводственногоКалендаря);  
	    СхемаКомпоновкиДанных =ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	    Настройки =  КомпоновщикНастроек.ПолучитьНастройки();
	    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
		
		МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,  КомпоновщикНастроек.ПолучитьНастройки() , ДанныеРасшифровки, ,);
		
	    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
		
		ДокументРезультат.Очистить();
		ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
		ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
		ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
		
	КонецЕсли;
КонецПроцедуры