Z czego składa się zestaw aplikacji WMS

Określenie „aplikacje WMS” obejmuje kilka programów klienckich, które pracują na jednej bazie danych magazynu. Biuro magazynu korzysta z programu instalowanego na stacji roboczej z systemem Windows. Kierownik zmiany w oddziale loguje się przez przeglądarkę. Magazynier na hali trzyma w ręku terminal z czytnikiem kodów kreskowych. Każdy z tych klientów widzi te same kartoteki i dokumenty, bo wszystkie zapisują operacje w tym samym silniku Microsoft SQL Server.

Podział wynika z warunków pracy na danym stanowisku. Operator przy biurku potrzebuje wielu okien oraz wydruku dokumentów WZ. Operator wózka potrzebuje skanera i odpowiedzi systemu w ułamku sekundy. Podział systemu na warstwę danych i warstwę aplikacji opisuje artykuł architektura oprogramowania WMS, a poniższa tabela zestawia role poszczególnych modułów.

ModułUrządzenie i środowiskoTypowe operacjeUżytkownik
Aplikacja desktopowaKomputer z Windows w sieci lokalnejDokumenty PZ i WZ, konfiguracja lokalizacjiKierownik magazynu, operator biura
Aplikacja webowaPrzeglądarka, serwer aplikacji IISPodgląd stanów, zamówienia kontrahentówKierownik zmiany, klient 3PL
Terminal AndroidKolektor danych z czytnikiem 2D, Wi-FiPrzyjęcie na lokalizację, kompletacjaMagazynier, operator wózka
Terminal Windows CE / MobileStarsze kolektory, np. Motorola Symbol MC9090Te same operacje w starszym interfejsieMagazyny przed migracją

Baza SQL Server jako wspólny rejestr operacji

Stany w lokalizacjach i dokumenty magazynowe leżą w tabelach relacyjnych powiązanych kluczami obcymi. Gdy magazynier zatwierdzi pobranie na terminalu, rekord stanu zmienia się w tej samej transakcji co pozycja dokumentu. Biuro widzi zmianę przy najbliższym odświeżeniu listy, bez eksportu plików i bez nocnej synchronizacji.

Reguły kontroli ilości i numeracji dokumentów najlepiej trzymać w procedurach składowanych po stronie serwera. Wtedy każdy moduł kliencki wywołuje ten sam kod, a poprawka reguły nie wymaga wydania kilku wersji aplikacji. Zaplecze bazodanowe, w tym indeksy i kopie zapasowe, opisuje tekst system magazynowy na SQL Server.

Reguła: jeden stan towaru, jedna baza. Żaden moduł nie trzyma własnej kopii stanów poza krótkim buforem terminala.

Aplikacja desktopowa w biurze magazynu

Klient Windows pracuje w klasycznym układzie klient-serwer. Program zainstalowany na stacji roboczej otwiera połączenie z instancją SQL Server w sieci lokalnej i wywołuje zapytania albo procedury składowane. Opóźnienie w sieci LAN rzadko przekracza jedną milisekundę, więc lista kilku tysięcy pozycji dokumentu ładuje się bez odczuwalnej zwłoki. O czasie otwarcia dużych zestawień decydują głównie indeksy i plan wykonania zapytania.

Zadania realizowane w kliencie Windows

Aplikacja desktopowa obsługuje czynności, przy których użytkownik porównuje dane z kilku źródeł naraz. Przyjęcie dostawy wymaga zestawienia awiza od dostawcy z tym, co magazynier faktycznie zeskanował na rampie. Ten sam program służy do konfiguracji struktury magazynu, czyli stref składowania i adresowanych kodem kreskowym lokalizacji.

  • Dokumenty magazynowe - rejestracja przyjęć PZ i wydań WZ wraz z wydrukiem na drukarce biurowej.
  • Kartoteki - towary z jednostkami miary oraz partie z datą ważności.
  • Uprawnienia - role użytkowników i zakres operacji dostępnych na terminalu.
  • Raporty - zestawienia rotacji oraz historii obrotów generowane z widoków SQL.

Model ról decyduje o tym, co dany użytkownik zobaczy w każdej z aplikacji. Magazynier nie potrzebuje w terminalu cennika, a księgowa nie powinna zatwierdzać przesunięć między lokalizacjami. Szczegóły opisuje artykuł role i użytkownicy w systemie WMS.

Ilustracja platformy Microsoft .NET, na której buduje się aplikacje klienckie i serwerowe systemu magazynowego
Platforma .NET i język C# obsługują zarówno klienta Windows, jak i serwer aplikacji webowej, co pozwala współdzielić kod warstwy danych

