Procedury mroźni w Studio WMS.net zwracają błędy i ostrzeżenia jako jeden wiersz danych z kodem w nawiasie kwadratowym na początku tekstu i kolumną POZIOM: 0 w porządku, 1 ostrzeżenie do potwierdzenia, 2 odmowa. Wariant rozwojowy w3 (chłodnia) dostał zakres 54xxx, bo wszystkie setki 51xxx mają już przypisany obszar, a wstępna specyfikacja próbowała użyć zajętych kodów. Podział 540xx-546xx wskazuje obszar problemu: temperatura, TOR, waga zmienna, statusy weterynaryjne, wymagania odbiorcy, usługi i praca w zimnie. Każdy zakres ma własne etapy i testy.
Jak procedura zwraca błąd lub ostrzeżenie
Procedury mroźni (sp_mro_*) nie sygnalizują problemów przez RAISERROR ani parametry wyjściowe. Każda procedura akcji zwraca jeden wiersz z kolumnami OK, KOMUNIKAT, ID i NR, a kontrole ostrzegawcze dodają kolumnę POZIOM. Przyczyna jest praktyczna. Ekrany wołają procedury przez warstwę zapytań _code_sql, a błąd SQL zgłoszony przy zapisie wywołanym przez ssExSQL cofa zapis, ale nie wraca do ekranu. Parametrów OUTPUT ta warstwa także nie odbiera, a komunikat w wierszu odpowiedzi dociera zawsze.
Treść komunikatu zaczyna się od kodu: pięciu cyfr w nawiasie kwadratowym. Ekran wyciąga kod z początku tekstu i może na jego podstawie zmienić zachowanie, a użytkownikowi pokazuje sam tekst, przetłumaczony na język konta.
| POZIOM | Znaczenie | Zachowanie terminala |
|---|---|---|
| 0 | w porządku | operacja wykonana, bez komunikatu albo z informacją |
| 1 | ostrzeżenie do potwierdzenia | baner bursztynowy i wibracja; drugi ENTER wywołuje procedurę ponownie z parametrem potwierdz=1 |
| 2 | odmowa | baner czerwony i wibracja, zaznaczony wpis i kursor w polu skanu; dalszy ruch wymaga zmiany danych albo decyzji kierownika |
Przykład odpowiedzi procedury przy próbie odłożenia lodów do zbyt ciepłej komory:
SELECT CAST(0 AS bit) AS OK,
N'[54001] Gniazdo K2A-01-1 ma -18 °C, a lody wymagają -22 °C lub zimniej - wybierz gniazdo w komorze K1.' AS KOMUNIKAT,
CAST(NULL AS bigint) AS ID,
CAST(NULL AS varchar(20)) AS NR,
2 AS POZIOM;

