Od awizacji do zlecenia przyjęcia w WMS

Awizacje dostaw do magazynu zwykle omawia się od strony bramy i kalendarza ramp. Dla magazyniera ważniejsze jest to, co dzieje się z danymi awizacji po zatwierdzeniu. W zintegrowanym środowisku awizacja zapisana w module Awizacje VSS.net tworzy w WMS zlecenie przyjęcia z listą pozycji. Magazynier nie czeka więc na papierowy dokument od kierowcy, bo zna zawartość dostawy przed otwarciem naczepy.

W Studio WMS.net przyjęcia zewnętrzne powstają na trzy sposoby opisane w tabeli. Pośrednia ścieżka przez zlecenie ZPZ albo awizo dostawy jest tą, w której awizacja ma realny wpływ na pracę rampy. Zasady wystawiania dokumentów magazynowych omawia artykuł o dokumentach magazynowych.

DokumentŹródło pozycjiRola awizacji
ZPZ - zlecenie przyjęciazamówienie zakupu albo awizo dostawyawizacja dostarcza nagłówek i pozycje oczekiwane
PZ - przyjęcie zewnętrznerealizacja zlecenia ZPZ po rozładunkuawizacja służy do porównania ilości
PZB - przyjęcie bezpośredniepozycje wprowadzane na rampie bez zleceniabrak, numer awizo można wpisać ręcznie

Nagłówek przyjęcia i numer awizo

Formularz przyjęcia w WMS ma w nagłówku pola Kontrahent, Numer awizo, Numer dostawy oraz Z dnia. Przy integracji wypełnia je awizacja, a przy przyjęciu bezpośrednim magazynier. Numer awizo wiąże dokument magazynowy z wizytą pojazdu, dlatego raport czasu obsługi może później połączyć czas na bramie z czasem na rampie.

Formularz Przyjęcie PZB w Studio WMS.net: nagłówek z polami Kontrahent, Numer awizo, Numer dostawy, Z dnia i Uwagi oraz sekcja Pozycje z polami Asortyment, Nr palety, Lokalizacja, Rodzaj palety, Nr partii, Termin ważności, Data produkcji i Ilość
Przyjęcie PZB w Studio WMS.net. Pole Numer awizo łączy dokument przyjęcia z awizacją, a pola pozycji odpowiadają danym z etykiety logistycznej palety.

Przekazanie danych w drugą stronę jest równie istotne. Zakończenie rozładunku w WMS aktualizuje status wizyty w systemie awizacji, a potwierdzenie trafia do ERP. Pełną pętlę wymiany opisuje artykuł o tym, jak VSS łączy się z WMS i ERP przy przyjęciach. Na stronie producenta ten sam przepływ przedstawia opis awizowania dostaw w WMS.

Kody dostawcy a indeksy magazynowe

Dostawca opisuje towar własnymi kodami albo numerem GTIN, a WMS prowadzi stany po indeksie wewnętrznym. Zlecenie przyjęcia można utworzyć tylko wtedy, gdy każda pozycja awizacji znajdzie odpowiednik w kartotece asortymentu. Tabela powiązań kodu dostawcy z indeksem jest więc warunkiem automatycznego przepływu, a nie dodatkiem.

-- Pozycje awizacji bez odpowiednika w kartotece (nazwy poglądowe)
SELECT al.AdviceId, al.SupplierCode, al.Gtin
FROM dbo.AdviceLine AS al
LEFT JOIN dbo.ItemSupplierCode AS isc
       ON isc.SupplierId   = al.SupplierId
      AND isc.SupplierCode = al.SupplierCode
LEFT JOIN dbo.Item AS i
       ON i.Gtin = al.Gtin
WHERE isc.ItemId IS NULL
  AND i.ItemId IS NULL;

Zapytanie szuka dopasowania po dwóch drogach: po kodzie dostawcy i po GTIN. Pozycja bez żadnego dopasowania zatrzymuje utworzenie zlecenia i wraca do działu zakupów z prośbą o uzupełnienie kartoteki. Lepiej wykryć brak w dniu zgłoszenia awizacji niż na rampie, gdy naczepa jest już otwarta.

Przydział rampy przyjęciowej

Rampa dla dostawy wynika z dwóch decyzji. Okno czasowe wybiera dostawca przy zakładaniu awizacji, a konkretną rampę wskazuje pracownik bramy w dyspozycji, w polu planowanej rampy magazynowej. Rozdzielenie tych decyzji pozwala zmienić rampę w dniu dostawy bez przesuwania okna, na przykład gdy poprzedni rozładunek się przedłuża.

