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

Зачем вообще вести учет по серийным номерам
Когда серийники живут в Excel, в чатах и на бумаге, проблемы появляются тихо: один и тот же номер записывают по-разному, файл становится «единственной правдой» у одного сотрудника, а правки делаются без следа. В итоге вы тратите время не на склад и сервис, а на поиск виноватого и восстановление фактов.
Учет по серийному номеру - это учет каждой конкретной единицы товара, а не партии. Две одинаковые коробки одного артикула могут иметь разную судьбу: одну продали, вторую отправили в ремонт, третью переместили в другой город. Если вы ведете только «количество по складу», то гарантия, возвраты и разбор потерь превращаются в гадание.
Хорошее решение должно отвечать на простые, но критичные вопросы:
- где сейчас находится конкретная единица товара
- кто и когда принял ее на приемке
- через какие перемещения она прошла
- была ли она в ремонте и что делали
- когда и кому ее продали или выдали
Роли в процессе обычно смешанные: склад фиксирует приемку и перемещения, продажи отмечают выдачу клиенту, сервис ведет диагностику и ремонт по той же единице, а администратор настраивает справочники, права и правила ввода.
Пример из практики: клиент приносит устройство по гарантии и называет серийный номер. Если учет ведется «в табличке», часто виден только факт продажи, но не видно, что эта же единица неделю назад уже была в ремонте, а до продажи лежала на другом складе. Учет по серийному номеру дает единую историю и снижает споры между складом, магазином и сервисом.
Какие операции движения стоит заложить сразу
Серийный номер «живет» не в таблице, а в цепочке событий. Если с самого начала описать базовые движения, потом проще добавить поиск, сканирование и понятную историю по каждой единице. Важнее всего фиксировать три вещи: где сейчас находится единица, кто сделал действие и по какому основанию.
Минимальный набор операций лучше оформить как типы событий, а не как набор разрозненных полей. Тогда любая единица товара всегда имеет читаемую хронологию.
Чаще всего с первого дня нужны:
- приемка: создание единиц товара по серийникам с привязкой к партии и документу (накладная, акт)
- перемещение: смена локации (склад, магазин, сервис, курьер, клиент) с указанием откуда и куда
- выдача или продажа: фиксация, кому передали (контрагент, покупатель, сотрудник) и по какому документу
- возврат: обратное движение с причиной (ошибка комплектации, брак, отказ) и состоянием товара
- гарантия или ремонт: регистрация обращения и шагов по нему (принят в сервис, диагностика, ремонт, выдача)
Чтобы данные не спорили друг с другом, у каждого события держите короткий, но обязательный набор полей: дата и время, пользователь, локации, документ-основание, комментарий. Для возврата и ремонта добавьте причину и результат.
Пример: смартфон приняли на центральный склад, переместили в магазин, продали клиенту по чеку. Через месяц клиент пришел по гарантии. Если продажа и гарантийное обращение оформлены как события по одному серийнику, сервис сразу видит дату покупки, путь товара и того, кто выдавал. Это экономит время и убирает споры.
Как разложить данные: товар, единица, локация, событие
Чтобы учет серийников не превратился в хаос, разделите данные на четыре сущности. Тогда любые операции (приемка, перемещение, выдача в сервис, возврат) складываются в одну понятную историю.
Карточка товара (номенклатура) описывает модель: название, бренд, артикул, гарантийный срок, штрихкод модели. Здесь нет конкретного серийного номера.
Карточка единицы товара - конкретный экземпляр с серийником. У нее должна быть связь с номенклатурой, собственный серийный номер, текущая локация и состояние (например, на складе, продано, в сервисе). Такой подход убирает дублирование.
Локации лучше хранить отдельным справочником. Это не только склады: добавьте магазин, зону приемки, сервисный участок, карантин для брака. Тогда перемещение - это просто смена «откуда» и «куда».
События движения - ключ к прозрачности. Документы удобны, если у вас пачки товаров и печатные формы. Для MVP проще события: каждое действие над единицей - отдельная запись, из них легко собрать историю.
Минимальный набор полей для события движения:
- дата и время
- тип (приемка, перемещение, продажа, выдача в сервис, возврат)
- откуда и куда (локации)
- пользователь (кто сделал)
- комментарий (например, «замена по гарантии»)
Пример: на приемке вы создаете единицу с серийником и событие «приемка» в локацию «Склад 1». При отправке в сервис добавляется событие «перемещение» из «Склад 1» в «Сервис», а текущая локация единицы обновляется вместе с записью события.
Уникальность серийников: правила и проверки
Серийный номер ценен только тогда, когда он однозначно указывает на одну конкретную единицу товара. Сразу решите, где вы гарантируете уникальность: глобально по всей базе или в рамках бренда, модели, партии, поставщика. Для сервиса и гарантии чаще выигрывает глобальная уникальность. Если у производителей пересекаются форматы, иногда разумнее уникальность по паре (бренд + серийник) или (модель + серийник).
Проверки нужны в двух местах. На уровне базы данных ставьте ограничение unique, чтобы система не приняла дубль даже при одновременной работе нескольких сотрудников. В интерфейсе делайте быструю проверку до сохранения, чтобы человек сразу видел ошибку.
Нормализация ввода
Большая часть дублей возникает из-за мелочей. Перед проверкой приводите серийник к единому виду:
- обрезайте пробелы и скрытые символы
- приводите к верхнему регистру
- обрабатывайте похожие символы по правилу (например, O и 0) или просите подтверждение
- запрещайте недопустимые знаки и слишком короткие значения
Отдельный случай - товар без маркировки. Тогда выдавайте временный номер (например, TMP-2026-000123) с пометкой, что это не заводской серийник. Когда настоящий серийник появится, делайте замену отдельной операцией, чтобы история сохранилась.
Что делать с дублями
Если дубль все же найден (например, поставщик наклеил одинаковые стикеры), не удаляйте записи молча. Помечайте экземпляр статусом «спорный», запускайте проверку и фиксируйте правки в журнале: кто, когда и на что заменил. Так склад и сервис видят факты, а не «подчищенную» базу.
Логика движения: статусы, отмены и ответственность
Чтобы учет работал без споров, у каждой единицы с серийным номером должна быть понятная «жизнь» от приемки до списания. Проще всего задавать это через события движения и текущий статус, который видно в карточке единицы.
Базовые статусы лучше согласовать заранее и не плодить десятки вариантов. Часто хватает таких:
- на складе
- в пути
- у клиента
- в ремонте
- списано
Важно определить источник правды. Самый надежный вариант - журнал событий (последнее событие определяет текущее состояние). Поля «текущий статус» и «текущая локация» можно хранить для скорости, но обновляйте их строго вместе с событием, иначе появятся расхождения.
Отмены и исправления делайте через обратное событие, а не через удаление. Удалили перемещение - потеряли причину, время и автора. Правильнее: если ошибочно отправили единицу «в пути», создайте событие «возврат на склад» или «отмена отправки» со ссылкой на исходную операцию и комментарием.
Ответственность держится на правах доступа и аудите. Разделите роли так, чтобы ошибки не превращались в хаос:
- кладовщик: приемка и перемещения
- сервис: перевод в «в ремонте» и обратно
- менеджер: выдача клиенту и возвраты
- администратор: корректировки с обязательным комментарием
В каждой операции фиксируйте: кто сделал, когда, откуда и куда, по какому документу или причине. Тогда в спорной ситуации видна цепочка действий, а не «последняя правка».
Пошагово: собираем MVP учета серийников
MVP стоит собирать так, чтобы он закрывал ежедневные операции, а не был «заготовкой на будущее». Для старта достаточно, чтобы система уверенно проводила приемку и показывала, где сейчас находится каждая единица товара.
Начните с процесса, а не с таблиц: что люди делают каждый день и где чаще всего ошибаются.
- Опишите роли (кладовщик, менеджер магазина, сервис) и 5-7 сценариев: приемка, перемещение, выдача клиенту, возврат, ремонт.
- Согласуйте правила ввода: где берется серийник (наклейка, коробка, документ), когда нужен сканер, кто имеет право исправлять ошибку.
- Набросайте 4 экрана: приемка, перемещение, поиск, карточка единицы.
Дальше переходите к данным и проверкам. На этом этапе важнее понятные поля и защита от ошибок, чем «красивые отчеты».
- Создайте справочники: номенклатура, единицы (серийники), локации, события.
- Соберите формы и валидации: обязательные поля, уникальность серийника (с понятной подсказкой, почему не проходит).
- Прогоните тест на 20-50 реальных серийниках и поправьте поля (обычно всплывают партия, состояние, комментарий).
- Добавьте права доступа и один простой отчет: остатки по локациям и «что в ремонте».
Пример: вы приняли 30 смартфонов, у 2 серийники введены с ошибкой. MVP должен остановить дубль, показать последнюю локацию и дать понятный путь исправления по роли.
Поиск и фильтры: чтобы находить единицу за секунды
Если в системе есть серийники, поиск должен быть быстрым и терпимым к ошибкам. Начните с поля поиска, которое понимает частичный ввод и ведет в карточку единицы.
Сделайте подсказки: пользователь вводит первые 3-6 символов, видит 5-10 совпадений и выбирает нужное. В подсказке показывайте не только серийник, но и модель, текущую локацию и статус, чтобы не открывать лишние карточки.
Чтобы оператор не застревал из-за опечаток, добавьте простые правила: игнор пробелов и дефисов, единый регистр, предупреждение при слишком коротком запросе. Если серийник не найден, покажите похожие варианты и подсказку, где обычно путают 0 и O, 1 и I.
Фильтры держите рядом и делайте их короткими:
- локация (склад, магазин, сервис)
- статус (в наличии, в пути, выдан, в ремонте)
- модель или SKU
- дата последнего события (сегодня, неделя, период)
Из результатов поиска добавьте быстрые действия, но только безопасные: переместить, выдать клиенту, принять в ремонт. Перед подтверждением показывайте краткое резюме: что за единица, откуда и куда, кто выполняет операцию.
Для скорости храните серийник в отдельном поле и делайте индекс по нему. Для выборок по «свежести» помогает индекс по времени последнего события.
Сканирование штрихкода или QR: быстрый ввод без ошибок
Сканирование убирает главный источник ошибок - ручной ввод. Оператор сканирует код, а система находит единицу, проверяет правила и сразу показывает, что делать дальше.
Два способа сканировать
На складе чаще всего удобен USB-сканер: он работает как клавиатура (текст + Enter). Второй вариант - камера телефона: полезна в магазине, сервисе и в пути, когда нет рабочего места.
Сканирование обычно встраивают в операции, где важна скорость:
- приемка поставки
- перемещение между локациями
- выдача клиенту
- прием в ремонт и возврат из ремонта
Проверки и пакетный режим
После каждого скана нужны простые проверки: найдено ли устройство, нет ли дубля, подходит ли статус. Например, если серийник уже «выдан клиенту», его нельзя принять как «на складе» без операции возврата.
Для приемки и инвентаризации полезен пакетный режим: оператор сканирует 10-100 серийников в список, видит подсветку ошибок, а затем подтверждает одним действием. Это снижает количество отмен и спорных ситуаций.
Тексты в интерфейсе делайте короткими и однозначными:
- «Серийник найден: добавлен в список»
- «Не найден. Проверьте код или создайте единицу»
- «Дубль: уже есть в списке»
- «Нельзя принять: статус “выдан”»
- «Готово: 37 серийников подтверждены»
История по серийнику: прозрачность для склада и сервиса
Когда у каждой единицы есть серийный номер, главный вопрос звучит просто: где она сейчас и что с ней происходило. Хорошая история по серийнику снимает споры между складом, магазином и сервисом и экономит часы на поиске.
Карточка единицы должна открываться быстро по вводу или скану серийника. В ней держите самое важное: модель/артикул, серийный номер, текущую локацию, текущий статус и дату приемки. Этого достаточно, чтобы сотрудник сразу понял ситуацию.
Дальше решает лента событий: последовательность фактов - что сделали, когда, кто сделал и куда переместили. Обычно это таблица с датой, типом события и короткой заметкой.
Чтобы история была полезной уже в MVP, держите фиксированный набор событий:
- приемка (поставщик, склад)
- перемещение (откуда и куда)
- выдача (клиенту, в магазин, сотруднику)
- возврат (причина)
- сервисное обращение (принято, диагностика, результат)
Документы можно привязывать без сложной интеграции: на первом этапе хватит текстовых полей «накладная №», «заказ №», «акт №». Важно, чтобы это было именно в событии - тогда поиск по номеру документа сразу покажет нужные серийники.
Отдельный блок - гарантия. Храните дату начала, срок, обращения и итог: ремонт, замена, отказ. Пример: клиент приносит устройство в сервис, менеджер вводит серийник и быстро видит, что товар уже ремонтировали месяц назад.
Частые ошибки и ловушки в учете серийных номеров
Главная беда - когда система позволяет «поправить» прошлое так, что след исчезает. Если кладовщик удалил приемку или перемещение, вы теряете ответ на простой вопрос: где была единица товара вчера и почему она оказалась в сервисе сегодня. Делайте обратные операции (отмена/возврат), чтобы история оставалась цельной.
Вторая проблема - дубли из-за грязного ввода. Серийник вводят с пробелами, разным регистром, с дефисом или без, путают похожие символы. Без нормализации и проверки уникальности вы быстро получите «две одинаковые» единицы.
Еще одна ловушка - слишком сложные формы на старте. Когда приемка просит 20 полей, люди начинают писать серийники «в комментарии» или вообще пропускать. Так партия и единица смешиваются, и серийник перестает быть ключом учета.
Что чаще всего ломает доверие к системе:
- удаление записей вместо отмены события
- хранение серийника в примечании к приемке, а не в карточке единицы
- отсутствие ролей, логов и автора изменения локации
- одинаковые права у всех
- запуск без прогона на реальных данных и исключениях
Пример: в первый день выясняется, что часть серийников короче, чем вы ожидали, а часть содержит буквы. Если валидация слишком жесткая, приемка встанет. Если слишком мягкая, появятся дубли.
Короткий чеклист перед запуском в работу
Перед тем как отдавать учет серийных номеров в реальную смену, проверьте это на тестовых данных. Лучше потратить час сейчас, чем разбираться с «пропавшими» единицами и спорными гарантиями потом.
Уникальность серийника должна ловиться в двух местах: в форме ввода (чтобы оператор сразу видел ошибку) и в базе (чтобы не появилось дублей при одновременной работе). Отдельно проверьте, что формат серийника не «ломается» пробелами, разным регистром и похожими символами.
Сканирование должно покрывать ключевые операции. Если приемка и перемещение все равно требуют ручного ввода, в полях быстро появятся опечатки. В идеале оператор сканирует код, выбирает действие и подтверждает, а система подставляет данные и проверяет правила.
Карточка единицы товара должна быть короткой и полезной: текущая локация, последняя операция, кто сделал и когда. Это то, что менеджер и сервис должны видеть за секунды.
История по серийнику должна быть «непереписываемой». Ошибки допускаются, но исправляются новой операцией (отменой или корректировкой), а не правкой старого события без следа.
Проверьте роли и права:
- оператор: приемка, перемещение, выдача в ремонт
- менеджер: подтверждение спорных операций, просмотр отчетов
- админ: справочники, роли, настройки
И продумайте откат. Если случилась ошибочная массовая операция, нужен понятный план: снимок данных перед изменением, возможность откатиться и журнал, где видно, что именно было отменено и кем.
Пример сценария: склад, магазин и сервис на одной системе
Представьте поставку на склад: 30 одинаковых устройств, но у каждого свой серийный номер. Из них 20 планируются в магазин, 10 сразу уедут в сервисный центр на предпродажную проверку. Здесь хорошо видно, зачем нужен учет по серийникам: одна и та же единица должна быть узнаваема в любой точке цепочки.
Приемка выглядит так: кладовщик сканирует штрихкод или QR на коробке, система создает запись единицы (серийник + модель), привязывает ее к поставке и фиксирует первое событие. Если часть серийников пришла списком, их можно добавить вручную, но скан почти всегда быстрее и без ошибок.
Дальше оформляется перемещение в сервис. Удобно делать это пакетно: сотрудник сканирует подряд 10 единиц, проверяет список и подтверждает. В истории каждой единицы появляется событие «перемещение», а ответственность становится понятной: кто отдал, кто принял, когда и куда.
Через неделю покупатель приносит устройство по гарантии. Сервисник вводит или сканирует серийный номер, быстро видит всю цепочку (поставка - склад - сервис - магазин - продажа) и открывает обращение прямо из карточки единицы.
Типичная ошибка: один серийник отсканировали дважды на приемке. Система должна остановить это сразу:
- при повторном скане показать предупреждение
- подсветить конфликт и не дать закрыть приемку
- предложить действие: «это тот же товар» или «ввести другой серийник»
Так учет не «разъезжается», а каждая единица остается уникальной и проверяемой.
Следующие шаги: как быстрее собрать решение через TakProsto
Если хочется быстрее перейти от идеи к рабочему инструменту, начните с набора экранов, который нужен людям на смене. Для учета серийных номеров обычно хватает 5-7 основных страниц, а остальное добавляется по мере реального использования.
Быстрый план на 1 неделю
Соберите короткий список ежедневных действий и превратите его в экраны и поля:
- приемка: товар, серийный номер, дата, поставщик, документ, локация
- перемещение: откуда, куда, кто, основание, комментарий
- гарантия/сервис: статус, причина, сроки, результат, акт
- поиск: строка поиска, фильтры, быстрые действия
- карточка единицы: текущая локация, статус, история событий
Дальше делайте MVP: пусть сначала проходят приемка и поиск, и только потом добавляйте сложные сценарии (частичные возвраты, разукомплектацию, спорные операции). Так быстро станет видно, какие поля реально заполняют, а какие только мешают.
Как использовать TakProsto на практике
В TakProsto удобно ставить задачи через чат: описываете экран и правила простыми словами, а дальше итеративно добавляете формы, поиск, историю событий и роли доступа. Если в процессе выяснится, что нужна новая проверка (например, запрет дублей серийников в рамках бренда или партии), правило можно уточнить и сразу встроить в логику.
Дальше все упирается в дисциплину ввода: договоритесь о едином формате серийников (регистр, пробелы, дефисы) и обучите операторов за 1-2 смены. Когда базовые процессы закрепятся, развитие идет проще: добавляете отчеты, печать, расширенные сценарии сервиса.
Если вы собираете такое приложение на платформе TakProsto (takprosto.ai), можно начать с MVP, а затем по мере роста проекта продолжать развивать его в том же контуре, выгрузить исходники или развернуть с вашим доменом и хостингом - в зависимости от того, как удобнее вашей команде работать дальше.
FAQ
Когда реально нужен учет по серийным номерам, а не просто учет по количеству?
Учет по серийным номерам нужен, когда важно знать судьбу каждой единицы товара, а не только общий остаток по артикулу. Он помогает быстро отвечать на вопросы про гарантию, возвраты, ремонт и перемещения без «поиска виноватого» в таблицах.
Какие операции движения стоит заложить в MVP в первую очередь?
Начните с пяти событий: приемка, перемещение, выдача/продажа, возврат, ремонт/гарантия. Этого хватает, чтобы видеть текущую локацию и полную цепочку действий по каждому серийнику.
Как правильно разложить данные, чтобы учет не превратился в хаос?
Разделите данные на номенклатуру (модель), единицу товара (конкретный серийник), локации (склад, магазин, сервис) и события (журнал движений). Тогда вы не смешиваете «модель» и «экземпляр», а история собирается автоматически из событий.
Какой уровень уникальности серийников выбрать: по базе или по бренду/модели?
По умолчанию выбирайте глобальную уникальность серийного номера по всей базе. Если форматы пересекаются у разных брендов, используйте правило уникальности по паре вроде «бренд + серийник», но фиксируйте это сразу и одинаково во всех операциях.
Где проверять дубли серийников: в интерфейсе или в базе?
Ставьте ограничение unique в базе данных, чтобы дубль не прошел даже при одновременной работе нескольких людей. Параллельно делайте быструю проверку в форме до сохранения, чтобы оператор видел понятную ошибку сразу.
Как снизить ошибки при ручном вводе серийника?
Нормализуйте ввод: убирайте пробелы и скрытые символы, приводите к верхнему регистру, одинаково обрабатывайте дефисы, и аккуратно работайте с похожими символами вроде O/0 и I/1. Это резко снижает количество «ложных дублей» и ошибок на приемке.
Как правильно делать отмены и исправления, чтобы не ломать историю?
Не удаляйте старые записи и не переписывайте прошлое. Делайте исправления через обратное событие (например, «отмена перемещения» или «возврат на склад») с комментарием и автором, чтобы история оставалась целой и проверяемой.
Какие статусы единицы товара лучше использовать на старте?
Стартовый набор статусов можно держать коротким: на складе, в пути, у клиента, в ремонте, списано. Источником правды лучше считать журнал событий, а текущий статус и текущую локацию хранить как «кэш» для скорости, обновляя их строго вместе с новым событием.
Как сделать поиск по серийнику быстрым и удобным для операторов?
Самый быстрый путь — поиск по серийнику с частичным вводом и подсказками, где видно модель, текущую локацию и статус. Добавьте терпимость к пробелам/дефисам и единый регистр, а также фильтры по локации, статусу и дате последнего события.
Что выбрать для сканирования: USB-сканер или камеру телефона, и где это важнее?
USB-сканер удобен на складе, потому что работает как клавиатура, а камера телефона полезна в магазине и сервисе. Встраивайте сканирование в приемку, перемещения и сервис, добавляйте проверки статуса и пакетный режим, чтобы можно было сканировать десятки серийников и подтверждать одним действием.