Что происходит после сканирования товара

 

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // UNDER_THE_HOOD_WMS

Для сотрудника склада операция выглядит элементарно

Он наводит ТСД на штрихкод. Раздаётся сигнал.

На экране появляется результат:

«Товар принят»

Всё занимает секунду или даже меньше.

Но за этой секундой может находиться несколько систем, десятки проверок и целая цепочка автоматических действий.

Само сканирование — только начало операции.

Дальше системе необходимо понять, что именно отсканировали, зачем это сделали, имеет ли сотрудник право выполнить операцию, соответствует ли товар текущему заданию, можно ли изменить остаток и как зафиксировать результат так, чтобы он не потерялся и не был записан дважды.

В хорошо спроектированной складской системе сотрудник видит один простой экран, а внутри происходит примерно следующее:

ТСДСканированиеРаспознавание кодаПроверка операцииWMS / учётная системаПроверкиИзменение состоянияФиксация операцииОтвет ТСД

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

 

 

АРХИТЕКТУРА ДАННЫХ // STOCK_OWNERSHIP_PATTERN

ТСД не «меняет остаток» самостоятельно

Это важный момент.

Терминал сбора данных обычно выступает интерфейсом сотрудника, а не владельцем складской информации.

Он получает код, отправляет его в систему и показывает результат.

ТСДШтрихкод 482000...WMSПравилаПроверкиОстаткиРезультатТСД

Это разделение важно.

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

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // RAW_CODE_CAPTURE

Шаг первый: сканер получает физический код

Когда сотрудник нажимает кнопку сканирования, устройство считывает графическое представление идентификатора.

Это может быть:

EAN
/
Code 128
/
QR-код
/
Data Matrix
/
внутренний штрихкод
/
другой идентификатор, используемый компанией

На этом этапе система ещё не знает, что перед ней.

Она получила только значение:

Считывание лучаСырой массив байтЗначение:4820001234567

Дальше начинается программная часть.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // CODE_CONTEXT_RESOLUTION

Один код не всегда означает одну сущность

В простом магазине можно предположить:

штрихкод → товар

В реальном складе всё может быть сложнее.

Один и тот же код может использоваться в разных контекстах.

Кроме того, системе могут быть важны:

партия
/
серийный номер
/
упаковка
/
количество
/
склад
/
ячейка
/
срок годности
/
единица измерения

Поэтому после сканирования система должна определить контекст операции.

ШтрихкодТоварПартияЕдиница храненияТекущая операция

И только после этого можно принимать решение.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // OPERATION_CONTEXT_VALIDATION

Сначала система должна понять, что сейчас делает сотрудник

Представим, что сотрудник выполняет приёмку. Он сканирует товар.

Система знает текущие параметры сессии:

Операция: Приёмка №5821
/
Склад: Основной
/
Ячейка: A-03-14
/
Ожидаемый товар: 4820001234567
/
Количество: 20

Сотрудник сканирует именно этот товар. Система сравнивает полученный код с текущим заданием.

Проверка штрихкода✓ СовпадениеОжидалось: 4820001234567Получено: 4820001234567⚠ НесоответствиеОжидалось: 4820001234567Получено: 4820007654321

И это уже не просто «ошибка штрихкода».

Это бизнес-правило склада.

 

 

АРХИТЕКТУРА ДАННЫХ // LOCAL_CACHE_LIMITATIONS

Почему проверку нельзя оставлять только на ТСД

Иногда пытаются сделать приложение максимально самостоятельным.

На устройство заранее загружают справочник товаров и правила.

Это действительно позволяет работать быстрее. Но возникает проблема.

Что произойдёт, если товар вчера был переименован?

Или изменился статус?

Или товар уже зарезервирован?

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

Локальные данные могут устареть.

Поэтому критические проверки должны выполняться на стороне системы, которая является источником актуальных данных.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // SCANNER_API_PAYLOAD

После сканирования формируется запрос

Упрощённо запрос может содержать:

{
  "operation": "receipt",
  "task": "5821",
  "barcode": "4820001234567",
  "warehouse": "main",
  "location": "A-03-14",
  "quantity": 1
}

В реальной системе структура будет другой, но смысл примерно такой:

«В рамках этой операции сотрудник выполнил вот это действие с этим объектом».

Это намного надёжнее, чем просто отправить строку со штрихкодом.

 

 

АРХИТЕКТУРА СИСТЕМ // SERVER_SIDE_VALIDATION

