Задолженность клиентов по срокам / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

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

#Область СлужебныйПрограммныйИнтерфейс

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

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

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

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

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

Процедура УстановитьОбязательныеНастройки(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы)
	
	УстановитьКалендарь(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);
	СегментыСервер.ВключитьОтборПоСегментуПартнеровВСКД(КомпоновщикНастроек);
	УстановитьДатуОтчета(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);
	УстановитьВариантКлассификацииЗадолженности(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);
	
КонецПроцедуры

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

Процедура УстановитьВариантКлассификацииЗадолженности(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы)
	ПараметрВариантКлассификацииЗадолженности = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ВариантКлассификацииЗадолженности");
	Если НЕ ЗначениеЗаполнено(ПараметрВариантКлассификацииЗадолженности.Значение) Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
			|	ВариантыКлассификацииЗадолженности.Ссылка
			|ИЗ
			|	Справочник.ВариантыКлассификацииЗадолженности КАК ВариантыКлассификацииЗадолженности
			|ГДЕ
			|	НЕ ВариантыКлассификацииЗадолженности.ПометкаУдаления";
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			ПользовательскиеНастройкиМодифицированы = Истина;
			ПараметрВариантКлассификацииЗадолженности.Значение = Выборка.Ссылка;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

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

Функция ТекстЗапроса()
	
	ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	Сегменты.Партнер КАК Партнер,
	|	ИСТИНА КАК ИспользуетсяОтборПоСегментуПартнеров
	|ПОМЕСТИТЬ ОтборПоСегментуПартнеров
	|ИЗ
	|	РегистрСведений.ПартнерыСегмента КАК Сегменты
	|{ГДЕ
	|	Сегменты.Сегмент.* КАК СегментПартнеров,
	|	Сегменты.Партнер.* КАК Партнер}
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Партнер,
	|	ИспользуетсяОтборПоСегментуПартнеров
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Организации.Ссылка КАК Организация,
	|	КурсВалюты.Валюта КАК Валюта,
	|	ВЫБОР &ДанныеОтчета
	|		КОГДА 0
	|			ТОГДА 1
	|		КОГДА 2
	|			ТОГДА ЕСТЬNULL(КурсВалюты.КурсЧислитель, 1) * ЕСТЬNULL(КурсВалютыУпр.КурсЗнаменатель, 1) / (ЕСТЬNULL(КурсВалюты.КурсЗнаменатель, 1) * ЕСТЬNULL(КурсВалютыУпр.КурсЧислитель, 1))
	|		ИНАЧЕ ЕСТЬNULL(КурсВалюты.КурсЧислитель, 1) / ЕСТЬNULL(КурсВалюты.КурсЗнаменатель, 1)
	|	КОНЕЦ КАК Коэффициент
	|ПОМЕСТИТЬ КурсыВалют
	|ИЗ
	|	Справочник.Организации КАК Организации
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних({(&ДатаОтчета)}) КАК КурсВалюты
	|			ПО Организации.ВалютаРегламентированногоУчета = КурсВалюты.БазоваяВалюта
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних({(&ДатаОтчета)}, Валюта = &ВалютаУправленческогоУчета) КАК КурсВалютыУпр
	|			ПО Организации.ВалютаРегламентированногоУчета = КурсВалютыУпр.БазоваяВалюта
	|{ГДЕ
	|	Организации.Ссылка.* КАК Организация}
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Организация,
	|	Валюта
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	АналитикаУчета.Организация КАК Организация,
	|	АналитикаУчета.Партнер КАК Партнер,
	|	АналитикаУчета.Контрагент КАК Контрагент,
	|	АналитикаУчета.Договор КАК Договор,
	|	АналитикаУчета.НаправлениеДеятельности КАК НаправлениеДеятельностиАналитики,
	|	АналитикаУчета.КлючАналитики КАК КлючАналитики
	|ПОМЕСТИТЬ ВТ_АналитикаУчетаПоПартнерам
	|ИЗ
	|	РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаУчета
	|ГДЕ
	|		АналитикаУчета.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
	|{ГДЕ
	|	АналитикаУчета.Организация.* КАК Организация,
	|	АналитикаУчета.Партнер.* КАК Партнер,
	|	АналитикаУчета.Контрагент.* КАК Контрагент,
	|	АналитикаУчета.Договор.* КАК Договор,
	|	(АналитикаУчета.Партнер В
	|			(ВЫБРАТЬ
	|				ОтборПоСегментуПартнеров.Партнер
	|			ИЗ
	|				ОтборПоСегментуПартнеров
	|			ГДЕ
	|				ОтборПоСегментуПартнеров.ИспользуетсяОтборПоСегментуПартнеров = &ИспользуетсяОтборПоСегментуПартнеров))}
	|ИНДЕКСИРОВАТЬ ПО
	|	КлючАналитики
	|;
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	АналитикаУчета.Организация КАК Организация,
	|	АналитикаУчета.Партнер КАК Партнер,
	|	АналитикаУчета.Контрагент КАК Контрагент,
	|	АналитикаУчета.Договор КАК Договор,
	|	ВЫБОР КОГДА НЕ РасчетыПоСрокам.ОбъектРасчетов.РегистрыВзаиморасчетовНеДелятсяПоНаправлениямДеятельности
	|		ТОГДА АналитикаУчета.НаправлениеДеятельностиАналитики
	|		ИНАЧЕ РасчетыПоСрокам.ОбъектРасчетов.НаправлениеДеятельности
	|	КОНЕЦ КАК НаправлениеДеятельности,
	|	РасчетыПоСрокам.ОбъектРасчетов КАК ОбъектРасчетов,
	|	ВЫБОР &ДанныеОтчета
	|		КОГДА 0
	|			ТОГДА РасчетыПоСрокам.Валюта
	|		КОГДА 2
	|			ТОГДА &ВалютаУправленческогоУчета
	|		ИНАЧЕ АналитикаУчета.Организация.ВалютаРегламентированногоУчета
	|	КОНЕЦ КАК Валюта,
	|	РасчетыПоСрокам.РасчетныйДокумент КАК РасчетныйДокумент,
	|	РасчетыПоСрокам.ДатаПлановогоПогашения КАК ДатаПлановогоПогашения,
	|	РасчетыПоСрокам.ДатаВозникновения КАК ДатаВозникновения,
	|	ВЫБОР &ДанныеОтчета
	|		КОГДА 0
	|			ТОГДА РасчетыПоСрокам.ПредоплатаОстаток
	|		КОГДА 2
	|			ТОГДА РасчетыПоСрокам.ПредоплатаУпрОстаток
	|		ИНАЧЕ РасчетыПоСрокам.ПредоплатаРеглОстаток
	|	КОНЕЦ КАК НашДолг,
	|	ВЫБОР
	|		КОГДА РасчетыПоСрокам.ДатаПлановогоПогашения < НАЧАЛОПЕРИОДА(&ДатаОтчета, ДЕНЬ)
	|				И РасчетыПоСрокам.ДатаПлановогоПогашения > ДАТАВРЕМЯ(1, 1, 1)
	|			ТОГДА ВЫБОР &ДанныеОтчета
	|					КОГДА 0
	|						ТОГДА РасчетыПоСрокам.ПредоплатаОстаток
	|					КОГДА 2
	|						ТОГДА РасчетыПоСрокам.ПредоплатаУпрОстаток
	|					ИНАЧЕ РасчетыПоСрокам.ПредоплатаРеглОстаток
	|				КОНЕЦ
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК НашДолгПросрочено,
	|	ВЫБОР &ДанныеОтчета
	|		КОГДА 0
	|			ТОГДА РасчетыПоСрокам.ДолгОстаток
	|		КОГДА 2
	|			ТОГДА РасчетыПоСрокам.ДолгУпрОстаток
	|		ИНАЧЕ РасчетыПоСрокам.ДолгРеглОстаток
	|	КОНЕЦ КАК ДолгКлиента,
	|	ВЫБОР
	|		КОГДА РасчетыПоСрокам.ДатаПлановогоПогашения < НАЧАЛОПЕРИОДА(&ДатаОтчета, ДЕНЬ)
	|			ТОГДА ВЫБОР &ДанныеОтчета
	|					КОГДА 0
	|						ТОГДА РасчетыПоСрокам.ДолгОстаток
	|					КОГДА 2
	|						ТОГДА РасчетыПоСрокам.ДолгУпрОстаток
	|					ИНАЧЕ РасчетыПоСрокам.ДолгРеглОстаток
	|				КОНЕЦ
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК ДолгКлиентаПросрочено,
	|	0 КАК КОтгрузке
	|ПОМЕСТИТЬ ТаблицаЗадолженностей
	|ИЗ
	|	РегистрНакопления.РасчетыСКлиентамиПоСрокам.Остатки(&ДатаОтчетаГраница,
	|			АналитикаУчетаПоПартнерам В
	|				(ВЫБРАТЬ
	|					ВТ_АналитикаУчетаПоПартнерам.КлючАналитики
	|				ИЗ
	|					ВТ_АналитикаУчетаПоПартнерам)) КАК РасчетыПоСрокам
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АналитикаУчетаПоПартнерам КАК АналитикаУчета
	|		ПО РасчетыПоСрокам.АналитикаУчетаПоПартнерам = АналитикаУчета.КлючАналитики
	|ГДЕ
	|	(&ВключатьЗадолженность = 0
	|			ИЛИ &ВключатьЗадолженность = 1)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	АналитикаУчета.Организация,
	|	АналитикаУчета.Партнер,
	|	АналитикаУчета.Контрагент,
	|	АналитикаУчета.Договор,
	|	ВЫБОР КОГДА НЕ РасчетыПланОплат.ОбъектРасчетов.РегистрыВзаиморасчетовНеДелятсяПоНаправлениямДеятельности
	|		ТОГДА АналитикаУчета.НаправлениеДеятельностиАналитики
	|		ИНАЧЕ РасчетыПланОплат.ОбъектРасчетов.НаправлениеДеятельности
	|	КОНЕЦ,
	|	РасчетыПланОплат.ОбъектРасчетов,
	|	ВЫБОР &ДанныеОтчета
	|		КОГДА 0
	|			ТОГДА РасчетыПланОплат.Валюта
	|		КОГДА 2
	|			ТОГДА &ВалютаУправленческогоУчета
	|		ИНАЧЕ АналитикаУчета.Организация.ВалютаРегламентированногоУчета
	|	КОНЕЦ,
	|	РасчетыПланОплат.ДокументПлан,
	|	РасчетыПланОплат.ДатаПлановогоПогашения,
	|	РасчетыПланОплат.ДатаВозникновения,
	|	0,
	|	0,
	|	РасчетыПланОплат.КОплатеОстаток * КурсВалюты.Коэффициент,
	|	ВЫБОР
	|		КОГДА РасчетыПланОплат.ДатаПлановогоПогашения < НАЧАЛОПЕРИОДА(&ДатаОтчета, ДЕНЬ)
	|			ТОГДА РасчетыПланОплат.КОплатеОстаток * КурсВалюты.Коэффициент
	|		ИНАЧЕ 0
	|	КОНЕЦ,
	|	0
	|ИЗ
	|	РегистрНакопления.РасчетыСКлиентамиПланОплат.Остатки(&ДатаОтчетаГраница,
	|			АналитикаУчетаПоПартнерам В
	|				(ВЫБРАТЬ
	|					ВТ_АналитикаУчетаПоПартнерам.КлючАналитики
	|				ИЗ
	|					ВТ_АналитикаУчетаПоПартнерам)
	|			И ТИПЗНАЧЕНИЯ(ДокументПлан) В (&ТипыДокументовПлана)) КАК РасчетыПланОплат
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АналитикаУчетаПоПартнерам КАК АналитикаУчета
	|		ПО РасчетыПланОплат.АналитикаУчетаПоПартнерам = АналитикаУчета.КлючАналитики
	|		ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсВалюты
	|		ПО (КурсВалюты.Валюта = РасчетыПланОплат.Валюта)
	|			И (КурсВалюты.Организация = АналитикаУчета.Организация)
	|ГДЕ
	|	(&ВключатьЗадолженность = 0
	|			ИЛИ &ВключатьЗадолженность = 2)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	АналитикаУчета.Организация,
	|	АналитикаУчета.Партнер,
	|	АналитикаУчета.Контрагент,
	|	АналитикаУчета.Договор,
	|	ВЫБОР КОГДА НЕ РасчетыПланОтгрузок.ОбъектРасчетов.РегистрыВзаиморасчетовНеДелятсяПоНаправлениямДеятельности
	|		ТОГДА АналитикаУчета.НаправлениеДеятельностиАналитики
	|		ИНАЧЕ РасчетыПланОтгрузок.ОбъектРасчетов.НаправлениеДеятельности
	|	КОНЕЦ,
	|	РасчетыПланОтгрузок.ОбъектРасчетов,
	|	ВЫБОР &ДанныеОтчета
	|		КОГДА 0
	|			ТОГДА РасчетыПланОтгрузок.Валюта
	|		КОГДА 2
	|			ТОГДА &ВалютаУправленческогоУчета
	|		ИНАЧЕ АналитикаУчета.Организация.ВалютаРегламентированногоУчета
	|	КОНЕЦ,
	|	РасчетыПланОтгрузок.ДокументПлан,
	|	РасчетыПланОтгрузок.ДатаПлановогоПогашения,
	|	РасчетыПланОтгрузок.ДатаВозникновения,
	|	0,
	|	0,
	|	0,
	|	0,
	|	РасчетыПланОтгрузок.СуммаОстаток * КурсВалюты.Коэффициент
	|ИЗ
	|	РегистрНакопления.РасчетыСКлиентамиПланОтгрузок.Остатки(&ДатаОтчетаГраница, НЕ НераспределенныйАванс
	|			И АналитикаУчетаПоПартнерам В
	|				(ВЫБРАТЬ
	|					ВТ_АналитикаУчетаПоПартнерам.КлючАналитики
	|				ИЗ
	|					ВТ_АналитикаУчетаПоПартнерам)) КАК РасчетыПланОтгрузок
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АналитикаУчетаПоПартнерам КАК АналитикаУчета
	|		ПО РасчетыПланОтгрузок.АналитикаУчетаПоПартнерам = АналитикаУчета.КлючАналитики
	|		ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсВалюты
	|		ПО (КурсВалюты.Валюта = РасчетыПланОтгрузок.Валюта)
	|			И (КурсВалюты.Организация = АналитикаУчета.Организация)
	|ГДЕ
	|	(&ВключатьЗадолженность = 0
	|			ИЛИ &ВключатьЗадолженность = 2)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	ТаблицаЗадолженностей.ДатаПлановогоПогашения КАК ДатаНачала,
	|	ГрафикиРаботы.Дата КАК ДатаОкончания,
	|	ВЫБОР
	|		КОГДА ГрафикиРаботы.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
	|				ИЛИ ГрафикиРаботы.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
	|			ТОГДА 1
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК РабочийДень
	|ПОМЕСТИТЬ Графики
	|ИЗ
	|	ТаблицаЗадолженностей КАК ТаблицаЗадолженностей
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ГрафикиРаботы
	|		ПО (ГрафикиРаботы.ПроизводственныйКалендарь = &Календарь)
	|ГДЕ
	|	ГрафикиРаботы.Дата МЕЖДУ ТаблицаЗадолженностей.ДатаПлановогоПогашения И &ДатаОтчета
	|	И ТаблицаЗадолженностей.ДатаПлановогоПогашения <> ДАТАВРЕМЯ(1, 1, 1)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВложенныйЗапрос.ДатаНачала КАК ДатаНачала,
	|	ВложенныйЗапрос.ДатаОкончания КАК ДатаОкончания,
	|	ЕСТЬNULL(СУММА(Графики.РабочийДень), 0) КАК КоличествоДней
	|ПОМЕСТИТЬ РазностиДат
	|ИЗ
	|	Графики КАК ВложенныйЗапрос
	|		ЛЕВОЕ СОЕДИНЕНИЕ Графики КАК Графики
	|		ПО ВложенныйЗапрос.ДатаНачала = Графики.ДатаНачала
	|			И ВложенныйЗапрос.ДатаОкончания > Графики.ДатаОкончания
	|ГДЕ
	|	ВложенныйЗапрос.ДатаОкончания = НАЧАЛОПЕРИОДА(&ДатаОтчета, ДЕНЬ)
	|
	|СГРУППИРОВАТЬ ПО
	|	ВложенныйЗапрос.ДатаНачала,
	|	ВложенныйЗапрос.ДатаОкончания
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВЫРАЗИТЬ(&СтрокаСостояниеВзаиморасчетов КАК СТРОКА(150)) КАК ГруппировкаВсего,
	|	ТаблицаЗадолженностей.Организация                        КАК Организация,
	|	ТаблицаЗадолженностей.Партнер                            КАК Партнер,
	|	ТаблицаЗадолженностей.Контрагент                         КАК Контрагент,
	|	ТаблицаЗадолженностей.Договор                            КАК Договор,
	|	ТаблицаЗадолженностей.НаправлениеДеятельности            КАК НаправлениеДеятельности,
	|	ТаблицаЗадолженностей.ОбъектРасчетов                     КАК ОбъектРасчетов,
	|	ТаблицаЗадолженностей.Валюта                             КАК Валюта,
	|	ТаблицаЗадолженностей.РасчетныйДокумент                  КАК РасчетныйДокумент,
	|
	|	ТаблицаЗадолженностей.ДатаПлановогоПогашения             КАК ДатаПлановогоПогашения,
	|	ТаблицаЗадолженностей.ДатаВозникновения                  КАК ДатаВозникновения,
	|
	|	СУММА(ТаблицаЗадолженностей.НашДолг)                     КАК НашДолг,
	|	СУММА(ТаблицаЗадолженностей.НашДолгПросрочено)           КАК НашДолгПросрочено,
	|	СУММА(ТаблицаЗадолженностей.ДолгКлиента)                 КАК ДолгКлиента,
	|	СУММА(ТаблицаЗадолженностей.ДолгКлиентаПросрочено)       КАК ДолгКлиентаПросрочено,
	|	СУММА(ТаблицаЗадолженностей.КОтгрузке)                   КАК КОтгрузке,
	|
	|	МАКСИМУМ(ВЫБОР
	|		КОГДА НЕ РазностиДат.КоличествоДней ЕСТЬ NULL
	|			ТОГДА ВЫБОР
	|					КОГДА РазностиДат.КоличествоДней > 0
	|						И ТаблицаЗадолженностей.ДолгКлиента > 0
	|						ТОГДА РазностиДат.КоличествоДней
	|					ИНАЧЕ 0
	|				КОНЕЦ
	|		ИНАЧЕ ВЫБОР
	|				КОГДА ТаблицаЗадолженностей.ДолгКлиента = 0
	|						ИЛИ ТаблицаЗадолженностей.ДатаПлановогоПогашения = ДАТАВРЕМЯ(1, 1, 1)
	|					ТОГДА 0
	|				ИНАЧЕ ВЫБОР
	|						КОГДА РАЗНОСТЬДАТ(ТаблицаЗадолженностей.ДатаПлановогоПогашения, &ДатаОтчета, ДЕНЬ) > 0
	|							ТОГДА РАЗНОСТЬДАТ(ТаблицаЗадолженностей.ДатаПлановогоПогашения, &ДатаОтчета, ДЕНЬ)
	|						ИНАЧЕ 0
	|					КОНЕЦ
	|			КОНЕЦ
	|	КОНЕЦ) КАК КоличествоДней,
	|
	|	ЕСТЬNULL(Интервалы.НаименованиеИнтервала, &СтрокаДолгНеПросрочен) КАК НаименованиеИнтервала,
	|	ЕСТЬNULL(Интервалы.НомерСтроки, 0)                                КАК НомерИнтервала,
	|	ЕСТЬNULL(Интервалы.НижняяГраницаИнтервала, 0)                     КАК НижняяГраницаИнтервала
	|ПОМЕСТИТЬ ЗадолженностьПоИнтервалам
	|ИЗ
	|	ТаблицаЗадолженностей КАК ТаблицаЗадолженностей
	|		{ЛЕВОЕ СОЕДИНЕНИЕ РазностиДат КАК РазностиДат
	|		ПО (РазностиДат.ДатаНачала = ТаблицаЗадолженностей.ДатаПлановогоПогашения)
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКлассификацииЗадолженности.Интервалы КАК Интервалы
	|		ПО (Интервалы.Ссылка = &ВариантКлассификацииЗадолженности)
	|			И (ВЫБОР
	|				КОГДА НЕ РазностиДат.КоличествоДней ЕСТЬ NULL
	|					ТОГДА ВЫБОР
	|							КОГДА РазностиДат.КоличествоДней > 0
	|								И ТаблицаЗадолженностей.ДолгКлиента > 0
	|								ТОГДА РазностиДат.КоличествоДней
	|							ИНАЧЕ 0
	|						КОНЕЦ
	|				ИНАЧЕ ВЫБОР
	|						КОГДА ТаблицаЗадолженностей.ДолгКлиента = 0
	|								ИЛИ ТаблицаЗадолженностей.ДатаПлановогоПогашения = ДАТАВРЕМЯ(1, 1, 1)
	|							ТОГДА 0
	|						ИНАЧЕ ВЫБОР
	|								КОГДА РАЗНОСТЬДАТ(ТаблицаЗадолженностей.ДатаПлановогоПогашения, &ДатаОтчета, ДЕНЬ) > 0
	|									ТОГДА РАЗНОСТЬДАТ(ТаблицаЗадолженностей.ДатаПлановогоПогашения, &ДатаОтчета, ДЕНЬ)
	|								ИНАЧЕ 0
	|							КОНЕЦ
	|					КОНЕЦ
	|			КОНЕЦ МЕЖДУ Интервалы.НижняяГраницаИнтервала И Интервалы.ВерхняяГраницаИнтервала)}
	|СГРУППИРОВАТЬ ПО
	|	ТаблицаЗадолженностей.Организация,
	|	ТаблицаЗадолженностей.Партнер,
	|	ТаблицаЗадолженностей.Контрагент,
	|	ТаблицаЗадолженностей.Договор,
	|	ТаблицаЗадолженностей.НаправлениеДеятельности,
	|	ТаблицаЗадолженностей.ОбъектРасчетов,
	|	ТаблицаЗадолженностей.Валюта,
	|	ТаблицаЗадолженностей.РасчетныйДокумент,
	|	ТаблицаЗадолженностей.ДатаПлановогоПогашения,
	|	ТаблицаЗадолженностей.ДатаВозникновения,
	|	Интервалы.НаименованиеИнтервала,
	|	Интервалы.НомерСтроки,
	|	Интервалы.НижняяГраницаИнтервала
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Таблица.ГруппировкаВсего        КАК ГруппировкаВсего,
	|	Таблица.Организация             КАК Организация,
	|	Таблица.Партнер                 КАК Партнер,
	|	Таблица.Контрагент              КАК Контрагент,
	|	Таблица.Договор                 КАК Договор,
	|	Таблица.НаправлениеДеятельности КАК НаправлениеДеятельности,
	|	Таблица.ОбъектРасчетов          КАК ОбъектРасчетов,
	|	Таблица.Валюта                  КАК Валюта,
	|	Таблица.РасчетныйДокумент       КАК РасчетныйДокумент,
	|
	|	Таблица.ДатаПлановогоПогашения  КАК ДатаПлановогоПогашения,
	|	Таблица.ДатаВозникновения       КАК ДатаВозникновения,
	|
	|	Таблица.НашДолг                 КАК НашДолг,
	|	Таблица.НашДолгПросрочено       КАК НашДолгПросрочено,
	|	Таблица.ДолгКлиента             КАК ДолгКлиента,
	|	Таблица.ДолгКлиентаПросрочено   КАК ДолгКлиентаПросрочено,
	|	Таблица.КОтгрузке               КАК КОтгрузке,
	|
	|	Таблица.КоличествоДней          КАК КоличествоДней,
	|
	|	Таблица.НаименованиеИнтервала   КАК НаименованиеИнтервала,
	|	Таблица.НомерИнтервала          КАК НомерИнтервала,
	|	Таблица.НижняяГраницаИнтервала  КАК НижняяГраницаИнтервала
	|{ВЫБРАТЬ
	|	ГруппировкаВсего,
	|	Организация.*,
	|	Партнер.*,
	|	Контрагент.*,
	|	Договор.*,
	|	НаправлениеДеятельности.*,
	|	ОбъектРасчетов.*,
	|	Валюта.*,
	|	РасчетныйДокумент.*,
	|	ДатаПлановогоПогашения,
	|	ДатаВозникновения,
	|	НашДолг,
	|	НашДолгПросрочено,
	|	ДолгКлиента,
	|	ДолгКлиентаПросрочено,
	|	КОтгрузке,
	|	КоличествоДней,
	|	НаименованиеИнтервала,
	|	НомерИнтервала,
	|	НижняяГраницаИнтервала}
	|ИЗ ЗадолженностьПоИнтервалам КАК Таблица
	|{ГДЕ
	|	ГруппировкаВсего          КАК ГруппировкаВсего,
	|	Организация.*             КАК Организация,
	|	Партнер.*                 КАК Партнер,
	|	Контрагент.*              КАК Контрагент,
	|	Договор.*                 КАК Договор,
	|	НаправлениеДеятельности.* КАК НаправлениеДеятельности,
	|	ОбъектРасчетов.*          КАК ОбъектРасчетов,
	|	Валюта.*                  КАК Валюта,
	|	РасчетныйДокумент.*       КАК РасчетныйДокумент,
	|	
	|	ДатаПлановогоПогашения    КАК ДатаПлановогоПогашения,
	|	ДатаВозникновения         КАК ДатаВозникновения,
	|	
	|	НашДолг                   КАК НашДолг,
	|	НашДолгПросрочено         КАК НашДолгПросрочено,
	|	ДолгКлиента               КАК ДолгКлиента,
	|	ДолгКлиентаПросрочено     КАК ДолгКлиентаПросрочено,
	|	КОтгрузке                 КАК КОтгрузке,
	|	КоличествоДней            КАК КоличествоДней,
	|	
	|	НаименованиеИнтервала     КАК НаименованиеИнтервала,
	|	НомерИнтервала            КАК НомерИнтервала,
	|	НижняяГраницаИнтервала    КАК НижняяГраницаИнтервала}
	|";

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&ТипыДокументовПлана", ПолучитьТипыДокументовПлана());
	
	Возврат ТекстЗапроса;
КонецФункции

Функция ПолучитьТипыДокументовПлана()
	
	ТекстТиповДокументов = ""; 
	
	
	ТекстТиповДокументов = ТекстТиповДокументов + "ТИП(Документ.ЗаказКлиента), ";
	ТекстТиповДокументов = ТекстТиповДокументов + "ТИП(Документ.ЗаявкаНаВозвратТоваровОтКлиента), ";
	ТекстТиповДокументов = ТекстТиповДокументов + "ТИП(Документ.ГрафикИсполненияДоговора)";
	
	Возврат ТекстТиповДокументов;
КонецФункции

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

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

#КонецЕсли

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