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

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

#Область ОписаниеПеременных

Перем ДатаОтчета, ДатаОстатков, ДанныеОтчета, ИспользуетсяОтборПоСегментуПартнеров, Календарь, СтрокаСостояниеВзаиморасчетов, СтрокаДолгНеПросрочен, ВариантКлассификацииЗадолженности;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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