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

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

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

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

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

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

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

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

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

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

Адрес
demo.revizorius.ru
Почта
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 и iPhone

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что уже работает, а что ещё делается

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

Работает

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

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

Объект и счёт

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

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

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

Это считает и отдаёт сервер. Своих экранов в админке у сверки, ведомости, разбора неизвестных кодов и выработки пока нет — они в соседней колонке.

В работе и в плане

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

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

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

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

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