Planowanie wysyłek z magazynu polega na ustaleniu, które zamówienia wyjadą którym odjazdem i kiedy trzeba zacząć je kompletować, żeby zdążyć. Punktem wyjścia nie jest kolejność zamówień, tylko godzina odbioru przez przewoźnika. Od niej liczy się wstecz czas załadunku i pakowania oraz czas samych pobrań.

Ten tekst dotyczy wyjścia towaru z magazynu. Odwrotny kierunek, czyli przyjęcie dostaw, opisuje artykuł o planowaniu dostaw do magazynu, a samą kompletację i dokumenty wydania omawiają inne strony serwisu. Tutaj tematem są harmonogram i okna odbioru. Dalej opisujemy konsolidację i dobór przewoźnika, a na końcu śledzenie po wydaniu.

Planowanie wysyłek z magazynu jako harmonogram odjazdów

Każdy odjazd ma godzinę graniczną przyjmowania zamówień, zwaną cut-off. Zamówienie złożone przed tą godziną trafia do wysyłki tego samego dnia, a złożone po niej do następnego odjazdu. Godzinę wyznacza się wstecz od odbioru, uwzględniając czas kompletacji i pakowania oraz przejścia do strefy wydań. Poniższy przykład dotyczy odbioru o 16:00 i pokazuje sposób liczenia, a nie normę czasową.

EtapTermin względem odbioruPrzykład dla odbioru o 16:00
Cut-off przyjmowania zamówieńOdbiór minus czas kompletacji i pakowania oraz bufor11:30
Start fali kompletacjiZaraz po cut-off11:30
Zakończenie pakowaniaOdbiór minus czas przejścia do strefy wydań15:00
Zamknięcie dokumentów wydaniaPrzed podstawieniem pojazdu15:30
Odbiór przez przewoźnikaGodzina okna odbioru16:00

Reguła: plan wysyłek liczy się od godziny odbioru w kierunku początku dnia. Zamówienie, które nie zmieści się w oknie kompletacji, przechodzi do następnego odjazdu, a nie wymusza pracy w pośpiechu.

W harmonogramie każdy odjazd jest osobnym zadaniem z listą zamówień i limitami wagi oraz objętości, a każde takie zadanie ma status. System zestawia zamówienia z dostępnością towaru w chwili cut-off, więc do fali kompletacji nie trafiają pozycje, których nie ma na regale. Dzięki temu kierownik zmiany widzi z wyprzedzeniem, które odjazdy są zagrożone, i może przesunąć ludzi do stref wydań.

Przy kilku odjazdach dziennie kompletację dzieli się na fale. Fala grupuje zamówienia przypisane do jednego odjazdu i uruchamia się o ustalonej godzinie, więc magazynierzy nie zbierają towaru dla odjazdu, który wyjeżdża dopiero następnego dnia. Zamówienie pilne może wejść do fali wcześniejszej, jeśli mieści się w jej limicie, a jeśli się nie mieści, system oznacza je jako zagrożone przed rozpoczęciem pobrań, a nie po odjeździe pojazdu.

Okna odbioru i awizacja załadunku

W planie okno odbioru oznacza przedział czasu, w którym przewoźnik może podstawić pojazd pod wskazaną rampę. Rampa ma ograniczoną przepustowość, więc dwa okna nie mogą nakładać się na tej samej bramie, a każde musi mieć zapas na załadunek. Długość okna zależy od liczby palet i rodzaju pojazdu oraz od dostępnego sprzętu, więc awizacja z liczbą jednostek pozwala oszacować czas obsługi trafniej niż stały przedział dla każdego przewoźnika. Zgłoszenie po stronie przewoźnika opisuje artykuł o awizacji transportu, a dane samego ładunku do załadowania - tekst o awizacji ładunków i załadunków.

Kolizje okien na rampie

Rezerwacja okna jest w bazie sprawdzeniem nakładania się przedziałów: nowe okno koliduje z istniejącym, gdy jego początek jest wcześniejszy niż koniec tamtego, a koniec późniejszy niż początek. Poniższy fragment T-SQL wykonuje tę kontrolę przed zapisem, a nazwy tabeli i kolumn są tylko przykładem.

