При разработке аналитических отчетов в системе компоновки данных (СКД) одной из частых задач является проведение ABC-анализа. Платформа 1С предлагает для этого встроенную функцию КлассификацияABC, однако начинающие разработчики часто сталкиваются с ситуацией, когда колонка с классами остается пустой. Рассмотрим подробно, как избежать типичных ошибок и заставить этот механизм работать корректно.
Для начала проанализируем саму функцию и ее параметры. В СКД расчет классификации производится с помощью выражения, которое обычно прописывается на закладке Ресурсы. Синтаксис выглядит следующим образом:
КлассификацияABC(Выражение, КоличествоГрупп, Проценты, ПолеГруппировки)
Разберем назначение каждого параметра:
"Сумма(Продажи)" или "Сумма(Количество)". Обратите внимание, что выражение должно быть в кавычках."80, 15, 5". Это означает, что в группу A попадут объекты, составляющие первые 80% накопленного итога, в B — следующие 15%, в C — оставшиеся 5%."Номенклатура", "Контрагент" или другой аналитический разрез.Пример корректного выражения в ресурсах:
КлассификацияABC("Сумма(Выручка)", 3, "80, 15, 5", "Номенклатура")
Проанализируем типичную ситуацию: программист верно прописал выражение в ресурсах, но в результате отчета колонка «Класс» пуста. Основная причина кроется в структуре настроек отчета на закладке Настройки. Если в структуре используются Детальные записи, функция работать не будет.
Выясним почему так происходит. Классификация ABC — это расчет, основанный на агрегированных данных и накопленном итоге по всему набору. На уровне детальных записей система не может определить положение конкретной строки относительно общего итога, так как расчет требует предварительной группировки.
Решение: В структуре отчета необходимо заменить «Детальные записи» на группировку по тому полю, которое указано в параметрах функции (например, по Номенклатура). Только на уровне группировки СКД сможет рассчитать ресурс и присвоить ему категорию.
Рассмотрим по шагам, как правильно настроить закладку «Ресурсы», чтобы расчет был точным:
Выручка) с выражением Сумма(Выручка).КлассABC).КлассификацияABC("Сумма(Выручка)", 3, "80, 15, 5", "Номенклатура")
Номенклатура). Не оставляйте это поле пустым и не выбирайте «Общий итог», иначе расчет может не выполниться.Проанализируем еще один нюанс, который часто упускают. Алгоритм ABC-анализа строится на расчете накопленного итога. Чтобы накопленный итог соответствовал логике «от большего к меньшему», данные должны быть отсортированы.
Перейдем в настройки отчета на закладку Сортировка. Здесь необходимо добавить поле, по которому ведется расчет (например, Выручка), и установить направление По убыванию. Без явной сортировки система может распределить классы случайным образом, что сделает анализ бессмысленным.
Посмотрим на ситуацию, когда в данных присутствуют значения NULL или нулевые обороты. Если ресурс для конкретной позиции равен нулю, встроенная функция может вернуть некорректный результат или оставить ячейку пустой. Чтобы этого избежать, рекомендуем обрабатывать значения еще на уровне запроса:
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
Это гарантирует, что функция классификации всегда будет работать с числовыми данными.
Чтобы отчет был читаемым, настроим цветовое выделение групп. Класс «A» традиционно выделяют красным или жирным шрифтом, «B» — желтым, «C» — зеленым.
Рассмотрим, как это сделать:
КлассABC Равно 3 (или «C», в зависимости от того, как возвращает значение функция в вашей версии конфигурации).КлассABC.Повторим эти действия для всех трех групп. Таким образом, мы получим наглядный инструмент для принятия управленческих решений.
Если встроенная функция КлассификацияABC не подходит под ваши специфические задачи (например, нужно вывести класс именно в детальных записях или использовать сложную логику процентов), можно реализовать классификацию в самом тексте запроса. Это сложнее, но дает полный контроль. Алгоритм будет следующим:
Т1.Сумма <= Т2.Сумма для получения нарастающего итога.ВЫБОР присваиваем буквенный код группы.Однако для большинства стандартных задач в УТ 11.4 или ERP вполне достаточно корректно настроенной функции в СКД, если соблюдать правила работы с группировками и ресурсами, которые мы разобрали выше. При необходимости интерактивного проведения расчетов без изменения конфигурации можно использовать обработку для платформенного анализа данных на базе СКД.