Основной рабочий процесс в 5 шагов. Обновлено 07.04.2026
«Сегодня» / «Завтра» или произвольная дата. Заказы загрузятся автоматически из 1С.
Используйте фильтры: «Заморозка» / «Обычные», направления, поиск. Справа от поиска — общая сумма в рублях. Разверните панель (кнопка ↗) для просмотра в 2-3 колонки.
Нажмите «Оптимизировать». Система распределит заказы по машинам с учётом веса, интервалов доставки и дорожной сети. Замороженные заказы — только на рефрижераторы.
На вкладке «Маршруты» проверьте результат: точки, вес, ETA, расстояние. Скройте ненужные маршруты кнопкой-глазом для удобства. Нажмите «Утвердить» для фиксации.
В «Истории» скачайте маршрутный лист в PDF или Excel с ETA и интервалами доставки.
Левая панель показывает все заказы на выбранную дату. Каждая карточка содержит: название контрагента, адрес, вес, количество коробок, сумму в рублях и направление (цветной бейдж).
Справа от поиска отображается общая сумма заказов в рублях. Внизу фильтров — количество заказов, вес (кг), ящики, число замороженных.
Кнопка ↗ в заголовке «Заказы» расширяет панель на 60% экрана. Карточки выстраиваются в несколько колонок. Повторное нажатие (↙) — сворачивает обратно. Правую панель маршрутов тоже можно свернуть кнопкой > для увеличения карты.
Клик по карточке раскрывает подробности: контрагент, номер документа 1С, комментарий, список товаров с весом.
Cron-задача запускается каждые 30 минут: первый запуск в 16:55, затем в 17:25, 17:55 и так далее до 22:55. Заказы выгружаются из 1С в JSON-файл, передаются через WinSCP на TrueNAS, затем синхронизируются на сервер и загружаются через API.
Нажмите кнопку «Импорт из 1С» на панели заказов и выберите JSON-файл, выгруженный из 1С. Файл должен содержать массив заказов с полями: номер, контрагент, адрес, вес.
После импорта отображается отчёт:
При повторном импорте на ту же дату все заказы полностью перезаписываются. Это нормальное поведение — последний импорт всегда актуален.
Под кнопкой импорта отображается история последних импортов с датой и количеством заказов.
Точки доставки создаются автоматически из адресов в заказах 1С. Система пытается найти координаты (геокодировать) каждый адрес через Яндекс Geocoder и Nominatim (OSM).
Некоторые «адреса» из 1С на самом деле являются названиями договоров или контрагентов, а не реальными адресами. Такие записи невозможно геокодировать — для них нужно вручную указать координаты.
Солвер VROOM решает задачу маршрутизации (VRP), а OSRM рассчитывает реальные расстояния и время по дорожной сети Приволжского ФО. Маршруты рисуются по дорогам, не прямыми линиями.
Замороженные заказы (определяются автоматически по названию товара) оптимизируются отдельно и назначаются только на машины с рефрижератором. Каждая машина может выполнить несколько рейсов в день.
Заказы в зоны «Каменский район», «Кузнецк», «Ломов», «Мокшан» не участвуют в оптимизации — они доставляются наёмными машинами. Такие заказы отмечены значком ↗ и отображаются в списке, но выводятся отдельным блоком «Внешняя доставка» в панели маршрутов с указанием зоны, количества и веса.
При оптимизации VROOM рассчитывает ETA (расчётное время прибытия) для каждой остановки. Если у точки доставки задан интервал доставки (например, 06:30–08:40), солвер учитывает это ограничение. Оба значения сохраняются и отображаются в маршрутных листах.
Все маршруты начинаются и заканчиваются: ул. Металлистов, 7
Если суммарный вес превышает вместимость или не удаётся уложиться во временные окна, часть заказов останется нераспределённой (жёлтое предупреждение). Повторная оптимизация заменяет только черновики — утверждённые маршруты сохраняются.
Кнопка-глаз на каждой карточке скрывает/показывает маршрут на карте. Кнопки «Все» / «Скрыть все» управляют видимостью всех маршрутов сразу.
По умолчанию свёрнуты — видно название машины, кол-во остановок, вес, загрузку. Клик раскрывает полную информацию: водитель, статус, список остановок с ETA.
Над карточками — компактная таблица сравнения всех маршрутов: машина, остановки, кг, км, минуты, загрузка %. Итоговая строка внизу. Перегруз подсвечен красным.
Каждый маршрут показывает две полосы загрузки:
Время обслуживания: 10 мин обычные точки, 15 мин заморозка. Рабочий день: 05:00–16:00 (660 мин). Настраивается через переменные окружения.
Параметры задаются в .env и перечитываются при перезапуске:
SERVICE_MIN_REGULAR=10 # минут на обычную точку SERVICE_MIN_FROZEN=15 # минут на заморозку WORK_DAY_START_HOUR=5 # начало рабочего дня WORK_DAY_END_HOUR=16 # конец рабочего дня
Правая панель → вкладка «История». Показывает все утверждённые и архивные маршруты. Фильтры: период дат, водитель, машина, статус (Черновик / Утверждён / Архив).
Каждый маршрут — компактная карточка с названием машины, датой, водителем, количеством остановок, весом и расстоянием. Клик раскрывает подробности.
При раскрытии карточки:
Маршрутный лист для водителя: дата, машина, водитель, таблица остановок с колонками: №, Контрагент, Адрес, ETA, Интервал, Вес, Ящики. Итоги внизу.
Два листа: «Сводка» (общие данные) и «Остановки» (детальная таблица с направлениями).
Черновик → оптимизация создаёт маршрут. Можно переоптимизировать.
Утверждён → оператор подтвердил. Маршрут зафиксирован, не перезаписывается.
Архив → автоматически ночью или вручную. Хранится в истории бессрочно.
Ключ для автоматического импорта настраивается в файле .env:
SERVICE_API_KEY=ваш_ключ
Скрипт автоимпорта:
/srv/apps/logistics/scripts/import-cron.sh
Расписание в crontab:
10 18-23 * * * /srv/apps/logistics/scripts/import-cron.sh
Данные из 1С синхронизируются через rsync с TrueNAS:
TrueNAS → /srv/apps/logistics/data/
Полный конвейер:
1С → JSON → WinSCP → TrueNAS → rsync → API
Добавление и изменение машин/водителей — через API или seed-скрипт:
python scripts/seed-data.py
Для диагностики ошибок геокодирования и импорта:
docker compose logs app
Финальный импорт — после 21:00, когда все заказы оформлены в 1С. Автоимпорт работает каждые 30 минут с 16:55 до 22:55.
Точки без координат (—) не попадут в маршрут. Проверьте перед оптимизацией.
Можно запускать многократно — заменяются только черновики. Утверждённые маршруты защищены от перезаписи. Пустые утверждённые маршруты (без остановок) удаляются автоматически.
Кнопка ↗ расширяет панель заказов — удобно для работы с большим списком. Кнопка > сворачивает правую панель маршрутов, освобождая место для карты.
Замороженные заказы определяются автоматически по ключевым словам в товарах. Фильтр ❄ позволяет быстро отделить заморозку от обычных заказов. Оптимизация заморозки — отдельной кнопкой.
На мобильных устройствах используйте вкладки внизу экрана для переключения между заказами, картой и маршрутами. Кнопка оптимизации расположена в правом нижнем углу карты.