Magazyn firmy logistycznej kończy pracę dopiero wtedy, gdy towar wyjedzie, a usługa zostanie rozliczona. WMS w firmie logistycznej obsługuje więc dwa obiegi danych poza samą halą: jeden prowadzi do transportu i spedycji, a drugi do dokumentu rozliczeniowego dla klienta.

Podział zapasów między wielu zleceniodawców oraz paletomiejsca i poziomy usług opisuje artykuł o WMS dla operatora 3PL, więc tutaj pominięto je na rzecz transportu i rozliczania przesyłek. Punktem wspólnym obu obiegów jest przesyłka, a cały tekst pokazuje, jak jeden identyfikator prowadzi ją od kompletacji do faktury.

WMS w firmie logistycznej między magazynem a transportem

Wspólnym obiektem obu obiegów jest przesyłka. W magazynie powstaje jako zestaw skompletowanych palet i kartonów, w transporcie jako pozycja na liście przewozowej, a w rozliczeniu jako pozycja faktury. Jeśli te trzy zapisy nie mają wspólnego identyfikatora, każde uzgodnienie zamienia się w ręczne szukanie po adresie odbiorcy i dacie.

ObiegKierunekDaneOdbiorca
Zlecenie wysyłkiWMS do TMS lub spedycjiadres, waga, wymiary, liczba jednostek, numery SSCCdyspozytor i przewoźnik
Potwierdzenie odbioruTMS do WMSnumer listu przewozowego, godzina odbiorumagazyn i klient operatora
Status dostawyTMS do WMSw drodze, doręczono, zwrotklient operatora
Zdarzenie rozliczenioweWMS do modułu rozliczeńkod usługi, ilość, data, właściciel towarudział rozliczeń

Reguła: każda przesyłka ma jeden identyfikator używany w WMS, w systemie transportowym i w rozliczeniu. Bez niego uzgodnienie faktury wymaga ręcznego szukania.

Dla operatora logistycznego, który zarabia na usłudze, a nie na towarze, ta spójność ma bezpośredni wymiar finansowy. Charakterystykę operatora logistycznego opisuje osobna strona, a sposoby wymiany danych z innymi systemami omawia artykuł o integracji WMS z ERP.

Zlecenie wysyłki dla spedycji

System WMS przekazuje dane o skompletowanych zamówieniach do modułu spedycyjnego albo do zewnętrznego systemu zarządzania transportem (TMS). Dzięki temu awizacja wysyłki i dobór przewoźnika odbywają się bez ręcznego przepisywania adresów i wagi. Komplet danych, którego potrzebuje spedycja, jest niewielki, lecz musi być wiarygodny: waga i wymiary pochodzą z zapisów magazynu, a nie z deklaracji zleceniodawcy.

Przykład poniżej pokazuje zlecenie wysyłki jako komunikat JSON. Pola i wartości są poglądowe, a rzeczywisty format zależy od systemu odbiorcy:

{
  "shipmentId": "SHP-2026-000123",
  "pickupWindow": {
    "from": "2026-10-02T14:00:00+02:00",
    "to": "2026-10-02T16:00:00+02:00"
  },
  "consignee": { "name": "Odbiorca Przykładowy", "city": "Poznań", "postalCode": "60-001" },
  "units": [
    { "sscc": "012345670000000121", "weightKg": 412.5, "heightCm": 150 },
    { "sscc": "012345670000000138", "weightKg": 399.9, "heightCm": 145 }
  ],
  "totalWeightKg": 812.4
}

Godziny w komunikacie zapisuje się ze strefą czasową albo w UTC, bo okno odbioru w innym kraju lub przy zmianie czasu z letniego na zimowy inaczej przesunie się w każdym z systemów. W bazie SQL Server odpowiada temu typ datetimeoffset, który przechowuje przesunięcie razem z czasem, dzięki czemu porównanie znaczników z dwóch systemów nie zależy od ustawień serwera.

Tablet z ekranem aplikacji magazynowej na tle ciężarówki i regałów magazynowych
Zlecenie wysyłki przekazywane z magazynu do transportu, czyli pierwszy z dwóch obiegów danych.

