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

Публикация № 1869186 25.05.23

Разработка - СКД

Отчет разный расчёт итогов

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

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

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

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

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

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

 

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

Страна

Сумма

Количество

% от суммы

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

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

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

Да

Итого

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).

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

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

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

Скачать файлы

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

.erf 6,68Kb
0
.erf 6,68Kb Скачать

Специальные предложения

Автор запретил комментарии

См. также

Виртуальная иерархия

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Пример своей иерархии для СКД: как в СКД показать последовательность цифр иерархически.

1 стартмани

22.05.2023    1358    1    Sevg    0    

1

Произведение (умножение) чисел из разных строк в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

В данной публикации описано решение получения итога произведением чисел из разных строк.

1 стартмани

11.04.2023    2275    0    Bitnikov    0    

4

СКД: вывод времени в формате день, час, минута, секунда

СКД Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Абонемент ($m)

Готовый пример вывода времени в формате хх д хх ч хх м хх средствами СКД.

1 стартмани

01.12.2022    2277    3    lagutiniv    2    

8

Еще один вариант отчета Статистика по документам

Статистика базы данных СКД Платформа 1С v8.3 Россия Абонемент ($m)

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

1 стартмани

14.10.2022    2528    4    scientes    0    

3

Добавление нумерации колонок СКД одной процедурой

СКД Платформа 1С v8.3 Управляемые формы Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

16.06.2022    3833    0    user700035_6550355    3    

4

Таблица умножения, деления на СКД, управляемые формы (пример тестового задания)

Подготовка к аттестации СКД Платформа 1С v8.3 Абонемент ($m)

Пример тестового задания и его реализации. Протестировано на версии платформы 8.3.18.1289.

1 стартмани

30.05.2022    4644    8    Johnson1987    13    

7

Вывод изображений штрихкодов на СКД

СКД Система компоновки данных 8.3.14 Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

27.04.2022    3537    14    SergeyPZU    8    

16

Отборы СКД на форме УФ

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

Создание отборов из СКД для таблиц значений.

1 стартмани

22.04.2022    5821    5    Chinga050    4    

16

Редактирование данных в ячейках СКД (простая реализация)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

На примере справочника "Номенклатура" рассмотрим, как в отчёте можно редактировать его реквизиты, и изменения мгновенно будут записываться в элемент справочника.

1 стартмани

11.03.2022    8455    7    Flashill    20    

52

Срез последних N записей, пример на СКД

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пример получения в СКД последних N записей, т.е. например, получить последние 3 записи по каждой категории.

1 стартмани

09.03.2022    4977    4    user-z99999    9    

0

Шаблон отчета на СКД (обычные формы)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Улучшенный шаблон отчёта СКД, реализованный на обычных формах. Лаконичный и функциональный, весь необходимый минимум для управления отчётом вынесен на форму отчёта, что избавляет рядовых пользователей от необходимости лезть внутрь настроек отчёта. Форма сделана гибкой и позволяет легко себя адаптировать под Ваши потребности. Ряд элементов формы сделан сворачиваемыми и растягиваемыми.

2 стартмани

14.02.2022    6617    19    Eugen-S    4    

9

Расчет нарастающего итога, дельты и другие варианты в СКД

СКД Платформа 1С v8.3 Управляемые формы Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Пример получения в СКД значений: нарастающий итог, дельта, среднее значение, отклонение и т.д.

1 стартмани

07.02.2022    4631    6    user-z99999    0    

-1

Отчет "Документы "Реализации" на каждый день" когда была реализация

СКД Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

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

1 стартмани

27.08.2021    3567    1    Shvapsss    2    

1

Программное формирование отчетов в БП 3.0 на примере оборотно-сальдовой ведомости по счету

Адаптация типовых решений СКД Платформа 1С v8.3 Бухгалтерский учет Система компоновки данных 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Абонемент ($m)

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

1 стартмани

14.07.2021    9449    44    arman1997    1    

7

Отчет по расписаниям (пример)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Пример построения отчета по нескольким расписаниям.

1 стартмани

18.05.2021    7931    0    echo77    4    

23

Отчет с настройкой роли поля СКД со свойством период

СКД Платформа 1С v8.3 Система компоновки данных Платформа 1C v8.2 Конфигурации 1cv8 Управленческий учет Абонемент ($m)

Отчёт демонстрирует правильную настройку роли СКД со свойством «Период», по которой рассчитывается остаток. Этот отчет тестировался на конфигурации Управление торговым предприятием для Казахстана, редакции 2.0.19.2. Может работать на любой конфигурации, если имеется регистр накопления «ТоварыНаСкладах».

2 стартмани

01.04.2021    6706    4    softmaker    0    

0

Примеры использования функций СКД Массив (Array) и СоединитьСтроки (JoinStrings) в отчётах 1С 8

СКД Система компоновки данных Платформа 1C v8.2 Конфигурации 1cv8 Казахстан Бухгалтерский учет Абонемент ($m)