Сервер определяет, можно ли выполнять операцию

Получив запрос, система начинает проверки.

ЗапросАвторизацияПрава сотрудникаСуществование операцииСтатус заданияТоварСкладЯчейкаКоличествоБизнес-правила

Если хотя бы одно критическое условие нарушено, операция не должна записываться.

 

 

АРХИТЕКТУРА БЕЗОПАСНОСТИ // SERVER_SIDE_AUTHORIZATION

Проверка прав — это не формальность

Представим двух сотрудников.

// ОПЕРАТОР А //

Работает строго на приёмке

// ОПЕРАТОР Б //

Занимается только отгрузкой

Если А каким-то образом отправит запрос на операцию отгрузки, сервер не должен доверять тому, что показал интерфейс.

Правильная архитектура:

ТСДAPIПроверка пользователяПроверка ролиПроверка операцииРазрешение / отказ

Скрыть кнопку на ТСД недостаточно.

Любая критическая операция должна быть защищена на серверной стороне.

 

 

АРХИТЕКТУРА СИСТЕМ // WMS_FUNCTIONAL_SCOPE

Что делает WMS

WMS — это не просто экран для склада.

В зависимости от архитектуры системы она может отвечать за:

размещение
/
перемещения
/
приёмку
/
отгрузку
/
задания сотрудникам
/
адресное хранение
/
статусы операций
/
остатки
/
правила работы склада

Поэтому после сканирования ТСД обычно обращается не напрямую к базе данных, а к сервису или API, который понимает складскую операцию.

ТСДAPIWMSПроверка заданияПроверка товараПроверка ячейкиПроверка количестваФиксация операции

 

 

АРХИТЕКТУРА ИНТЕГРАЦИЙ // ONE_C_INTEGRATION_TOPOLOGY

А где здесь 1С?

Зависит от архитектуры конкретной компании.

// СЦЕНАРИЙ А //

WMS — основа учёта.

А 1С просто получает итоговые результаты операций.

// СЦЕНАРИЙ Б //

Учёт в ядре 1С.

Складские операции выполняются непосредственно в решении на базе 1С.

// СЦЕНАРИЙ В //

Гетерогенная среда.

Отдельная WMS интегрирована одновременно и с 1С, и с тяжелой ERP.

Поэтому нельзя сказать, что после каждого сканирования ТСД обязательно обращается именно к 1С.

Правильный вопрос:

какая система является владельцем конкретной складской операции и остатка?

 

 

АРХИТЕКТУРА СИСТЕМ // RESPONSIBILITY_SEGREGATION

WMS и 1С могут отвечать за разные вещи

Операция складаWMSСкладское состояниеРезультат1СУчетные документы

WMS может оперативно управлять физическим движением товара.

1С — отражать необходимые результаты в бухгалтерском и управленческом учёте.

При этом конкретная архитектура зависит от того, как построены процессы компании.

 

 

АРХИТЕКТУРА ДАННЫХ // STOCK_STATE_VALIDATION

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

Представим, что сотрудник пытается списать одну единицу товара.

Система должна детально декомпозировать остаток:

Доступно: 15
/
Резерв: 4
/
Заблокировано: 2

Фактически свободно может быть только:

15 - 4 - 2 = 9

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

Общий балансДоступно: 15За вычетом резервов (-4) и блокировок (-2)Реальный свободный остаток:9 единиц

Бизнес-правила должны учитывать реальные состояния товара.

 

 

АРХИТЕКТУРА ДАННЫХ // DECOMPOSITE_STOCK_STATES

Остаток — это не всегда одно число

В серьёзной складской системе полезно различать:

Физический остаток
/
Зарезервированный
/
Доступный
/
Заблокированный
/
В пути

Например:

Товар: 100 шт.Физически на складе: 100Зарезервировано: 30Заблокировано: 10Доступно для отгрузки:60 шт.

Если оператор оформляет отгрузку, система должна работать с правильным состоянием.

Именно здесь простая «таблица остатков» перестаёт отражать реальную складскую логику.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // SUCCESSFUL_OPERATION_FLOW

Что происходит при успешной операции

Допустим, сотрудник перемещает товар из ячейки A-03-14 в B-07-02.

После сканирования система последовательно выполняет целую цепочку действий:

ТоварПроверка заданияПроверка исходной ячейкиПроверка назначенияФиксация перемещенияОбновление состоянияЗапись событияОтвет ТСД

На экране сотрудник увидит:

«Перемещение выполнено»