Numer SSCC jednoznacznie identyfikuje jednostkę logistyczną, więc ten sam kod widnieje na etykiecie palety, w komunikacie do przewoźnika i w dokumencie wydania. Budowę numeru opisuje strona GS1 Polska o SSCC, a zasady etykiety zawiera tekst o etykietach logistycznych GS1.

Wybór przewoźnika i etykieta transportowa

Kiedy zamówienie opuszcza magazyn, wybór opcji dostawy nie powinien angażować pracownika. WMS podpowiada przewoźnika i usługę na podstawie wagi i gabarytu oraz miejsca docelowego, a etykiety i listy przewozowe powstają bezpośrednio z poziomu systemu. Przy dużej liczbie drobnych przesyłek wychodzących codziennie ogranicza to pomyłki, bo adres odbiorcy pochodzi z zamówienia, a nie z ręcznego przepisania.

Od strony technicznej wymaga to połączenia z interfejsem API przewoźnika albo z platformą spedycyjną, która pośredniczy w komunikacji z wieloma przewoźnikami naraz. WMS wysyła dane przesyłki, a w odpowiedzi dostaje numer listu przewozowego i etykietę do wydruku na drukarce etykiet.

Konsolidacja przesyłek jadących w jednym kierunku

Firma logistyczna obsługująca kilku przewoźników potrzebuje narzędzia do konsolidacji przesyłek jadących w podobnym kierunku, niezależnie od tego, do którego zleceniodawcy towar należy. WMS grupuje gotowe zamówienia według trasy albo strefy dostawy, co pozwala pełniej wykorzystać przestrzeń ładunkową i ograniczyć liczbę kursów. Dane o wadze i wymiarach oraz liczbie opakowań trafiają do przewoźnika automatycznie, więc palet nie trzeba ważyć ani opisywać przy rampie.

Konsolidacja transportu nie łączy dokumentów. Każda paleta zachowuje swojego właściciela i własny dokument wydania, a wspólny jest tylko pojazd. Koszt kursu dzieli się później między właścicieli według przyjętego klucza, na przykład liczby palet albo masy, co prowadzi do sekcji o rozliczeniach. Harmonogram odjazdów i okna odbioru opisuje artykuł o planowaniu wysyłek z magazynu, a integrację z przewoźnikami kurierskimi tekst o firmach kurierskich.

Potwierdzenia z transportu i status przesyłki

Kierunek powrotny jest równie ważny jak samo zlecenie. System transportowy odsyła numer listu przewozowego oraz godzinę odbioru, a potem kolejne statusy, a WMS wiąże je z dokumentem wydania. Praca z modułem spedycyjnym polega głównie na rejestracji numerów listów przewozowych, powiązanych automatycznie z dokumentami wydania z magazynu, co ogranicza pomyłki przy adresowaniu.

Status przesyłkiŹródło zdarzeniaSkutek w WMS
Gotowa do odbioruWMS po zamknięciu kompletacjizlecenie wysyłki trafia do systemu transportowego
Odebrana przez przewoźnikasystem transportowy lub kierowcazamknięcie dokumentu wydania i rozliczenie załadunku
W drodzesystem transportowystatus widoczny dla klienta operatora
Doręczonasystem transportowyzamknięcie przesyłki, koniec liczenia czasu dostawy
Zwrot lub niedoręczonasystem transportowyzlecenie przyjęcia zwrotu w magazynie

Status przesyłki ma jedno źródło, którym jest system transportowy, a WMS tylko go odbiera. Gdyby oba systemy zmieniały ten sam status, po awarii łącza nie dałoby się ustalić, który zapis jest właściwy. Komunikaty z transportu mogą dotrzeć dwa razy albo w odwrotnej kolejności, więc WMS przyjmuje status tylko wtedy, gdy jest późniejszy od zapisanego:

UPDATE dbo.Shipments
SET Status   = @NewStatus,
    StatusAt = @EventAt
WHERE ShipmentId = @ShipmentId
  AND StatusAt < @EventAt;

Powtórzony komunikat nie zmieni żadnego wiersza, a spóźniony, ale starszy od zapisanego, zostanie pominięty. Sposób integracji systemów transportowych z magazynowymi omawia artykuł o integracji TMS z ERP i WMS. Przykładem systemu klasy TMS jest Linkway.TMS.

Wyjątki wymagają osobnych reguł. Gdy część zamówienia nie jest gotowa, WMS dzieli je na dwie przesyłki, a każda dostaje własny identyfikator, własny list przewozowy i własne zdarzenie rozliczeniowe. Zwrot albo niedoręczenie uruchamia zlecenie przyjęcia zwrotu w magazynie, a zdarzenie rozliczeniowe powstaje dopiero po przyjęciu towaru na stan.

Okna załadunku i postój pojazdu

Pojazd, który przyjeżdża po towar, jest kolejnym uczestnikiem obiegu. Awizacja ustala godzinę podstawienia, a magazyn dobiera do niej czas zakończenia kompletacji. Znaczniki czasu, które powstają przy okazji, służą później harmonogramowi, a także rozliczeniu postoju.

ZnacznikKto go zapisujeDo czego służy
Awizowane oknoprzewoźnik lub dyspozytorpunkt odniesienia dla planu kompletacji
Przyjazd na bramęportier lub system awizacjipoczątek liczenia oczekiwania
Podstawienie pod rampęoperator rampykoniec oczekiwania, początek pracy magazynu
Początek i koniec załadunkuskan przy rampieczas załadunku i rozliczenie palet
Wyjazdportier lub system awizacjizamknięcie wizyty pojazdu

Czas oczekiwania pojazdu wynika z różnicy między przyjazdem a podstawieniem pod rampę, a czas załadunku z różnicy między początkiem i końcem pracy przy rampie. Umowy z przewoźnikami i zleceniodawcami bywają zawierane z limitem bezpłatnego postoju, a nadwyżkę wycenia się za rozpoczętą godzinę. Ponieważ wszystkie znaczniki pochodzą z zapisów systemowych, spór o to, kto zawinił, sprowadza się do odczytania czasów.

Proces po stronie przewoźnika opisuje strona o awizacji transportu, a moduł do zarządzania oknami i placem strona o awizacjach w Studio VSS.net. Przegląd rozwiązań do awizowania znajduje się w serwisie awizacje SoftwareStudio.

Rozliczanie usług operatora ze zdarzeń

Operator sprzedaje usługę, więc rozliczenie zaczyna się od katalogu usług, a nie od faktury. Każde zdarzenie w magazynie, które da się wycenić, dostaje kod usługi i ilość, a także znacznik czasu, a jego cena wynika z cennika przypisanego do zleceniodawcy. Składowanie i paletomiejsca opisuje artykuł o kontraktowej logistyce magazynowej, a tutaj mowa o usługach związanych z wysyłką.

Kod usługiZdarzenie w WMSJednostkaŹródło danych
Wydanie przesyłkizamknięcie dokumentu WZ dla przesyłkiprzesyłkadokument wydania
Załadunek paletpotwierdzenie załadunku pojazdupaletaskan przy rampie
Etykietowanie logistycznewydruk etykiety SSCCetykietazdarzenie wydruku
Postój ponad limitróżnica znaczników czasu pojazdurozpoczęta godzinadane awizacji
Refaktura transportukoszt kursu przypisany do właścicielalist przewozowysystem transportowy i faktura przewoźnika

Katalog zawiera dwa rodzaje zdarzeń, które wycenia się inaczej:

  • Zdarzenia jednostkowe - przesyłka lub paleta, a także etykieta, liczone sztukami i mnożone przez stawkę z cennika.
  • Zdarzenia czasowe - postój lub praca dodatkowa, wymagające w cenniku zasady zaokrąglania, na przykład do rozpoczętej godziny.

Zapytanie poniżej wycenia zdarzenia z jednego miesiąca. Cennik ma daty obowiązywania, a cena jest dobierana według daty zdarzenia. Nazwy tabel i kolumn są przykładowe:

SELECT e.OwnerId,
       t.ServiceCode,
       SUM(e.Quantity)               AS Quantity,
       SUM(e.Quantity * t.UnitPrice) AS Amount
FROM dbo.BillableEvents AS e
JOIN dbo.Tariff AS t
  ON t.OwnerId     = e.OwnerId
 AND t.ServiceCode = e.ServiceCode
 AND e.OccurredAt >= t.ValidFrom
 AND (t.ValidTo IS NULL OR e.OccurredAt < t.ValidTo)