Ograniczenia modelu klient-serwer

Słabą stroną klienta Windows jest dystrybucja wersji. Każda zmiana schematu bazy wymaga zgodnej wersji programu na wszystkich stanowiskach. Starszy klient wywoła procedurę z nieaktualną listą parametrów i dostanie błąd.

Drugi problem dotyczy pracy zdalnej. Wystawienie portu 1433 serwera SQL do Internetu jest złą praktyką bezpieczeństwa, więc oddział w innym mieście łączy się przez VPN albo przez pulpit zdalny. Prostszą drogą bywa przejście tego oddziału na aplikację webową.

Aplikacja webowa WMS w przeglądarce

Wersja webowa przenosi logikę na serwer. Aplikacja ASP.NET działa pod kontrolą serwera IIS, łączy się z bazą SQL Server i zwraca do przeglądarki gotowy HTML albo dane JSON. Stacja robocza potrzebuje tylko przeglądarki. Nową wersję instaluje się raz, na serwerze, i od następnego logowania korzystają z niej wszyscy użytkownicy. Ten model z perspektywy sklepu internetowego opisuje artykuł aplikacja internetowa WMS.

Po stronie przeglądarki interfejs korzysta z JavaScript i biblioteki jQuery. Lista stanów albo licznik palet w strefie wysyłek odświeża się asynchronicznie, bez przeładowania całej strony. Przykładowe wywołanie AJAX pobiera stany lokalizacji z usługi zwracającej JSON (adres i nazwy pól są poglądowe):

$.ajax({
  url: '/api/stany',
  data: { lokalizacja: 'A-01-02' },
  dataType: 'json'
}).done(function (wiersze) {
  var $tbody = $('#stany tbody').empty();
  $.each(wiersze, function (i, w) {
    $('<tr>').append(
      $('<td>').text(w.kod),
      $('<td>').text(w.ilosc)
    ).appendTo($tbody);
  });
});

Tekst trafia do tabeli metodą .text(), a nie przez sklejanie znaczników HTML. Nazwa towaru wpisana przez dostawcę nie może stać się skryptem wykonanym w przeglądarce kierownika magazynu.

KryteriumKlient WindowsAplikacja webowa
InstalacjaNa każdej stacji roboczejTylko na serwerze IIS
Aktualizacja wersjiKażde stanowisko osobnoJednorazowo po stronie serwera
Połączenie z baząBezpośrednio z SQL Server w sieci LANWyłącznie z serwera aplikacji
Dostęp z oddziałuVPN albo pulpit zdalnyHTTPS przez przeglądarkę
Duże zestawieniaZasoby stacji roboczejStronicowanie po stronie serwera

Serwer w firmie albo w chmurze

Serwer aplikacji i bazę można postawić w serwerowni firmy albo u dostawcy chmury. Użytkownik nie widzi różnicy, bo w obu przypadkach loguje się przez przeglądarkę. Zmienia się podział odpowiedzialności za kopie zapasowe i za łącze do Internetu. Konsekwencje obu wariantów omawia tekst magazyn w chmurze.

Terminal mobilny na hali magazynowej

Na hali pracuje aplikacja uruchomiona na kolektorze danych z systemem Android. Kolektor łączy wbudowany czytnik kodów 1D i 2D z modułem Wi-Fi. Aplikacja wskazuje magazynierowi lokalizację docelową. Magazynier skanuje etykietę lokalizacji, a następnie kod towaru. Pozycja dokumentu powstaje dopiero po komplecie zgodnych odczytów, więc pomyłka regału kończy się komunikatem na ekranie, a nie błędnym stanem w bazie.

Dobór urządzenia zależy od warunków w strefie pracy. W chłodni liczy się odporność obudowy i akumulatora na niską temperaturę, na rampie zasięg czytnika do etykiet na wysokiej palecie. Przegląd platformy opisuje artykuł Android WMS.

  • Czytnik - silnik 2D odczytuje kody GS1-128 i DataMatrix z etykiet logistycznych.
  • Wersja Androida - decyduje o okresie wsparcia poprawkami bezpieczeństwa i o zgodności z narzędziem MDM.
  • Akumulator - wymienny pakiet pozwala pracować przez kolejne zmiany bez odstawiania urządzenia do ładowarki.
  • Obudowa - klasa szczelności IP i odporność na upadek na beton przy pracy w chłodni.
Tablety i przenośne terminale z czytnikiem kodów pracujące jako klienci aplikacji WMS na hali magazynowej
Urządzenia mobilne na hali wykonują operacje przyjęcia na lokalizację i kompletacji, zapisując je w tej samej bazie co biuro

