Нужна помощь в не простом запросе

1. user817897 2 26.05.20 11:07 Сейчас в теме +2.5 $m
Добрый день. Очень нужна помощь. Есть запрос, он работает.По сути отображает списания как по FIFO. Выводит сумму и количество дней непогашенной дебиторской задолженности.Запрос делался в УТ 10.3
Но, не совсем корректно работает когда контрагенты группируются по ИНН
Так как в виртуальн.табл. - DN_НеЗакрытыеРеализации группировка происходит по договору,возможно из-за этого.
Пример на фото изображён:
там где один контрагент он один только в базе с ИНН - и отчёт по ним работает идеально.
а там где не перекрывается оплата на реализацию то таких контрагентов в базе 2 и более,они сгруппированы по ИНН,
и ситуация такова,что к примеру:
вася1 с инн 12345 долг 20000
вася2 с инн 12345 долг -25000

вот они между собой не перекрываются, тут ситуация такая что все оплаты приходят на вася2, и частично идут реализации на вася2, а на вася1 только реализации
Но так как группировка по ИНН должна быть обязательна, то должно отобразиться только те реализации,которые не оплачены (с учётом хвостика,который возможно оплачен в последней неоплаченной реализации).
Варианты оплаты раскидывать на двоих по равному,не предлагать,отчёт всё равно не сгруппируется правильно.
На картинке поставил два вопроса,что эти платёжки не перекрылись...


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

СГРУППИРОВАТЬ ПО
	Взаиморасчеты.Контрагент.ИНН
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Контрагент,
	ВТ.СуммаДолг,
	ВТ.КонтрагентИНН,
	ВТ.КонтрагентДнейОтсрочки
ПОМЕСТИТЬ вт_Долг_контрагента
ИЗ
	ВТ КАК ВТ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	Взаиморасчеты.ДоговорКонтрагента КАК ДоговорКонтрагента,
	ВЫБОР
		КОГДА Взаиморасчеты.СуммаВзаиморасчетовОборот >= 0
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ВидДвижения,
	Взаиморасчеты.Регистратор КАК Регистратор,
	Взаиморасчеты.Период КАК Период,
	ВЫБОР
		КОГДА Взаиморасчеты.СуммаВзаиморасчетовОборот >= 0
			ТОГДА Взаиморасчеты.СуммаВзаиморасчетовОборот
		ИНАЧЕ -Взаиморасчеты.СуммаВзаиморасчетовОборот
	КОНЕЦ КАК СуммаВзаиморасчетов
ПОМЕСТИТЬ ТаблицаРегистра
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(, , Регистратор, {(ДоговорКонтрагента.Владелец).* КАК ДоговорКонтрагентаВладелец, (ДоговорКонтрагента).* КАК ДоговорКонтрагента}) КАК Взаиморасчеты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ВзаиморасчетыНачало.ДоговорКонтрагента КАК ДоговорКонтрагента,
			МАКСИМУМ(ВзаиморасчетыНачало.Период) КАК Период
		ИЗ
			РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , Регистратор, , {(ДоговорКонтрагента.Владелец).* КАК ДоговорКонтрагентаВладелец, (ДоговорКонтрагента).* КАК ДоговорКонтрагента}) КАК ВзаиморасчетыНачало
		ГДЕ
			ВзаиморасчетыНачало.СуммаВзаиморасчетовНачальныйОстаток = 0
			И ВзаиморасчетыНачало.СуммаВзаиморасчетовКонечныйОстаток <> 0
			И ВзаиморасчетыНачало.Период <= &ДатаКонца
		
		СГРУППИРОВАТЬ ПО
			ВзаиморасчетыНачало.ДоговорКонтрагента) КАК ВзаиморасчетыНачало
		ПО Взаиморасчеты.ДоговорКонтрагента = ВзаиморасчетыНачало.ДоговорКонтрагента
			И Взаиморасчеты.Период >= ВзаиморасчетыНачало.Период
			И (Взаиморасчеты.Период <= &ДатаКонца)
{ГДЕ
	Взаиморасчеты.ДоговорКонтрагента.Владелец.* КАК ДоговорКонтрагентаВладелец,
	Взаиморасчеты.ДоговорКонтрагента.* КАК ДоговорКонтрагента}

