|
Попытка создания отчета с АВС-анализом | ☑ | ||
---|---|---|---|---|
0
Saari
23.08.21
✎
08:45
|
Пытаюсь сделать отчет с АВС-анализом.
Есть таблица (Таб) из 4-х колонок: Товар (1), Количество (2), Доля каждого товара в % (3), Совокупный (накопительный) вклад в % (4) Осталось сделать последний шаг: отнести каждый товар к группам А, В или С. Например, АВС_А - 80%, АВС_В - 15%, АВС_С - 5%. Написал вот такой цикл: Для Каждого ТекСтр Из Таб Цикл Если ТекСтр.СовокупныйПроцент <= АВС_А Тогда //группа А НЗ = ТабА.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; Если НЕ ТекСтр.ЗаписьОбработана Тогда Если (ТекСтр.СовокупныйПроцент > АВС_А) И (ТекСтр.СовокупныйПроцент <= (АВС_А + АВС_В)) Тогда //группа В НЗ = ТабВ.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; КонецЕсли; Если НЕ ТекСтр.ЗаписьОбработана Тогда Если (ТекСтр.СовокупныйПроцент > (100 - АВС_С)) Тогда //группа С НЗ = ТабС.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; КонецЕсли; КонецЦикла; Этот цикл работает, если в таблице много строк. Если в таблице две строки (со значениями в колонке "Совокупный вклад" 90% и 10% )или одна строка (со значением 100%), то этот алгоритм не работает. Подскажите, пожалуйста, правильный алгоритм распределения товаров из таблицы по группам А, В и С. |
|||
1
Azverin
23.08.21
✎
09:00
|
(0) по мне, так твои два примера внизу не соответствуют модели АВС (80%,15%,5%), т.е. выводишь пользователю сообщение: "не получилось распределить. поменяйте проценты классов"
|
|||
2
Saari
23.08.21
✎
09:02
|
(1) Хорошо. Пусть будет так: АВС_А - 70%, АВС_В - 15%, АВС_С - 5%.
|
|||
3
Saari
23.08.21
✎
09:16
|
(2) Опечатка. АВС_А - 70%, АВС_В - 25%, АВС_С - 5%.
В сумме должно быть 100%. |
|||
4
Azverin
23.08.21
✎
09:34
|
(3) ещё раз: твои примеры не подходят под указанные проценты распределения... услышь меня.
вклад 90% не входит ни в 80%, ни в 75%. |
|||
5
Saari
23.08.21
✎
09:35
|
(4) а как правильно?
|
|||
6
Azverin
23.08.21
✎
09:56
|
(5) Твоя Таб должна содержать записи, удовлетворяющие совокупному проценту заданным классам А, В, С.
Иначе не получится. например, товар1=67%, товар2=65%.... товарN=14%, товарN+100=3%. Каждый товар попадёт в свой класс. |
|||
7
Saari
23.08.21
✎
10:00
|
(6) А если проданы 3 товара, процент по каждому такой: 95, 3 и 2?
тогда 1-й товар - группа А, а второй и третий - группа С. Но как это запрограммировать? |
|||
8
hhhh
23.08.21
✎
10:09
|
(7) наоборот двигайтесь. Сначала группа С, потом В, а все что останутся - это группа А.
|
|||
9
Базис
naïve
23.08.21
✎
10:14
|
Фильтруй сперва такие случаи, этот код не трожь. Или выводи "Ну и что тут распределять? Продавайте больше, нечего щщитать", или вручную 2-3 строки распредели.
Отлаживать придётся на реальных объёмах данных. |
|||
10
vyaz
23.08.21
✎
10:34
|
(0) СКД умеет делать ABC, зачем такие заморочки с кодом?
|
|||
11
Azverin
23.08.21
✎
10:45
|
(8) Да, наверное так. Я не проснулся. (0) Извини.
|
|||
12
Saari
23.08.21
✎
11:01
|
Получилось! Пока не нашел набора данных, для которых этот цикл не правильно обрабатывает:
Для Каждого ТекСтр Из Таб Цикл Если (ТекСтр.СовокупныйПроцент <= АВС_А) Тогда //группа А НЗ = ТабА.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; Если НЕ ТекСтр.ЗаписьОбработана Тогда Если ТабА.Количество() = 0 Тогда НЗ = ТабА.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; КонецЕсли; Если НЕ ТекСтр.ЗаписьОбработана Тогда Если (ТекСтр.СовокупныйПроцент > АВС_А) И (ТекСтр.СовокупныйПроцент <= (АВС_А + АВС_В)) Тогда //группа В НЗ = ТабВ.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; КонецЕсли; Если НЕ ТекСтр.ЗаписьОбработана Тогда Если (ТекСтр.СовокупныйПроцент > (100 - АВС_С))Тогда //группа С НЗ = ТабС.Добавить(); НЗ.Номенклатура = ТекСтр.Номенклатура; ТекСтр.ЗаписьОбработана = Истина; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
13
Ёпрст
23.08.21
✎
11:25
|
(12) хрень какая то..
2 % - это группа А, а 99% - это группа С ? |
|||
14
Ёпрст
23.08.21
✎
11:26
|
ну и в группу B не попадает ничего
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |