No description
Find a file
2026-04-17 19:09:27 +00:00
.github feat(MIXED_RECEPTION): запоминание последней ячейки размещения товара 2026-02-04 15:58:09 +03:00
config feat: тулсвич ввода количества (Ctrl+E) и аудит скриптов 2026-04-17 15:50:54 +03:00
docs feat: добавлен режим 5 - приёмка смешанных партий (MIXED_RECEPTION) 2026-02-04 15:45:08 +03:00
scripts feat: тулсвич ввода количества (Ctrl+E) и аудит скриптов 2026-04-17 15:50:54 +03:00
src fix: сброс сессии CellSelector и кеша отгрузок при повторном входе в режим 2026-04-17 16:17:53 +03:00
tests feat(config): вынесены пороги DISTRIBUTION в конфиг 2026-02-04 16:37:29 +03:00
.gitignore feat: тулсвич ввода количества (Ctrl+E) и аудит скриптов 2026-04-17 15:50:54 +03:00
.pre-commit-config.yaml feat: добавлено округление остаточной вместимости и pre-commit хуки 2025-12-25 09:24:31 +03:00
bugs.txt feat: добавлен режим 5 - приёмка смешанных партий (MIXED_RECEPTION) 2026-02-04 15:45:08 +03:00
CHANGELOG.md fix: исправлен NORMAL_MULTIPLIER, режим PRODUCTION для session exclusion 2026-02-04 16:12:39 +03:00
CONTRIBUTING.md feat: добавлена система версионирования и улучшена документация 2025-12-25 10:35:19 +03:00
main.py fix: сброс сессии CellSelector и кеша отгрузок при повторном входе в режим 2026-04-17 16:17:53 +03:00
pyproject.toml feat: добавлена система версионирования и улучшена документация 2025-12-25 10:35:19 +03:00
README.md Обновить README.md 2026-04-17 19:09:27 +00:00
run.bat feat: добавлена система версионирования и улучшена документация 2025-12-25 10:35:19 +03:00
todo.md feat: тулсвич ввода количества (Ctrl+E) и аудит скриптов 2026-04-17 15:50:54 +03:00
uv.lock feat: система распределения товаров по ячейкам склада 2025-12-03 12:18:01 +03:00
VERSION feat(MIXED_RECEPTION): запоминание последней ячейки размещения товара 2026-02-04 15:58:09 +03:00

Система распределения товаров по ячейкам

Программа определяет оптимальную ячейку хранения для товара на складе. При сканировании штрихкода система анализирует свободное место, цвет товара и другие параметры, после чего предлагает 3 наиболее подходящие ячейки.

Интеграция с МойСклад обеспечивает автоматическое получение данных о товарах и остатках.

Быстрый старт

# 1. Установка
pip install -e .

# 2. Сохранение токена МойСклад (выполняется один раз)
python scripts/get_token.py

# 3. Запуск программы
python main.py

При первом запуске программа предложит выбрать склад. После этого можно приступать к сканированию штрихкодов.

Режимы работы

При запуске программа предлагает выбрать режим:

Режим Назначение
1 Автоприёмка (в разработке) Автоматическое создание документов приёмки по напечатанным этикеткам
2 Распределение Размещение партий 5-40 штук. Приоритет — ячейки с максимальным свободным местом
3 Малые партии Размещение 1-5 штук. Приоритет — ячейки, содержащие аналогичный товар
4 Утилиты Служебные функции (анализ ячеек, обновление данных)

Алгоритм выбора ячейки

Основные правила

  1. Исключённые ячейки — заблокированные ячейки не рассматриваются (карантин, служебные)
  2. Вместимость — проверяется наличие свободного места для товара
  3. Правило цвета — разные товары одного цвета не могут находиться в одной ячейке
  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