ИНДЕКСИРОВАТЬ ПО
	Взаиморасчеты.ДоговорКонтрагента
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт_Долг_контрагента.Контрагент,
	ЕСТЬNULL(вт_Долг_контрагента.КонтрагентДнейОтсрочки, 0) КАК ДнейОтсрочки,
	вт_Долг_контрагента.КонтрагентИНН,
	DN_НеЗакрытыеРеализации.ДоговорКонтрагентаВладелец,
	DN_НеЗакрытыеРеализации.ДопустимоеЧислоДнейЗадолженности,
	DN_НеЗакрытыеРеализации.Сделка КАК СделкаСделка,
	DN_НеЗакрытыеРеализации.СуммаДокумента,
	DN_НеЗакрытыеРеализации.КвоДнейЗадолженности,
	DN_НеЗакрытыеРеализации.СуммаДолга,
	ЕСТЬNULL(РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(DN_НеЗакрытыеРеализации.Сделка.Дата, ДЕНЬ), НАЧАЛОПЕРИОДА(&ТекущаяДата, ДЕНЬ), ДЕНЬ), 0) КАК ДниТянущиеся,
	вт_Долг_контрагента.Контрагент.Менеджер КАК Менеджер
ИЗ
	вт_Долг_контрагента КАК вт_Долг_контрагента
		ЛЕВОЕ СОЕДИНЕНИЕ DN_НеЗакрытыеРеализации КАК DN_НеЗакрытыеРеализации
		ПО вт_Долг_контрагента.КонтрагентИНН = DN_НеЗакрытыеРеализации.ДоговорКонтрагентаВладелец.ИНН
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. uriah 17 26.05.20 11:23 Сейчас в теме
(1)
а там где не перекрывается оплата на реализацию то таких контрагентов в базе 2 и более,они сгруппированы по ИНН,

А КПП у этих контрагентов, с одинаковыми ИНН, разные?
5. user817897 2 26.05.20 12:19 Сейчас в теме
3. uno-c 235 26.05.20 12:09 Сейчас в теме
Почему Вы делаете соединение по ИНН ?
ПО вт_Долг_контрагента.КонтрагентИНН = DN_НеЗакрытыеРеализации.ДоговорКонтрагентаВладелец.ИНН

Хотите платежами одного контрагента долги другого перекрыть?
4. user817897 2 26.05.20 12:19 Сейчас в теме
(3) если они сгруппированы по ИНН, то да.
6. Aquashop 46 26.05.20 17:18 Сейчас в теме
Я бы переписал запрос через "Набор данных - Объект", там более гибко можно подойти к этому и уже сможешь вывести результаты по Контрагентам определить Дублирующих по ИНН, перекрывать долги и уже выводить в отчёт всё что нужно.
user817897; dkonakov; +2 Ответить
7. Jen1978 19 29.05.20 10:40 Сейчас в теме
тут вопрос по сути не про запрос, а про методологию.
8. Jen1978 19 29.05.20 10:41 Сейчас в теме
для начала нужно определить какой Вы хотите получить результат, а потом уже править под это запрос
9. Jen1978 19 29.05.20 10:43 Сейчас в теме
Результат первого пакета в запросе идентичен результату второго пакета в запросе - это так для сведения
10. Jen1978 19 29.05.20 10:56 Сейчас в теме
В УТ.10 в документах оплаты (приходный кассовый ордер и поступление на расчетный счет) уже существует таблица расшифровки платежа, в котором указывается ссылка на документ, который оплачивается. Чтобы понять оплачена реализация или нет, достаточно найти в расшифровках требуемый документ.
Для чего городить эти вычисления с тремя вложенными запросами.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот