Антириус Ревизор

Инвентаризация складов и магазинов

Инвентаризация приезжает на объект вместе с бригадой

Вся система поднимается на ноутбуке прямо на складе, устройства подключаются к нему по локальной сети. Объект размечен на зоны на плане, у каждого места свой штрихкод, у каждого счётчика свои зоны. Интернета на объекте может не быть вовсе.

  • Сервер, админка и база — на ноутбуке бригады
  • Устройство подключается наведением камеры на код
  • Скан пишется в устройство и не ждёт сервер
А-01 Б-01 В-01 П-01 К-01 К-01-03-02 посчитано в работе не начато
Схема: план с зонами и штрихкодами мест, раскраска по прогрессу подсчёта.

Открытый стенд

Систему можно открыть прямо сейчас, без регистрации и разговора

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

  • Редактор плана: зоны рисуются, тянутся и переносятся по дереву
  • Лист этикеток со штрихкодами мест — тот же, что уходит на печать
  • Раздача зон по устройствам и коды подключения счётчиков
  • Учётный снимок остатков, залитый выгрузкой из учётной системы
  • Счёт в браузере телефона: подключение по коду, сканирование камерой, работа без сети

Гостевой вход

Адрес
demo.revizorius.ru
Счёт с телефона
demo.revizorius.ru/scan/
Почта
demo@revizorius.ru
Пароль
revizor-demo

Заказчик, магазин, товар и штрихкоды на стенде придуманы для показа: настоящих данных там нет. Стенд общий и раз в три часа возвращается в исходное состояние, поэтому сделанное на нём не сохраняется, а на время сброса он ненадолго закрывается. Гостю даны права контролёра — те же, с какими на объекте работает человек, ведущий инвентаризацию.

Связка ТСД и учётной системы закрывает только половину задачи

Терминал умеет читать штрихкод товара и отдавать строки в базу. Всё остальное, из-за чего инвентаризация переделывается, остаётся на людях и на бумаге.

Непонятно, что уже прошли

Счёт идёт по списку товара. Какой угол зала закончен, а какой ещё нет, видно только со слов бригады.

Одно место считают дважды

Двое заходят в один стеллаж, соседний не считает никто. Разбирают это уже по расхождениям, задним числом.

В дальнем углу пропадает связь

Wi-Fi добивает не везде, морозильник и металл глушат сигнал. Приложение, которое ждёт ответ сервера, останавливает работу.

Счётчик видит остаток

Когда на экране написано, сколько должно быть, цифру подгоняют под базу. Инвентаризация превращается в театр.

Отличие первое

Объект размечается на плане, а не списком в таблице

Этаж, помещение, стеллаж, секция, полка, ячейка — узлы одного дерева зон. Глубина не ограничена: структура объекта у каждого заказчика своя. Сканируемое место — это то, на что наклеен стикер, будь то ячейка, ящик или палета.

  • Чертёжный редактор, а не рисование мышкой. Подложка калибруется линейкой по известному размеру, дальше работают честные метры. Размеры зоны вводятся числом с клавиатуры.
  • Массив вместо ручной разметки. Нарисован один стеллаж, задано «6 секций на 4 яруса» — получено 24 места с автонумерацией кодов.
  • Вложенность по геометрии. Подзона внутри зоны получает родителя по попаданию контура, а не выбором из списка.
  • Свой код места. Код собирается из кода родителя и номера, но переопределяется вручную: нумерация на объекте часто своя, и менять её нельзя.
  • Работа без плана. Дерево зон живёт и без подложки. Иначе внедрение встаёт на «нарисуйте нам склад».

Редактор совместный: правки идут операциями, а не сохранением плана целиком, чужие изменения приходят сразу, расхождение версий возвращает отказ вместо тихой перезаписи.

Объект Торговый зал Склад Ряд А Ряд Б Палета П-01 А-01-01 А-01-02 штрихкод места Стикер хранится отдельной записью: переклейка гасит старую и заводит новую, прежние сканы остаются привязаны к месту.
Дерево зон: любая глубина, сканируемое место — признак узла.

Отличие второе

Приложение считает без сети, а не «умеет офлайн-режим»

Интерфейс отдаётся из бандла приложения, а не с сервера. Скан пишется в локальную базу устройства и рисуется на экране сразу — сеть в этот момент не участвует ни на одном экране.

  • Журнал только пополняется. Скан не редактируется и не удаляется: правка и отмена — новые события со ссылкой на прежнее. Итог зоны всегда пересчитывается из журнала.
  • Очередь уходит пачками. При появлении связи накопленное отправляется партиями, с короткими таймаутами и разбежкой по времени, чтобы двадцать устройств не ударили в сервер разом.
  • Повторная отправка ничего не дублирует. Идентификатор скана выдаёт устройство, сервер принимает пачку идемпотентно. Отслеживать «что дошло» не нужно.
  • Связь проверяется по ответу сервера. Значок системы врёт: Wi-Fi подключён, сервер за стеной недостижим. На экране постоянно виден счётчик неотправленного.

Данные на объекте невосстановимы, поэтому клиент нативный, а хранилище — SQLite в каталоге приложения. Браузерное хранилище система вправе вычистить сама.

ТСД / смартфон место А-01-02 товар · 12 шт не ушло: 47 Локальный журнал Очередь отправки связь пропала вернулась — уходит пачками Сервер: облако или мини-ПК повторная пачка не создаёт дублей
Путь скана: устройство пишет к себе, очередь уходит при первой связи.

Отличие третье

Брак инвентаризации предотвращается на выдаче зон, а не на разборе расхождений

Два главных источника переделки — посчитанное дважды место и подогнанная под учёт цифра. Оба закрываются порядком работы, а не дисциплиной бригады.

Пакет данных на устройство Счётчик 1 Счётчик 2 А-01А-02А-03 Б-01Б-02Б-03 Зоны выданы до выхода в зал. Пересечения нет, значит занимать участок по сети не нужно: в мёртвом углу двое не посчитают один стеллаж.

Зоны выдаются устройству заранее

Распределение приходит вместе с пакетом данных на объект, до выхода в зал. Это снимает единственный конфликт, который в такой работе бывает: двое посчитали одно место, не зная друг о друге.

Слепой пересчёт

Роль счётчика не видит учётный остаток. Это не настройка, которую можно отключить «на сегодня», а поведение роли. Подогнать цифру не под что.

Проходы по зоне

Первый проход — вслепую. Расхождение выше порога отправляет зону на второй проход, его делает другой человек и тоже не видит первую цифру. Совпало — принято. Не совпало — третий проход с контролёром. Пределы расхождения задаются отдельно в количестве, деньгах и процентах — об этом ниже, в разделе «Итог».

Пустое место сказано вслух

Закрыть место без единого скана нельзя. «Здесь пусто» — отдельная отметка с подтверждением: в ведомости это недостача на всю зону, и она должна быть заявлена, а не забыта.

Итог инвентаризации

Работа заканчивается не подсчётом, а документом, который подписывают

Посчитанное сводится с учётным снимком, расхождения разбираются по позициям и зонам. Из одной и той же сверки выходят ведомость на бумагу и файл в учётную систему, поэтому числа в них сходятся по определению.

Сверка с учётом

Соединение полное: позиция может значиться в учёте и не найтись в зале, а может найтись в зале и не значиться в учёте. Третья категория самая большая, и она показана отдельно, а не растворена в итоге.

Три предела расхождения

Количество, деньги и процент задаются отдельно и меряют разное: штучный товар ловится количеством, дорогая мелочь — деньгами, весовой — процентом. Позиция, по которой предел посчитать не из чего, в «пределы» молча не уходит.

Сличительная ведомость

Документ под печать из браузера — тем же способом, что и лист этикеток мест: на объекте есть браузер и принтер. Зона, по которой решение о проходах не принято, в итог не подмешивается, а названа в документе поимённо.

Выгрузка расхождений

Файл CSV с постоянными столбцами: файловый обмен читают все учётные системы, а службу под конкретную конфигурацию пишут под конкретного заказчика.

Сюда же считается выработка счётчиков — сканы, позиции, закрытые места, время от первого скана до последнего, темп, правки и отмены, по человеку, по устройству и по инвентаризации. Всё это сервер считает и отдаёт, но своих экранов в админке у сверки, ведомости и выработки пока нет: об этом сказано ниже, в разделе «Готовность».

Подготовка объекта

Штрихкоды мест выдаёт сама система, а разметить объект можно с устройства

Каждому месту система выдаёт свой код и собирает лист этикеток под резку: контролёр открывает лист из админки и печатает его на обычном принтере. QR или Code128 на выбор — QR устойчивее к грязи и читается смартфоном под углом, Code128 привычнее для терминала. Человекочитаемый код дублируется на этикетке.

Код места не выводится из кода зоны. Зону переименовывают, когда склад перенумеровали, а стикер живёт на полке годами — производный код после переименования начал бы врать. В код добавлен контрольный символ: опечатка при наборе руками и перестановка двух знаков не пройдут молча.

Если стикеры уже наклеены

Ревизор обходит склад с устройством, сканирует наклеенное и задаёт места на месте: стикер привязывается к существующей зоне либо создаёт новую потомком найденного родителя. Прямоугольник зоны ставится пальцем прямо на плане, углы тянутся за размер. Связь для этого не нужна: правки копятся на устройстве и уходят пачкой, как сканы.

Разметка вынесена в отдельный режим намеренно: скан стикера во время подсчёта не должен переклеивать место.

1 Скан стикера на стеллаже Код уже наклеен на объекте 2 Привязка или новое место Потомок найденного родителя 3 Прямоугольник на плане Углы тянутся за размер новое место Б-02-04
Разметка на объекте: скан, привязка, геометрия.

Основной режим работы

Система приезжает на объект вместе с бригадой

Бригада привозит ноутбук, и на нём поднимается всё: сервер, админка, база. Устройства подключаются к этому же ноутбуку по локальной сети. Интернет на объекте не нужен — ни для подсчёта, ни для подключения устройств, ни для разметки склада.

  • Локальная сеть вместо чужого канала. Ни склад в металле, ни подвал, ни объект в поле не мешают: устройства и сервер стоят по одну сторону связи.
  • Адрес комплекта приходит кодом. Устройство получает адрес, объект и инвентаризацию из кода настройки, а не набирает их руками.
  • Проверка комплекта перед выездом. Образы на месте, база поднимается, свободного места хватает — это видно до отъезда, а не на объекте.
  • Облако — второй режим. Тот же протокол и та же система, просто другой адрес. Порядок работ определяется выездным комплектом, а не наоборот.

На этом этапе комплект работает открытым обменом по локальной сети, без шифрования канала: своего удостоверения и пиннинга на устройствах нет. Так решено сознательно — контур замкнут на ноутбук бригады, наружу он не смотрит; в коде настройки под отпечаток корневого центра оставлено место. Что готово, а что ещё нет, сказано ниже, в разделе «Готовность».

Интернет не требуется Ноутбук бригады сервер и база админка план и справочники локальная сеть Терминал Смартфон
Комплект на объекте: сервер рядом со счётчиками, внешний канал не участвует.

Терминалы сбора данных

Zebra, Urovo, Honeywell. Аппаратная кнопка даёт мгновенный скан без камеры — основной режим на складе. Профили сканирования настраиваются, префикс и суффикс учитываются.

Смартфоны Android

Камера через нативное распознавание. Подходит там, где терминалов не хватает или считают силами магазина. Логика подсчёта отделена от интерфейса.

Подключение устройств

Счётчик наводит камеру на код и работает

Контролёр открывает регистрацию и показывает код на экране. Человек наводит камеру — и получает адрес сервера, объект, инвентаризацию и свой личный доступ. Руками не набирается ничего: адрес склада вида «192.168.1.10, двоеточие, 8443» был самым частым источником обращений «у меня не подключается».

  • Пароля в коде нет. Пароль на экране — многоразовый ключ, и сфотографировавший его входил бы потом когда угодно. В коде лежит одноразовый: он умирает при первом использовании, а код окна — вместе с закрытием окна.
  • Доступ у каждого свой. Личная учётная запись счётчика: по ней видно, кто что насчитал, и её можно заблокировать отдельно от остальных.
  • Код живёт смену. Срок жизни кода по умолчанию — смена: контролёр раздаёт коды утром, и к вечеру они мертвы сами. Больше суток выдать нельзя — это уже не разовый код, а ключ.
  • Снять доступы разом. Одна команда аннулирует доступы всей инвентаризации, а закрытие инвентаризации делает это само. Учётки при этом отключаются, а не удаляются: журнал человека должен остаться.

Отсюда сюжет для подработки: пришли люди со своими телефонами, поставили приложение, отсканировали код — и у каждого свой доступ, ограниченный этой инвентаризацией.

Экран контролёра UXZVZFYRLM камера Устройство счётчика комплект 192.168.1.10 объект Демо-маркет зоны А-01 … А-03 В коде: адрес комплекта, объект, инвентаризация и одноразовый код доступа. Пароля нет.
Подключение: код на экране, камера, личный доступ.

Кому подходит

Задачи у двух сторон разные, и система смотрит на них по-разному.

Розничные сети и предприятия

Считают свой товар своими силами

Инвентаризация делается силами магазина или склада, часто вечером и в сжатый срок. Главная проблема — не скорость сканирования, а доверие к результату.

  • Покрытие видно по плану: закончен зал или остались два ряда, понятно без обхода.
  • Свои же сотрудники считают вслепую, без учётного остатка на экране.
  • Стикеры мест наклеиваются один раз и работают дальше от инвентаризации к инвентаризации.
  • Морозильник, дальний угол и подсобка перестают быть местом, где приложение встаёт.
  • Устройства подключают наведением камеры на код: раздавать людям адрес сервера и пароли не нужно.
  • Выборочный пересчёт по отдельным зонам — та же механика, только меньше объём.

Подрядчики по инвентаризации

Считают чужие склады по договору

Бригада, устройства и график объектов. Платят за посчитанный объект, поэтому важны выработка людей, отсутствие переделок и скорость выхода на новом складе.

  • Система едет на объект вместе с бригадой: ноутбук, локальная сеть, никакой зависимости от связи заказчика.
  • Зоны распределяются по счётчикам заранее — бригада не спорит о границах на месте.
  • Незнакомый объект размечается с устройства в день выезда, без ожидания планов от заказчика.
  • Люди с подработки приходят со своими телефонами: приложение, скан кода — и у каждого своя учётная запись, а не общий пароль на всех.
  • Доступы всей инвентаризации снимаются одной командой, а закрытие инвентаризации снимает их само.
  • У каждого скана есть человек и устройство, поэтому выработка сводится по человеку, по устройству и по инвентаризации — с темпом, правками и выгрузкой.

Модель оплаты обсуждается под сценарий работы: за объект, за устройство или подпиской. Условия называем после разговора о задаче.

Что уже работает

Сервер и админка

  • Сервер, роли и права, дерево зон любой глубины, перенос поддерева
  • Админка: заказчики, объекты и зоны, справочник товара с упаковками
  • Редактор планов: подложка с калибровкой, массив, произвольные фигуры тянутся мышью, поворот, удаление клавишей, панель вида и сетка
  • Прямое управление фигурой: углы и вершины тянутся маркерами, панель действий стоит у самой фигуры, зона копируется и вставляется
  • Щелчок в дереве подводит вид к зоне и показывает, чем она заполнена; у полки вместо этого открывается фасад её стеллажа
  • Выдача штрихкодов мест самой системой и лист этикеток под резку
  • Экран бригады: окно регистрации, коды подключения, QR на весь экран, заявки, блокировка и аннулирование доступов
  • Раздача зон по устройствам и проходы подсчёта
  • Ход счёта на плане зала: выдача и закрытие проходов приходят живым каналом, сканы — опросом с выбираемым периодом
  • Остатки и справочник номенклатуры грузятся таблицами CSV и книгами Excel: несколько штрихкодов на позицию, конфликты показаны построчно, остатки привязываются по штрихкоду или по коду товара
  • Выгрузка на сотни тысяч позиций читается потоком: триста тысяч строк проходят за минуту с небольшим, ведущие нули в кодах не теряются
  • Приём справочника и остатков порциями напрямую из учётной системы, без файла: повтор порции при обрыве связи не задваивает данные
  • Окно стеллажа: полки стоят фасадом стопкой и заводятся кнопкой, поодиночке и пачкой с шагом по высоте
  • Живой канал в редакторе: чужие правки и присутствие

Объект и счёт

  • Выездной комплект: вся система на ноутбуке одной командой, образы возятся с собой, готовность проверяется до выезда
  • Подключение устройства по коду: одноразовые коды, окно регистрации, временный доступ, снятие доступов разом
  • Разметка объекта с устройства: скан наклеенного стикера, привязка или новое место, прямоугольник на плане
  • Протокол синхронизации: пакет данных дельтой, заливка пачек без дублей
  • Мобильный клиент: загрузка пакета, экран счёта, правка и отмена, ручной ввод
  • Сборки под Android-терминалы и Android-смартфоны; обмен с комплектом по локальной сети в них разрешён, и комплект приложению виден
  • Счёт в браузере: работает без сети, ставится на домашний экран, сканирует камерой телефона
  • План на устройстве показывает зоны с поворотом; полки стеллажа выбираются стопкой фасадом, а размечаются без рисования — ярусом и высотой

Сверка и документы

  • Маски весовых кодов в настройках объекта, доставка их на устройство и разбор весовых кодов и упаковок при заливке
  • Разбор неизвестных штрихкодов с привязкой к позиции справочника
  • Сверка факта с учётным снимком: пределы в количестве, деньгах и процентах, спорные зоны отдельно
  • Сличительная ведомость под печать и выгрузка расхождений файлом
  • Приёмка прохода контролёром прямо в сверке: принятый становится итогом зоны и снимает спор, отклонённый в итог не идёт, а выработка человека за него сохраняется
  • Сканы, доехавшие после решения, видны отдельно: место названо поимённо, и решение пересматривается подтверждением
  • Сводка выработки счётчиков по человеку, устройству и инвентаризации
  • Экраны в админке: расхождения с пределами, сличительная ведомость под печать, разбор неизвестных кодов и выработка бригады

Поговорить о задаче

Расскажите про объект: что считаете, сколько мест, какие устройства уже есть и как сейчас проходит инвентаризация. Ответим по существу и покажем систему на данных, похожих на ваши.

  • Демонстрация админки, редактора планов и приложения счётчика
  • Разбор сценария под сеть или под подрядные работы
  • Ответ на вопрос, что из нужного вам уже готово, а что ещё нет