Но внутри произошло гораздо больше.

 

 

АРХИТЕКТУРА ДАННЫХ // TRANSACTION_LEDGER_PATTERN

Почему нельзя просто изменить остаток

Если система просто сделает:

A-03-14: -1 / B-07-02: +1

она потеряет историю.

Через неделю возникнет вопрос:

Почему товар оказался здесь?

Поэтому складские системы обычно должны фиксировать саму операцию.

Например:

14:32:18Сотрудник: ИвановОперация: перемещениеТовар: 4820001234567Количество: 1Откуда: A-03-14 → Куда: B-07-02Задание: №5821

Так остаток становится следствием операций, а не загадочным числом в таблице.

 

 

АРХИТЕКТУРА ДАННЫХ // TRANSACTION_LEDGER_RECONCILIATION

История операций помогает восстанавливать события

Если остаток оказался неправильным, нужно найти причину.

Из истории можно пошагово восстановить всю последовательность:

09:12приёмка+10010:04перемещение -2010:15отгрузка -3011:42перемещение +10

Без журнала операций поиск ошибки превращается в ручное расследование.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // NETWORK_TIMEOUT_PARADOX

Что происходит, если связь пропала

Вот здесь начинаются реальные сложности ТСД.

Сотрудник отсканировал товар
/
Запрос отправился
/
Связь оборвалась
/
ТСД не получил ответ

Что произошло?

Непонятно. Возможны два полярных сценария:

Обрыв на стороне ответаСценарий 1ТСД → WMS (операция выполнена)ответ потерян по пути назадСценарий 2ТСД → WMS (операция сорвана)не выполнена

Если приложение просто повторит запрос, оно рискует создать дубль.

 

 

НАДЁЖНОСТЬ ОБМЕНА // IDEMPOTENCY_PATTERN

Для этого нужна идемпотентность

У каждой важной операции должен быть уникальный идентификатор.

operation_id: 9f31-5821-000184

Если запрос пришёл повторно, сервер может проверить:

«Такую операцию я уже выполнял?»

Если да — повторно изменять остаток не нужно.

Запрос №184 // WMSОперация выполненаОтвет потерянТСД повторяет запрос №184WMSОперация уже существуетВозвращаем предыдущий результат

Для складской автоматизации это один из принципиально важных механизмов надёжности.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // UI_PENDING_STATE

Почему иногда лучше показать «обрабатывается»

Не каждую операцию можно подтвердить мгновенно.

Например, после сканирования нужно обратиться к нескольким сервисам. Вместо того чтобы заставлять сотрудника нажимать кнопку повторно, интерфейс должен вести его по состояниям.

Сканирование полученоПроверкаОперация обрабатывается...✓ Выполнено⚠ Не выполненоПричина: товар уже зарезервирован

Для сотрудника важно однозначно понимать состояние операции.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // ERROR_TRANSLATION_LAYER

Ошибка должна быть понятна человеку

Плохой вариант:

Error 409

Оператору склада это практически бесполезно.

Лучше:

Операция не выполнена.

Товар уже находится в другой ячейке:

B-07-02

Проверьте фактическое местоположение.

HTTP 409 / DB ExceptionТехнический сбой интеграцииИнтерфейсный переводчик бизнес-логикиРабочее действие:«Проверьте фактическое местоположение»

Система должна переводить техническую ошибку в понятное рабочее действие.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // SCAN_MISMATCH_RESOLUTION

А если сканируют не тот товар?

Это очень частая ситуация.

Например, задание: отсканировать Товар А в количестве 10 единиц, но оператор сканирует Товар Б.

Система должна определить ошибку до изменения складского состояния:

Сравнение кодовОжидался: Товар ААртикул 10482Получен: Товар БАртикул 10491

Операция не выполнена. При этом важно не просто сказать «неверный товар».

Можно сразу вывести на экран подсказку для быстрого исправления:

Ожидаемый товар по заданию:

Артикул 10482 // Ячейка A-03-14

Фактически отсканирован:

Артикул 10491

Это значительно сокращает время исправления ошибок на месте.

 

 

ПРОМЫШЛЕННЫЕ ИНТЕРФЕЙСЫ // BATCH_DATA_CAPTURE

Сканирование нескольких единиц

В реальной работе сотруднику редко удобно каждый раз выполнять полный цикл:

Скан
→
подтверждение
→
экран
→
кнопка
→
следующий товар

