Розробка мобільного додатку для проведення інвентаризації
Інвентаризація в традиційному розумінні — це друковані бланки, ручний перерахунок та звірка з 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 тижнів. Вартість розраховується індивідуально.







