Разработка мобильного приложения для проведения инвентаризации
Инвентаризация в традиционном понимании — это распечатанные бланки, ручная пересчёт и сверка с 1С вечером. Мобильное приложение с поддержкой сканирования меняет процесс: сотрудник сканирует штрихкод или QR, приложение сразу сопоставляет с учётной системой, расхождения фиксируются в момент сканирования. Задача звучит прямолинейно, но детали реализации определяют, насколько быстро проходит реальная инвентаризация.
Сканирование: встроенная камера vs аппаратный сканер
Встроенная камера — самое доступное решение. ML Kit Barcode Scanning (Android/iOS) через CameraX или AVFoundation декодирует EAN-13, EAN-8, Code 128, Code 39, QR и ещё десяток форматов. Работает без сети. Задержка распознавания на современных телефонах — 100-200 мс.
Но есть кейсы, где камера не тянет: склад с плохим освещением, повреждённые этикетки, требование сканировать не поднимая товар (дальнее считывание). Здесь нужны bluetooth-сканеры (Zebra CS60, Honeywell 1950g, Newland BS80) или промышленные ТСД (Zebra TC21/TC26, Honeywell CT30). Они подключаются как HID-клавиатура или через SDK производителя.
// Android: интеграция Zebra DataWedge через Intent
class ZebraDataWedgeManager(private val context: Context) {
private val DATAWEDGE_ACTION = "com.symbol.datawedge.api.ACTION"
private val SCAN_ACTION = "com.symbol.datawedge.data_string"
fun registerScanReceiver(onScan: (String) -> Unit): BroadcastReceiver {
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == SCAN_ACTION) {
val barcode = intent.getStringExtra("com.symbol.datawedge.data_string") ?: return
onScan(barcode)
}
}
}
context.registerReceiver(receiver, IntentFilter(SCAN_ACTION))
return receiver
}
}
Honeywell ТСД используют аналогичный broadcast-механизм через DataCollection SDK. Для универсального решения — абстракция BarcodeScanner с реализациями: CameraBarcodeScanner, ZebraBarcodeScanner, HoneywellBarcodeScanner. Конфигурация выбирается при запуске по типу устройства.
Архитектура: офлайн-first обязательна
Склад — это зона с нестабильным Wi-Fi. Некоторые зоны вообще без покрытия. Приложение должно работать полностью офлайн: загрузить список инвентаризации перед началом, фиксировать сканирования локально, синхронизировать при восстановлении соединения.
@Entity(tableName = "inventory_items")
data class InventoryItem(
@PrimaryKey val sku: String,
val name: String,
val expectedQuantity: Int,
val unit: String,
val location: String,
)
@Entity(tableName = "scan_records")
data class ScanRecord(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val sku: String,
val scannedQuantity: Int,
val scannedAt: Long = System.currentTimeMillis(),
val syncStatus: SyncStatus = SyncStatus.PENDING,
val userId: String,
)
enum class SyncStatus { PENDING, SYNCED, CONFLICT }
WorkManager запускает синхронизацию при появлении сети — NetworkType.CONNECTED constraint. При конфликте (другой сотрудник отсканировал тот же SKU) — сервер возвращает конфликт, приложение показывает оба значения и просит разрешить вручную.
Поиск по серийному номеру и ручной ввод
Не у каждого товара есть читаемый штрихкод. Ручной ввод SKU с автодополнением из локальной базы — обязательная функция. Список SKU загружается заранее в FTS4/FTS5 таблицу Room для быстрого полнотекстового поиска по наименованию.
Серийные номера — отдельная история. Позиция может требовать сканирования каждого экземпляра поштучно (ноутбуки, принтеры, инструменты). Режим «серийный учёт»: приложение ждёт N сканирований серийных номеров для одной позиции, показывает прогресс 3/10 серийных номеров введено.
Отчёт о расхождениях
После завершения инвентаризации — отчёт о расхождениях: какие позиции не нашли, какие излишки, где факт не совпал с планом. Формируется локально, отправляется на сервер или экспортируется в PDF через PdfDocument API (Android) / PDFKit (iOS).
Интеграция с 1С через REST API (HTTP-сервис 1С) или через промежуточный сервис. Формат обмена — JSON или XML по договорённости с 1С-разработчиком. Загрузка документа инвентаризации обратно в 1С — стандартный финальный шаг.
Разработка мобильного приложения для инвентаризации с офлайн-работой, Camera ML Kit и экспортом отчётов: 5-7 недель. С поддержкой ТСД Zebra/Honeywell, серийным учётом и двусторонней интеграцией с 1С: 10-14 недель. Стоимость рассчитывается индивидуально.