Если нужно обработать 100 одинаковых товаров, интерфейс должен поддерживать массовый потоковый сценарий.

Задание: 100 шт.Поток открытСканировано: 1Сканировано: 2Сканировано: 3 ...Сканировано: 100✓ Задание выполнено

Но и здесь система должна учитывать дублирование.

Повторное сканирование одного и того же кода не всегда означает новую единицу.

Всё зависит от конкретного типа товара и установленных правил учёта.

 

 

АРХИТЕКТУРА ДАННЫХ // SERIALIZED_ASSET_TRACKING

Серийный товар требует другой логики

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

// ТОВАР //

Ноутбук X

// СЕРИЙНЫЙ НОМЕР //

SN123456789

После сканирования нельзя просто увеличить остаток на единицу.

Нужно определить и зафиксировать состояние конкретного экземпляра.

SN123456789ПринятРазмещёнЗарезервированОтгружен

Для серийного учёта это уже жизненный цикл конкретного объекта.

 

 

АРХИТЕКТУРА ДАННЫХ // BATCH_AND_EXPIRATION_STRATEGY

Партии и сроки годности добавляют ещё один уровень

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

ТоварПартия №A1842Срок годностиКоличествоЯчейка

Тогда система может на ходу применять строгие логистические правила ротации: FIFO или FEFO.

И сотрудник просто сканирует код, а система сама определяет, допустима ли операция в данный момент.

 

 

АРХИТЕКТУРА ИНТЕГРАЦИЙ // DATA_PROPAGATION_PATTERN

После операции результат может уйти в несколько систем

Представим завершённую отгрузку. Складская система зафиксировала действие.

Но дальше результат веерно расходится по смежным контурам:

WMSИнтеграционный слой1СERPCRMсистема доставки

WMS

изменила физическое складское состояние;

1С

получила полные данные для регламентированного учёта;

ERP

каскадно обновила статус исходного заказа;

Доставка

получила агрегированную информацию о готовой отгрузке.

Сотрудник видит один результат.

А внутри компании изменяется несколько связанных процессов.

 

 

АРХИТЕКТУРА ИНТЕГРАЦИЙ // ASYMMETRIC_FAILURE_HANDLING

Именно здесь возникают самые сложные ошибки

Представим рассинхронизацию распределённой транзакции:

Физическое действиеСканированиеWMS✓ Товар физически списан1С✕ Учётная система не получила информацию

Если просто показать сотруднику абстрактное сообщение «Ошибка», абсолютно непонятно, что именно произошло.

Правильная архитектура должна чётко разделять слои для пользователя:

// ОСНОВНАЯ ОПЕРАЦИЯ //

✓ Выполнена успешно (факт зафиксирован на складе)

// ИНТЕГРАЦИОННЫЙ СЛОЙ //

⚠ Транзакция в 1С ожидает автоматической повторной отправки в очереди

Тогда сотруднику не предлагают повторно сканировать товар и случайно создавать опасные дубли остатков.

 

 

АРХИТЕКТУРА СИСТЕМ // FAULT_TOLERANT_QUEUE

Очередь позволяет разнести эти процессы

Если 1С временно недоступна, складская операция не обязательно должна останавливаться.

ТСДWMSОперация подтвержденаОчередь1СERPАналитика

Система гарантированно сохранит возникшее событие внутри себя и автоматически повторит передачу пакета позже.

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

 

 

ЗАКЛЮЧЕНИЕ ГЛАВЫ // SYSTEM_VS_USER_FLOW

Что видит сотрудник и что происходит внутри

В итоге одна обычная операция может выглядеть принципиально по-разному с двух сторон.

// ДЛЯ СОТРUDNИКА //1. Сканировать2. Получить подтверждение3. Перейти к следующему товару// ДЛЯ СИСТЕМЫ //СканированиеРаспознаваниеКонтекст заданияАвторизацияПроверка товараПроверка ячейкиПроверка количестваПроверка состоянияФиксация операцииИзменение складского состоянияЗапись аудитаИнтеграцииОтвет ТСД

Разница между этими двумя представлениями и есть настоящая автоматизация.

 

 

АРХИТЕКТУРА СИСТЕМ // RELIABLE_SCANNING_TOPOLOGY

Архитектура надёжного сканирования

В зрелой системе цепочка может выглядеть следующим образом:

ТСДAPI / BFFWMSПроверкиПравилаОперацииСкладское состояниеЖурнал операцийОчередь событий1СERPАналитика

