Aplikacja magazynowa Android zastępuje papierową listę kompletacyjną i ręczne przepisywanie dokumentów w biurze. Operator skanuje etykietę palety albo lokalizacji, a serwer WMS od razu księguje ruch w bazie. Między zdarzeniem na hali a zapisem w ewidencji nie ma opóźnienia, więc stany magazynowe w systemie odpowiadają temu, co stoi na regale.

Studio WMS.net działa na terminalach przemysłowych takich producentów jak Zebra czy Honeywell, a także na standardowych smartfonach z Androidem. Wybór urządzenia zmienia wygodę pracy i koszt floty, ale nie zmienia logiki procesu. Ten artykuł opisuje mechanizmy po stronie urządzenia: sposób odczytu kodu, pracę bez zasięgu, inwentaryzację na terminalu oraz administrację flotą.

Jak działa aplikacja magazynowa na urządzeniu mobilnym

Aplikacja mobilna jest klientem serwera WMS. Urządzenie nie przechowuje pełnej bazy magazynu, tylko bieżące zadanie operatora i słowniki potrzebne do jego wykonania. Każdy skan trafia do serwera jako żądanie przez interfejs REST, a serwer wykonuje transakcję w bazie SQL Server i zwraca wynik: potwierdzenie albo komunikat o błędzie.

Taki podział ma konkretny skutek. Walidacja, czy paleta może trafić do wskazanej lokalizacji, odbywa się w jednym miejscu, na serwerze. Nowa wersja reguły działa od razu na wszystkich terminalach, bez aktualizacji aplikacji na urządzeniach. Terminal odpowiada za odczyt kodu i czytelne pokazanie wyniku.

Krok operacjiUrządzenie AndroidSerwer WMS
Pobranie zadaniawyświetla lokalizację i indeks do pobraniaprzydziela zadanie z kolejki według priorytetu
Skan lokalizacjiwysyła odczytany kodsprawdza zgodność z adresem zadania
Skan towaru i ilośćwysyła kod towaru oraz wpisaną ilośćksięguje ruch w jednej transakcji i blokuje wiersz stanu
Potwierdzeniepokazuje wynik i kolejne zadanieaktualizuje stan i historię operacji

Przy kilkudziesięciu terminalach pracujących równocześnie serwer musi pilnować, żeby dwóch operatorów nie pobrało tego samego towaru. Mechanizm blokowania lokalizacji rezerwuje pozycję dla jednego zadania, zanim trafi ona na ekran. Szczegóły doboru lokalizacji w magazynie z regałami wielopoziomowymi opisuje artykuł aplikacja dla magazynów wysokiego składowania.

Operator loguje się na terminalu własnym kontem, najczęściej skanem identyfikatora z kodem QR zamiast wpisywania hasła na małej klawiaturze. Serwer przypisuje sesję do urządzenia i do pracownika, więc historia operacji pokazuje, kto i na którym terminalu zaksięgował dany ruch. Uprawnienia działają po stronie serwera: magazynier bez prawa korekty stanów nie zobaczy tej funkcji w menu, a próba wywołania jej bezpośrednio zakończy się odmową.

Skanowanie kodów kreskowych w systemie Android

Aplikacja odczytuje kody jednowymiarowe EAN-13 oraz Code 128 wraz z odmianą GS1-128, a także kody dwuwymiarowe DataMatrix oraz QR. Operator nie wpisuje numerów ręcznie. Każdy nośnik i każda lokalizacja są identyfikowane skanem. Etykiety logistyczne z numerem SSCC opisuje szerzej tekst o tym, jak jest zbudowana etykieta GS1.

SymbologiaTypowe zastosowanie w magazynieWymagany skaner
EAN-13jednostka handlowa, produkt na półcedowolny, także aparat telefonu
Code 128etykiety lokalizacji, numery dokumentów wewnętrznychdowolny
GS1-128etykieta palety z SSCC i datą ważnościdowolny, parser identyfikatorów zastosowania po stronie aplikacji
DataMatrixoznaczenia małych części i opakowań lekówimager 2D albo aparat
QRetykiety wewnętrzne i identyfikatory pracownikówimager 2D albo aparat

Na terminalach przemysłowych skan trafia do aplikacji na dwa sposoby. Pierwszy to tryb keyboard wedge: oprogramowanie skanera wpisuje odczytany kod jak klawiatura do aktywnego pola. Drugi to komunikat systemowy Android (intent), w którym aplikacja dostaje treść kodu oraz nazwę symbologii.

