Разработка отчетов на Системе Компоновки Данных (СКД) часто ставит перед разработчиком нестандартные задачи. Одной из таких задач является подсчет общего количества вхождений записей в группировку и последующая сортировка по полученному результату. Давайте разберем по шагам, как реализовать такой функционал, чтобы отчет работал корректно и эффективно.
Для того чтобы получить количество записей, необходимо правильно составить текст запроса. Самым надежным и универсальным способом в 1С является использование агрегатной функции СУММА(1). Этот метод позволяет подсчитать количество строк в выборке для каждой группировки без необходимости использования сложных конструкций с подсчетом уникальных значений.
Рассмотрим структуру запроса:
ВЫБРАТЬ
ТВ_Передача КАК Передача,
СУММА(1) КАК Количество
ИЗ
РегистрСведений.ТВ_Программа КАК ТВ_Программа
СГРУППИРОВАТЬ ПО
ТВ_Передача
УПОРЯДОЧИТЬ ПО
Количество УБЫВ
Обратите внимание на использование псевдонима Количество. Именно этот псевдоним мы будем использовать для настройки отображения и сортировки в самой СКД. Если вы используете конструктор запросов, убедитесь, что поле ТВ_Передача выбрано для группировки, а СУММА(1) добавлена в список выбираемых полей.
После написания текста запроса перейдем к настройкам компоновки. Чтобы отчет корректно выводил данные и поддерживал сортировку, выполним следующие действия:
ТВ_Передача.Передача и Количество.Количество и установим направление сортировки По убыванию.Иногда возникают ситуации, когда СКД неверно интерпретирует тип данных или не выполняет сортировку. В таких случаях убедитесь, что в ресурсах СКД поле Количество описано с агрегатной функцией СУММА. Если сортировка не срабатывает автоматически, ее принудительная установка в настройках группировки всегда дает нужный результат.
Важно помнить, что периодические регистры сведений предназначены для хранения истории значений. Если вы строите отчет «без учета периода», вы фактически игнорируете историческую составляющую регистра. Для часто используемых отчетов такого типа рекомендуется:
Регистров накопления вместо Регистров сведений. Это значительно ускорит работу системы, так как данные будут суммироваться в процессе записи, а не вычисляться при каждом открытии отчета.Чтобы вывести готовый отчет на главный экран в режиме управляемых форм, выполните следующие шаги в конфигураторе:
Таким образом, мы решили задачу с помощью СУММА(1), обеспечили правильную сортировку через настройки СКД и интегрировали отчет в интерфейс программы. Этот подход является «золотым стандартом» для оперативных отчетов, которые не требуют сложной архитектурной переработки данных.