Dlaczego wariant w3 dostał zakres 54xxx
W mroźni trzecia cyfra kodu, czyli setka, wskazuje obszar: 511xx to przyjęcie, 512xx odłożenie, 513xx kompletacja i tak dalej. Dzięki temu serwisant po samym numerze wie, w której procedurze szukać. W skryptach mroźni występuje około dziewięćdziesięciu kodów 51xxx rozłożonych na wszystkie dziesięć setek od 510xx do 519xx.
| Setka | Obszar | Przykładowe kody w użyciu |
|---|---|---|
| 510xx | ogólne, błąd zapisu | 51000-51005 |
| 511xx | przyjęcie nośników MIX, ważenie brutto i netto | 51101-51123 |
| 512xx | odłożenie do gniazda, walidacje lokalizacji | 51201-51208 |
| 513xx | kompletacja, FEFO, palety wysyłkowe | 51301-51317 |
| 514xx, 515xx | kartony depozytora, przeładunek cross-docking | 51401-51403, 51501-51504 |
| 516xx, 517xx | awiza, zlecenia depozytora, panel klienta | 51601-51611, 51701-51712 |
| 518xx, 519xx | import stanów otwarcia, generator danych demo | 51801-51802, 51981-51993 |
Pula nie jest wyczerpana liczbowo, ale każda setka ma już właściciela. Dopisanie obszaru do któregoś z nich zatarłoby zasadę, że kod wskazuje moduł. Dlatego wariant w3 (chłodnia) dostał wolny zakres 54xxx. Przed przydziałem sprawdzono skrypty migracyjne i dokumentację: żaden kod 54xxx nie występował poza projektem mroźni.
Kolizja wykryta w specyfikacji wstępnej
Wstępny projekt modułów TOR i wagi zmiennej próbował użyć kodów 51201-51203, zajętych przez odłożenie, oraz 51105, zajętego przez rozbicie wag. Wdrożenie tych kodów nadpisałoby znaczenie istniejących komunikatów, a ekrany rozpoznające je po numerze zachowałyby się niewłaściwie w transakcjach, które działają. Błąd wychwycił przegląd projektu przed napisaniem kodu, a nowe komunikaty przeniesiono do zakresu 54xxx.
Podział zakresów 54xxx
Zakres 54xxx jest podzielony według tej samej zasady co 51xxx. Wariant w3 rozwija mroźnię w pięciu etapach: E1 to klasy temperatur, TOR i atrybuty partii, E2 statusy i identyfikowalność, E3 telemetria temperatur, E4 mapa gniazd i rotacja, E5 waga zmienna i usługi chłodnicze. Tabela zbiera kody według zakresów i etapów.
| Zakres | Obszar | Etap | Kody |
|---|---|---|---|
| 540xx | temperatura gniazda i komory, odczyty | E1, E3 | 54001-54003 |
| 541xx | TOR, czas poza chłodnią | E1 | 54101-54107 |
| 542xx | waga zmienna | E5 | 54201-54203 |
| 543xx | atrybuty partii, statusy weterynaryjne, kwarantanna | E1, E2 | 54301-54304 |
| 544xx | wymagania odbiorcy, FEFO procentowe | E2 | 54401 |
| 545xx | usługi chłodnicze i rozliczenie | E5 | ostrzeżenia i błędy naliczania usług |
| 546xx | praca w zimnie, moduł opcjonalny | opcja | 54601 |
Zakresy po kolei
540xx - temperatura gniazda i komory
Kod 54001 odmawia odłożenia towaru do gniazda cieplejszego, niż wymaga towar: lody wymagające -22 °C kierowane do komory K2 o temperaturze -18 °C dostają odmowę z podpowiedzią komory K1. Kod 54003 działa w odwrotnym kierunku, gdy towar ma dolną granicę temperatury, na przykład towar chłodzony, którego nie wolno składować zbyt zimno. W etapie E1 porównanie opiera się na nominalnej klasie temperatury gniazda z kartoteki. Kod 54002 w etapie E3 (opisanym w artykule Monitoring temperatury komór chłodniczych) opiera się na temperaturze zmierzonej: komora w stanie odchylenia lub awarii blokuje odłożenie towaru, który wymaga zimniejszego otoczenia, na przykład komunikatem, że komora K2 ma teraz -14,5 °C przy normie -18 °C.
541xx - TOR
Zakres obsługuje licznik czasu poza chłodnią. Kod 54101 ostrzega po przekroczeniu progu, 54102 informuje o przekroczeniu limitu przy akcji ostrzeżenie, 54103 blokuje odłożenie do komory przy akcji blokada, a 54104 pozwala odłożyć nośnik i nadaje mu status Kwarantanna TOR. Kody 54105-54107 obsługują ręczne skierowanie nośnika na kwarantannę przez kierownika: brak powodu, nośnik niebędący poza chłodnią w przyjęciu i nośnik, który ma już status. Pełny opis progów, akcji i przykład na osi czasu zawiera artykuł Czas poza chłodnią (TOR) w WMS.
| Kod | POZIOM | Sytuacja |
|---|---|---|
| 54101 | 1 | przekroczony próg ostrzeżenia, odłóż nośnik w pierwszej kolejności |
| 54102 | 1 | przekroczony limit, akcja ostrzeżenie, odłożenie z zapisem |
| 54103 | 2 | przekroczony limit, akcja blokada, odłożenie do komory zablokowane |
| 54104 | 1 | przekroczony limit, akcja kwarantanna, odłożenie ze statusem |
542xx - waga zmienna
Zakres reguluje tolerancje wagi kartonów o niejednorodnej masie i należy do etapu E5. Kod 54201 ostrzega, gdy średnia waga kartonu wykracza poza widełki z kartoteki, i wymaga potwierdzenia z wpisem do rejestru rozbieżności. Kod 54202 twardo blokuje ponowne zeskanowanie tego samego numeru seryjnego kartonu z identyfikatora GS1 AI 21. Kod 54203 ostrzega, gdy suma wag przy kompletacji wychodzi poza dopuszczalną tolerancję zamówienia w kilogramach. Tło opisuje artykuł Catch weight w WMS, a rozliczenie wagi i ususzek tekst Usługi chłodnicze w rozliczeniu 3PL.
543xx - atrybuty partii i statusy weterynaryjne
W etapie E1 zakres obejmuje kontrolę atrybutów partii. Kod 54301 odrzuca przyjęcie tej samej partii z innym numerem zakładu lub ubojni niż zarejestrowany, 54303 wymaga numeru weterynaryjnego zakładu dla grup towarowych, które go wymagają, a 54304 pilnuje kolejności dat, na przykład daty pierwszego zamrożenia względem dnia dzisiejszego. Kod 54302 z etapu E2 blokuje kompletację i wydanie partii ze statusem sanitarnym (szczegóły w artykule Identyfikowalność partii i kwarantanna w WMS dla mroźni).
Status działa jako kwarantanna wirtualna: nośnik zostaje w gnieździe, a stan dyspozycyjny jest pomniejszany o zablokowane ilości. Słownik statusów obejmuje próbę do badań, zatrzymanie sanitarne, kwarantannę po przekroczeniu TOR, kwarantannę temperaturową, kwarantannę jakościową i zwolnienie weterynaryjne. Rozdzielenie bieżącego stanu od historii zmian daje ślad audytowy dla każdej decyzji.
544xx - wymagania odbiorcy
Sieci handlowe wymagają często minimalnego procentu całkowitego okresu przydatności w chwili wydania. Kod 54401 odmawia pobrania kartonu partii, która tego nie spełnia, a mechanizm opisuje ten sam artykuł o identyfikowalności. Pozostały procent okresu to różnica terminu przydatności i dnia bieżącego, podzielona przez różnicę terminu przydatności i daty początkowej. Datą początkową jest kolejno data produkcji, data zamrożenia partii albo termin pomniejszony o całkowity okres przydatności z kartoteki, a gdy brakuje wszystkich trzech, partia jest odrzucana.
545xx - usługi chłodnicze i rozliczenie
Zakres jest zarezerwowany dla ewidencji operacji rozliczeniowych 3PL (artykuł o usługach chłodniczych): prądu postojowego naczepy, zamrażania szokowego, temperowania i magazynowania w masie. Błędy i ostrzeżenia naliczania usług mają własny zakres, dzięki czemu nie mieszają się z komunikatami operacji magazynowych.
546xx - praca w zimnie, moduł opcjonalny
Kod 54601 odmawia przydzielenia kolejnego zadania w komorze po przekroczeniu limitu ciągłego pobytu pracownika i prosi o zarejestrowanie przerwy. Wartość limitu ustawia klient zgodnie z własną oceną ryzyka zawodowego, a system nie zakłada wartości z przepisów.
Zasady dodawania nowych kodów
Poniższe reguły pozwalają utrzymać porządek, gdy zakres 54xxx będzie się rozrastał.
- Sprawdź, czy kod jest wolny. Przed przydziałem przeszukaj skrypty i dokumentację, na przykład poleceniem poniżej, i dopisz nowy kod do tabeli zakresów.
grep -ohE '\[5[0-9]{4}\]' *.sql | sort -u- Zwracaj komunikat w wierszu. Walidacja ustawia komunikat i przechodzi do końca procedury, bez
THROWiRAISERROR. - Dobierz poziom. Ostrzeżenie ma POZIOM 1 i potwierdzenie przez
potwierdz=1, odmowa ma POZIOM 2. - Powtórz kontrolę po stronie bazy. Ta sama reguła działa w procedurze zapisującej, więc ominięcie ekranu niczego nie zmienia.
- Pozwól wyłączyć kontrolę. Każda nowa kontrola ma parametr włączający, na przykład
MRO_TOR_WLACZ, żeby demo pokazało zachowanie przed i po. - Tłumacz tekst, nie kod. Treść przechodzi przez słownik języków, a kod zostaje w oryginale.
- Testuj każdy kod. Test w transakcji wycofywanej ma przypadek wywołujący komunikat i przypadek, w którym kontrola przepuszcza poprawne dane.
Podsumowanie
Procedury mroźni zwracają błędy i ostrzeżenia jako dane: wiersz z komunikatem, kodem na początku tekstu i poziomem 0, 1 lub 2. Wariant w3 dostał zakres 54xxx, bo wszystkie setki 51xxx mają już przypisany obszar, a wstępna specyfikacja próbowała użyć zajętych kodów. Podział na setki pozwala po numerze błędu wskazać obszar problemu, a reguły dodawania kodów chronią ten porządek przy kolejnych etapach.
Zakres funkcjonalny wersji dla mroźni opisuje artykuł o systemie WMS dla mroźni i chłodni, a ekrany terminala instrukcja WMS dla mroźni. Wersję podstawową sprawdzisz na koncie demo: demo WMS dla mroźni.