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ą.
| Etap | Termin względem odbioru | Przykład dla odbioru o 16:00 |
|---|---|---|
| Cut-off przyjmowania zamówień | Odbiór minus czas kompletacji i pakowania oraz bufor | 11:30 |
| Start fali kompletacji | Zaraz po cut-off | 11:30 |
| Zakończenie pakowania | Odbiór minus czas przejścia do strefy wydań | 15:00 |
| Zamknięcie dokumentów wydania | Przed podstawieniem pojazdu | 15:30 |
| Odbiór przez przewoźnika | Godzina okna odbioru | 16: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łki | Jak wygląda konsolidacja | Identyfikacja przesyłki |
|---|---|---|
| Paczka kurierska | Jedno zamówienie to zwykle jedna lub kilka paczek, łączenie dotyczy tego samego adresu | List przewozowy i etykieta kuriera |
| Drobnica paletowa | Kilka zamówień na jednej palecie lub kilka palet w jednym zleceniu | Etykieta logistyczna z numerem SSCC |
| Cały pojazd | Zamówienia do jednego odbiorcy albo z jednej trasy w pełnym ładunku | Zestawienie palet z listą SSCC |
| Dostawy do wielu sklepów | Kolejność załadunku odwrotna do kolejności rozładunku | Podział palet według punktu dostawy |

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.

| Zdarzenie od przewoźnika | Reakcja magazynu lub obsługi zamówień |
|---|---|
| Brak odbioru w oknie | Kontakt z przewoźnikiem i przesunięcie okna na następny odjazd |
| Przesyłka w doręczeniu | Powiadomienie odbiorcy o przewidywanym terminie |
| Nieudane doręczenie | Ustalenie nowego terminu i zapis powodu w zleceniu |
| Dostarczono | Zamknię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łąd | Skutek | Zabezpieczenie |
|---|---|---|
| Plan oparty na nieaktualnym stanie | Zamówienie przyjęte do wysyłki na towar, którego nie ma na regale | Sprawdzenie dostępności w chwili cut-off i rezerwacja stanu |
| Ręczne przydzielanie paczek do kursów | Pominięta przesyłka lub przekroczony limit masy pojazdu | Automatyczny przydział według limitów pojazdu |
| Niespójne dane adresowe | Nieudane doręczenie i zwrot przesyłki | Adres pobierany z zamówienia, bez przepisywania |
| Brak priorytetu dla zamówień pilnych | Zamówienie z krótkim terminem czeka w jednej kolejce ze zwykłymi | Priorytet i termin obietnicy dostawy w zleceniu |
| Nakładające się okna na rampie | Kolejka pojazdów i przestój kierowców | Kontrola 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.



