Часто возникает простая, но важная задача: сформировать в 1С отчет, который представляет собой обычный список данных, например, перечень документов за период, а в самом конце этого списка вывести итоговую строку с общим количеством этих записей. Например, "Всего документов: 50". На первый взгляд, это кажется элементарным, но в Системе Компоновки Данных (СКД) есть свои нюансы, особенно если вам требуется пользовательская СКД с расширенными возможностями построения отчетов. Рассмотрим по шагам, как это реализовать двумя наиболее популярными способами.
Проанализируем исходную ситуацию. У нас есть простой запрос (в ряде случаев данные для него можно получить, выполнив перенос отбора из динамического списка в отчет СКД (удобно через инструмент переноса отборов динамического списка в СКД)), который выбирает ссылки на документы:
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
В результате выполнения отчета на основе такого запроса мы получаем только одну колонку со списком документов. Наша цель — добавить под этой колонкой итоговое количество строк.
Этот метод основан на небольшой модификации исходного запроса и последующей настройке ресурсов в СКД. Он очень нагляден и прост для понимания.
Первым шагом откроем наш набор данных в схеме компоновки данных (для этого подойдёт удобная консоль СКД для разработки и тестирования схем) и добавим в запрос еще одно поле. Это будет статическое поле, которое для каждой строки выборки будет содержать единицу. Назовем его Количество. Это поле и будет нашим "счетчиком".
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
1 КАК Количество
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
После изменения текста запроса не забудьте нажать "ОК", чтобы СКД обновила список доступных полей.
Теперь СКД "знает" о нашем новом поле Количество, но пока не понимает, что с ним делать. Нам нужно указать, что по этому полю необходимо считать итоги. Для этого перейдем на вкладку "Ресурсы".
В табличной части нажмите кнопку "Добавить". В колонке "Поле" выберите наше новое поле Количество. В колонке "Выражение" СКД автоматически подставит агрегатную функцию Сумма(Количество). Это именно то, что нам нужно: система просуммирует все единицы из нашего "поля-счетчика" и получит общее количество записей.
Это финальный и очень важный шаг, на котором мы управляем отображением данных. Перейдем на вкладку "Настройки".
В структуре отчета у нас, скорее всего, есть только одна группировка "Детальные записи". Чтобы увидеть общие итоги, нам нужно, чтобы в структуре была хотя бы одна группировка верхнего уровня, или просто корневой элемент "Отчет".
Далее, чтобы итоги выводились в конце, а не в начале отчета, выполним следующие действия:
Важный момент: после добавления ресурса в отчете может появиться дополнительная колонка "Количество", заполненная единицами. Это не всегда красиво. Чтобы ее скрыть из детальных записей, но оставить в итогах (подобный вывод ресурса только в одной колонке часто применяется для оптимизации внешнего вида), сделайте следующее:
Количество добавлено в список (обычно оно добавляется автоматически, когда вы указываете его в ресурсах).Количество.Количество установлена.Таким образом, для детальных записей колонка будет скрыта, а в итоговой строке — отображена.
Этот способ считается более "правильным" и элегантным, так как не требует добавления в запрос искусственных полей. Вся работа выполняется средствами самой СКД.
Оставляем наш первоначальный, "чистый" запрос без каких-либо изменений. Это делает его более универсальным и читаемым.
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
Вся магия происходит на вкладке "Ресурсы". Вместо того чтобы суммировать готовое поле, мы попросим СКД саму посчитать количество записей. К слову, в ресурсах можно реализовать и более сложные алгоритмы, такие как сбор значений колонки из нескольких строк.
Нажмите "Добавить" на вкладке "Ресурсы". Поле "Поле" оставьте пустым. В колонке "Выражение" напишите одну из следующих агрегатных функций:
Количество(Ссылка) — посчитает количество всех не-NULL значений в поле "Ссылка".Количество(РАЗЛИЧНЫЕ Ссылка) — посчитает количество уникальных ссылок. В нашем простом случае результат будет тот же, но этот вариант является более надежным, если в запросе теоретически могут появиться дубли строк.Рекомендуем использовать второй вариант как более универсальный. Также можно задать "Заголовок" для этого ресурса, например, "Всего документов", чтобы в отчете отображалось понятное имя.
Этот шаг полностью аналогичный шагу 3 из первого решения. Вам также нужно перейти на вкладку "Настройки" и в "Других настройках" для корневого элемента отчета установить свойство "Расположение общих итогов" в значение "Конец".
Поскольку мы не добавляли поле в "Выбранные поля", а создали ресурс "на лету", СКД автоматически добавит его в итоговую строку. Никаких дополнительных колонок в детальных записях при этом не появится, что делает этот способ очень удобным.
В итоге, оба метода приводят к желаемому результату. Первый способ более "прямолинейный" и может быть понятнее новичкам. Второй способ — более профессиональный, так как он использует мощь агрегатных функций СКД и оставляет исходный запрос чистым. Если же вам предстоит работа со сложными структурами программно, обратите внимание на СКДБилдер, упрощающий создание схем, а в исключительных случаях может потребоваться реализовать сразу две разных схемы в одном отчете СКД. Выбирайте тот метод, который вам удобнее, и успешно решайте ваши задачи!