Nie każda rampa nadaje się do każdej dostawy. Różnice dotyczą wyposażenia w mostek przeładunkowy o odpowiednim zakresie oraz dostępu do strefy chłodniczej. Dobór rampy powinien uwzględniać te ograniczenia jeszcze przed przyjazdem pojazdu, zamiast zostawiać decyzję magazynierowi, który zobaczy naczepę dopiero przy bramie.

Rodzaj dostawyWymaganie wobec rampySkutek złego przydziału
Naczepa chłodniczarampa z uszczelnieniem przy strefie chłodniczejprzerwanie łańcucha chłodniczego podczas rozładunku
Pojazd o niskiej podłodzerampa z mostkiem o odpowiednim zakresierozładunek wózkiem niemożliwy, przestawienie pojazdu
Rozładunek bocznyplac obok rampy albo stanowisko bez dokublokada sąsiedniej rampy
Dostawa jednorodna do strefy wysokiego składowaniarampa najbliżej docelowej strefydłuższa droga wózków przy każdej palecie

Obciążenie ramp w ciągu dnia pokazuje kalendarz, a reguły rezerwacji z pojemnością doków omawia artykuł o rezerwowaniu doków magazynowych. Pojazd, który przyjechał przed zwolnieniem rampy, czeka na stanowisku postojowym widocznym na mapie zajętości miejsc parkingowych. Organizację samych ramp opisuje tekst o zarządzaniu dokami w magazynie.

Zmiana rampy w dniu dostawy

Plan ramp rzadko przetrwa cały dzień bez zmian. Przedłużony rozładunek albo awaria mostka zmuszają do przesunięcia dostawy na inną rampę. Zmiana w dyspozycji powinna od razu trafić do zlecenia przyjęcia w WMS, bo magazynier szuka pracy na liście zleceń swojej rampy. Zlecenie przypisane do starej rampy zostaje wtedy niezauważone, a pojazd czeka przy nowej.

Weryfikacja ilości przy rozładunku

Awizacja podaje ilość oczekiwaną. Ilość przyjęta pochodzi z rozładunku: ze skanowania etykiet palet terminalem i z liczenia opakowań tam, gdzie paleta jest mieszana. Oba źródła trzeba trzymać osobno, bo tylko wtedy da się wykazać różnicę. Pracę ze skanerem przy przyjęciu opisuje artykuł o programie magazynowym ze skanerem.

Reguła: ilość przyjętą zapisuje się ze skanu i liczenia, nigdy przez skopiowanie ilości z awizacji.

Porównanie awizacji z przyjęciem wymaga w bazie zestawienia dwóch zbiorów pozycji. Pozycja może wystąpić tylko po jednej stronie, co oznacza niedobór całej linii albo towar spoza awizacji. Może też wystąpić po obu stronach z różną ilością. Złączenie FULL OUTER JOIN obsługuje każdy z tych przypadków w jednym zapytaniu. Nazwy tabel w przykładzie są poglądowe.

DECLARE @AdviceId int = 1042;

SELECT COALESCE(a.Sku, r.Sku)             AS Sku,
       ISNULL(a.Qty, 0)                   AS QtyAdvised,
       ISNULL(r.Qty, 0)                   AS QtyReceived,
       ISNULL(r.Qty, 0) - ISNULL(a.Qty, 0) AS QtyDiff
FROM (SELECT Sku, SUM(Qty) AS Qty
        FROM dbo.AdviceLine
       WHERE AdviceId = @AdviceId
       GROUP BY Sku) AS a
FULL OUTER JOIN
     (SELECT Sku, SUM(Qty) AS Qty
        FROM dbo.ReceiptLine
       WHERE AdviceId = @AdviceId
       GROUP BY Sku) AS r
  ON r.Sku = a.Sku
WHERE ISNULL(r.Qty, 0) <> ISNULL(a.Qty, 0);

Agregacja w podzapytaniach jest konieczna, bo jedna pozycja awizacji może zostać przyjęta na kilku paletach. Bez sumowania złączenie pomnożyłoby wiersze i zawyżyło obie ilości. Składnię złączeń opisuje dokumentacja klauzuli FROM w Transact-SQL.

Tolerancja ilościowa i zamknięcie przyjęcia

