Консоль запроса: подсчёт количества документов в группировке по детальным записям
Вариант использования временной таблицы для подсчёта количества документов по группируемому полю, не скрывая детальные записи входящих в него полей.
В консоли запроса возникла необходимость вывести итоговый подсчёт количества документов "Квитование счета" (поле "Регистратор") по группируемому полю "СчетНаОплату" (поле "ДокументКвитования"). Через агрегатную функцию "КОЛИЧЕСТВО" мы получаем ограничение, когда детальные записи в группировке будут свёрнуты (не отобразятся данные по каждому документу внутри группировки), а мне необходимо подсчитать количество документов с полным отображением строк всех документов "Квитование счета".
Верным решением будет: создать временную таблицу - подсчитать в ней количество документов "Квитование счета" по группируемому документу "СчетНаОплату", сохранить это количество в оперативную память и получить это количество из временной таблицы в основном запросе виртуальной таблицы через соединение этих 2-х таблиц.
Полный текст запроса получился таким:
ВЫБРАТЬ БССДДанныеКвитованияПоДоговорам.ДокументКвитования КАК СчетНаОплату, КОЛИЧЕСТВО(БССДДанныеКвитованияПоДоговорам.Регистратор) КАК КоличествоКвитовок ПОМЕСТИТЬ ВТРегистратор ИЗ РегистрСведений.БССДДанныеКвитованияПоДоговорам КАК БССДДанныеКвитованияПоДоговорам СГРУППИРОВАТЬ ПО БССДДанныеКвитованияПоДоговорам.ДокументКвитования ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПЕРВЫЕ 3 БССДДанныеКвитованияПоДоговорам.ДокументКвитования КАК СчетНаОплату, БССДДанныеКвитованияПоДоговорам.Регистратор КАК КвитованиеРасквитованиеДокумент, БССДДанныеКвитованияПоДоговорам.Регистратор.Дата КАК ДатаДокументаКвитования, БССДДанныеКвитованияПоДоговорам.НомерДоговора КАК ДоговорСтрахования, БССДДанныеКвитованияПоДоговорам.ДокументОплаты КАК ДокументОплаты, БССДДанныеКвитованияПоДоговорам.ДокументОплаты.НомерВходящегоДокумента КАК НомерДокументаОплаты, БССДДанныеКвитованияПоДоговорам.ДокументОплаты.ДатаВходящегоДокумента КАК ДатаДокументаОплаты, БССДДанныеКвитованияПоДоговорам.ДокументОплаты.Контрагент КАК Контрагент, БССДДанныеКвитованияПоДоговорам.ДокументОплаты.ВалютаДокумента КАК Валюта, БССДДанныеКвитованияПоДоговорам.Сквитовано КАК Сквитовано, БССДДанныеКвитованияПоДоговорам.Регистратор.Ответственный КАК Ответственный, ВТРегистратор.КоличествоКвитовок КАК КоличествоКвитовок ИЗ РегистрСведений.БССДДанныеКвитованияПоДоговорам КАК БССДДанныеКвитованияПоДоговорам ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРегистратор КАК ВТРегистратор ПО БССДДанныеКвитованияПоДоговорам.ДокументКвитования = ВТРегистратор.СчетНаОплату ГДЕ ВТРегистратор.КоличествоКвитовок = 3 УПОРЯДОЧИТЬ ПО СчетНаОплату
01
Первый блок - это временная таблица, из которой я выбираю поля из регистра: группируемое поле "СчетНаОплату" и количество документов "Регистратор" (это "Квитование счета") по этому счёту. В конструкторе запроса, можно увидеть созданную временную таблицу:
02
Во втором блоке идёт основной запрос к виртуальной таблице, где я вывожу подсчитанное количество квитовок из временной таблицы по группируемому счёту. Чтобы запрос заработал, необходимо соединить эти таблицы через одно общее поле "СчетНаОплату". Связь в конструкторе выглядит так:
03
Последнее, что можно добавить по этим пакетам запросов - я добавил условие на количество подсчитанных документов квитовок (столько же строк = "3" вывожу в результате запроса):
