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