Magazyn firmy produkcyjnej obsługuje dwa przepływy, które przecinają się na hali. Surowce płyną z magazynu na linię, a wyroby gotowe wracają z linii do magazynu. Każdy przepływ ma inny rytm i inne ryzyka. System do magazynu musi rozpoznawać, z którym z nich ma do czynienia w danej chwili.
Ten tekst opisuje oba przepływy od strony dokumentów oraz transakcji w bazie. Dokumenty magazynowe omawia szerzej tekst o dokumentach magazynowych, a różnice między nimi wyjaśnia materiał o pięciu podstawowych dokumentach magazynowych.
System do magazynu a dwa przepływy produkcyjne
Firma produkcyjna kupuje surowce, a po ich przetworzeniu sprzedaje wyroby. W magazynie każdy z tych kroków zostawia dokument, a wszystkie zestawia tabela poniżej. Wysyłkę do klienta i jej zasady opisuje tekst o wydaniu z magazynu.
| Dokument | Kierunek | Kto go inicjuje | Co sprawdza system |
|---|---|---|---|
| PZ | Dostawca do magazynu surowców | Magazynier przy rozładunku | Zgodność z zamówieniem zakupu oraz dane partii |
| RW | Magazyn surowców do produkcji | Zlecenie produkcyjne | Dostępność partii, status jakościowy, zgodność ze składnikami zlecenia |
| PW | Produkcja do magazynu wyrobów | Zgłoszenie ze zlecenia | Ilość względem zlecenia, numer partii wyrobu |
| WZ | Magazyn wyrobów do klienta | Zamówienie sprzedaży | Rezerwacja, rotacja FEFO, zgodność z wymaganiami odbiorcy |
| MM | Między magazynami | Kierownik magazynu lub zlecenie uzupełnienia | Stan w magazynie źródłowym, lokacja docelowa |
Magazyny wielopoziomowe w zakładzie
Zakład rzadko ma jeden magazyn. Zwykle działają trzy poziomy, opisane jako osobne obszary w bazie. Pierwszy to surowce, drugi to bufor przy linii, trzeci to wyroby gotowe. Wydanie z magazynu surowców do przyprodukcyjnego nie zużywa jeszcze towaru. Zużycie następuje dopiero, gdy produkcja go pobierze lub gdy system rozliczy je wstecz.
Taki podział pozwala odróżnić surowiec, który czeka, od surowca w produkcji w toku. Ten drugi ma osobny stan i nie wchodzi do alokacji sprzedaży, choć księgowo pozostaje własnością firmy.
Lokacje przy linii wymagają własnych reguł. Bufor przy stanowisku ma niewielką pojemność i limit czasu, po którym niewykorzystany surowiec wraca do magazynu głównego. Reguła zapobiega sytuacji, w której towar wydany na zlecenie sprzed tygodnia leży przy maszynie, a system uznaje go za zużyty. Lokacje buforowe mają w bazie typ różny od regałowych, więc alokacja sprzedaży nigdy ich nie bierze pod uwagę.
Wydanie surowców na zlecenie produkcyjne
Zlecenie produkcyjne rozwija się na składniki według wykazu materiałowego. Dla każdego składnika system liczy zapotrzebowanie jako iloczyn ilości na sztukę i liczby sztuk zlecenia. Następnie tworzy listę wydań, na której partie dobrane są według reguły rotacji. Zasady doboru opisuje tekst o programie do magazynowania towarów.
Wydanie surowca na produkcję jest operacją, w której błąd kosztuje dwa razy: raz w stanie magazynu, drugi raz w kosztach zlecenia. Potwierdzenie takiego wydania zamyka więc w jednej transakcji trzy zmiany. Stan partii maleje, powstaje ruch w historii, a zlecenie odnotowuje zużycie.
CREATE PROCEDURE dbo.usp_PotwierdzWydanieRW
@ZlecenieId int,
@KodTowaru varchar(30),
@NumerPartii varchar(30),
@LokacjaId int,
@Ilosc decimal(18,3)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
UPDATE dbo.StanPartii
SET Ilosc = Ilosc - @Ilosc
WHERE KodTowaru = @KodTowaru AND NumerPartii = @NumerPartii
AND LokacjaId = @LokacjaId AND Ilosc >= @Ilosc;
IF @@ROWCOUNT = 0
THROW 50001, 'Stan partii w lokacji jest niższy niż ilość wydania.', 1;
INSERT dbo.RuchLog (ZlecenieId, KodTowaru, NumerPartii, LokacjaId, TypRuchu, Ilosc)
VALUES (@ZlecenieId, @KodTowaru, @NumerPartii, @LokacjaId, 'RW', -@Ilosc);
UPDATE dbo.ZlecenieSkladnik
SET IloscWydana = IloscWydana + @Ilosc
WHERE ZlecenieId = @ZlecenieId AND KodTowaru = @KodTowaru;
COMMIT TRANSACTION;
END;
Reguła: stan zmniejsza warunek w samym poleceniu UPDATE, a nie sprawdzenie w osobnym SELECT, bo między odczytem a zapisem inny użytkownik mógłby zabrać ten sam towar.
Opcja XACT_ABORT sprawia, że każdy błąd wykonania cofa całą transakcję, a instrukcja THROW zgłasza własny błąd z komunikatem dla aplikacji terminala. Nazwy tabel i kolumn w przykładzie są umowne i nie opisują schematu żadnego produktu.
Rezerwacja partii pod zlecenie
Zwolnienie zlecenia do produkcji rezerwuje partie surowców, zanim ktokolwiek je pobierze. Rezerwacja zmniejsza stan dostępny dla innych zleceń, ale nie zmienia stanu fizycznego. Dzięki temu dwa zlecenia planowane na ten sam dzień nie obiecują sobie tej samej partii. Zapas z terminem ważności rezerwuje się w kolejności FEFO, więc najkrótsze terminy trafiają do zleceń najbliższych w harmonogramie.
Bywa, że planowana partia jest niedostępna, na przykład z powodu kwarantanny. System proponuje wtedy zamiennik z innej partii tego samego składnika i zapisuje zmianę w historii zlecenia. Zamiana partii nie wymaga nowego zlecenia, ale wymaga zgody, jeśli receptura ogranicza dopuszczalne partie.
Zwrot nadwyżki i zużycie ponad normę
Rzeczywistość rzadko pokrywa się z normą. Produkcja zwraca niewykorzystany surowiec albo pobiera dodatkowy z powodu odpadu. Oba przypadki mają własne dokumenty: zwrot z produkcji zwiększa stan magazynu i zmniejsza zużycie zlecenia, a wydanie uzupełniające zwiększa zużycie ponad normę i wymaga powodu z listy.
Powody odpadu zapisane w słowniku, a nie w polu tekstowym, pozwalają później policzyć, które składniki są tracone najczęściej. Zlecenie, na którym zużycie przekracza normę o ustalony margines, trafia do przeglądu technologa.