-- przykładowa kontrola kolizji okien odbioru na jednej rampie
DECLARE @IdRampy int = 4,
        @Poczatek datetime2(0) = '2026-10-05 15:00',
        @Koniec   datetime2(0) = '2026-10-05 15:45';

IF EXISTS (SELECT 1
           FROM dbo.OknoOdbioru
           WHERE IdRampy = @IdRampy
             AND Status <> 'ANULOWANE'
             AND @Poczatek < KoniecOkna
             AND @Koniec   > PoczatekOkna)
    THROW 50001, 'Okno koliduje z istniejącą rezerwacją rampy.', 1;

INSERT INTO dbo.OknoOdbioru (IdRampy, PoczatekOkna, KoniecOkna, Status)
VALUES (@IdRampy, @Poczatek, @Koniec, 'ZAREZERWOWANE');

Przydział ramp do okien oraz kolejność podjeżdżania i obciążenie doków to zagadnienia yard management, opisane w artykule o zarządzaniu dokami w magazynie. Kalendarz okien czasowych w praktyce prezentuje serwis produktowy o zarządzaniu oknami czasowymi.

Zmiany okien w ciągu dnia

Plan rzadko wytrzymuje cały dzień bez korekt. Przewoźnik spóźnia się o godzinę, zamówienie pilne dochodzi po cut-off, a pojazd zajmuje rampę dłużej, niż przewidziano. Każda zmiana okna powinna przechodzić przez tę samą kontrolę kolizji co pierwotna rezerwacja i zostawiać ślad w historii: kto przesunął okno, z jakiego terminu na jaki i z jakiego powodu. Bez takiego śladu nie da się później ocenić, czy opóźnienia wynikają z pracy magazynu, czy z zachowania przewoźników.

Awizo wydania od kontrahenta

W magazynach obsługujących kilku kontrahentów termin odbioru bywa zgłaszany przez odbiorcę. W programie Studio WMS.net kontrahent może zapisać awizo wydania, które jest traktowane jako zlecenie wydania towaru, a po zatwierdzeniu dostaje numer awiza i 6-cyfrowy kod autoryzacji dokumentu WZ. Informacje z awiza przepisują się do dokumentu WZ w buforze, a magazyn planuje wysyłkę na podstawie zapisanego terminu. Zasady tej ewidencji opisuje strona o wydaniu z magazynu.

Konsolidacja zamówień i przygotowanie ładunku

Konsolidacja łączy zamówienia do jednego odbiorcy albo na jednej trasie we wspólną przesyłkę, żeby obniżyć koszt transportu i skrócić liczbę załadunków. System może scalać zamówienia, gdy zgadza się adres dostawy i termin, a łączna masa mieści się w limicie pojazdu. Kompletacja odbywa się wtedy na poziomie przesyłki, a nie pojedynczego zamówienia. Zasady kompletacji jedno- i dwustopniowej opisuje strona o kompletacji zamówień.

Przed zamknięciem przesyłki system porównuje łączną masę i objętość z limitem odjazdu. Poniższe zapytanie wskazuje odjazdy, w których zamówienia przekraczają dopuszczalną masę pojazdu, a jego tabele są przykładowe.

-- odjazdy z przekroczonym limitem masy
SELECT o.IdOdjazdu,
       SUM(z.MasaKg)    AS MasaLaczna,
       MAX(o.LimitMasyKg) AS LimitMasy
FROM dbo.Odjazd AS o
JOIN dbo.ZamowienieOdjazd AS z ON z.IdOdjazdu = o.IdOdjazdu
GROUP BY o.IdOdjazdu
HAVING SUM(z.MasaKg) > MAX(o.LimitMasyKg);
Forma wysyłkiJak wygląda konsolidacjaIdentyfikacja przesyłki
Paczka kurierskaJedno zamówienie to zwykle jedna lub kilka paczek, łączenie dotyczy tego samego adresuList przewozowy i etykieta kuriera
Drobnica paletowaKilka zamówień na jednej palecie lub kilka palet w jednym zleceniuEtykieta logistyczna z numerem SSCC
Cały pojazdZamówienia do jednego odbiorcy albo z jednej trasy w pełnym ładunkuZestawienie palet z listą SSCC
Dostawy do wielu sklepówKolejność załadunku odwrotna do kolejności rozładunkuPodział palet według punktu dostawy
Kartony na palecie z naklejonymi etykietami zawierającymi kody QR i kody kreskowe w hali magazynowej
Paleta z etykietami logistycznymi - identyfikator SSCC umożliwia śledzenie jednostki na kolejnych etapach transportu

Paleta jako jednostka wysyłkowa dostaje numer SSCC, czyli 18-cyfrowy identyfikator jednostki logistycznej. Etykieta logistyczna zawiera go razem z danymi odbiorcy i pozwala odczytać paletę na kolejnych etapach transportu. Zasady budowy etykiet omawia strona o etykiecie GS1, a wymagania standardu opisuje oficjalna strona GS1 Polska o etykiecie logistycznej.

Wybór przewoźnika i usługi transportowej

Wybór przewoźnika wynika z parametrów przesyłki. Liczą się masa i najdłuższy bok oraz kraj docelowy, a przy równych parametrach także termin i koszt usługi. Małe paczki kierowane są do sieci kurierskich, ładunki paletowe do przewoźników drobnicowych, a ładunki ponadgabarytowe do transportu dedykowanego. Firmy współpracujące z kilkoma przewoźnikami zyskują możliwość przekierowania przesyłki, gdy jeden z nich nie może jej odebrać w ustalonym oknie.

Reguły wyboru można zapisać jako tabelę i wykonać w kodzie. Poniższy przykład w C# filtruje reguły pasujące do przesyłki i wybiera najtańszą, a przy równym koszcie - o wyższym priorytecie. To przykład mechanizmu, a nie opis konkretnego produktu.

using System.Collections.Generic;
using System.Linq;

public record Przesylka(decimal MasaKg, int NajdluzszyBokCm, string Kraj);

public record Regula(string Przewoznik, string Kraj, decimal MaxMasaKg,
                     int MaxBokCm, decimal KosztZl, int Priorytet);

public static class WyborPrzewoznika
{
    // zwraca nazwę przewoźnika albo null, gdy żadna reguła nie pasuje
    public static string Wybierz(Przesylka p, IEnumerable<Regula> reguly) =>
        reguly.Where(r => r.Kraj == p.Kraj
                       && p.MasaKg <= r.MaxMasaKg
                       && p.NajdluzszyBokCm <= r.MaxBokCm)
              .OrderBy(r => r.KosztZl)
              .ThenBy(r => r.Priorytet)
              .Select(r => r.Przewoznik)
              .FirstOrDefault();
}

Reguła: wynik przewoźnika liczy się razem z odsetkiem reklamacji, a nie tylko ze stawką za przesyłkę. Tańsza usługa, która często kończy się szkodą, kosztuje więcej niż droższa i pewna.

Zasięg geograficzny i czas dostawy oraz sposób obsługi reklamacji transportowych decydują o tym, czy tańsza usługa rzeczywiście kosztuje mniej. Przewoźnik, który wolno rozpatruje szkody, przenosi koszt na obsługę zamówień i na relację z odbiorcą.

Gdy reguły są w tabeli, dopisanie nowego przewoźnika lub zmiana limitu wagi nie wymaga zmiany programu. Integrację magazynu z systemami przewoźników, w tym generowanie listów przewozowych i odbiór zdarzeń, opisuje artykuł o firmach kurierskich. Przy własnym transporcie planowanie tras i kursów przejmuje osobny system, o którym piszemy w tekście o planowaniu transportu. Zależność tras od okien dostaw w miastach wyjaśnia strona o zależności tras od okien czasowych i stref dostaw.

Śledzenie przesyłek po wydaniu

Plan kończy się dopiero wtedy, gdy przesyłka dotrze do odbiorcy. Przewoźnik przekazuje zdarzenia z trasy: odbiór od nadawcy, sortowanie, wydanie do doręczenia i dostarczenie. System magazynowy może odbierać je powiadomieniami typu webhook, więc nie musi cyklicznie odpytywać każdego kuriera. Każde zdarzenie aktualizuje status przesyłki przypisanej do dokumentu wydania. Najważniejsze są wyjątki: przesyłka bez ruchu dłużej, niż przewiduje usługa, albo nieudane doręczenie. Powinny one trafić do osoby, która może zareagować, zanim odbiorca sam zgłosi problem, a nie do ogólnej listy statusów.

