Как правильно использовать функцию КлассификацияABC() в СКД и понять логику её расчета

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов в Системе компоновки данных (СКД) часто возникает задача проведения ABC-анализа. Платформа 1С предлагает встроенный инструмент для этого — функцию КлассификацияABC(). Однако на практике многие разработчики сталкиваются с тем, что результаты классификации кажутся некорректными. Давайте подробно разберем, как работает эта функция, какие параметры она принимает и почему возникают «странные» цифры в группах.

Синтаксис и назначение параметров

Для начала проанализируем синтаксис функции, которую мы обычно прописываем в выражении ресурса или в вычисляемом поле СКД. Рассмотрим типовой пример:

КлассификацияABC("СуммаВыручки", 3, "80, 95")

Разберем, что означает каждый из этих параметров:

  1. Ресурс для анализа: В нашем случае это "СуммаВыручки". Именно по значениям этого поля система будет определять значимость объектов. Важно, чтобы поле передавалось как строка (в кавычках).
  2. Количество групп: Число 3 указывает на классическую схему (A, B, C). Если вы укажете 4, система разделит данные на 4 сегмента.
  3. Проценты (границы): Это строковый параметр, где значения перечисляются через запятую. Здесь кроется первая важная особенность: значения указываются нарастающим итогом.

Логика нарастающего итога: почему 5-15-80 превращается в 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С:

  1. Система сортирует все записи по убыванию значения ресурса.
  2. Начинается расчет накопленного итога сверху вниз.
  3. Критически важный момент: Система включает в текущую группу элемент, на котором был достигнут или превышен указанный порог.

Представьте, что у вас есть один очень крупный клиент, который делает 98% оборота, а все остальные — по 0.01%. Даже если вы поставите порог для группы A в 5%, этот крупный клиент попадет именно в группу A, потому что он первый в списке и он сразу «перекрыл» своим значением установленный лимит. Система не «разрезает» одну запись на две части, чтобы подогнать результат под ровные 80%. Она относит запись целиком к той группе, на которой сработал триггер превышения процента.

Именно поэтому, если несколько первых позиций в вашем отчете занимают львиную долю оборота, границы групп будут выглядеть смещенными. Это не ошибка платформы, а математическая особенность дискретного ABC-анализа.

Важность предварительной сортировки

Хотя функция КлассификацияABC() старается автоматически упорядочить данные, для получения предсказуемого результата крайне важно убедиться, что в настройках СКД на закладке «Настройки» — «Сортировка» установлено убывание по тому ресурсу, по которому вы проводите классификацию. Без явной сортировки расчет может превратиться в «ересь», так как накопленный итог будет считаться в случайном порядке.

Работа с отрицательными и нулевыми значениями

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

Отрицательные значения: Они могут серьезно исказить базу для расчета (общий итог уменьшится). Алгоритм 1С не предназначен для работы с отрицательными числами в АВС-анализе. Рекомендуется предварительно очищать данные или использовать функцию ВЫБОР, чтобы приравнять отрицательные значения к нулю внутри выражения.

Нулевые значения: Все элементы с нулевым значением ресурса всегда будут попадать в самую последнюю группу (группу C), так как они никогда не помогут накопленному итогу достичь порогов 80% или 95%.

Использование функции в контексте группировок

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

Например, если ваш отчет сгруппирован по Складам, а внутри по Номенклатуре:

Это позволяет делать гибкие отчеты, но требует понимания: один и тот же товар может быть категории A на маленьком удаленном складе и категории C на центральном распределительном центре.

Заключение и рекомендации

Для корректной работы ABC-классификации в СКД придерживайтесь следующих правил:

  1. Всегда указывайте проценты в строке нарастающим итогом (например, "80, 95" для трех групп).
  2. Помните о граничном элементе: если одна позиция «весит» больше порога, она заберет себе всю группу.
  3. Обязательно настраивайте сортировку по убыванию ресурса.
  4. Проверяйте данные на наличие отрицательных значений, которые могут исказить общую сумму.

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

← На главную