Logistics_Analyzer "Что если?" и новые функции программы
В старых постах:
Разработка своей программы, суровые реальности и как такое продавать?
Logistics_Analyzer виджет панель и как она работает
Я уже немного рассказал о процессе разработки и функциях программы. Теперь покажу, что удалось улучшить за неделю, и расскажу об отдельной функции "Что если?".
Рассмотрим развитую розничную сеть: в каждом регионе — 10 магазинов и 1 склад. Ключевые особенности текущей операционной модели:
Доставка до клиента организована на уровне магазинов (не склада).
Товарная матрица жёстко фиксирована: перемещение ассортимента между точками возможно только в рамках допустимых категорий (например, нельзя заменить «Телефоны» на «Хлеб» при перераспределении).
Доступны фактические данные по:
продажам (с доставкой / без),
остаткам на точках,
SKU-уровню заказов с доставкой (включая адреса и объёмы).
На основе этих данных можно реализовать следующие аналитические и управленческие модули:
Определение зон покрытия магазинов
По адресам доставок (без привязки к квартирам) и частоте заказов за период (например, за год) строится геопространственная область — зоны ответственности каждого магазина. Границы определяются экстремальными точками доставок.ABC-анализ по SKU на уровне точки
На основе фактических продаж формируется структура ассортимента: приоритетные, средние и низколиквидные SKU — с учётом оборачиваемости и вклада в выручку.Моделирование альтернативного размещения при закрытии точки
Сопоставление товарных матриц, зон покрытия и ABC-профилей позволяет идентифицировать подходящие точки-реципиенты для перераспределения остатков — с минимальными логистическими и коммерческими потерями.Планирование перераспределения
Комбинируя:текущие остатки (на отправляющей точке),
лимиты хранения и нормативы по категориям (на принимающих точках),
совместимость товарных матриц,
пересечения зон покрытия и клиентской базы,
формируется оптимальный план перемещения запасов — как при частичной реорганизации сети, так и при полном закрытии объекта.
Пример конфигурации:
Объект А характеризуется своей зоной покрытия и текущими остатками. Объекты Б, В, Г и др. — собственными остатками, ограничениями хранения по категориям, продажной динамикой и клиентскими зонами. Система оценивает все взаимодействия и предлагает планы по перераспределению товаров (Зон ожидается в будущем)
Компания Х решила закрыть объект А. Теперь нужно оценить, как это повлияет на:
- остатки товаров в других магазинах и на складе;
- зоны доставки других магазинов;
- среднее время доставки клиентам и стоимость перераспределения товарных остатков.
На основе этого анализа мы составим техническое задание для программы. Вот его основные пункты:
1. Определить регион, в котором находится объект А.
2. Выяснить фактические остатки товаров на этом объекте.
3. Найти ближайшие объекты с аналогичной товарной матрицей.
4. Провести ABC-анализ товаров на всех объектах за последний год.
5. Разработать план перераспределения товаров. Учитывать информацию из пунктов 1–3, а также средние затраты на перевозку одного кубического метра (задается при создании региона). Рассчитать оптимальное перераспределение.
Предложенная логика в целом корректна, однако в текущей реализации не учитывается стоимость доставки как функция пройденного расстояния или объёма груза.
Например, можно оперировать не стоимостью за километр, а средней себестоимостью перевозки на единицу объёма — скажем, при известных затратах в 1,5 млн ₽ на перевозку 160 м³ получаем удельную стоимость ~9,4 тыс. ₽/м³. (Цифра условная и приведена для иллюстрации.)
Более гибкий и масштабируемый подход — задать набор типов транспорта («траков») с атрибутами: тип маршрута, грузоподъёмность, объём и соответствующая средняя стоимость перевозки. Это позволит учитывать различия в логистике более точно.
С учётом этого, скорректирую модель и вернусь к дальнейшей проработке.
Программа, следуя установленным правилам, рассчитывает оптимальное размещение товаров. Если отключить АВС-анализ, она будет учитывать только остатки, местоположение и матрицу.
Ниже приведу пример работы данного функционала, данные заглушка и программа не может правильно разместить товары, поэтому все = 0.
P.S. Сейчас создание достоверных данных не является приоритетом.
Да, так как и писал - данные тестовые и в самом деле в регионе нет аналогичных матриц
Аналогично скрину выше, не нашли куда перевозить, доставка = 0.
И теперь основной вопрос "А что будет с доставкой? Как сильно закрытие повлияет на SLA по скорости?". Данный расчет сейчас является приоритетной доработкой которой я занимаюсь.
Логика которая мною вкладывает в анализ - следующая:
Смотреть на расстояние различных точек на карте
Делить действующую зону на кластеры
Определить оптимальные объекты по времени которые находятся рядом
Сделать ренден всех 3-ех пунктов и показывать изменения в зонировании доставки с отчетом об изменении среднего времени и какие районы слишком далеко.
Для инфраструктуры это очень важный фактор, от которого зависит многое. Так же этот фактор должен работать и при открытии нового объекта. Но сейчас такой функционал не реализован
Функция выбора источника данных для программы и совместная работа с одним исполняемым файлом.
В параллели с влиянием на регион, мне удалось внести не большую доработку в систему. Теперь пользователи могут выбирать исполняемый файл.
2 пользователя работают с одним исполняемым файлом, вносят корректировки, строят дашборды, удаляют или дополняют данными программу. Но как копии приложения узнать что внесены изменения в хранилище? Для этого было реализовано metadata таблица. исполняемое приложение запускается, запоминает метаданные времени БД и проверяет обновления, в случае изменения метаданных моментально сигнализирует о том что необходимо обновить данные.
В рамках подготовки программы к первому тестированию на живых данных в нашей компании была реализована функция "Отправить отчет об ошибке".
После отправки - логи приходят ко мне в ТГ через бота. Все логи запаковываются в zip архив, параллельно запускает процесс удаления логов из папки.
Почему я быстрее реализовал совместный доступ и отправку логов, вместо того что бы наполнить данными и показать на примере где все логично? Наверное потому что лень тратить много времени на создание данных, а потом их дополнять и править. Программа не окончательная, система хранения меняется. Например сейчас я понял что стоимость доставки и распределения товара можно завязать на типы траков - буду реализовывать и менять хранение. Менее затратно по времени дописать скрипт, чем создавать новую логику в 1000 строк данных.
Всем спасибо за то что дочитали.
Если есть желание предоставить тестовые данные с логикой - буду очень рад, поможет при тестировании. Шаблон данных могу предоставить.































