Непонятно, что уже прошли
Счёт идёт по списку товара. Какой угол зала закончен, а какой ещё нет, видно только со слов бригады.
Инвентаризация складов и магазинов
Вся система поднимается на ноутбуке прямо на складе, устройства подключаются к нему по локальной сети. Объект размечен на зоны на плане, у каждого места свой штрихкод, у каждого счётчика свои зоны. Интернета на объекте может не быть вовсе.
Открытый стенд
На стенде вымышленный магазин: торговый зал и подсобный склад на плане, дерево зон от стеллажей до полок, штрихкоды мест, справочник товара на три сотни позиций и уже идущая инвентаризация.
Заказчик, магазин, товар и штрихкоды на стенде придуманы для показа: настоящих данных там нет. Стенд общий и раз в час возвращается в исходное состояние, поэтому сделанное на нём не сохраняется, а на время сброса он ненадолго закрывается. Гостю даны права контролёра — те же, с какими на объекте работает человек, ведущий инвентаризацию.
Терминал умеет читать штрихкод товара и отдавать строки в базу. Всё остальное, из-за чего инвентаризация переделывается, остаётся на людях и на бумаге.
Счёт идёт по списку товара. Какой угол зала закончен, а какой ещё нет, видно только со слов бригады.
Двое заходят в один стеллаж, соседний не считает никто. Разбирают это уже по расхождениям, задним числом.
Wi-Fi добивает не везде, морозильник и металл глушат сигнал. Приложение, которое ждёт ответ сервера, останавливает работу.
Когда на экране написано, сколько должно быть, цифру подгоняют под базу. Инвентаризация превращается в театр.
Отличие первое
Этаж, помещение, стеллаж, секция, полка, ячейка — узлы одного дерева зон. Глубина не ограничена: структура объекта у каждого заказчика своя. Сканируемое место — это то, на что наклеен стикер, будь то ячейка, ящик или палета.
Редактор совместный: правки идут операциями, а не сохранением плана целиком, чужие изменения приходят сразу, расхождение версий возвращает отказ вместо тихой перезаписи.
Отличие второе
Интерфейс отдаётся из бандла приложения, а не с сервера. Скан пишется в локальную базу устройства и рисуется на экране сразу — сеть в этот момент не участвует ни на одном экране.
Данные на объекте невосстановимы, поэтому клиент нативный, а хранилище — SQLite в каталоге приложения. Браузерное хранилище система вправе вычистить сама.
Отличие третье
Два главных источника переделки — посчитанное дважды место и подогнанная под учёт цифра. Оба закрываются порядком работы, а не дисциплиной бригады.
Распределение приходит вместе с пакетом данных на объект, до выхода в зал. Это снимает единственный конфликт, который в такой работе бывает: двое посчитали одно место, не зная друг о друге.
Роль счётчика не видит учётный остаток. Это не настройка, которую можно отключить «на сегодня», а поведение роли. Подогнать цифру не под что.
Первый проход — вслепую. Расхождение выше порога отправляет зону на второй проход, его делает другой человек и тоже не видит первую цифру. Совпало — принято. Не совпало — третий проход с контролёром. Пределы расхождения задаются отдельно в количестве, деньгах и процентах — об этом ниже, в разделе «Итог».
Закрыть место без единого скана нельзя. «Здесь пусто» — отдельная отметка с подтверждением: в ведомости это недостача на всю зону, и она должна быть заявлена, а не забыта.
Итог инвентаризации
Посчитанное сводится с учётным снимком, расхождения разбираются по позициям и зонам. Из одной и той же сверки выходят ведомость на бумагу и файл в учётную систему, поэтому числа в них сходятся по определению.
Соединение полное: позиция может значиться в учёте и не найтись в зале, а может найтись в зале и не значиться в учёте. Третья категория самая большая, и она показана отдельно, а не растворена в итоге.
Количество, деньги и процент задаются отдельно и меряют разное: штучный товар ловится количеством, дорогая мелочь — деньгами, весовой — процентом. Позиция, по которой предел посчитать не из чего, в «пределы» молча не уходит.
Документ под печать из браузера — тем же способом, что и лист этикеток мест: на объекте есть браузер и принтер. Зона, по которой решение о проходах не принято, в итог не подмешивается, а названа в документе поимённо.
Файл CSV с постоянными столбцами: файловый обмен читают все учётные системы, а службу под конкретную конфигурацию пишут под конкретного заказчика.
Сюда же считается выработка счётчиков — сканы, позиции, закрытые места, время от первого скана до последнего, темп, правки и отмены, по человеку, по устройству и по инвентаризации. Всё это сервер считает и отдаёт, но своих экранов в админке у сверки, ведомости и выработки пока нет: об этом сказано ниже, в разделе «Готовность».
Подготовка объекта
Каждому месту система выдаёт свой код и собирает лист этикеток под резку: контролёр открывает лист из админки и печатает его на обычном принтере. QR или Code128 на выбор — QR устойчивее к грязи и читается смартфоном под углом, Code128 привычнее для терминала. Человекочитаемый код дублируется на этикетке.
Код места не выводится из кода зоны. Зону переименовывают, когда склад перенумеровали, а стикер живёт на полке годами — производный код после переименования начал бы врать. В код добавлен контрольный символ: опечатка при наборе руками и перестановка двух знаков не пройдут молча.
Ревизор обходит склад с устройством, сканирует наклеенное и задаёт места на месте: стикер привязывается к существующей зоне либо создаёт новую потомком найденного родителя. Прямоугольник зоны ставится пальцем прямо на плане, углы тянутся за размер. Связь для этого не нужна: правки копятся на устройстве и уходят пачкой, как сканы.
Разметка вынесена в отдельный режим намеренно: скан стикера во время подсчёта не должен переклеивать место.
Основной режим работы
Бригада привозит ноутбук, и на нём поднимается всё: сервер, админка, база. Устройства подключаются к этому же ноутбуку по локальной сети. Интернет на объекте не нужен — ни для подсчёта, ни для подключения устройств, ни для разметки склада.
На этом этапе комплект работает открытым обменом по локальной сети, без шифрования канала: своего удостоверения и пиннинга на устройствах нет. Так решено сознательно — контур замкнут на ноутбук бригады, наружу он не смотрит; в коде настройки под отпечаток корневого центра оставлено место. Что готово, а что ещё нет, сказано ниже, в разделе «Готовность».
Zebra, Urovo, Honeywell. Аппаратная кнопка даёт мгновенный скан без камеры — основной режим на складе. Профили сканирования настраиваются, префикс и суффикс учитываются.
Камера через нативное распознавание. Подходит там, где терминалов не хватает или считают силами магазина. Приложение собрано на общем коде для всех трёх платформ, логика подсчёта отделена от интерфейса.
Подключение устройств
Контролёр открывает регистрацию и показывает код на экране. Человек наводит камеру — и получает адрес сервера, объект, инвентаризацию и свой личный доступ. Руками не набирается ничего: адрес склада вида «192.168.1.10, двоеточие, 8443» был самым частым источником обращений «у меня не подключается».
Отсюда сюжет для подработки: пришли люди со своими телефонами, поставили приложение, отсканировали код — и у каждого свой доступ, ограниченный этой инвентаризацией.
Задачи у двух сторон разные, и система смотрит на них по-разному.
Розничные сети и предприятия
Инвентаризация делается силами магазина или склада, часто вечером и в сжатый срок. Главная проблема — не скорость сканирования, а доверие к результату.
Подрядчики по инвентаризации
Бригада, устройства и график объектов. Платят за посчитанный объект, поэтому важны выработка людей, отсутствие переделок и скорость выхода на новом складе.
Модель оплаты обсуждается под сценарий работы: за объект, за устройство или подпиской. Условия называем после разговора о задаче.
Продукт в разработке, и мы говорим об этом прямо. Ниже — состояние на сегодня, без округления в свою пользу.
Это считает и отдаёт сервер. Своих экранов в админке у сверки, ведомости, разбора неизвестных кодов и выработки пока нет — они в соседней колонке.
Правая колонка написана не для порядка. Пока экранов под сверку и ведомость в админке нет, эта часть работы делается командой к серверу, а не кнопкой в интерфейсе, и выходить на объект с этим лучше, зная заранее.
Расскажите про объект: что считаете, сколько мест, какие устройства уже есть и как сейчас проходит инвентаризация. Ответим по существу и покажем систему на данных, похожих на ваши.