Przyjęcie wyrobu gotowego z produkcji
Przyjęcie z produkcji zaczyna się na linii, a nie przy rampie. Pracownik zgłasza ilość wyrobu ze zlecenia, system nadaje numer partii wyrobu i drukuje etykietę palety. Etykieta niesie kod GS1 z numerem SSCC, który identyfikuje jednostkę logistyczną w całym łańcuchu dostaw. Budowę etykiety opisuje tekst o etykiecie logistycznej GS1.
Numer SSCC ma osiemnaście cyfr, a ostatnia jest cyfrą kontrolną liczoną z poprzednich siedemnastu. Obliczenie jest proste, więc system może je wykonać w bazie i odrzucać błędnie wpisane numery. Poniższa funkcja pokazuje algorytm.
CREATE FUNCTION dbo.fn_SsccCyfraKontrolna (@dane char(17))
RETURNS tinyint
AS
BEGIN
DECLARE @i int = 1, @suma int = 0;
WHILE @i <= 17
BEGIN
-- pozycje nieparzyste liczone od prawej mają wagę 3, parzyste wagę 1
SET @suma += CAST(SUBSTRING(@dane, @i, 1) AS int)
* CASE WHEN (18 - @i) % 2 = 1 THEN 3 ELSE 1 END;
SET @i += 1;
END;
RETURN (10 - @suma % 10) % 10;
END;
Data ważności wyrobu wynika z daty produkcji i okresu przydatności zapisanego w kartotece. System liczy ją przy przyjęciu i drukuje na etykiecie, więc pracownik nie wpisuje jej ręcznie. Zapis w kartotece pozwala też odrzucić zgłoszenie, w którym data produkcji leży w przyszłości, co zdarza się przy błędnie ustawionym zegarze urządzenia.