Nie każda różnica wymaga zatrzymania przyjęcia. Przy towarze sprzedawanym na wagę albo w metrach umowa z dostawcą często dopuszcza odchylenie. Próg tolerancji warto zapisać przy kartotece dostawcy albo asortymentu, a zapytanie porównujące filtrować po wartości bezwzględnej różnicy przekraczającej ten próg.

Zamknięcie przyjęcia zmienia naraz stan magazynu i status dokumentu. Równolegle zamyka wizytę w systemie awizacji. Wszystkie te zapisy muszą przebiec w jednej transakcji. Przerwanie w połowie zostawiłoby dokument zatwierdzony bez zwiększonego stanu albo wizytę zamkniętą bez przyjętego towaru.

Etykiety SSCC i identyfikatory GS1

Paleta z etykietą logistyczną GS1 niesie w kodzie GS1-128 dane, które odpowiadają polom pozycji przyjęcia w WMS. Skan jednej etykiety wypełnia kilka pól naraz, a numer SSCC staje się numerem palety w magazynie. Budowę etykiety omawia artykuł o etykiecie GS1 w programie magazynowym.

Identyfikator zastosowaniaZawartośćPole pozycji przyjęcia
(00)SSCC, 18 cyfrNr palety
(02) z (37)GTIN towaru na palecie i liczba jednostekAsortyment, Ilość
(10)numer partiiNr partii
(17)data ważności w formacie RRMMDDTermin ważności
(11)data produkcji w formacie RRMMDDData produkcji

Numer SSCC zaczyna się od cyfry rozszerzenia, po której następuje prefiks firmy GS1 z numerem seryjnym jednostki. Osiemnasta cyfra jest cyfrą kontrolną. Cyfrę kontrolną liczy się modulo 10: pierwsze 17 cyfr mnoży się naprzemiennie przez 3 i 1, zaczynając od wagi 3 na pierwszej pozycji. Opis struktury podaje GS1 Polska w opisie numeru SSCC.

// Weryfikacja cyfry kontrolnej SSCC (wymaga using System.Linq)
static bool IsValidSscc(string sscc)
{
    if (sscc == null || sscc.Length != 18 || !sscc.All(char.IsDigit))
        return false;

    int sum = 0;
    for (int i = 0; i < 17; i++)
    {
        int digit = sscc[i] - '0';
        sum += (i % 2 == 0) ? digit * 3 : digit;
    }

    int check = (10 - sum % 10) % 10;
    return check == sscc[17] - '0';
}

Walidacja na terminalu odrzuca błędny odczyt, zanim trafi do bazy. Drugą barierą jest unikalny indeks na kolumnie numeru palety w tabeli stanów. Ta sama paleta zeskanowana dwa razy, na przykład przez dwóch magazynierów na sąsiednich rampach, nie zostanie przyjęta podwójnie.

CREATE UNIQUE NONCLUSTERED INDEX UX_Pallet_Sscc
    ON dbo.Pallet (Sscc)
    WHERE Sscc IS NOT NULL;

Filtr WHERE Sscc IS NOT NULL pozwala trzymać w tej samej tabeli palety z numerem wewnętrznym, które SSCC nie mają. Drugi zapis tego samego numeru kończy się błędem 2601, a aplikacja na terminalu pokazuje komunikat o palecie już przyjętej, zamiast cicho dublować stan.

Ilustracja: paleta z kartonami oklejonymi etykietami z kodami kreskowymi i kodami dwuwymiarowymi w ciemnym magazynie z regałami w tle
Paleta z etykietami logistycznymi. Skan kodu GS1-128 z identyfikatorem (00) nadaje palecie numer, pod którym WMS śledzi ją od rampy do lokalizacji.

Paleta mieszana i dostawca bez etykiet GS1

Etykieta z identyfikatorami (02) i (37) opisuje paletę jednorodną. Na palecie mieszanej takich danych nie ma, bo na jednym nośniku leży kilka towarów. Magazynier skanuje wtedy SSCC palety, a następnie kody kartonów, i dopiero te skany tworzą pozycje przyjęcia.

Dostawca, który w ogóle nie etykietuje palet, wymusza nadanie numeru na rampie. WMS generuje wtedy wewnętrzny numer palety, a drukarka etykiet, na przykład Zebra sterowana językiem ZPL, drukuje go przy rozładunku. Od tej chwili paleta jest śledzona tak samo jak paleta z SSCC dostawcy, choć jej numer nie pochodzi z puli GS1.

Obsługa rozbieżności między awizacją a dostawą