WHERE e.OccurredAt >= '2026-09-01'
  AND e.OccurredAt <  '2026-10-01'
GROUP BY e.OwnerId, t.ServiceCode
ORDER BY e.OwnerId, t.ServiceCode;

Reguła: cenę dobiera się według daty zdarzenia, a nie daty wystawienia faktury. Zmiana cennika w połowie miesiąca dzieli okres na dwie części, a każde zdarzenie dostaje stawkę obowiązującą w jego dniu.

Pracownica magazynu w kamizelce odblaskowej z wydrukiem z drukarki dokumentów przy regałach
Dokument rozliczeniowy generowany z zapisanych zdarzeń, czyli drugi obieg danych.

Faktura przewoźnika przychodzi z opóźnieniem, więc refaktura kosztu kursu trafia zwykle do okresu, w którym faktura została zaksięgowana, a nie do miesiąca wysyłki. Zdarzenie rozliczeniowe zachowuje jednak datę wydania, co pozwala w raporcie dla klienta pokazać przesyłkę w miesiącu, w którym wyjechała, i osobno oznaczyć dopisany później koszt transportu.

Wszystkie zdarzenia pochodzą z tego samego systemu, w którym rejestruje się operacje magazynowe, więc liczba przesyłek i palet na fakturze zawsze odpowiada wykonanej pracy, a nie osobnemu zestawieniu przygotowanemu ręcznie. Modele rozliczeń kosztów magazynowych, od stawek stałych po transakcyjne, opisuje strona o rozliczaniu kosztów magazynowych.

Uzgadnianie kosztów przewoźnika z fakturą

Faktura przewoźnika przychodzi po fakturze operatora albo po kilku tygodniach. Operator porównuje ją z przesyłkami zapisanymi w WMS i z listami przewozowymi w systemie transportowym. Uzgodnienie idzie po numerze przesyłki, a rozbieżności mają zwykle powtarzalne przyczyny.

ElementZapis w WMSZapis u przewoźnikaTypowa rozbieżność
Wagawaga z ważenia lub z kartotekiwaga taryfikowanaprzewoźnik stosuje większą z wag: rzeczywistej i objętościowej
Liczba jednostekliczba palet i kartonów z dokumentu wydanialiczba jednostek na liście przewozowymprzesyłka podzielona na dwa listy
Cenastawka z umowy ze zleceniodawcąstawka z cennika przewoźnikadopłata do stawki podstawowej
Termingodzina odbioru z rampygodzina doręczeniaopóźnienie ważne dla roszczenia

Różnica wagi jest najczęstszym źródłem sporów. Waga objętościowa lekkiego towaru w dużych kartonach bywa wyższa od rzeczywistej, a przelicznik zależy od przewoźnika. Wymiary zapisane w kartotece pozwalają policzyć wagę taryfikowaną z góry i oszacować koszt przed wysyłką, a nie po otrzymaniu faktury.

Jeśli umowa przewiduje refakturę, koszt kursu przypisuje się zleceniodawcy przez numer listu przewozowego. Przy transporcie skonsolidowanym koszt dzieli się według klucza zapisanego w umowie i w konfiguracji, żeby ten sam kurs nie został policzony dwa razy.

Widok klienta operatora

Klient operatora otrzymuje dostęp przez przeglądarkę, bez instalowania oprogramowania po swojej stronie. Dobrze zaprojektowany widok zawiera cztery elementy:

  • Status wysyłek - aktualny status każdej przesyłki, z numerem listu przewozowego i linkiem do śledzenia.
  • Dokumenty wydania - dokument WZ i potwierdzenie odbioru dostępne bez telefonu do magazynu.
  • Pozycje rozliczenia - każda pozycja z odnośnikiem do zdarzeń, czyli numerów przesyłek i dat.
  • Porównanie z poziomem usług - zapisany czas realizacji zleceń zestawiony z wartością ustaloną w umowie.

Widok dla kontrahentów opisuje artykuł o module internetowym dla kontrahentów. Spokojną współpracę zapewnia to, że numer na fakturze prowadzi do zdarzenia w magazynie, a zdarzenie do dokumentu wydania. Spór kończy się wtedy na kilku kliknięciach zamiast na wymianie arkuszy.