Такая схема позволяет полностью отделить физическое действие сотрудника от последующей тяжелой обработки данных.

 

 

ФИЛОСОФИЯ АВТОМАТИЗАЦИИ // ARCHITECTURAL_BALANCING

Скорость важна, но ещё важнее правильность

На складе часто говорят:

«Нам нужно, чтобы сканирование происходило мгновенно».

Это действительно важно.

Но ещё важнее, чтобы за эти 300 миллисекунд система не записала неправильную операцию.

Поэтому хорошая складская автоматизация оптимизирует сразу несколько параметров:

Скорость
+
Надёжность
+
Контроль
+
Трассируемость
+
Понятный интерфейс
Окно транзакции~ 300 мсСлой верификации:Защита от ошибочной записи

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

 

 

ПРОЕКТИРОВАНИЕ // PRE_DEVELOPMENT_CHECKLIST

Что стоит проектировать заранее

Перед разработкой ТСД-интерфейса полезно ответить хотя бы на следующие вопросы:

// ДАННЫЕ И УЧЕТ //

Что является идентификатором товара?

Может ли один товар иметь несколько штрихкодов?

Учитываются ли партии?

Нужны ли серийные номера?

// БИЗНЕС-ЛОГИКА //

Как определяется текущая операция?

Где находится источник истины по остаткам?

Кто имеет право выполнять конкретное действие?

// ИСКЛЮЧИТЕЛЬНЫЕ СЦЕНАРИИ //

Может ли сотрудник работать без связи?

Что происходит при повторном сканировании?

Как система защищается от дублей?

Что происходит при сбое интеграции?

// ТРАССИРУЕМОСТЬ //

Какие операции можно отменять?

Где хранится история?

Как восстанавливается состояние после ошибки?

Если эти вопросы не определены заранее, проблемы почти неизбежно появятся уже на работающем складе.

 

 

ФИЛОСОФИЯ ПРОЕКТИРОВАНИЯ // UX_SIMPLICITY_PARADOX

Почему хороший ТСД-интерфейс кажется простым

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

// ОПЕРАТОРУ НЕ НУЖНО ВИДЕТЬ //
API
/
Очереди
/
WMS
/
ERP
/
Идемпотентность
/
Транзакции
/
Синхронизацию
// ОН ДОЛЖЕН ВИДЕТЬ //

Отсканируйте товар

✓ Товар принят

Следующий товар

Вся техническая сложность должна находиться там, где ей место — внутри архитектуры.

 

 

ИТОГ ГЛАВЫ // GLOBAL_WMS_SYSTEM_SUMMARY

Итог

Сканирование товара — это не просто считывание штрихкода.

Это команда системе выполнить конкретную складскую операцию.

После получения кода необходимо определить контекст, проверить сотрудника, товар, задание, ячейку, количество и другие ограничения. Затем операция фиксируется, изменяется состояние склада, записывается история и при необходимости запускается обмен с 1С, ERP или другими системами.

В упрощённом виде путь выглядит так:

ШтрихкодТСДAPIПроверкиWMS / учётная системаФиксация операцииИзменение состояния складаИнтеграцииПодтверждение сотруднику

Именно поэтому хороший ТСД-интерфейс выглядит простым.

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

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

 

 

НАВИГАЦИЯ // SUGGESTED_READING
 
[ Модуль // ИНТЕГРАЦИИ ]

API, Webhook или очередь сообщений?

 
[ Модуль // ИНТЕГРАЦИИ ]

Когда API есть, а интеграция всё равно не работает

 
[ Модуль // АВТОМАТИЗАЦИЯ ]

Как соединить производство и корпоративные системы

 
[ EXPERTISE JOURNAL ]

Все инженерные материалы и экспертные статьи

 
[ CORE GLOSSARY ]

Полный алфавитный справочник ИТ-терминов

 

[ DIRECT EMAIL LINE ]
info@log-ai.ru

 

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

Сайт носит исключительно информационный характер и не является публичной офертой в соответствии со статьёй 437 Гражданского кодекса РФ. Цены, состав и условия предоставления услуг уточняются при проектировании решения и фиксируются в договоре. Условия технического сопровождения и уровень сервиса могут дополнительно определяться отдельным соглашением (SLA).

© 2026 Log-AI Москва
Автоматизация бизнеса и ИИ-решения под ключ
Самозанятый Скопец Антон Викторович ИНН 741709260870
Политика конфиденциальности Пользовательское соглашение
AI Ассистент
×