Praca buforowana i synchronizacja

Zasięg Wi-Fi w magazynie wysokiego składowania bywa nierówny. Regały z towarem w metalowych opakowaniach i ściany chłodni tłumią sygnał. Moduł na kolektory Android w Studio WMS.net zapisuje operacje lokalnie przy braku sieci i wysyła je do serwera po odzyskaniu połączenia.

Bufor offline wymaga reguł rozstrzygania konfliktów. Dwa terminale mogą pobrać ostatnią sztukę z tej samej lokalizacji, zanim którykolwiek się zsynchronizuje. Poprawnie zaprojektowany serwer przyjmuje wtedy pierwszą transakcję, a drugą odrzuca z komunikatem o różnicy stanu, zamiast zapisywać stan ujemny.

Migracja z Windows CE na Android

Część magazynów nadal używa kolektorów z Windows CE albo Windows Mobile. Microsoft zakończył wsparcie tych systemów, a producenci urządzeń nie wydają już dla nich poprawek. Wymiana na Androida zmienia platformę aplikacji klienckiej, ale nie wymaga zmiany bazy danych: nowy terminal wywołuje te same procedury co stary. Przebieg takiej wymiany opisuje artykuł migracja terminali z Windows CE na Android.

Transakcje i blokady przy równoległej pracy

W godzinie szczytu kilkudziesięciu magazynierów zapisuje operacje w tym samym czasie, w którym biuro wystawia dokumenty WZ i drukuje raporty. SQL Server chroni spójność danych blokadami. Przy domyślnym poziomie izolacji READ COMMITTED odczyt czeka, aż zapis zostanie zatwierdzony, a zapis czeka na zwolnienie blokady współdzielonej odczytu. Opis poziomów zawiera dokumentacja SET TRANSACTION ISOLATION LEVEL w Microsoft Learn.

Gdy jedna instrukcja, na przykład masowa aktualizacja cen albo zamknięcie inwentaryzacji, zbierze na tabeli około 5000 blokad, silnik eskaluje je do blokady całej tabeli. Terminale czekają wtedy na jej zwolnienie. Opcja bazy READ_COMMITTED_SNAPSHOT łagodzi konflikt odczytu z zapisem: raport dostaje ostatnią zatwierdzoną wersję wiersza z bazy tempdb. Koszt przenosi się na tempdb, która musi mieć miejsce na magazyn wersji.

Poziom izolacjiZachowanie odczytuZastosowanie w aplikacjach WMS
READ UNCOMMITTEDWidzi niezatwierdzone zmianyNie do stanów magazynowych
READ COMMITTEDCzeka na zatwierdzenie zapisuDomyślny, operacje terminali
READ COMMITTED SNAPSHOTCzyta ostatnią zatwierdzoną wersjęListy w biurze, podglądy webowe
SNAPSHOTSpójny obraz od początku transakcjiDługie raporty, arkusze inwentaryzacji
SERIALIZABLEBlokuje zakresy kluczyRzadko, np. generowanie numeracji

Pobranie z lokalizacji najlepiej zamknąć w procedurze składowanej, która czyta stan z blokadą aktualizacji i zmienia go w jednej transakcji. Poniższy przykład jest poglądowy, nazwy tabel nie odpowiadają schematowi żadnego produktu:

CREATE PROCEDURE dbo.usp_PobierzZLokalizacji
    @LokalizacjaId INT,
    @TowarId       INT,
    @Ilosc         DECIMAL(18,3)
AS
BEGIN
    SET NOCOUNT ON;
    SET XACT_ABORT ON;
    BEGIN TRANSACTION;

    DECLARE @Stan DECIMAL(18,3);

    SELECT @Stan = Ilosc
    FROM dbo.StanLokalizacji WITH (UPDLOCK, ROWLOCK)
    WHERE LokalizacjaId = @LokalizacjaId AND TowarId = @TowarId;

    IF @Stan IS NULL OR @Stan < @Ilosc
    BEGIN
        ROLLBACK TRANSACTION;
        THROW 50001, N'Brak wystarczającej ilości w lokalizacji.', 1;
    END;

    UPDATE dbo.StanLokalizacji
    SET Ilosc = Ilosc - @Ilosc
    WHERE LokalizacjaId = @LokalizacjaId AND TowarId = @TowarId;

    COMMIT TRANSACTION;
END;

Zasada: kontrola stanu i jego zmiana należą do jednej transakcji. Sprawdzenie ilości w aplikacji i zapis w osobnym wywołaniu kończą się stanem ujemnym przy dwóch terminalach.

Wymiana danych z ERP i drukarkami etykiet

