При разработке отчетов в Системе компоновки данных (СКД) часто возникает задача проведения ABC-анализа. Платформа 1С предлагает встроенный инструмент для этого — функцию КлассификацияABC(). Однако на практике многие разработчики сталкиваются с тем, что результаты классификации кажутся некорректными. Давайте подробно разберем, как работает эта функция, какие параметры она принимает и почему возникают «странные» цифры в группах.
Для начала проанализируем синтаксис функции, которую мы обычно прописываем в выражении ресурса или в вычисляемом поле СКД. Рассмотрим типовой пример:
КлассификацияABC("СуммаВыручки", 3, "80, 95")
Разберем, что означает каждый из этих параметров:
"СуммаВыручки". Именно по значениям этого поля система будет определять значимость объектов. Важно, чтобы поле передавалось как строка (в кавычках).Рассмотрим ситуацию: мы хотим выделить группу A (самые важные), которая приносит нам 80% выручки, группу B (средние) — 15%, и группу C (наименее важные) — оставшиеся 5%. Программисты часто совершают ошибку, указывая в параметрах "5, 15" или "80, 15". Это неверно.
Выясним причину: СКД ожидает границы в виде накопленного процента:
Таким образом, для схемы 80-15-5 правильным выражением будет:
КлассификацияABC("СуммаПродаж", 3, "80, 95")
Проанализируем ситуацию, описанную в сообщениях темы: у пользователя общий расход составил 63 778 единиц. Он ожидал, что в группу A попадут товары на сумму 51 022 (80%). Однако система отнесла туда товары на сумму 62 850 (98%).
Разберем по шагам алгоритм, который использует 1С:
Представьте, что у вас есть один очень крупный клиент, который делает 98% оборота, а все остальные — по 0.01%. Даже если вы поставите порог для группы A в 5%, этот крупный клиент попадет именно в группу A, потому что он первый в списке и он сразу «перекрыл» своим значением установленный лимит. Система не «разрезает» одну запись на две части, чтобы подогнать результат под ровные 80%. Она относит запись целиком к той группе, на которой сработал триггер превышения процента.
Именно поэтому, если несколько первых позиций в вашем отчете занимают львиную долю оборота, границы групп будут выглядеть смещенными. Это не ошибка платформы, а математическая особенность дискретного ABC-анализа.
Хотя функция КлассификацияABC() старается автоматически упорядочить данные, для получения предсказуемого результата крайне важно убедиться, что в настройках СКД на закладке «Настройки» — «Сортировка» установлено убывание по тому ресурсу, по которому вы проводите классификацию. Без явной сортировки расчет может превратиться в «ересь», так как накопленный итог будет считаться в случайном порядке.
Давайте проанализируем, как функция ведет себя в нестандартных ситуациях. В реальном учете часто встречаются возвраты товаров (отрицательные значения) или позиции, которые не продавались (нулевые значения).
Отрицательные значения: Они могут серьезно исказить базу для расчета (общий итог уменьшится). Алгоритм 1С не предназначен для работы с отрицательными числами в АВС-анализе. Рекомендуется предварительно очищать данные или использовать функцию ВЫБОР, чтобы приравнять отрицательные значения к нулю внутри выражения.
Нулевые значения: Все элементы с нулевым значением ресурса всегда будут попадать в самую последнюю группу (группу C), так как они никогда не помогут накопленному итогу достичь порогов 80% или 95%.
Посмотрим на пример использования функции в ресурсах. Если вы добавите расчет КлассификацияABC() в ресурсы, СКД будет вычислять группу для каждого уровня группировки.
Например, если ваш отчет сгруппирован по Складам, а внутри по Номенклатуре:
Это позволяет делать гибкие отчеты, но требует понимания: один и тот же товар может быть категории A на маленьком удаленном складе и категории C на центральном распределительном центре.
Для корректной работы ABC-классификации в СКД придерживайтесь следующих правил:
"80, 95" для трех групп).Используя этот подход, вы сможете избежать путаницы и получить математически обоснованные данные для анализа вашего бизнеса.