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 środowisko | Typowe operacje | Użytkownik |
|---|---|---|---|
| Aplikacja desktopowa | Komputer z Windows w sieci lokalnej | Dokumenty PZ i WZ, konfiguracja lokalizacji | Kierownik magazynu, operator biura |
| Aplikacja webowa | Przeglądarka, serwer aplikacji IIS | Podgląd stanów, zamówienia kontrahentów | Kierownik zmiany, klient 3PL |
| Terminal Android | Kolektor danych z czytnikiem 2D, Wi-Fi | Przyjęcie na lokalizację, kompletacja | Magazynier, operator wózka |
| Terminal Windows CE / Mobile | Starsze kolektory, np. Motorola Symbol MC9090 | Te same operacje w starszym interfejsie | Magazyny 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.

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.
| Kryterium | Klient Windows | Aplikacja webowa |
|---|---|---|
| Instalacja | Na każdej stacji roboczej | Tylko na serwerze IIS |
| Aktualizacja wersji | Każde stanowisko osobno | Jednorazowo po stronie serwera |
| Połączenie z bazą | Bezpośrednio z SQL Server w sieci LAN | Wyłącznie z serwera aplikacji |
| Dostęp z oddziału | VPN albo pulpit zdalny | HTTPS przez przeglądarkę |
| Duże zestawienia | Zasoby stacji roboczej | Stronicowanie 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.

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 izolacji | Zachowanie odczytu | Zastosowanie w aplikacjach WMS |
|---|---|---|
| READ UNCOMMITTED | Widzi niezatwierdzone zmiany | Nie do stanów magazynowych |
| READ COMMITTED | Czeka na zatwierdzenie zapisu | Domyślny, operacje terminali |
| READ COMMITTED SNAPSHOT | Czyta ostatnią zatwierdzoną wersję | Listy w biurze, podglądy webowe |
| SNAPSHOT | Spójny obraz od początku transakcji | Długie raporty, arkusze inwentaryzacji |
| SERIALIZABLE | Blokuje zakresy kluczy | Rzadko, 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.
| Stanowisko | Zalecany klient | Uzasadnienie |
|---|---|---|
| Biuro magazynu | Aplikacja desktopowa | Praca w wielu oknach, wydruk dokumentów |
| Rampa przyjęć | Terminal Android | Skan etykiet dostawcy przy palecie |
| Strefa kompletacji | Terminal Android | Prowadzenie po trasie pobrań |
| Oddział w innym mieście | Aplikacja webowa | Dostęp przez HTTPS bez VPN do bazy |
| Kontrahent 3PL | Aplikacja webowa z ograniczonym widokiem | Podglą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.
| Parametr | SQL Server Express | SQL Server Standard |
|---|---|---|
| Maksymalny rozmiar bazy | 10 GB | 524 PB |
| Moc obliczeniowa | Mniejsza z wartości: 1 gniazdo lub 4 rdzenie | Mniejsza z wartości: 4 gniazda lub 24 rdzenie |
| Pula buforów | 1410 MB | 128 GB |
| SQL Server Agent | Brak | Dostę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.

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.