Aplikacje WMS rzadko pracują w izolacji. System ERP przekazuje zamówienia sprzedaży oraz awiza dostaw, a odbiera potwierdzenia wydań. Wymiana odbywa się przez tabele pośrednie w bazie albo przez usługi REST. Partnerzy handlowi wymieniają dodatkowo komunikaty EDI. Tryby wymiany z systemem SAP porównuje artykuł integracja WMS z SAP.

Druga integracja dotyczy drukarek etykiet. Terminal albo stanowisko pakowania zleca wydruk, serwer składa etykietę w języku ZPL i przekazuje ją do drukarki Zebra na port TCP 9100. Etykieta logistyczna palety niesie numer SSCC zakodowany w symbolice GS1-128. Jego 18 cyfr dzieli się na cztery części:

  • Cyfra rozszerzenia - jedna cyfra 0-9 nadawana przez firmę w celu powiększenia puli numerów.
  • Prefiks firmy GS1 - numer przydzielony firmie przez krajową organizację GS1.
  • Numer seryjny - kolejny numer jednostki logistycznej; razem z prefiksem zajmuje 16 cyfr.
  • Cyfra kontrolna - liczona algorytmem modulo 10 z wagami 3 i 1.

Numerację SSCC najlepiej generować w bazie, w transakcji z utworzeniem jednostki logistycznej, żeby dwa stanowiska pakowania nie wydrukowały tego samego numeru. Budowę etykiety opisuje tekst etykieta GS1 w programie magazynowym.

Dobór aplikacji WMS do stanowiska i skali magazynu

Wybór zaczyna się od listy stanowisk, a nie od listy funkcji. Dla każdego miejsca pracy trzeba ustalić, jakie dokumenty tam powstają i czy stanowisko ma stały dostęp do sieci. Kontrahent magazynu 3PL potrzebuje innego widoku niż operator rampy, co pokazuje artykuł moduł internetowy dla kontrahentów w systemie WMS.

StanowiskoZalecany klientUzasadnienie
Biuro magazynuAplikacja desktopowaPraca w wielu oknach, wydruk dokumentów
Rampa przyjęćTerminal AndroidSkan etykiet dostawcy przy palecie
Strefa kompletacjiTerminal AndroidProwadzenie po trasie pobrań
Oddział w innym mieścieAplikacja webowaDostęp przez HTTPS bez VPN do bazy
Kontrahent 3PLAplikacja webowa z ograniczonym widokiemPodgląd własnych stanów i zamówień

Edycja SQL Server a rozmiar bazy

Druga decyzja dotyczy licencji silnika bazy. SQL Server Express jest bezpłatny, ale ogranicza pojedynczą bazę do 10 GB, a moc obliczeniową do mniejszej z dwóch wartości: jedno gniazdo procesora albo cztery rdzenie. Pula buforów w edycji Express ma limit 1410 MB. Aktualne limity podaje strona edycje i funkcje SQL Server 2022 w Microsoft Learn.

ParametrSQL Server ExpressSQL Server Standard
Maksymalny rozmiar bazy10 GB524 PB
Moc obliczeniowaMniejsza z wartości: 1 gniazdo lub 4 rdzenieMniejsza z wartości: 4 gniazda lub 24 rdzenie
Pula buforów1410 MB128 GB
SQL Server AgentBrakDostępny

Mały magazyn z jednym stanowiskiem biurowym i kilkoma terminalami zmieści się w limitach Express. Magazyn 3PL z historią ruchów z wielu lat potrzebuje edycji Standard, choćby ze względu na SQL Server Agent, który uruchamia kopie zapasowe i przebudowę indeksów według harmonogramu.

Ilustracja wyboru programu magazynowego WMS na podstawie wymagań stanowisk i skali magazynu
Dobór aplikacji zaczyna się od listy stanowisk i wolumenu transakcji, a dopiero potem od porównania funkcji

Przed wyborem dostawcy warto zadać cztery pytania techniczne:

  • Praca terminala - czy aplikacja mobilna obsługuje bufor offline i jak rozstrzyga konflikty stanów.
  • Aktualizacje - jak dostawca wdraża zmianę schematu bazy przy kliencie desktopowym na wielu stanowiskach.
  • Izolacja odczytów - czy raporty korzystają z wersjonowania wierszy albo z repliki bazy.
  • Integracje - jakim mechanizmem dostawca wymienia dane z ERP w podobnych wdrożeniach.

Działanie systemu można sprawdzić w demo magazynu online przed rozmową o wdrożeniu. Opis modułów zawiera strona produktu Studio WMS.net, a przebieg projektu artykuł wdrożenie systemu WMS.