Каталог решений - Различный расчет итогов в одной колонке отчета для разных группировок. СКД. Ресурсы vs Пользовательские поля

Различный расчет итогов в одной колонке отчета для разных группировок. СКД. Ресурсы vs Пользовательские поля

Различный расчет итогов в одной колонке отчета для разных группировок. СКД. Ресурсы vs Пользовательские поля

В наличии

Поступил запрос от заказчика на разработку нового отчёта. И вот была в этом отчете одна интересная для меня идея – нужно было, чтобы одно и тоже поле рассчитывалось для одной группировки как процент, а для другой группировки – как абсолютное значение.

Категория:

Описание

Всем доброго времени суток!

Совсем недавно пришлось познакомиться с таким механизмом СКД, как «Пользовательские поля» и теперь спешу поделиться с теми, кто, как и я, пытается понять этот механизм.

Поступил запрос от заказчика на разработку нового отчёта. И вот была в этом отчёте одна интересная идея – нужно было, чтобы одно и тоже поле рассчитывалось для одной группировки как процент, а для другой группировки – как абсолютное значение.

Для примера предположим, что есть у нас справочник «Договоры контрагентов» и по данным этого справочника необходимо сформировать простейший отчёт – договор – сумма – количество и процентные соотношения, сгруппировать по стране регистрации контрагента. Если страна регистрации контрагента является участником ЕАЭС, то в итогах необходимо указать процентные итоги, иначе – абсолютное количество / сумму договоров.

Т.е., итоговый вид отчёта должен быть примерно таким:

 

Участники ЕАЭС

Страна

Сумма

Количество

% от суммы

(от общей суммы)

% от количества

(от общего кол-ва)

Да

Итого

1000

100

62,5 %

62,5 %

Россия

100

10

10 %

10 %

Беларусь

200

20

20 %

20 %

Казахстан

300

30

30 %

30 %

Киргизия

400

40

40 %

40 %

Нет

Итого

600

60

600

60

Китай

100

10

100

10

Франция

200

20

200

20

Германия

300

30

300

30

 

Т.е., в колонке 5 и 6, в зависимости от группировки, итоги должны считаться по-разному. Итог по группировке «Участники ЕАЭС» — процент от общего количества (суммы) договоров, а для группировки не участников ЕАЭС – просто сумма текущей группировки.  При этом, для стран-участников ЕАЭС после рассчитанного процента в поле обязательно должен быть указан значок «%».

Может быть, для кого-то это довольно посредственная задача, но мне, честно сказать, с таким любопытным расчетом ранее сталкиваться не приходилось. После некоторых размышлений и гуглений было решено использовать «Пользовательские поля».

Сложность задачи ещё заключалась в том, что, в отличие от вышеописанного тестового примера, в формируемом отчёте было 4 уровня иерархии и 3 различных правила расчёта итогов по ним: в каком-то случае проценты должны были считаться от общего итога, в каком-то от текущей группировки, в каком-то от вышестоящей группировки.

Реализовать ещё и различный тип итогов (проценты / абсолютное значение) при расчёте ресурсов показалось сложным именно для понимания расчета и дальнейшей работы (доработки / сопровождения) с отчётом.

А вот с пользовательскими полями всё показалось намного прозрачней и понятней.

В указанной статье покажу оба примера.

Итак, порядок действий:

1. Формируем запрос, в который выбираем договор, сумму, страну контрагента и признак участника ЕАЭС. В приложенный отчёт также было добавлена одна пустая строка с нулевой суммой и нулевым количеством – чуть позже объясню, зачем.

Также, в приложенном отчете в качестве сумм договоров всегда указано «100», т.к. на своём опыте приходилось сталкиваться с тем, что в разных конфигурациях данное поле называется по-разному (где-то «Сумма», где-то «Стоимость», а в некоторых его вообще нет). Если кто-то будет смотреть – то хотелось бы, чтобы отчёт, как говорится, «взлетел».

И ещё, на всякий случай, в отчёт добавлено условие «ПЕРВЫЕ 5000», на случай, если будет ну ооочень большой объём данных. Всё-таки никаких отборов и т.п.

2. Затем создаём два новых вычисляемых поля «ПроцентОтКоличества» И «ПроцентОтСуммы» — это будут те самые поля, в которых будем выполнять расчёт.

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

Процент от количества рассчитаем через ресурс, процент от суммы – через пользовательское поле.

3.1. Расчёт через ресурс.

Выводим в ресурсы вычисляемое поле «ПроцентОтКоличества» и задаём ему нужную нам формулу расчёта (100 * Количество / Общее количество). Я также обычно выполняю проверку на то, что знаменатель не равен нулю, чтобы потом в отчете не было записей «Деление на 0».

Затем рассчитанное значение «заворачиваем» в функцию «Формат», указываем количество знаков после запятой и знак процента.

И всё это дело также «заворачиваем» в функцию выбора, в которой определяем, что если это участник ЕАЭС, то тогда вышерассчитанный процент, иначе – просто количество.

В конечном итоге у меня получилось так:

 

 

Теперь на вкладке «Настройки» просто выводим это поле и всё, задача решена.

3.2. Расчёт через пользовательское поле.

Для расчёта через пользовательское поле формула в ресурсах будет выглядеть немного проще – без форматирования и выбора – только проверка на не нулевой знаменатель и правило расчета. Остальная часть будет вынесена в пользовательские поля.

В конечном итоге вышло так при расчёте ресурса:

 

 

Далее, на вкладке «Настройки» -> вкладка «Пользовательские поля» добавляем новое пользовательское поле «выражение».

— В поле «Выражение детальных записей» указывается значение детальных записей (в нашем случае просто сумма).

— В поле «Выражение итоговых записей» указывается формула для расчета по группировкам. Это тот самый выбор + форматирование, которые для расчета по количеству выполняли в ресурсах, но т.к. значение по сумме уже рассчитано, то формула выглядит немного проще:

 

 

4. Выполняем настройки отчёта, группировки, положение и т.д. Затем запускаем отчёт и смотрим:

 

 

Всё как просили – для Участников ЕАЭС проценты, для остальных – абсолютные значения.

Однако обратите внимание на пустую строку, с пустыми значениями и знаком % в наших итогах. Это та самая строка, которая была добавлена специально для примера того, как рассчитанные нами значения будут отражаться в случае, если значение в строке будет нулевым.

Чтобы избавиться от этих пустых знаков процентов, достаточно в расчёт ресурса добавить простое условие, что если рассчитанное значение равно 0, то вывести 0 или пустое значение.

Для пользовательского поля это проблем не составит:

 

 

А вот для ресурса кода прибавится немного больше:

 

 

В любом случае видим, что в итоге знаков % больше нет:

 

 

 

Как итог скажу, что лично для меня пользовательское поле оказалось проще, так как расчетов было много, они были несколько сложнее, чем в указанных примерах, да и на мой взгляд выглядит это немного компактнее и читабельней.

Тестирование проводил в конфигурации Управление холдингом, редакция 3.1 (3.1.6.15).

Возможно, кто-то знает вариант лучше – всегда интересно услышать другие идеи.

Возможно, кому-то данная статья чем-то поможет в реализации поставленных задач.

В любом случае, спасибо за внимание.

has been added to your cart:
Оформление заказа