- Python 100%
| .github | ||
| config | ||
| docs | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| bugs.txt | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| main.py | ||
| pyproject.toml | ||
| README.md | ||
| run.bat | ||
| todo.md | ||
| uv.lock | ||
| VERSION | ||
Система распределения товаров по ячейкам
Программа определяет оптимальную ячейку хранения для товара на складе. При сканировании штрихкода система анализирует свободное место, цвет товара и другие параметры, после чего предлагает 3 наиболее подходящие ячейки.
Интеграция с МойСклад обеспечивает автоматическое получение данных о товарах и остатках.
Быстрый старт
# 1. Установка
pip install -e .
# 2. Сохранение токена МойСклад (выполняется один раз)
python scripts/get_token.py
# 3. Запуск программы
python main.py
При первом запуске программа предложит выбрать склад. После этого можно приступать к сканированию штрихкодов.
Режимы работы
При запуске программа предлагает выбрать режим:
| № | Режим | Назначение |
|---|---|---|
| 1 | Автоприёмка (в разработке) | Автоматическое создание документов приёмки по напечатанным этикеткам |
| 2 | Распределение | Размещение партий 5-40 штук. Приоритет — ячейки с максимальным свободным местом |
| 3 | Малые партии | Размещение 1-5 штук. Приоритет — ячейки, содержащие аналогичный товар |
| 4 | Утилиты | Служебные функции (анализ ячеек, обновление данных) |
Алгоритм выбора ячейки
Основные правила
- Исключённые ячейки — заблокированные ячейки не рассматриваются (карантин, служебные)
- Вместимость — проверяется наличие свободного места для товара
- Правило цвета — разные товары одного цвета не могут находиться в одной ячейке
- Сортировка — подходящие ячейки ранжируются по приоритету выбранного режима
Правило цвета
Для предотвращения ошибок при сборке заказов система не допускает размещения разных товаров одинакового цвета в одной ячейке.
| Размещаемый товар | Содержимое ячейки | Допустимо? |
|---|---|---|
| Футболка белая | Брюки чёрные | ✅ Да — цвета различаются |
| Футболка чёрная | Брюки чёрные | ❌ Нет — совпадение цвета |
| Футболка синяя (размер M) | Футболка синяя (размер L) | ❌ Нет — совпадение цвета |
Схожие оттенки объединяются в группы. Например, "электрик" и "индиго" относятся к синему. Настройка групп: config/color_synonyms.json.
Учёт габаритов товара
Крупные товары требуют больше места в ячейке. Система учитывает это при расчёте доступного пространства.
| Тип товара | Коэффициент занимаемого места | Пример |
|---|---|---|
| Крупногабаритный | ×4 относительно стандартного | Костюмы в большой упаковке |
| Габаритный | ×1.6 относительно стандартного | Товары в упаковке 20×25 см |
| Стандартный | ×1 (базовое значение) | Большинство товаров |
| Компактный | ×0.55 относительно стандартного | Мелкие аксессуары |
Принадлежность товара к категории определяется по штрихкоду. Списки хранятся в файлах config/*_products.json.
Память сессии
Система фиксирует размещения товаров в рамках текущей сессии. Это позволяет исключить повторное предложение ячейки для товаров одного цвета до синхронизации данных с МойСклад.
Настройки
Основной файл конфигурации: config/settings.json
{
"default_cell_capacity": 50,
"store_id": "uuid-склада",
"excluded_cells": ["*-0-*-*", "КАРАНТИН"],
"sequential_fill": true,
"debug_mode": false
}
| Параметр | Описание |
|---|---|
default_cell_capacity |
Максимальное количество товаров в ячейке по умолчанию |
store_id |
Идентификатор склада (заполняется при первом запуске) |
excluded_cells |
Список ячеек, исключённых из выбора |
sequential_fill |
Последовательное заполнение ячеек (A-1-1-1, затем A-1-1-2 и т.д.) |
debug_mode |
Запись подробных логов в папку logs/ |
Исключение ячеек
Поддерживается указание конкретных ячеек и шаблонов:
| Шаблон | Результат | Пояснение |
|---|---|---|
КАРАНТИН |
Ячейка "КАРАНТИН" | Точное совпадение |
A-* |
A-1-1-1, A-1-1-2, A-2-3-4... | Весь ряд A |
*-0-*-* |
B-0-1-1, C-0-2-3... | Ячейки с нулём во второй позиции |
?-1-2-3 |
A-1-2-3, B-1-2-3, C-1-2-3... | Любая буква в первой позиции |
Подробнее: docs/configuration.md
Утилиты
Дополнительные инструменты доступны в меню «Утилиты» или через командную строку:
| Команда | Назначение |
|---|---|
python scripts/get_token.py |
Получение токена МойСклад |
python scripts/debug_cell_capacity.py |
Анализ заполненности ячеек |
python scripts/sync_product_sizes.py |
Обновление категорий товаров из Google Sheets |
python scripts/update_cache_barcodes.py |
Обновление кеша штрихкодов |
python scripts/check_cell_barcodes.py |
Просмотр содержимого конкретной ячейки |
Подробнее: docs/scripts.md
Требования
- Python 3.12 или новее
- Аккаунт МойСклад с доступом к API
Для разработчиков
См. CONTRIBUTING.md