Kod GS1-128 na etykiecie palety niesie kilka danych naraz, każdą poprzedzoną identyfikatorem zastosowania (AI). Identyfikator (00) oznacza 18-cyfrowy numer SSCC, (10) numer partii, a (17) datę ważności w formacie RRMMDD. Aplikacja rozbija odczyt na pola i przy przyjęciu wypełnia je bez udziału operatora. Pola o zmiennej długości, takie jak numer partii, kończy separator FNC1, dlatego sposób przekazania skanu do aplikacji ma znaczenie.

  • Keyboard wedge - działa bez zmian w kodzie aplikacji, ale wymaga aktywnego pola tekstowego i gubi znaki sterujące, np. separator FNC1 w kodach GS1-128.
  • Intent - aplikacja odbiera skan niezależnie od fokusu i zna typ kodu, więc potrafi odróżnić skan lokalizacji od skanu towaru bez dodatkowych prefiksów.
Przemysłowy terminal z klawiaturą numeryczną i ekranem aplikacji magazynowej na tle regałów z kartonami
Terminal z wbudowanym skanerem odczytuje kod z ekranu zadania bez celowania aparatem. Ilustracja dotyczy kroku skanu lokalizacji i towaru.

Zwykły telefon czy terminal przemysłowy

Aplikacja magazynowa na telefon ma sens tam, gdzie skanów jest niewiele: w małym magazynie sklepu, w serwisie albo przy sporadycznym przyjęciu dostawy. Aparat smartfona odczytuje kody 1D i 2D, ale wymaga celowania oraz dobrego światła. Każdy odczyt zajmuje chwilę na ustawienie ostrości. Przy kilkuset skanach na zmianę te sekundy sumują się w realny czas pracy.

Terminal przemysłowy ma wbudowany skaner uruchamiany fizycznym spustem oraz obudowę odporną na upadki. Baterię wymienia się w trakcie zmiany, bez wyłączania aplikacji. Producenci takich urządzeń deklarują też dłuższe wsparcie aktualizacjami bezpieczeństwa niż w przypadku telefonów konsumenckich. Zasady doboru modeli opisuje materiał kolektor danych Android WMS, a ofertę urządzeń z aplikacją pokazuje strona kolektor danych Android w Studio WMS.net.

KryteriumSmartfon z AndroidemTerminal przemysłowy
Odczyt koduaparat z ręcznym celowaniemskaner 2D na spuście, odczyt z odległości i pod kątem
Wytrzymałośćetui ochronne, ekran wrażliwy na upadkiobudowa o podwyższonej klasie szczelności i odporności na upadki
Zasilanieładowanie po zmianiebateria wymienna, stacje dokujące
Obsługa w rękawicachograniczonaekran z trybem rękawic, klawisze fizyczne
Koszt jednostkowyniskiwielokrotnie wyższy

Reguła: telefon do sporadycznych operacji, terminal do pracy zmianowej. Granicą jest liczba skanów na godzinę, a nie wielkość magazynu.

Oba rodzaje urządzeń mogą pracować w jednym magazynie. Kierownik zmiany zatwierdza przyjęcia na telefonie, a kompletujący pracują na terminalach. Aplikacja jest ta sama, różni się tylko sposób odczytu kodu. Porównanie konkretnych konfiguracji sprzętowych zawiera artykuł o tym, jak przebiega dobór urządzeń dla aplikacji magazynowej Android.

Pracownica magazynu w kurtce roboczej trzyma kompaktowy terminal mobilny z wykresem na ekranie
Kompaktowy terminal łączy format telefonu z wbudowanym skanerem. Ilustracja odnosi się do wyboru między smartfonem a urządzeniem przemysłowym.

Inwentaryzacja na terminalu z systemem Android

Aplikacja do inwentaryzacji Android zmienia spis z natury z akcji papierowej w serię krótkich zadań. Operator otwiera zadanie spisu dla strefy, skanuje etykietę lokalizacji, potem kolejne towary, i wpisuje ilość. Po zamknięciu lokalizacji wynik trafia na serwer, który porównuje go ze stanem ewidencyjnym.

W spisie ślepym terminal nie pokazuje ilości z bazy. Operator liczy to, co widzi, a nie potwierdza liczby z ekranu. Różnice powyżej ustalonego progu wracają jako zadanie ponownego liczenia dla innego pracownika. Dopiero drugi zgodny wynik zatwierdza korektę.

