Как вывести разные типы строк и сложные итоги (Приход, Расход, Остаток) в отчете СКД?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке управленческих отчетов (например, финансового баланса или движения денежных средств) часто возникает задача вывести данные в строго определенной структуре. Руководству может потребоваться отчет, в котором строки прихода и расхода выводятся последовательно, итоговая сумма группы располагается вверху рядом с заголовком раздела, а внизу рассчитывается конечный остаток.

Разберем основные варианты решения этой задачи средствами Системы компоновки данных (СКД) в 1С на управляемых формах без отказа от стандартного механизма отборов и настроек.

Способ 1. Настройка структуры отчета из нескольких таблиц или группировок

Рассмотрим наименее трудоемкий вариант, при котором иерархия отчета выстраивается прямо в настройках схемы компоновки данных на вкладке Настройки.

Если данные по приходу, расходу и остаткам можно разделить на уровне группировок, добавим в дерево структуры отчета несколько последовательных элементов:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. В окне Структура добавим первую группировку (или таблицу) по виду операции Приход.
  3. Внутри этой группировки добавим подчиненную детальную группировку (например, по расшифровке платежа).
  4. Следом добавим вторую группировку для операций вида Расход с аналогичной вложенной детализацией.
  5. В конце структуры добавим отдельную группировку для вывода остатка.

Такой подход позволяет обойтись без написания программного кода вывода табличного документа и сохраняет весь функционал СКД.

Способ 2. Объединение данных в запросе и синтетическая группировка

Проанализируем ситуацию, когда данные необходимо собрать из множества регистров (например, из 7 источников) и выстроить строго регламентированный порядок строк. Для этого удобно использовать конструирование искусственных полей сортировки в запросе с помощью ОБЪЕДИНИТЬ ВСЕ.

Разберем пример запроса, формирующего единый набор данных с признаком раздела:


ВЫБРАТЬ
	1 КАК РазделПорядок,
	"Приход денег" КАК РазделПредставление,
	Приход.СтатьяДвижения КАК Расшифровка,
	Приход.Сумма КАК Сумма
ИЗ
	РегистрНакопления.ДенежныеСредства.Обороты(&НачалоПериода, &КонецПериода, , ПриходРасход = ЗНАЧЕНИЕ(Перечисление.ПриходРасход.Приход)) КАК Приход

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2 КАК РазделПорядок,
	"Расход денег" КАК РазделПредставление,
	Расход.СтатьяДвижения КАК Расшифровка,
	Расход.Сумма КАК Сумма
ИЗ
	РегистрНакопления.ДенежныеСредства.Обороты(&НачалоПериода, &КонецПериода, , ПриходРасход = ЗНАЧЕНИЕ(Перечисление.ПриходРасход.Расход)) КАК Расход

После создания такого запроса настраиваем группировку по полю РазделПредставление и задаем сортировку по полю РазделПорядок. В итоге отчет выведет разделы строго один за другим.

Способ 3. Расчет итогов в шапке группировки и вычисляемые поля

Посмотрим, как вывести итоговую сумму раздела в одной строке с его названием (например, «Приход денег | Сумма прихода итого»), не перенося итоги в нижнюю строку.

  1. В настройках группировки отчета найдем параметр Расположение итогов (или Расположение группировок) и установим значение Начало. Это позволит выводить суммы группировок перед детальными записями.
  2. Для расчета специфических показателей (например, конечного остатка как разницы прихода и расхода) перейдем на вкладку Вычисляемые поля и добавим поле ОстатокИтого.
  3. На вкладке Ресурсы опишем выражение для расчета ресурсов по нужным группировкам. При необходимости получения сумм из других контекстов группировок используем функцию СКД ВычислитьВыражение().

Способ 4. Использование макетов группировки

Если требования к оформлению строки итогов или остатка очень строгие, выделим оформление через вкладку Макеты схемы компоновки данных. Это позволяет не переписывать отчет «по старинке» процедурно, а оформить только нужные ячейки:

  1. Перейдем на вкладку Макеты.
  2. Добавим Макет группировки для конкретного поля (например, для шапки раздела или итоговой строки остатка).
  3. Оформим ячейки табличного документа и привяжем к ним параметры СКД.

Сохранение пользовательских отборов в управляемых формах

Выясним причину, почему не следует отказываться от СКД в пользу процедурного вывода отчета в управляемых формах. При ручном выводе табличного документа разработчику приходится самостоятельно реализовывать механизм сохранения и восстановления настроек отбора.

При использовании СКД система автоматически управляет объектом КомпоновщикНастроек. Чтобы отборы пользователя сохранялись между сеансами работы программы, достаточно выполнить следующие шаги:

  1. Вывести на управляемую форму таблицу отборов из реквизита Отчет.КомпоновщикНастроек.Настройки.Отбор.
  2. В свойствах формы убедиться, что включено свойство Автоматическое сохранение данных в настройках.

Таким образом, комбинируя возможности запросов СКД, настройку структуры группировок и макеты оформления, можно реализовать отчет любой сложности без потери стандартного функционала управляемого приложения.

← На главную