Как выдавать в итоги по строкам таблицы ресурсы, отличные от ресурсов в колонках таблицы
Иногда возникает потребность вывести в таблице некоторые ресурсы только в итоге по строкам. Например, требуется вывести в колонках таблицы номенклатуру с указанием суммы оборота и суммы по количеству проданной номенклатуры, а в итоге по строке требуется видеть только итог по сумме.
Если просто добавить в настройки таблицу, и указать, что нужно выводить ресурсы Сумма оборот и Количество оборот,
то результат отчета будет следующим:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | Итого | ||||
Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | |
Алекс-2002 | 2,00 | 480,00 | 2,00 | 560,00 | 4,00 | 1 040,00 | ||
Завод РТИ | 1,00 | 240,00 | 1,00 | 280,00 | 2,00 | 520,00 | ||
Русская одежда | 1,00 | 120,00 | 1,00 | 140,00 | 2,00 | 260,00 | ||
Эльбрус | 2,00 | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 6,00 | 1 320,00 |
Итого | 2,00 | 280,00 | 6,00 | 1 320,00 | 6,00 | 1 540,00 | 14,00 | 3 140,00 |
Для того чтобы итог по строке содержал только определенный ресурс, можно воспользоваться детальными записями, в которых выводятся только ресурсы (см. раздел «Особенности использования детальных записей»).
Для этого, добавим в колонки группировку без полей группировки:
Результат исполнения такого отчета:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | Итого | ||||||
Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | |
Алекс-2002 | 2,00 | 480,00 | 2,00 | 560,00 | 4,00 | 1 040,00 | 4,00 | 1 040,00 | ||
Завод РТИ | 1,00 | 240,00 | 1,00 | 280,00 | 2,00 | 520,00 | 2,00 | 520,00 | ||
Русская одежда | 1,00 | 120,00 | 1,00 | 140,00 | 2,00 | 260,00 | 2,00 | 260,00 | ||
Эльбрус | 2,00 | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 6,00 | 1 320,00 | 6,00 | 1 320,00 |
Итого | 2,00 | 280,00 | 6,00 | 1 320,00 | 6,00 | 1 540,00 | 14,00 | 3 140,00 | 14,00 | 3 140,00 |
Мы добились того, что в правой части таблицы появился еще один итог по строке, в котором выводятся все ресурсы.
Нам требуется, чтобы в итоге по строке выводилось только поле «Сумма оборот», поэтому перейдем в выбранные поля только что добавленной нами группировки (в конструкторе схемы компоновки данных для этого нужно выделить группировку и переключить текущие редактируемые настройки на «Детальные записи»).
В выбранных полях нашей группировки добавим поле СуммаОборот, и удалим авто поле, т.к. мы точно знаем, какие поля нам нужны.
Результат такого отчета будет выглядеть так:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | Итого | |||||
Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Сумма оборот | |
Алекс-2002 | 2,00 | 480,00 | 2,00 | 560,00 | 4,00 | 1 040,00 | 1 040,00 | ||
Завод РТИ | 1,00 | 240,00 | 1,00 | 280,00 | 2,00 | 520,00 | 520,00 | ||
Русская одежда | 1,00 | 120,00 | 1,00 | 140,00 | 2,00 | 260,00 | 260,00 | ||
Эльбрус | 2,00 | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 6,00 | 1 320,00 | 1 320,00 |
Итого | 2,00 | 280,00 | 6,00 | 1 320,00 | 6,00 | 1 540,00 | 14,00 | 3 140,00 | 3 140,00 |
Теперь, для того, чтобы итог по строке не выдавался два раза, уберем вывод общего итога из группировки Номенклатура. Для этого установим параметр вывода «Расположение общих итогов» в значение «Нет».
Результат исполнения отчета будет таким:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | ||||
Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | |
Алекс-2002 | 480,00 | 2,00 | 560,00 | 2,00 | 1 040,00 | ||
Завод РТИ | 240,00 | 1,00 | 280,00 | 1,00 | 520,00 | ||
Русская одежда | 120,00 | 1,00 | 140,00 | 1,00 | 260,00 | ||
Эльбрус | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 2,00 | 1 320,00 |
Итого | 280,00 | 2,00 | 1 320,00 | 6,00 | 1 540,00 | 6,00 | 3 140,00 |
Настройка итогов в СКД 1С 8.3
Отчеты в системах 1С используются для вывода информации пользователям в требуемом виде. Чаще всего для этого используется система компоновки данных – специальный механизм платформы, позволяющий писать достаточно сложные отчеты без написания кода. Если вы хотите быстро и грамотно писать отчеты в 1С, то вам придется изучить основные приемы работы с СКД.
Как рассчитать и вывести итоги в СКД
Одной из самых частых просьб пользователей является автоматический подсчет итогов по определенным критериям. Это действительно удобно и позволяет моментально оценить общий результат работы, чтобы не разбирать детально каждую строку отчета. СКД в 1С 8.3 поддерживает достаточно гибкие настройки, чтобы удовлетворить любые разумные требования пользователей.
Рассматривать вывод итогов оптимально на конкретных примерах с отчетом на СКД.
Расчет итогов настраивается на вкладке «Ресурсы», где слева у нас расположены все поля из запроса, а справа – настроечная таблица. Если не задерживаться на этой вкладке, то 1С не будет ничего рассчитывать и выведет данные, полученные после выполнения запроса. Попробуем сделать простой расчет общего количества номенклатуры на каждом складе. Для этого переместим поле в правую часть и установим в качестве выражения сумму.
Кроме суммы в СКД заложены и другие операции, которые можно указывать в поле «Выражение» в правой таблице. Причем они отличаются в зависимости от типа данных поля. Для нечисловых полей вы не сможете вывести в итоги их сумму или узнать среднее значение. С числами вы можете использовать полный набор арифметических операций:
- Сумма;
- Среднее;
- Максимум;
- Минимум;
- Количество;
- Количество различных.
Следует упомянуть, что никто не запрещает нам комбинировать вышеперечисленные функции в поле «Выражение». У нас есть возможность прописать там целые формулы и даже обращаться к функциям общих модулей. В поле «Рассчитывать по…» задают группировки, по которым необходим расчет итогов. То есть вы можете в одном столбце получить различную информацию по отдельным группировкам.
Разберем в качестве примера ситуацию, когда нужно показать информацию, сколько единиц товаров находится на каждом складе. Дополнительно с помощью оператора «Вычислить» в СКД отразим процент единиц номенклатуры определенного цвета от общего количества товаров. Так как для первого запроса нам нужна группировка по складам и общая, а для цветовой дифференциации – лишь по цвету, то мы можем вывести итоги в одну колонку. Дополнительно воспользуемся оператором «Формат», чтобы округлить проценты, и получим такую картину:
Дополнительный функционал СКД
Иногда случаются такие ситуации, когда нам необходимо отразить несколько итогов по одним группировкам. К примеру, показать количество номенклатуры на складе и ее процент по отношению к общему количеству. Для этого наиболее удобно использовать дополнительное вычисляемое поле. Его мы можем добавить на вкладке «Вычисляемые поля».
Нам необходима номенклатура, чтобы в итогах по группировкам отразить ее ассортимент. Для этого в столбец «Выражение» мы пропишем данные из поля запроса «Номенклатура». Таким образом, мы добавляем копию столбца, но с другим именем и возможностью настраивать другие итоги по колонкам. В ресурсах добавляем нужные операции с вычисляемым полем и на вкладке «Настройка» также добавляем его в перечень детальных записей.
При запуске отчета мы видим, что наша колонка добавилась и ассортимент подсчитывается верно. Однако, не совсем красиво то, что наименования номенклатуры дублируются в сгруппированных строках. Чтобы убрать наименование номенклатуры из столбца, который задумывался как числовой, необходимо изменить настройку вывода отчета.
В системе компоновки данных на вкладке «Настройка» в верхней половине нам нужно найти «Детальные записи». Нажав на них, в центре настроек можно будет выбрать управляющую конструкцию под аналогичным именем. В нижней половине откройте вкладку «Выбранные поля» и увидите единственную запись с названием «Авто». Нажмите на нее правой кнопкой мыши и выберите «Развернуть». Появятся все поля, среди которых нужно найти «АссортиментНоменклатуры», и отключить его.
Сохраняем отчет, обновляем конфигурацию, если это встроенный отчет, и запускаем 1С в режиме предприятия. В результате после сделанных настроек числовые показатели на всех уровнях группировки, включая общие итоги, остаются, а наименования номенклатуры отсутствуют. Таким способом можно отключить отображение данных поля на конкретном уровне.
В систему компоновки данных заложены широкие возможности и гибкие настройки, позволяющие создать практически любой отчет. Естественно, что существуют и настройки внешнего вида – группировки, общие и промежуточные итоги, выделения цветом и прочее. Остается лишь понять и запомнить, где и что настраивается в СКД.
Настройка расчета итогов в СКД
Доброго дня, товарищи специалисты! Подскажите, пожалуйста, можно ли рассчитать итоги в отчете по принципу: Итог по 1 колонке + Итог по 2 колонке = Итог по 3 колонке? Если да, то наградите примером, пожалуйста.
По теме из базы знаний
- Ошибка расчета остатков в СКД и ее программное исправление на примере Универсального отчета
- Создание отчетов с помощью СКД — основные понятия и элементы
- СКД: 5 советов, как сделать лучше
- Грабли на СКД
- Различный расчет итогов в одной колонке отчета для разных группировок. СКД. Ресурсы vs Пользовательские поля
Найденные решения
3. v25i85 1 14.06.22 08:37 Сейчас в теме
1. Добавляем вычисляемое поле
2. На закладке Ресурсы добавляем это поле с выражением
Сумма(Колонка1)+Сумма(Колонка2)
«Расчитывать по» указываем «Общий итог»
3. На закладке «Макеты» добавляем «Макет группировки» и указываем размещение параметра Вычисляемого поля
Lonelcor; custer; + 2 – Ответить
От экспертов «1С-Рарус»: Сложный расчет итогов с помощью системы компоновки данных (СКД) в «1С»
В чём заключается сложность расчета итогов по ключевым показателям?
В статье мы поговорим о применении СКД для решения очень общей задачи, которую можно описать словами «анализ деятельности предприятия». Более точно ее можно сформулировать так: необходимо разработать инструмент, который позволил бы без дополнительного программирования создавать, настраивать и анализировать произвольное количество числовых показателей деятельности компании с произвольным расчетом итогов.
Определение ключевого показателя (КП)
Из-за общности задачи и возникают сложности. Какие показатели необходимо анализировать? Очень разные, можно даже сказать — разноприродные.
- Суммовые показатели (прибыль, выручка).
- Количественные (численность персонала, количество обращений клиентов).
- Проценты (процент ФОТ в затратах).
- Удельные (выручка на одного специалиста, офисная площадь на одного человека).
- Любые другие, значения которых можно выразить числом (площадь помещений).
Таким образом, ключевой показатель — это любая сущность, которая может быть выражена числом, подлежащая анализу.
Список КП заранее не известен
Список показателей не определен заранее: деятельность предприятия меняется, потребность в анализе тоже. Состав показателей дополняется, уточняется, расширяется постоянно в течение жизни компании.
Есть показатели общие и общепринятые для всей компании, с общим способом расчета. Например, такие как выручка, прибыль. А есть специфические для какого-то филиала или вида деятельности. Например, молодой филиал с не устоявшимся количеством сотрудников анализирует количество квадратных метров офиса на одного сотрудника.
Производные КП
Часть показателей является производными: их значение бессмысленно хранить, оно напрямую зависит от значений базовых показателей. Такими показателями, например, являются все удельные: для их расчета нужно знать общее значение и количество сущностей, на которое нужно поделить это общее.
Удельная прибыль на сотрудника — это общая прибыль, поделенная на количество сотрудников.
Структура отчёта с ключевыми показателями
При большом количестве сотрудников, занимающихся анализом, возникает потребность организовывать эти показатели в уникальные для конкретного менеджера списки и/или структуры.
Если показателей в компании хоть сколько-нибудь значимое количество, то у любого менеджера должна быть возможность быстро сформировать отчет по релевантному именно для него перечню показателей, причем желательно не просто перечню, а особым образом организованному перечню.
Например, структура может быть такой:
Раздел 1: Общая выручка Выручка от продажи товаров Выручка от продажи услуг Раздел 2: Затраты ФОТ Командировки Прочее Раздел 3: Прибыль
Постановка задачи расчета агрегационных итогов
С требованиями к самим показателям более-менее определились, теперь нужно сформулировать, какие требования возникают непосредственно при анализе данных.
В любой системе хранения данных есть детализированное хранимое значение, то есть такое, набор аналитик которого мы считаем достаточным. Скажем, можно хранить выручку за каждый день и для каждого продавца, а можно — за год и по компании в целом.
Допустим, мы договорились, что детальное значение показателя мы храним или считаем в разрезах Подразделение/Месяц. Задача состоит в корректном расчете итогов для всей компании. Возникают следующие вопросы:
- Как посчитать итог для одного подразделения за год?
- Для всей компании за год?
В самом простом случае ответ — всё сложить. Например, прибыль. Понятно, что прибыль по компании за месяц — это сумма всех прибылей подразделений за этот месяц, а прибыль за год — это сумма всех прибылей за месяц, неважно, для одного подразделения или для всей компании.
Теперь разберем, например, показатель «Численность сотрудников». Что такое численность всей компании за месяц? Это снова сумма численности подразделений (не рассматриваем случаи, когда сотрудник числится сразу в двух подразделениях по полставки). А что такое численность подразделения за год? Сумма численностей за все месяцы? Точно нет.
На практике оказывается, что решение, как анализировать численность за год, принимает конкретный аналитик. Некоторые считают, что это должен быть максимум от численностей за месяцы, некоторые — что среднее. А что такое численность компании за год? Это, соответственно, максимум (или среднее) от суммы численностей подразделений за каждый месяц.
Отдельный случай — с расчетными показателями. Как посчитать, например, удельную прибыль за год? Можно взять среднюю из рассчитанных удельных прибылей помесячно, а можно рассчитать по своей формуле на уровне года, применив агрегацию к тем показателям, что являются основой для расчета: в таком случае, удельная прибыль за год = сумма прибыли за год / средняя численность за год.
Так, в нашем примере средняя удельная прибыль за год = (214.29 + 133.33 + 177.78) / 3, а удельная прибыль, рассчитанная за год по формуле = 4300 (прибыль за год) / 8.33 (средняя численность за год).
Система должна предоставить инструмент для того, чтобы реализовать возможность выбора агрегационной функции итога по периоду для каждого показателя, так как этот выбор зависит от нужд конкретного аналитика.
Собрав все возможные требования к расчету итогов, мы пришли к такому перечню агрегаций:
- Сумма.
- Среднее.
- Максимум.
- Количество.
- Количество различных.
- Среднее накопительное.
- Формула (релевантно только для расчетных показателей; имеется в виду расчет по формуле на любом уровне итогов, с применением агрегационных функций базовых показателей).
Архитектура и методика решения для расчета ключевых показателей
Теперь, когда задачи сформулированы, рассмотрим возможные архитектурные подходы для их решения. Начнем с задачи об открытом списке КП, создании новых, модификации имеющихся.
Справочники и регистры
1. Справочник «Ключевые показатели». Справочник открыт для добавления новых элементов ключевых показателей и редактирования существующих. Таким решается задача составления заранее не заданного списка КП.
2. В каждом КП возможно задать его собственный способ расчета итога по периоду. Таким образом решается задача произвольного подсчета итогов для каждого отдельно взятого КП. Разумеется, в данном случае это всего лишь декорационная обвязка над сложным математическим аппаратом СКД. Мы рассмотрим ее ниже.
3. Если КП расчетной природы, то можно задать формулу его расчета в терминах языка запроса «1С». Для удобства пользователей коды базовых показателей в пользовательском режиме трансформируются в наименования. Так решается задача произвольного расчета показателя без хранения значений.
4. Для хранения значений всех показателей, кроме формульных, в системе создан регистр сведений «Значения ключевых показателей». Его структура зависит от набора аналитик, определяющих значение ключевого показателя. В нашем примере его структура была бы такова:
- Подразделение,
- Период (месяц),
- Ключевой показатель,
- Значение.
Регистр может заполняться вручную, а может — автоматически, на основании методов расчета, заданных в ключевом показателе.
5. Хотя это не относится к теме статьи, заметим, что один и тот же показатель может рассчитываться по-разному для разных контуров и объектов учета. Например, разными контурами может быть плановая и фактическая деятельность компании, а объектами учета — разные филиалы:
6. Справочник «Виды отчетов» — инструмент для систематизации КП.
Каждый вид отчета представляет собой структуру, которую пользователь наполняет необходимыми для него КП. Также для каждого раздела структуры можно задать способ расчета итога по этому разделу. Вид отчета выбирается в отчете по ключевым показателям.
Таким образом, решаются следующие задачи:
- составление собственной структуры КП для облегчения анализа;
- хранение в системе произвольного количества таких структур.
Важно понимать, что задача системы — обеспечить максимальную гибкость инструмента; при этом фактическое использование (то есть количество и состав структур и собственно КП) зависит от управленческих задач и решается по‑своему в каждой компании.
Пример структуры КП:
7. Отчет «Сравнительный анализ ключевых показателей».
Наконец мы добрались до главного инструмента анализа — собственно, отчета.
Какие задачи решает отчет:
- Вывод значений хранимых значений показателя / списка показателей.
- Расчет и вывод значений формульных значений показателя / списка показателей.
- Расчет итогов по показателям по периоду.
- Расчет итогов по показателям по произвольному набору группировок.
- Расчет итогов по показателям по разделам структуры.
Концептуальная схема работы отчета
- Запросом собирается предварительная таблица данных.
- Программно модифицируется таблица данных.
- Назначается как набор данных для СКД, которая и занимается окончательной обработкой и выводом отчета.
- Программно формируется схема СКД в части выражения ресурсов и вычисляемых полей.
Сбор данных заключается в формировании массива ключевых показателей и получении для них актуальных значений, хранимых в регистре. Массив формируется следующим образом:
- Отбор показателей по прямому отбору из отчета, будь то по структуре или по ручному отбору, установленному пользователем.
- Раскрутка формул из расчетных показателей, с целью получить список тех показателей, которые являются базой для расчета.
При подготовке исходных данных запрос собирает список показателей, поданных на вход, а также тех показателей, которые являются базовыми для расчетных, и по ним строит плоскую таблицу. Результат выглядит так:
Показатель | Рассчитывается | Подразделение | Период | Значение |
---|---|---|---|---|
Прибыль (Код = «000000736») | Нет | Отдел внедрений | 01.2020 | 1000 |
Численность (Код = «000000739») | Нет | Отдел внедрений | 01.2020 | 5 |
Численность (Код = «000000739») | Нет | Отдел продаж | 01.2020 | 2 |
Удельная прибыль (Код = «000000740») | Да | Отдел внедрений | 01.2020 | |
… |
Далее наша работа заключается в том, чтобы модифицировать эту таблицу в тот вид, из которого благодаря вычисляемым полям и ресурсам СКД мы сможем получить все необходимые цифры. Финальная таблица для подачи в СКД выглядит так:
В ней добавлены колонки с именами, соответствующими кодам ключевых показателей, и в них помещены соответствующие значения. Теперь в каждой строке есть значения каждого КП, и для каждой строки можно вычислить любую формулу (так как в запрос были добавлены все КП, на которые ссылаются формулы в отобранных пользователем показателях).
Расчет итогов и формирование отчета по ключевым показателям
Теперь начинается самое интересное. Перед нами стоит две задачи:
- Вычислить формульные показатели.
- Рассчитать необходимые итоги, используя правильные агрегатные функции для каждого показателя.
Немаловажная подзадача — сделать поле выражения ресурса настолько не громоздким, насколько это возможно. Задача составления выражения сложна. Можно составить настолько сложное выражение, что компиляция текста запроса, которую можно видеть в виде события технологического журнала SDBL, будет занимать большое количество памяти и особенно процессора.
Для приведения значения показателей к одному полю мы используем Вычисляемое поле СКД. Вот как выглядит его выражение для нашего простого демонстрационного примера:
ВЫБОР КОГДА КлючевойПоказатель.Код = "000000002" ТОГДА а000000002 КОГДА КлючевойПоказатель.Код = "000000037" ТОГДА а000000037 ИНАЧЕ 0 КОНЕЦ
Здесь мы превращаем отдельные столбцы с значением конкретных КП обратно в одно значение и подтягиваем сюда все КП, которые не являются формульными. Это нужно для того, чтобы при вычислении ресурса мы могли обращаться к одному полю для всех неформульных показателей и, таким образом, упростить его выражение.
Далее нам нужно рассчитать итоги.
Почти для всех типов итога используется выражение вида:
СРЕДНЕЕ(ВЫЧИСЛИТЬВЫРАЖЕНИЕ
СГРУППИРОВКОЙМАССИВ("СУММА(Значение1)", "Период")),
Среднее — это агрегационная функция, указанная для нашего показателя (см. скрин выбора агрегационной функции в карточке ключевого показателя).
Значение1 — это вычисленное поле СКД.
Период — это имя группировки минимального периода, т. е. в нашем случае месяц.
Что делает это выражение:
- Суммирует все значения внутри периода (т. е. в нашем случае значение показателя для всех существующих подразделений).
- Получает массив этих сумм.
- Вычисляет среднее из значений массива.
Как работает это выражение, давайте посмотрим последовательно.
Сначала вычислим выражение без агрегации:
ВЫЧИСЛИТЬВЫРАЖЕНИЕ
СГРУППИРОВКОЙМАССИВ
("СУММА(Значение1)", "Период")
Система выдаст массив значений:
Почему важна СУММА(Значение1), почему нельзя взять просто Значение1?
- Потому что нужно посчитать сумму численностей по подразделениям внутри периода, и получить число 7 в январе, 9 в феврале и 9 в марте.
- На уровне же квартала мы видим массив помесячных значений.
Теперь применим агрегацию:
СРЕДНЕЕ(
ВЫЧИСЛИТЬВЫРАЖЕНИЕ
СГРУППИРОВКОЙМАССИВ
("СУММА(Значение1)", "Период")
)
И получим то, что нам нужно:
Теперь рассмотрим формульный показатель с двумя способами расчета итога по периоду: по средней и по формуле.
Возьмем показатель Удельная прибыль, которая в минимальном значении будет выражена формулой «Прибыль/Численность».
Формула в терминах кодов показателей и языка запросов выглядит так:
ВЫБОР КОГДА а000000739 = 0 ТОГДА 0 ИНАЧЕ а000000736 / а000000739 КОНЕЦ
Применим к ней способ расчета по периоду «Среднее»:
СРЕДНЕЕ(ВЫЧИСЛИТЬ
ВЫРАЖЕНИЕСГРУППИРОВКОЙ
МАССИВ(" ВЫБОР КОГДА СУММА(а000000739) = 0 ТОГДА 0 ИНАЧЕ СУММА(а000000736)/СУММА(а000000739) КОНЕЦ ", "Период"))
Получим следующий результат
Можно увидеть, что внутри периода (месяца) удельная прибыль рассчитывается по формуле. Так, удельная прибыль в целом не равна сумме удельных прибылей по подразделениям, а рассчитана как общая прибыль за месяц / численность за месяц.
В то же время удельная прибыль за квартал рассчитана как средняя из помесячных.
Как задать способ расчета, чтобы на уровне квартала удельная прибыль считалась тоже по формуле, из прибыли за квартал / численность за квартал?
ВЫБОР КОГДА СРЕДНЕЕ
(ВЫЧИСЛИТЬВЫРАЖЕНИЕ
СГРУППИРОВКОЙМАССИВ
("СУММА(а000000739)", "Период")) = 0 ТОГДА 0 ИНАЧЕ СУММА(а000000736) / СРЕДНЕЕ(ВЫЧИСЛИТЬ
ВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ
("СУММА(а000000739)", "Период")) КОНЕЦ
Что изменилось: мы применили агрегационную функцию вычисления итога не к результату вычисления формулы, а к каждому базовому показателю — свою; и только потом рассчитали формульный показатель.
Как мы видим, месячные значения остались теми же самыми, а вот квартальные изменились:
516 = 4300 / 8,333333
Какой способ расчета применять — решает аналитик, в зависимости от решаемых им задач, и настраивает это в справочнике ключевых показателей; важно, что мы можем предоставить любой способ расчета, и отчет будет работать корректно при любом наборе и порядке группировок.
Отдельный случай — средний накопительный итог. Что означает среднее накопительное? Что значение за февраль = (значение за январь + значение за февраль) / 2, значение за март = (значение за январь + значение за февраль + значение за март) / 3, и так далее. Для вычисления такого выражения мы прибегаем к функции ВЫЧИСЛИТЬВЫРАЖЕНИЕ:
ВЫЧИСЛИТЬВЫРАЖЕНИЕ(
"СУММА(Значение1) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Период)", "Период",, "Первая", "Текущая"),
Значение1 — это вычисленное поле СКД.
Период — это имя группировки минимального периода, т. е. в нашем случае месяц.
Что делает выражение:
- Суммирует все значения за периоды с первого по текущий в нашей группировке.
- Считает количество этих периодов.
- И делит одно на другое.
Важно! Понятие «первая» и «текущая» группировки существуют только в пределах родительской группировки. Это является на текущий момент ограничением платформенного механизма СКД в «1С». То есть, если у нас есть группировка «Квартал», то «Апрель» для нее станет первым, а не четвертым.
В нашем примере средненакопительный итог рассчитывается для формульного показателя, поэтому выражение будет сложнее.
Давайте попробуем написать так:
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("СУММА ( ВЫБОР КОГДА а000000739 = 0 ТОГДА 0 ИНАЧЕ а000000736 /а000000739 КОНЕЦ )", "Период",,"Первая", "Текущая") / ВЫЧИСЛИТЬВЫРАЖЕНИЕ
("КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Период)", "Период",, "Первая", "Текущая")
Получим следующий результат:
Результат на уровне отдельных подразделений не может не радовать: он рассчитан верно. Однако если посмотреть на удельную средненакопительную в целом, то мы увидим, что она рассчиталась как сумма удельных средненакопительных по подразделениям, а это совсем не то, что нам было нужно. Нужно посчитать ее по формуле на этом уровне группировки, и потом усреднить.
Финальное выражение выглядит очень громоздко, однако решает поставленную задачу: суммирует базовые показатели только в пределах периода и формула вычисляется корректно на всех уровнях.
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("" ВЫБОР КОГДА СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 1, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ)=0 ТОГДА 0 ИНАЧЕ СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 1, 1) ТОГДА а000000736 ИНАЧЕ 0 КОНЕЦ)/СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 1, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ) КОНЕЦ"" ,""Период"",, ""Первая"", ""Текущая"") + ВЫЧИСЛИТЬВЫРАЖЕНИЕ("" ВЫБОР КОГДА СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 2, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ)=0 ТОГДА 0 ИНАЧЕ СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 2, 1) ТОГДА а000000736 ИНАЧЕ 0 КОНЕЦ)/СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 2, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ) КОНЕЦ"" ,""Период"",, ""Первая"", ""Текущая"") + ВЫЧИСЛИТЬВЫРАЖЕНИЕ("" ВЫБОР КОГДА СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 3, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ)=0 ТОГДА 0 ИНАЧЕ СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 3, 1) ТОГДА а000000736 ИНАЧЕ 0 КОНЕЦ)/СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 3, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ) КОНЕЦ"" ,""Период"",, ""Первая"", ""Текущая"") ) / ВЫЧИСЛИТЬВЫРАЖЕНИЕ(""КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Период)"", ""Период"",, ""Первая"", ""Текущая"")
В каждом складываемом блоке мы принудительно ограничиваем расчет одним (текущим) месяцем, и заставляем СКД просуммировать базовые показатели внутри каждого месяца и рассчитать удельную по формуле внутри этого месяца.
Он нас полностью удовлетворяет.
Остался последний шаг: добиться расчета средненакопительного показателя на уровне квартала (или года).
Здесь придется прибегнуть к отдельному ресурсу, который будет рассчитан именно на уровне этих группировок и способ расчета у него для средненакопительного показателя будет совпадать с обычным средним: в самом деле, средненакопительный итог за квартал это ни что иное, как среднее за квартал!
Добавляем в схему компоновки ресурс для группировок «Квартал» и «Год»:
Выражение для нашего средненакопительного показателя в этом ресурсе будет выглядеть следующим образом:
СРЕДНЕЕ(ВЫЧИСЛИТЬ
ВЫРАЖЕНИЕСГРУППИРОВКОЙ
МАССИВ(" ВЫБОР КОГДА СУММА(а000000739) = 0 ТОГДА 0 ИНАЧЕ СУММА(а000000736)/СУММА(а000000739) КОНЕЦ ", "Период"))
И мы получим следующий результат:
Каждый показатель разобран нами в примере, у каждого свой способ расчета на разных уровнях. Теперь мы можем посмотреть, как выглядит финальное выражение ресурса в СКД для нашего несложного демонстрационного примера:
ВЫБОР КОГДА Не КлючевойПоказатель.Рассчитываемый ТОГДА ВЫБОР КОГДА КлючевойПоказатель.ИтогПоГоризонтали = Значение(Перечисление.ИтогиГруппировок.Среднее) ТОГДА СРЕДНЕЕ(ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ("СУММА(Значение1)", "Период, КлючевойПоказатель")) ИНАЧЕ СУММА(Значение1) КОНЕЦ КОГДА КлючевойПоказатель.Код = "000000740" ТОГДА ВЫБОР КОГДА СРЕДНЕЕ(ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ("СУММА(а000000739)", "Период")) = 0 ТОГДА 0 ИНАЧЕ СУММА(а000000736) / СРЕДНЕЕ(ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ("СУММА(а000000739)", "Период")) КОНЕЦ КОГДА КлючевойПоказатель.Код = "000000741" ТОГДА ( ВЫЧИСЛИТЬВЫРАЖЕНИЕ(" ВЫБОР КОГДА СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 1, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ)=0 ТОГДА 0 ИНАЧЕ СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 1, 1) ТОГДА а000000736 ИНАЧЕ 0 КОНЕЦ)/СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 1, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ) КОНЕЦ" ,"Период",, "Первая", "Текущая") + ВЫЧИСЛИТЬВЫРАЖЕНИЕ(" ВЫБОР КОГДА СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 2, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ)=0 ТОГДА 0 ИНАЧЕ СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 2, 1) ТОГДА а000000736 ИНАЧЕ 0 КОНЕЦ)/СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 2, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ) КОНЕЦ" ,"Период",, "Первая", "Текущая") + ВЫЧИСЛИТЬВЫРАЖЕНИЕ(" ВЫБОР КОГДА СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 3, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ)=0 ТОГДА 0 ИНАЧЕ СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 3, 1) ТОГДА а000000736 ИНАЧЕ 0 КОНЕЦ)/СУММА(ВЫБОР КОГДА Период = ДАТАВРЕМЯ(2020, 3, 1) ТОГДА а000000739 ИНАЧЕ 0 КОНЕЦ) КОНЕЦ" ,"Период",, "Первая", "Текущая") ) / ВЫЧИСЛИТЬВЫРАЖЕНИЕ("КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Период)", "Период",, "Первая", "Текущая") ИНАЧЕ 0 КОНЕЦ
Выводы
Какие выводы можно сделать из статьи?
Во-первых, построение отчетов с разноприродными показателями в одной колонке — задача очень сложная. Поскольку требуются различные подходы к подсчету итогов как по горизонтали, так и по вертикали.
Во-вторых, для такого подсчета необходим подходящий инструмент. И тут возникает соблазн перейти от декларативного инструмента к алгоритмическому. Но это не позволит добиться необходимой устойчивости расчета итогов при смене группировок. И в большинстве случаев разработчики просто отказываются от вариативности группировок в пользу фиксированного набора и порядка следования.
В-третьих, и это самое главное, СКД является мощнейшим инструментом не только в платформе «1С», но и среди альтернативных систем построения отчетов, например, электронных таблиц.
Вопросы производительности и использования различных инструментов в разработке на 1С:Предприятии мы рассматривали в предыдущих статьях от экспертов «1С‑Рарус»:
- Анализ отсутствующих событий в технологическом журнале «1С» или лаги в технологическом логе
- Подходы к сценарному тестированию на примере 1С:Общепит и 1С:Сценарное тестирование
- Jenkins в разработке конфигураций «1С»
- Производительность нового RLS в 1С БСП 3. Переходить или нет?
- Аварийное завершение рабочих процессов кластера «1С» и полнотекстовый поиск данных
Подписывайтесь на наш канал в Telegram и почтовые рассылки, чтобы не пропустить новые статьи.