Terminal Android pozwala prowadzić inwentaryzację ciągłą bez zamykania magazynu. System blokuje liczoną lokalizację tylko na czas spisu i przekierowuje w tym czasie zadania kompletacji. Metodykę takiego spisu opisuje tekst inwentaryzacja ciągła w magazynie, a przegląd narzędzi do spisu zawiera artykuł program do inwentaryzacji.

Pracownicy magazynu w kaskach i kurtkach odblaskowych z tabletami i terminalami między regałami podczas spisu
Kilku operatorów liczy równolegle różne strefy, a serwer pilnuje, żeby jedna lokalizacja nie trafiła do dwóch zadań spisu.

Przy spisie palet pełnych operator nie liczy kartonów. Skanuje numer SSCC z etykiety, a system potwierdza zawartość palety na podstawie danych z przyjęcia. Ręczne liczenie dotyczy tylko palet otwartych, z których pobierano towar. Taki podział skraca spis wysokich poziomów regału, gdzie dostęp do każdej palety wymaga wózka.

Po stronie bazy danych zestawienie różnic to proste złączenie wyników spisu ze stanem. Poniższe zapytanie T-SQL jest przykładem, a nazwy tabel nie odpowiadają schematowi konkretnego produktu.

-- przykładowe zestawienie różnic dla zamkniętego zadania spisu
SELECT s.LokalizacjaId,
       s.Indeks,
       st.Ilosc              AS IloscEwidencja,
       s.IloscPoliczona,
       s.IloscPoliczona - st.Ilosc AS Roznica
FROM dbo.SpisPozycja AS s
JOIN dbo.Stan AS st
  ON st.LokalizacjaId = s.LokalizacjaId
 AND st.Indeks        = s.Indeks
WHERE s.ZadanieSpisuId = @ZadanieSpisuId
  AND s.IloscPoliczona <> st.Ilosc;

W praktyce zapytanie uzupełnia się o towary znalezione w lokalizacji, której ewidencja nie zna (złączenie zewnętrzne), oraz o pozycje z bazy, których operator nie znalazł. Rozliczenie różnic i dokumenty korygujące obsługuje moduł opisany na stronie program do inwentaryzacji Studio WMS.net.

Praca offline i synchronizacja z serwerem

W magazynie zawsze są miejsca ze słabym zasięgiem Wi-Fi, np. chłodnie albo strefy za stalowymi regałami. Studio WMS.net działa w trybie offline, a po przywróceniu łączności synchronizuje zgromadzone dane. Mechanizm opiera się na lokalnej kolejce operacji na urządzeniu.

Kluczem do poprawnej synchronizacji jest unikalny identyfikator operacji nadawany na urządzeniu. Gdy terminal wyśle skan, a odpowiedź serwera zginie w sieci, aplikacja powtórzy żądanie. Serwer rozpozna identyfikator i nie zaksięguje ruchu drugi raz. Poniższy przykład w JavaScript z jQuery ilustruje taką kolejkę.

// przykładowa kolejka skanów z identyfikatorem operacji
const kolejka = JSON.parse(localStorage.getItem('kolejkaSkanow') || '[]');

function zapiszSkan(zadanieId, kod) {
    kolejka.push({ idOperacji: crypto.randomUUID(), zadanieId: zadanieId, kod: kod });
    localStorage.setItem('kolejkaSkanow', JSON.stringify(kolejka));
    wyslijKolejke();
}

function wyslijKolejke() {
    if (!kolejka.length || !navigator.onLine) return;
    $.ajax({
        url: '/api/skan',            // przykładowy endpoint
        method: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(kolejka[0]),
        timeout: 5000
    }).done(function () {
        kolejka.shift();
        localStorage.setItem('kolejkaSkanow', JSON.stringify(kolejka));
        wyslijKolejke();
    });
}

window.addEventListener('online', wyslijKolejke);

Po stronie serwera wystarczy indeks unikalny na kolumnie identyfikatora operacji. Druga próba zapisu tego samego skanu kończy się naruszeniem ograniczenia, które procedura przechwytuje i zwraca jako sukces. Operator nie widzi błędu, a stan w bazie zmienia się dokładnie raz.