Здесь приведено два отчёта, в которых использованы функции СКД Массив (Array) и СоединитьСтроки (JoinStrings). Отчет по ГТД и отчет по продаже номенклатуры, оба тестировались на конфигурации Управление торговым предприятием (УТП) для Казахстана, редакции 2.0.19.2. Также добавлена электронная книга, в которой собраны знания по основам СКД, которые я получил, во время работы и изучения системы компоновки данных.

10 стартмани

15.03.2021    15811    42    softmaker    0    

1

Расшифровка СКД. Фильтр отчета по диапазону чисел. Переопределение обработки расшифровки. Не модальный режим

СКД Управляемые формы Система компоновки данных 8.3.14 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

08.02.2021    9514    5    denmon88    1    

18

Быстрое формирование наборов данных Объект схемы СКД

СКД Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

При разработке отчета, использующего наборы данных Объект, зачастую много времени занимает описание самих наборов в схеме СКД. Если таких наборов несколько или количество полей в них достаточно велико, то задача усложняется. В публикации приводится способ сокращения подобных трудозатрат.

1 стартмани

05.07.2020    12604    8    Алексей Воробьев    16    

56

Получение курса валюты за период с помощью СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

04.02.2020    8786    1    KawaNoNeko    2    

2

Проверка несуществующих полей в настройках СКД

СКД Платформа 1С v8.3 Система компоновки данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Обработка находит все поля настроек СКД, которые утратили свою актуальность Подходит для УТ 11, ERP, КА 2.

1 стартмани

20.06.2019    10367    4    MuI_I_Ika    2    

8

Передача набора данных типа Объект в отчет СКД

СКД Платформа 1С v8.3 Управляемые формы Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

Пример показывает, каким образом можно передать таблицу значений в отчет СКД (в набор данных объект). Пример работает как на обычных, так и на управляемых формах.

1 стартмани

12.11.2018    51114    15    evgen7938    4    

6

Примеры программной работы с СКД, а также программного создания управляемой формы

СКД Платформа 1С v8.3 Управляемые формы Система компоновки данных Абонемент ($m)

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

1 стартмани

12.08.2018    11713    32    MaxStrelok    0    

16

Альтернатива ОтборуСтрок() с возможностями условий отборов СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Типовой ОтборСтрок() использует только условия на равенство. Для таблицы формы, источником которой является "ДеревоЗначений" возможность отбора вообще отсутствует. Но есть возможность использовать всю широту возможностей отборов СКД.

1 стартмани

04.02.2018    12542    12    mszsuz    5    

8

СКД. Использование встроенного макета, разделителя страниц

СКД Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Пример работы с макетом СКД для начинающих программистов. За основу взят справочник подразделений, который есть в большинстве конфигураций. Показано, как вывести заголовок, детальные записи, подвал группировки и общий подвал. Приведен пример вставки разделителя страниц. Отчет можно использовать в любой конфигурации 1С: 8.

1 стартмани

31.03.2017    23750    28    Vin_Tik    0    

2

Процессор вывода результата компоновки данных в JSON. И не только...

Внешние источники данных СКД Платформа 1С v8.3 Абонемент ($m)

У каждого разработчика возникают задачи интеграции решений. Основная масса решений призвана вывести данные из «1С:Предприятие 8» в обусловленном формате. Разработчики используют огромную часть своих драгоценных ресурсов на реализацию определенной структуры вывода и необходимого формата. А что если...

1 стартмани

14.02.2017    33568    47    pbazeliuk    33    

126

Фильтр на таблицу значений системой компоновки данных

СКД Управляемые формы Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Часто здесь проскакивает вопрос, а как установить фильтр на таблицу значений в управляемых формах. На самом деле, есть только один способ - залить старую таблицу значений в новую, отфильтровав или отсортировав по каким-либо правилам. Здесь реализуем на компоновке данных.

1 стартмани

14.12.2016    17015    2    igel9780    2    

6

Полезные процедуры по работе с СКД и табличными документами (часть 1)

СКД Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

03.09.2016    85193    119    json    25    

322

Расшифровки при программном формировании отчета на СКД

СКД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Что делать, если не работают расшифровки при программном формировании отчета на СКД? Ответ ниже.

1 стартмани

11.08.2016    41731    25    kotlovD    15    

29

Использование методов глобального контекста в системе компоновки данных или недокументированные возможности СКД

СКД Управляемые формы Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Прочитал на форуме, что СтрРазделить() и ТекущаяДата() работают в языке выражений системы компоновки данных. Почитал справку, там ничего не нашёл, поэтому не поверил. Посмотрел на практике – и правда работает… В данной статье попытался привести весь перечень методов, работающих в СКД, но не описанных в документации.

1 стартмани

05.08.2016    51576    29    klinval    41    

165

Сформировать дерево спецификаций быстро

СКД Платформа 1С v8.3 Система компоновки данных 1С:Управление производственным предприятием Абонемент ($m)

Обработка строит дерево состава изделия (структура изделия) с помощью СКД.

5 стартмани

30.07.2016    22304    47    SITR-utyos    8    

22

Разработка отчета СКД с использованием заглушек наборов данных

СКД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

25.06.2016    22989    10    json    15    

16