Rozbieżność zapisuje się przy pozycji dokumentu przyjęcia, a nie w osobnym zeszycie. Formularz przyjęcia ma pole uwag do pozycji oraz zakładki na zdjęcia i załączniki. Zdjęcie uszkodzonej palety wykonane na rampie trafia do tego samego dokumentu, który zobaczy dział zakupów.

Rodzaj rozbieżnościJak ją wykryćTypowa decyzja
Niedobórilość przyjęta mniejsza od awizowanejprotokół niezgodności i korekta zamówienia
Nadwyżkailość przyjęta większa od awizowanejprzyjęcie zgodnie z umową albo zwrot przy kierowcy
Towar spoza awizacjipozycja bez odpowiednika w awizacjiwstrzymanie pozycji do decyzji zakupów
Uszkodzenieoględziny przy rozładunku, zdjęcieprzyjęcie warunkowe albo odmowa przyjęcia pozycji

Dokument z rozbieżnościami pozostaje w buforze. W bazie oznacza to status 0 w kolumnie ACH, a zatwierdzenie zmienia go na 1 i dopiero wtedy zwiększa stan magazynu. Bufor chroni stany przed towarem, o którego przyjęciu nikt jeszcze nie zdecydował.

  • Zapis przy rampie - magazynier dokumentuje różnicę w chwili wykrycia, ze zdjęciem i wskazaniem osoby stwierdzającej.
  • Decyzja poza rampą - dział zakupów rozstrzyga rozbieżność na podstawie dokumentu, bez telefonów do magazynu.

Kontrolę rozładunku coraz częściej wspiera analiza obrazu z kamer nad rampą. Ocenę takich rozwiązań przedstawia artykuł o komputerowej wizji w kontroli rozładunku.

Przyjęcie bez awizacji

Część dostaw zawsze przyjeżdża bez zgłoszenia. Na bramie taki pojazd rejestruje się jako wjazd nieawizowany, a w WMS towar przyjmuje się dokumentem PZB, czyli przyjęciem bezpośrednim bez zlecenia. Magazynier wprowadza wtedy pozycje ręcznie albo skanerem, a numer awizo zostaje pusty.

Przyjęcie bezpośrednie działa, ale kosztuje więcej pracy na rampie i nie daje porównania z oczekiwaną ilością. Odsetek przyjęć PZB w stosunku do przyjęć ze zlecenia jest dobrą miarą dyscypliny dostawców. Gdy rośnie, magazyn wraca do rozmowy o obowiązku awizacji i o tym, jak dobrać okna czasowe do rytmu dostaw.

Ogólny opis procesu, od rozładunku po odłożenie towaru w lokalizacji, zawiera artykuł o przyjęciu towaru do magazynu. Rodzaje dokumentów magazynowych i ich zastosowanie omawia też poradnik producenta o dokumentach magazynowych PZ i WZ.

Pomiar czasu obsługi przyjęcia

Awizacja z numerem powiązanym z dokumentem przyjęcia pozwala mierzyć pracę rampy. Raport średniego czasu obsługi przyjęcia przez magazyniera zestawia dla każdej osoby i każdego magazynu liczbę awizacji i średnią liczbę palet. Obok podaje średni czas obsługi w minutach. Raport generuje się za wybrany przedział dat w sekcji Informacje.

Raport średni czas obsługi przyjęcia przez magazyniera w sekcji Informacje: tabela z kolumnami Magazynier, Magazyn, Ilość awizacji, Średnia liczba palet i Średni czas w minutach oraz wierszem Ogółem
Raport czasu obsługi przyjęcia. Zestawienie liczby palet z czasem obsługi pokazuje, które magazyny i zmiany potrzebują innej obsady ramp.

Średni czas warto czytać razem ze średnią liczbą palet. Magazyn z krótszym czasem obsługi może po prostu przyjmować mniejsze dostawy. Porównywalną miarą jest czas na paletę, który da się wyliczyć z tych samych kolumn.

  • Czas na paletę - średni czas obsługi podzielony przez średnią liczbę palet, porównywalny między magazynami.
  • Czas od wjazdu do rozpoczęcia rozładunku - różnica między zapisem na bramie a startem obsługi na rampie, miara kolejki przed rampami.

Długi czas od wjazdu do rozpoczęcia rozładunku przy krótkim czasie samej obsługi oznacza, że wąskim gardłem jest liczba wolnych ramp, a nie tempo pracy magazynierów. Taki wynik jest podstawą do zmiany rozkładu okien w kalendarzu albo do przydziału dodatkowej rampy przyjęciowej w godzinach szczytu.