-- przykładowy indeks chroniący przed podwójnym zaksięgowaniem skanu
CREATE UNIQUE INDEX UX_Skan_IdOperacji ON dbo.Skan (IdOperacji);
SytuacjaZachowanie aplikacji
Brak zasięgu podczas skanuoperacja trafia do lokalnej kolejki, ekran pokazuje liczbę oczekujących skanów
Powrót zasięguwysyłka kolejki w kolejności zapisu
Zgubiona odpowiedź serweraponowienie z tym samym identyfikatorem, serwer ignoruje duplikat
Konflikt stanu, np. towar pobrany w międzyczasieserwer odrzuca operację, a aplikacja kieruje ją do wyjaśnienia przez kierownika

Zarządzanie flotą urządzeń w magazynie

Kilka terminali administrator skonfiguruje ręcznie. Przy kilkudziesięciu urządzeniach potrzebny jest system MDM, który centralnie instaluje aplikację i wymusza ustawienia sieci. Android udostępnia do tego zestaw interfejsów zarządzania urządzeniami firmowymi, opisany w dokumentacji Android Enterprise na developer.android.com.

  • Tryb kiosku - urządzenie uruchamia tylko aplikację magazynową i wskazane narzędzia, a operator nie zmieni ustawień systemu.
  • Dystrybucja wersji - nowa wersja aplikacji trafia najpierw do grupy pilotażowej, a po akceptacji do całej floty.
  • Profil sieci Wi-Fi - certyfikaty i ustawienia roamingu trafiają na urządzenie centralnie, bez wpisywania haseł przez pracowników.
  • Zdalne wymazanie - utracony terminal można zablokować i wyczyścić, zanim ktoś odczyta dane sesji.

Tryb kiosku w Androidzie nosi nazwę lock task mode. Aplikacja uruchomiona w tym trybie nie pozwala wrócić do ekranu głównego ani otworzyć powiadomień, dopóki administrator nie odblokuje urządzenia. Mechanizm opisuje dokumentacja lock task mode dla urządzeń dedykowanych. W magazynie chroni to terminal przed instalacją gier czy zmianą ustawień Wi-Fi przez pracowników, a dział IT nie musi ręcznie przywracać konfiguracji po każdej zmianie.

Konfigurację MDM w projekcie wdrożeniowym opisuje artykuł program magazynowy na Androida z wdrożeniem MDM. Firmy, które wciąż używają terminali z Windows CE albo Windows Mobile, stoją przed wymianą floty, bo te systemy nie dostają już poprawek bezpieczeństwa. Przebieg takiej zmiany opisuje tekst o tym, jak wygląda migracja terminali z Windows CE na Android.

Integracja z ERP i wdrożenie na hali

Aplikacja mobilna jest ostatnim ogniwem przepływu danych, który zaczyna się w systemie ERP. Zamówienie sprzedaży z ERP trafia do WMS jako zestaw zadań kompletacji. Po wydaniu wraca do ERP w postaci potwierdzenia. Studio WMS.net ma konektory m.in. do SAP, Comarch ERP oraz enova365. Dla systemów spoza listy przygotowuje się interfejs oparty na API albo plikach XML lub EDI. Warianty wymiany danych omawia tekst integracja systemów magazynowych.

Po stronie terminala integracja oznacza, że operator widzi zadania wygenerowane z dokumentów ERP, a nie listę do przepisania. Trasę zbiórki i kolejność lokalizacji wyznacza serwer. Organizację pobrań opisuje szerzej artykuł kompletacja zamówień.

Szkolenia operatorów najlepiej prowadzić na hali, przy realnym towarze, w krótkich sesjach. Ekran terminala pokazuje jedno zadanie naraz, więc nauka dotyczy głównie kolejności skanów i obsługi wyjątków. W magazynach z pracownikami z innych krajów interfejs powinien być dostępny w ich języku, o czym piszemy w materiale wielojęzyczny program magazynowy WMS.

Etap wdrożeniaCo dotyczy terminali
Analiza przedwdrożeniowamapa zasięgu Wi-Fi, lista symbologii na etykietach dostawców
Konfiguracjaprofile skanera, tryb kiosku, uprawnienia operatorów
Pilotażjedna strefa lub jedna zmiana, zbieranie wyjątków
Uruchomienie produkcyjnecała flota, dyżur wsparcia na pierwszych zmianach

Studio WMS.net jest dostępne w modelu SaaS oraz jako instalacja na serwerach klienta. Aplikacja mobilna działa w obu modelach tak samo, różni się tylko adres serwera zapisany w profilu urządzenia.