ABC-классификация — это один из самых эффективных методов анализа товарного ассортимента, позволяющий разделить товары на группы по степени их важности для бизнеса. В 1С этот механизм можно реализовать как с помощью встроенных инструментов Системы компоновки данных (СКД), так и программным кодом. В этой статье мы подробно разберем оба подхода, изучим математическую модель и выясним, как избежать типичных ошибок при настройке отчетов.
Прежде чем приступать к написанию кода, проанализируем саму методику. Часто начинающие разработчики пытаются классифицировать товар, просто сравнивая его индивидуальную долю с неким порогом (например, "если выручка по товару меньше 20% от общей"). Это неверный подход. Классический ABC-анализ базируется на принципе Парето и методе нарастающего итога.
Разберем алгоритм по шагам:
Важное замечание: Границы 80/15/5 являются стандартными, однако в учебных задачах или специфических отраслях могут использоваться другие пропорции, например 20/60/20. Главное правило — сумма всех долей должна составлять ровно 100%.
В платформе 1С предусмотрена встроенная функция для использования в схемах компоновки данных. Рассмотрим, как правильно ее вызвать в вычисляемых полях или ресурсах. Функция имеет следующий синтаксис:
КлассификацияABC("Значение", КоличествоГрупп, "Проценты")
Разберем типичную ошибку, с которой сталкиваются разработчики. Если в параметре процентов указать значения, которые в сумме не дают 100 (например, "20, 21, 81"), система выдаст ошибку или вернет некорректный результат. Для корректной работы, если мы хотим выделить 20% в первую группу, 60% во вторую и 20% в третью, строка параметров должна выглядеть так: "20, 60, 20".
Проанализируем пример выражения для ресурса в СКД:
КлассификацияABC(Сумма(СуммаВыручки), 3, "80, 15, 5")
При использовании этой функции в СКД система автоматически выполнит сортировку и расчет нарастающего итога внутри группировки, к которой применен ресурс.
Если задача стоит реализовать отчет "в коде" (например, для вывода в произвольный макет или для сложной обработки данных), удобнее всего использовать ТаблицаЗначений. Рассмотрим пошагово, как это сделать.
Сначала подготовим данные. Допустим, у нас уже есть таблица тзДанные с колонками Номенклатура и СуммаПродаж.
// 1. Сортируем таблицу по убыванию показателя
тзДанные.Сортировать("СуммаПродаж Убыв");
// 2. Вычисляем общий итог для расчета долей
ОбщийИтог = тзДанные.Итог("СуммаПродаж");
// Если итог нулевой, анализ невозможен
Если ОбщийИтог = 0 Тогда
Возврат;
КонецЕсли;
// 3. Добавляем колонки для расчета
тзДанные.Колонки.Добавить("Доля", "Число");
тзДанные.Колонки.Добавить("НарастающийИтог", "Число");
тзДанные.Колонки.Добавить("Класс", "Строка");
ТекущийНарастающийИтог = 0;
Для Каждого Строка Из тзДанные Цикл
// Вычисляем долю текущей строки в общем объеме
Строка.Доля = (Строка.СуммаПродаж / ОбщийИтог) * 100;
// Плюсуем к нарастающему итогу
ТекущийНарастающийИтог = ТекущийНарастающийИтог + Строка.Доля;
Строка.НарастающийИтог = ТекущийНарастающийИтог;
// Присваиваем категорию на основании границ
Если ТекущийНарастающийИтог <= 80 Тогда
Строка.Класс = "A";
ИначеЕсли ТекущийНарастающийИтог <= 95 Тогда
Строка.Класс = "B";
Иначе
Строка.Класс = "C";
КонецЕсли;
КонецЦикла;
Этот алгоритм наглядно демонстрирует механику процесса. Важно помнить, что из-за особенностей округления чисел с плавающей точкой ТекущийНарастающийИтог в последней строке может получиться 99.99999 или 100.00001. Для бизнес-логики это не критично, но при строгих проверках стоит использовать функцию Окр().
В реальных задачах часто требуется учитывать не один показатель, а два одновременно. Например, товар может приносить большую выручку (Класс А по сумме), но продаваться всего один раз в год (Класс С по количеству). Как совместить эти данные?
Разберем два подхода:
Например, назначим вес 0.7 для суммы и 0.3 для количества. Тогда расчетный показатель будет выглядеть так:
Рейтинг = (ДоляПоСумме * 0.7) + (ДоляПоКоличеству * 0.3)
После вычисления этого рейтинга мы снова сортируем таблицу и применяем стандартный алгоритм нарастающего итога уже к этому синтетическому числу.
Проанализируем несколько важных моментов, которые помогут сделать ваш отчет профессиональным:
1. Обработка пустых значений: Если у товара нулевые продажи за период, он автоматически должен попадать в категорию "С" или даже в отдельную категорию "D" (неликвид). В коде это стоит обрабатывать до начала цикла расчета долей.
2. Очистка данных: Перед проведением ABC-анализа рекомендуется исключать из выборки внутренние перемещения, возвраты от покупателей (если они сильно искажают картину) и прочие некоммерческие операции.
3. XYZ-анализ: Для полноты картины ABC-анализ часто дополняют XYZ-анализом, который оценивает стабильность спроса. Сочетание этих методов (матрица ABC-XYZ) дает исчерпывающую информацию о том, какие товары нужно всегда держать на складе в большом объеме, а какие возить только под заказ.
Выясним причину, почему иногда результаты в 1С могут казаться странными. Это часто связано с группировками. Если вы делаете ABC-анализ в иерархическом справочнике, убедитесь, что вы анализируете только конечные элементы (номенклатуру), а не группы (папки), иначе суммы будут задваиваться, и классификация потеряет смысл.
Используя приведенные выше методы, вы сможете реализовать гибкую и точную систему классификации, которая станет надежным инструментом для управления закупками и продажами.