Итоги и группировки в запросе

1. mcOrk 02.03.12 11:51 Сейчас в теме
Потребовалось подредактировать отчет по просроченной задолженности поставщиков в разрезе документов - это получилось, встал другой вопрос, хотелось бы увидеть группировку по контрагенту и итогу по нему же, вот с этим и возникли проблемы, никак не получается их получить.
Чтоб итог задолженности по контрагенту был общий, просроченные платежи по нему же были, а группировка по документам: только просроченные по оплате. Получается либо без группировки по документам но с итогами по контрагенту общими и просроченными, либо в разрезе документов, но без итогов по контрагенту. Помогите, сам новичек в восьмерке, опыта семерки не очень хватает на это...

Примерно так:

"Контрагент" Всего долг Просрочено
Контрагент1 200 100
Док1 50
Док2 50
Контрагент2 100 25
Док1 25

	Запрос = Новый Запрос;
	
	ВидыСубконтоКД = Новый СписокЗначений;
	ВидыСубконтоКД.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
	ВидыСубконтоКД.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
	ВидыСубконтоКД.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами);
	Запрос.УстановитьПараметр("ВидыСубконтоКД", ВидыСубконтоКД);
	Запрос.УстановитьПараметр("ГраницаОстатков", Новый Граница(КонецДня(КонецПериода), ВидГраницы.Включая));
	Запрос.УстановитьПараметр("Организация", Организация);
	Запрос.УстановитьПараметр("СтандартныйСрокОплатыПоставщикам", Константы.СрокОплатыПоставщикам.Получить());
	Запрос.УстановитьПараметр("КонецИнтервала", КонецДня(КонецПериода));
	Запрос.УстановитьПараметр("ИсключенныеСчета", СтандартныеОтчеты.ПолучитьСписокСчетовИсключаемыхИзРасчетаЗадолженности(2));
	
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	ТекстЗапросаПоОстаткам =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	СчетаКонтрагентов.Ссылка КАК Счет
	|ПОМЕСТИТЬ СчетаКД
	|ИЗ
	|	ПланСчетов.Хозрасчетный.ВидыСубконто КАК СчетаКонтрагентов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
	|			ХозрасчетныйВидыСубконто.Ссылка КАК Ссылка
	|		ИЗ
	|			ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
	|		ГДЕ
	|			ХозрасчетныйВидыСубконто.ВидСубконто = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры)) КАК СчетаДоговоров
	|		ПО СчетаКонтрагентов.Ссылка = СчетаДоговоров.Ссылка
	|ГДЕ
	|	СчетаКонтрагентов.ВидСубконто = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты)
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Счет
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВложенныйЗапрос.Организация КАК Организация,
	|	ВложенныйЗапрос.Контрагент КАК Контрагент,
	|	ВложенныйЗапрос.Договор КАК Договор,
	|	ВложенныйЗапрос.СрокОплаты КАК СрокОплаты,
	|	ВложенныйЗапрос.СуммаОстаток КАК ОстатокДолга,
	|	ВложенныйЗапрос.Документ
	|ПОМЕСТИТЬ ОстаткиДолга
	|ИЗ
	|	(ВЫБРАТЬ
	|		ВзаиморасчетыОстатки.Организация КАК Организация,
	|		ВзаиморасчетыОстатки.Субконто1 КАК Контрагент,
	|		ВзаиморасчетыОстатки.Субконто2 КАК Договор,
	|		ВЫБОР
	|			КОГДА ВЫРАЗИТЬ(ВзаиморасчетыОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов).УстановленСрокОплаты
	|				ТОГДА ВЫРАЗИТЬ(ВзаиморасчетыОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов).СрокОплаты
	|			ИНАЧЕ &СтандартныйСрокОплатыПоставщикам
	|		КОНЕЦ КАК СрокОплаты,
	|		ВзаиморасчетыОстатки.Счет КАК Счет,
	|		ВзаиморасчетыОстатки.СуммаРазвернутыйОстатокКт КАК СуммаОстаток,
	|		ВзаиморасчетыОстатки.Субконто3 КАК Документ
	|	ИЗ
	|		РегистрБухгалтерии.Хозрасчетный.Остатки(
	|				&ГраницаОстатков,
	|				Счет В
	|						(ВЫБРАТЬ
	|							СчетаКД.Счет
	|						ИЗ
	|							СчетаКД КАК СчетаКД)
	|					И (НЕ Счет.Забалансовый)
	|					И (НЕ Счет В ИЕРАРХИИ (&ИсключенныеСчета)),
	|				&ВидыСубконтоКД,
	|				ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов).ВидДоговора В (ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком), ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомитентом))
	|					И Организация = &Организация) КАК ВзаиморасчетыОстатки) КАК ВложенныйЗапрос
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Контрагент,
	|	Договор
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	ОстаткиДолга.СрокОплаты КАК СрокОплаты
	|ИЗ
	|	ОстаткиДолга КАК ОстаткиДолга
	|
	|УПОРЯДОЧИТЬ ПО
	|	СрокОплаты";
	
	Если НЕ ЗначениеЗаполнено(Организация) Тогда
		ТекстЗапросаПоОстаткам = СтрЗаменить(ТекстЗапросаПоОстаткам, "И Организация = &Организация", "");
	КонецЕсли;
	Запрос.Текст = ТекстЗапросаПоОстаткам;
	
	МассивСроковОплаты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СрокОплаты");
	
	Если МассивСроковОплаты.Количество() = 0 Тогда
		МассивСроковОплаты.Добавить(0);
	КонецЕсли;
	
	ТекстОстатки = 
	"ВЫБРАТЬ
	|	ОстаткиДолга.Организация,
	|	ОстаткиДолга.Контрагент,
	|	ОстаткиДолга.Договор,
	|	ОстаткиДолга.Документ,
	|	ОстаткиДолга.СрокОплаты,
	|	ОстаткиДолга.ОстатокДолга,
	|	ЕСТЬNULL(Обороты.УвеличениеДолга, 0) КАК УвеличениеДолга
	|ИЗ
	|	ОстаткиДолга КАК ОстаткиДолга";
	
	ТекстОборотыПоСроку = 
	"ВЫБРАТЬ
	|	ВзаиморасчетыОбороты.Организация КАК Организация,
	|	ВзаиморасчетыОбороты.Субконто1 КАК Контрагент,
	|	ВзаиморасчетыОбороты.Субконто2 КАК Договор,
	|	ВзаиморасчетыОбороты.Субконто3 КАК Документ,
	|	ВЫБОР
	|		КОГДА ВзаиморасчетыОбороты.СуммаОборотКт > 0
	|			ТОГДА ВзаиморасчетыОбороты.СуммаОборотКт
	|		ИНАЧЕ 0
	|	КОНЕЦ - ВЫБОР
	|		КОГДА ВзаиморасчетыОбороты.СуммаОборотДт < 0
	|			ТОГДА ВзаиморасчетыОбороты.СуммаОборотДт
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК УвеличениеДолга
	|ПОМЕСТИТЬ Обороты1
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.Обороты(
	|			&НачалоИнтервала1,
	|			&КонецИнтервала,
	|			,
	|			Счет В
	|					(ВЫБРАТЬ
	|						СчетаКД.Счет
	|					ИЗ
	|						СчетаКД КАК СчетаКД)
	|				И (НЕ Счет.Забалансовый)
	|				И (НЕ Счет В ИЕРАРХИИ (&ИсключенныеСчета)),
	|			&ВидыСубконтоКД,
	|			(Субконто1, Субконто2) В
	|					(ВЫБРАТЬ РАЗЛИЧНЫЕ
	|						ОстаткиДолга.Контрагент,
	|						ОстаткиДолга.Договор
	|					ИЗ
	|						ОстаткиДолга КАК ОстаткиДолга
	|					ГДЕ
	|						ОстаткиДолга.СрокОплаты = &СрокОплаты1)
	|				И Организация = &Организация,
	|			,
	|			) КАК ВзаиморасчетыОбороты
	|";
	
	Если НЕ ЗначениеЗаполнено(Организация) Тогда
		ТекстОборотыПоСроку = СтрЗаменить(ТекстОборотыПоСроку, "И Организация = &Организация", "");
	КонецЕсли;
	
	МаксКоличествоЧастей = 10;
	КоличествоСроковОплаты = МассивСроковОплаты.Количество();
	ОстатокОтДеления = КоличествоСроковОплаты % МаксКоличествоЧастей;
	
	КоличествоЧастей = (КоличествоСроковОплаты - ОстатокОтДеления) / МаксКоличествоЧастей + ?(ОстатокОтДеления > 0, 1, 0);
	ТекстОборотыПоВсемСрокам = "";
	ТекстВсеОбороты = "";
	Для ИндексЧасти = 1 По КоличествоЧастей Цикл
		НачальныйИндекс = МаксКоличествоЧастей * (ИндексЧасти - 1) + 1;
		КонечныйИндекс  = Мин(КоличествоСроковОплаты, МаксКоличествоЧастей * ИндексЧасти);
		ТекстОбороты = "";
		
		Для ИндексЗапроса = НачальныйИндекс По КонечныйИндекс Цикл
			СрокОплаты = МассивСроковОплаты[ИндексЗапроса - 1];
			Запрос.УстановитьПараметр("НачалоИнтервала" + ИндексЗапроса, НачалоДня(КонецПериода - (СрокОплаты - 1)* 60*60*24));
			Запрос.УстановитьПараметр("СрокОплаты" + ИндексЗапроса, СрокОплаты);
			
			ТекстОборотыПоСрокуНом = СтрЗаменить(ТекстОборотыПоСроку, "&НачалоИнтервала1", "&НачалоИнтервала" + ИндексЗапроса);
			ТекстОборотыПоСрокуНом = СтрЗаменить(ТекстОборотыПоСрокуНом, "&СрокОплаты1", "&СрокОплаты" + ИндексЗапроса);
			Если ИндексЗапроса = НачальныйИндекс Тогда
				ТекстОборотыПоСрокуНом = СтрЗаменить(ТекстОборотыПоСрокуНом, "ПОМЕСТИТЬ Обороты1", "ПОМЕСТИТЬ Обороты" + ИндексЧасти);
			Иначе
				ТекстОборотыПоСрокуНом = СтрЗаменить(ТекстОборотыПоСрокуНом, "ПОМЕСТИТЬ Обороты1", "");
			КонецЕсли;
			
			ТекстОбороты = ТекстОбороты
			+ ?(ПустаяСтрока(ТекстОбороты), "", "
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|") 
			+ ТекстОборотыПоСрокуНом;
			
		КонецЦикла;
		
		ТекстВсеОбороты = ТекстВсеОбороты + ТекстОбороты + " 
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Организация,
		|	Контрагент,
		|	Договор
		|;
		|";
		
		
		ТекстОборотыПоВсемСрокам = ТекстОборотыПоВсемСрокам
		+ ?(ПустаяСтрока(ТекстОборотыПоВсемСрокам), "", "
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|") 
		+ "
		|ВЫБРАТЬ 
		|	Обороты" + ИндексЧасти + ".Организация,
		|	Обороты" + ИндексЧасти + ".Контрагент,
		|	Обороты" + ИндексЧасти + ".Договор,
		|	Обороты" + ИндексЧасти + ".Документ,
		|	Обороты" + ИндексЧасти + ".УвеличениеДолга
		|ИЗ
		|	Обороты" + ИндексЧасти + " КАК Обороты" + ИндексЧасти;
	КонецЦикла;
	
	ТекстОстаткиИОбороты = ТекстОстатки + "
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	(" + ТекстОборотыПоВсемСрокам + ") КАК Обороты
	|	ПО ОстаткиДолга.Организация = Обороты.Организация
	|		И ОстаткиДолга.Контрагент = Обороты.Контрагент
	|		И ОстаткиДолга.Документ = Обороты.Документ
	|		И ОстаткиДолга.Договор = Обороты.Договор
	|";
	
	ТекстПросрочено =
	"ВЫБРАТЬ
	|	ОстаткиИОбороты.Организация,
	|	ОстаткиИОбороты.Контрагент,
	|	ОстаткиИОбороты.Договор,
	|	ОстаткиИОбороты.Документ,
	|	ОстаткиИОбороты.СрокОплаты,
	|	ОстаткиИОбороты.ОстатокДолга,
	|	ОстаткиИОбороты.ОстатокДолга - 
	|		ВЫБОР
	|			КОГДА ОстаткиИОбороты.ОстатокДолга < ОстаткиИОбороты.УвеличениеДолга
	|				ТОГДА ОстаткиИОбороты.ОстатокДолга
	|			ИНАЧЕ ОстаткиИОбороты.УвеличениеДолга
	|		КОНЕЦ КАК Просрочено
	|ИЗ
	|	(" + ТекстОстаткиИОбороты + ") КАК ОстаткиИОбороты
	|ГДЕ
	|	ОстаткиИОбороты.ОстатокДолга - 
	|		ВЫБОР
	|			КОГДА ОстаткиИОбороты.ОстатокДолга < ОстаткиИОбороты.УвеличениеДолга
	|				ТОГДА ОстаткиИОбороты.ОстатокДолга
	|			ИНАЧЕ ОстаткиИОбороты.УвеличениеДолга
	|		КОНЕЦ > 0
	|СГРУППИРОВАТЬ ПО
	|	 ОстаткиДолга.Контрагент
	|";
Показать
По теме из базы знаний
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

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