Не звіт про продаж, а рішення щодо асортименту: що замовити в наступну поставку, що тримати в наявності за будь-яку ціну, що уцінити, де заморожені гроші.
Навіщо він потрібний
Звіти показують, скільки магазин заробив. Вони не відповідають на запитання, які ставлять перед кожною закупівлею: які позиції не можна упускати з наявності, які часи виводити, і скільки грошей лежить на складі мертвим вантажем.
Модуль будує товарну матрицю ABC/XYZ і вважає оборотність. Одним екраном видно ядро асортименту, кандидатів на виведення та суму заморожених грошей.
Що вважає
- ABC — вклад товару у виручку. A - верхні 80% виручки, B - наступні 15%, C - інші. Межінастроюються: роздріб часто ставить 70/90.
- XYZ — стабільність попиту за коефіцієнтом варіації. X - рівний попит, Y - вагається, Z - рваний, що вимагає страхового запасу.
- Оборотність — середні продажі на день, дні запасу, ризик вимивання (запасу менше терміну поставки) та затоварювання.
- Неліквіди — товари з залишком, що не продавалися довше за поріг, і сума заморожених у них грошей.
Матриця 3x3
Рядки - ABC, стовпці - XYZ, в осередку кількість товарів і виторг. Клік по осередку відкриває її список.
- AX — ядро асортименту:роблять виторг, попит рівний, пропадати з наявності не повинні.
- AZ — роблять виручку, але попит рваний: потрібен страховий запас.
- CZ — кандидати на уцінку та виведення із закупівлі.
- N — не продавалися за період зовсім.
Три речі, які модуль робить чесно
- Товар, що продавався менше, ніж у трьох інтервалах, групу XYZ не отримує: коефіцієнт варіації по двох точках — це шум, а не оцінка стабільності. Такий рядок позначається мало даних.
- Товар без жодного продажу за період не звалюється вгрупу C, а виноситься в окрему групу N. Інакше C перетворюється на смітник, де «продається погано» не відрізняється від «не продається зовсім».
- Новинка позначається прапором: у неї низька виручка не тому, що вона не потрібна, а тому що вона мало прожила.
Цифри, яким не можна вірити, гірше за відсутність цифр — тому модуль про них попереджає, а не проставляє букви всім поспіль.
Працює на великій базі
Матриця не вважається на льоту: продаж згортається в агрегат по інтервалах, і розрахунок йде по ньому. Агрегат поповнюється інкрементально - перезбираються лише зміни, що змінилися, а зміна статусу замовлення заднім числом враховується (скасований замовлення з продажу зникає).
нау тестовій базі даних із 54 000 замовлень і 104 000 продуктових ліній у замовленнях повне збирання займає близько трьох секунд, звичайний прохід займає частки секунди. Перерахунок запускається кнопкою прогресу або коронкою.
Точка замовлення: що замовити прямо зараз
Окрема вкладка «На покупку» показує товари, залишок яких впав до точки замовлення, і скільки штук не вистачає.
- Точка замовлення = попит на період доставки + страховий запас, розрахований на основі зміни попиту, а не взятий з повітря.
- Рівень обслуговування налаштовується: 95% — звичайний роздрібний вибір, 99% заморожує в півтора рази більше грошей.
- Термін доставки встановлюється як загальний і перевизначається виробником: місцевий склад доставляє за три дні, Китай -за два місяці.
- Якщо продажів мало, страховий запас не вигадується, а рядок чесно позначається «мало даних».
Динаміка: хто виріс, а хто просів
Кожен перерахунок зберігається знімком, і будь-які два можна порівняти.
- Матриця переходів: скільки товарів перейшло з групи до групи.
- Список товарів з переходом виду AX → BZ та різницею виручки.
- Режим «найсильніше змінилася виручка» — для тих, хто втратив гроші, не змінивши букву: лідер може втратити три чверті виручки і залишитися в групі A просто тому, що він і так був першим.
- Знімки, пораховані за різними налаштуваннями, модуль порівнювати не дає мовчкивін про це попереджає.
Масові дії
Рішення, прийняте за звітом, відразу й застосовується: уцінити групу, зняти з вітрини, повернути назад.
- Знижка пишеться в штатні спецпропозиції OpenCart з окремим пріоритетом модуля — повторний запуск не плодить дублями, а знижки, виставлені руками, не чіпаються.
- Дія застосовується до всієї поточної вибірки, а не тільки до видимої сторінки, і завжди запитує підтвердження з точним числом товарів.
- Дія без жодного фільтра не виконується: уцінити весь каталог одним кліком випадково не можна.
- Кожне застосування пишеться в журнал — що до кількох товарів і під якимадміністратором.
Ще в модулі
- Фільтри: магазин, категорія з підкатегоріями, виробник, позначка, наявність залишку, пошук за назвою та моделлю.
- Експорт поточної вибірки в CSV - відкривається Excel подвійним кліком.
- Облік варіантів товару (розмір, колір) окремими позиціями — для одягу та взуття, де ходовий розмір закінчується раніше за інші.
- Мультистор: матриця по кожній вітрині та зведена по всіх.
- Прибуток та оцінка запасів за собівартістю, якщо в базі є колонка cost (її заводять товарообліки); без неї модуль працює за виручкою і прямо пише про це у звіті.
- ABC по прибутку замість виручки там, де в базі є собівартість.
Вимоги
- OpenCart 3.0.x/ocStore 3.0.x
- PHP 7.0+ (перевірено на 8.3), MySQL 5.7+ / MariaDB 10.3+
Ядро керується однією вставкою — пунктом у меню «Звіти». Свої таблиці чужі не чіпає.
Версія модуля: 2.0
Що нового у версії 2.0
- Точка замовлення зі страховим запасом, рівнем сервісу та строками поставки по виробниках, вкладка «До закупівлі».
- Вкладка «Динаміка»: порівняння знімків, матриця переходів, списки вирослих та просілихтоварів.
- Масові дії над вибіркою: знижка, зняття з вітрини, повернення — з журналом дій.
- ABC по прибутку замість виручки.