Status kontroli jakości po przyjęciu
Wyrób z linii nie musi być od razu dostępny dla sprzedaży. Jeśli proces wymaga kontroli jakości, dokument PW nadaje partii status kwarantanny, a zwolnienie następuje po decyzji kontrolera. Do tego czasu paleta leży w magazynie, ale alokacja wydań jej nie widzi. Mechanizm statusów opisano w tekście o programie do magazynowania w chłodni i przy towarach ADR, a proces kontroli w tekście o kontroli jakości w systemie produkcyjnym.
Produkcja zostawia też odpady i wyroby uboczne. Wyrób uboczny, na przykład skrawki nadające się do sprzedaży, dostaje własny indeks i dokument PW z tego samego zlecenia. Odpad trafia na osobną lokację o statusie do utylizacji, a jego ilość obciąża zlecenie jako strata. Bez tego rozdziału różnica między surowcem wydanym a wyrobem przyjętym nie ma wyjaśnienia w dokumentach.
Przyjęcie bywa częściowe. Zlecenie na tysiąc sztuk kończy się kilkoma paletami zgłaszanymi w ciągu zmiany, więc jedno zlecenie tworzy kilka dokumentów PW. System zamyka zlecenie dopiero po potwierdzeniu przez technologa lub po osiągnięciu zadanej ilości z tolerancją.
Produkcja w toku i rozliczenie wsteczne
Między wydaniem surowca a przyjęciem wyrobu towar żyje w produkcji w toku. Istnieją dwie metody rejestrowania jego zużycia, które różnią się momentem powstania dokumentu RW.
| Metoda | Kiedy powstaje RW | Zaleta | Ryzyko |
|---|---|---|---|
| Zużycie rejestrowane | Przy każdym pobraniu na hali | Aktualny stan produkcji w toku | Więcej skanów, ryzyko pominięcia zgłoszenia |
| Rozliczenie wsteczne | Przy zgłoszeniu ilości wyrobu | Mało skanów na hali | Zależność od dokładności wykazu materiałowego |
Półprodukty komplikują ten obraz. Wyrób jednego zlecenia bywa surowcem drugiego, na przykład mieszanka przygotowana na pierwszej zmianie i zużyta na drugiej. Półprodukt dostaje wtedy własną kartotekę, dokument PW z pierwszego zlecenia i dokument RW na drugie. Numer partii półproduktu przechodzi do tabeli zużycia, więc łańcuch identyfikowalności nie urywa się na etapie pośrednim.
Rozliczenie wsteczne mnoży ilość zgłoszonego wyrobu przez normy z wykazu materiałowego i generuje RW dla każdego składnika. Sprawdza się przy składnikach tanich i masowych, na przykład opakowaniach. Drogie surowce lepiej rejestrować bezpośrednio, bo różnica między normą a rzeczywistością jest wtedy kosztowna. Zasady wykazów opisuje tekst o emisji zleceń produkcyjnych.
Partie i identyfikowalność w produkcji
Identyfikowalność wymaga połączenia dwóch numerów: partii surowca i partii wyrobu. Łączy je tabela zużycia partii, wypełniana przy każdym RW lub przy rozliczeniu wstecznym. Wystarczy jedno zapytanie, aby po wykryciu wadliwej partii surowca wskazać wyroby do wycofania.
SELECT DISTINCT w.NumerPartiiWyrobu, w.KodWyrobu
FROM dbo.ZuzyciePartii AS z
JOIN dbo.PartiaWyrobu AS w ON w.ZlecenieId = z.ZlecenieId
WHERE z.KodSurowca = @KodSurowca
AND z.NumerPartiiSurowca = @NumerPartii;
Zapytanie w drugą stronę, od partii wyrobu do partii surowców, obsługuje reklamację klienta. Oba kierunki korzystają z tego samego zapisu, więc nie wymagają osobnych danych. Zasady ewidencji partii opisano w tekście o partiach produkcyjnych w ewidencji magazynowej.
Wiarygodność takiego zapytania sprawdza się w ćwiczeniu wycofania. Wybiera się jedną partię surowca i mierzy czas, w jakim system wskaże wszystkie wyroby oraz odbiorców, do których trafiły. Wynik zależy od kompletności zapisów: jeśli część zużycia rozliczono zbiorczo, zapytanie zwraca zbyt szeroką listę i trzeba wycofać więcej towaru, niż wymagałaby sytuacja. Ćwiczenie ujawnia takie luki, zanim pojawi się rzeczywista reklamacja.
Wymiana danych z planowaniem produkcji
Zlecenia produkcyjne powstają zwykle w systemie ERP lub w module planowania, a magazyn je wykonuje. System do magazynu odbiera zlecenie z listą składników i zwraca potwierdzenia wydanych ilości oraz przyjętych wyrobów. Wymiana odbywa się przez usługę REST lub kolejkę, a nie przez bezpośredni zapis do tabel drugiego systemu.
Ważna jest idempotentność. Ponowione potwierdzenie, na przykład po przerwaniu łączności, nie może utworzyć drugiego dokumentu PW. Zapewnia to unikalny klucz identyfikatora komunikatu w tabeli potwierdzeń, opisany w dokumentacji ograniczeń unikalności. Drugi zapis kończy się błędem klucza, który aplikacja odbiera jako sygnał, że komunikat został już przetworzony.
Reguła: każdy komunikat ma identyfikator, a jego powtórzenie nie zmienia stanu magazynu.
Drugim zagadnieniem jest kolejność zdarzeń. Potwierdzenie przyjęcia wyrobu może dotrzeć do ERP przed potwierdzeniem ostatniego wydania surowca, jeśli oba wysłano z różnych urządzeń. System odbiorczy powinien więc opierać się na znacznikach czasu i numerach dokumentów, a nie na kolejności nadejścia. Komunikaty niezgodne z aktualnym stanem zlecenia trafiają do kolejki błędów, którą przegląda administrator, a nie do cichego odrzucenia.
Ogólne zasady łączenia systemów przedstawia tekst o integracji systemów magazynowych, a rolę ERP w produkcji omawia artykuł o oprogramowaniu ERP w produkcji.
Uruchomienie magazynu w zakładzie produkcyjnym
Wdrożenie zaczyna się od odwzorowania przepływów na dokumenty i lokacje. Trzy poziomy magazynów opisuje się jako osobne obszary z własnymi regułami przyjęć i wydań. Statusy jakościowe i słowniki powodów odpadu definiuje się przed pierwszym zleceniem, bo późniejsza zmiana słowników wymaga przeliczenia historii.
- Odwzorowanie przepływów - trzy poziomy magazynów zapisane jako osobne obszary z własnymi regułami.
- Słowniki - statusy jakościowe i powody odpadu ustalone przed pierwszym zleceniem.
- Test bilansu - przejście kilku zleceń przez cały cykl i porównanie sum dokumentów.
- Praca równoległa - krótki okres, w którym nowy system i dotychczasowa ewidencja działają obok siebie.
Test odbiorczy opiera się na bilansie materiałowym. Dla jednego surowca suma przyjęć minus suma zużycia minus stan końcowy powinna wynosić zero, z dokładnością do udokumentowanych ubytków. Różnica wskazuje miejsce, w którym dokument nie powstał albo powstał dwa razy. Test przeprowadza się na dwóch zleceniach: jednym z pełnym przyjęciem, drugim z przyjęciem częściowym i zwrotem nadwyżki.
Po wdrożeniu porównuje się stan systemowy ze stanem policzonym w cyklicznej inwentaryzacji, opisanej w tekście o inwentaryzacji w magazynie. Rozbieżność większa od normy oznacza powtórne liczenie strefy, a nie korektę na oko.