Tablet z listą przesyłek ustawiony na tle regałów magazynowych, obok ciężarówka w hali
Widok listy przesyłek z ich statusami - podstawa reakcji magazynu na opóźnienia i przesyłki niedoręczone
Zdarzenie od przewoźnikaReakcja magazynu lub obsługi zamówień
Brak odbioru w oknieKontakt z przewoźnikiem i przesunięcie okna na następny odjazd
Przesyłka w doręczeniuPowiadomienie odbiorcy o przewidywanym terminie
Nieudane doręczenieUstalenie nowego terminu i zapis powodu w zleceniu
DostarczonoZamknięcie zlecenia i zapis daty do rozliczenia terminowości

Błędy planowania wysyłek i ich skutki

Część błędów powtarza się niezależnie od wielkości magazynu. Zwykle wynikają z braku aktualnych danych albo z ręcznej pracy tam, gdzie łatwo o pomyłkę. W tabeli zestawiono najczęstsze z nich razem z zabezpieczeniem, które da się wbudować w system.

BłądSkutekZabezpieczenie
Plan oparty na nieaktualnym stanieZamówienie przyjęte do wysyłki na towar, którego nie ma na regaleSprawdzenie dostępności w chwili cut-off i rezerwacja stanu
Ręczne przydzielanie paczek do kursówPominięta przesyłka lub przekroczony limit masy pojazduAutomatyczny przydział według limitów pojazdu
Niespójne dane adresoweNieudane doręczenie i zwrot przesyłkiAdres pobierany z zamówienia, bez przepisywania
Brak priorytetu dla zamówień pilnychZamówienie z krótkim terminem czeka w jednej kolejce ze zwykłymiPriorytet i termin obietnicy dostawy w zleceniu
Nakładające się okna na rampieKolejka pojazdów i przestój kierowcówKontrola kolizji przy rezerwacji okna

Sposób planowania różni się w zależności od modelu sprzedaży:

  • Handel internetowy - dużo małych paczek, krótki czas realizacji i zwroty jako stała część procesu wysyłkowego.
  • Dystrybucja B2B - mniej zamówień, ale większe wolumeny i wysyłki paletowe uzgadniane z harmonogramem awizacji.
  • Żywność i łańcuch chłodniczy - ścisłe okna odbioru i priorytet dla towaru o krótkim terminie przydatności.
  • Sieci handlowe - dostawy do wielu punktów według stałego harmonogramu, z konsolidacją ładunków dla poszczególnych sklepów.

Przejście z arkusza kalkulacyjnego na system zwykle następuje wtedy, gdy liczba dziennych wysyłek przekracza możliwości ręcznej kontroli jednej osoby, a pomyłki przy kompletacji i wysyłce zaczynają się powtarzać. W arkuszu stan zamówień, przydział do kursów i status przesyłki zmieniają się ręcznie i z opóźnieniem względem faktycznego stanu. System aktualizuje te dane w chwili zdarzenia, więc plan opiera się na tym, co naprawdę leży na regałach.

Wskaźniki planu wysyłek

Ocenę planu warto oprzeć na kilku wskaźnikach liczonych z danych systemu. Odsetek odjazdów zrealizowanych o czasie pokazuje, czy godziny cut-off są realne. Wypełnienie okna odbioru mówi, czy rampa jest wykorzystywana równomiernie. Odsetek zamówień, które trafiły do następnego odjazdu z powodu braku towaru, wskazuje na problem po stronie dostępności, a nie transportu. Regularny przegląd, na przykład co kwartał, pozwala korygować cut-off i reguły wyboru przewoźnika zależnie od sezonu i wolumenu. Ogólny porządek zmiany, w którą wpisują się te wskaźniki, opisuje artykuł o obsłudze magazynu, a funkcje systemu w tym obszarze prezentuje serwis produktowy Studio WMS.net.