Kartoteka towaru jest w systemie WMS ekranem, do którego magazynier wraca po każdym skanie. Otwiera ją przy przyjęciu, żeby sprawdzić jednostkę miary, i przy kompletacji, żeby potwierdzić lokalizację oraz dostępną ilość.
Budowę kartoteki i typy jej pól omawia artykuł o strukturze kartotek magazynowych, a ewidencję i dokumentację w ujęciu pełnym tekst o kartotekach magazynowych. Ten artykuł zajmuje się czym innym: tym, co dzieje się z kartoteką w trakcie zmiany. Wyjaśnia, jak operator ją odnajduje, co widzi na kolektorze, kto może coś w niej zmienić i jak dane zmieniają się w chwili potwierdzenia dokumentu PZ lub WZ.
Kartoteka jako ekran roboczy operatora
Kartoteka nie jest zbiorem pól, który ogląda się raz w miesiącu. Interfejs w pracy w systemie WMS musi być szybki i przewidywalny, bo każda dodatkowa sekunda szukania pozycji mnoży się przez setki operacji wykonywanych w ciągu zmiany.
Dobrze zaprojektowany ekran pokazuje od razu to, co potrzebne do bieżącej czynności: nazwę i indeks, stan na wybranej lokalizacji oraz jednostkę miary, a obok nich status pozycji (na przykład aktywna albo zablokowana). Historia obrotów oraz załączniki z danymi dostawcy są dostępne po wejściu w szczegóły, bo na pierwszym ekranie spowalniałyby operacje wykonywane najczęściej.
| Blok ekranu | Zawartość | Kiedy jest używany |
|---|---|---|
| Nagłówek | Indeks, nazwa, status pozycji | Przy każdym otwarciu kartoteki |
| Stan | Ilość na wybranej lokalizacji i jednostka miary | Przyjęcie towaru i kompletacja |
| Szczegóły | Historia obrotów, załączniki, dane dostawcy | Reklamacja i analiza rozbieżności |
Wyszukiwanie kartoteki po kodzie i skanie
Podstawowym sposobem odnalezienia kartoteki nie jest przewijanie listy, tylko zeskanowanie kodu z opakowania lub etykiety lokalizacji. Skaner wbudowany w kolektor albo podłączony do komputera odczytuje kod EAN lub kod wewnętrzny i otwiera odpowiednią kartotekę bez wpisywania indeksu. Kod SSCC identyfikuje paletę, więc prowadzi do zawartości jednostki, czyli do kartotek towarów, które na niej leżą. Praktykę skanowania opisuje artykuł o skanowaniu w magazynie.
Ścieżki wyszukiwania odpowiadają różnym sytuacjom na hali:
- Skan kodu towaru - najszybsza metoda przy przyjęciu i kompletacji, która praktycznie usuwa pomyłki z ręcznego wpisywania.
- Wpisanie indeksu lub fragmentu nazwy - stosowane przy uszkodzonej etykiecie albo pracy przy komputerze stacjonarnym.
- Skan kodu lokalizacji - pokazuje wszystkie kartoteki przypisane do regału lub pola odkładczego, co pomaga przy porządkowaniu przestrzeni.
- Filtrowanie po kategorii lub dostawcy - używane rzadziej, głównie przy przeglądach asortymentu.
Od strony bazy danych wyszukiwanie po kodzie musi opierać się na indeksie, bo skan wywołuje zapytanie przy każdej operacji. Klucz główny na kolumnie z kodem tworzy taki indeks i jednocześnie gwarantuje, że jeden kod wskazuje jeden towar. Przykładowa struktura wygląda następująco, a nazwy tabel i kolumn są wyłącznie ilustracją.
-- przykładowa tabela kodów i wyszukiwanie kartoteki po zeskanowanym kodzie
CREATE TABLE dbo.KodTowaru (
Kod varchar(40) NOT NULL, -- EAN albo kod wewnętrzny
IdTowaru int NOT NULL,
CONSTRAINT PK_KodTowaru PRIMARY KEY (Kod)
);
SELECT t.Indeks, t.Nazwa, t.Status
FROM dbo.KodTowaru AS k
JOIN dbo.Towar AS t ON t.IdTowaru = k.IdTowaru
WHERE k.Kod = @ZeskanowanyKod;
Unikalność kodu egzekwuje baza, a nie aplikacja, więc żaden import ani ręczna edycja nie doda dwóch towarów pod tym samym EAN. Mechanizm ograniczeń opisuje dokumentacja ograniczeń UNIQUE i CHECK w Microsoft Learn.

Jeżeli zeskanowany kod nie ma odpowiednika w kartotece, system od razu pokazuje komunikat zamiast przenosić operatora do pustego formularza. Przy pracy pod presją czasu taka informacja jest niezbędna, bo pozwala wychwycić towar niezarejestrowany w bazie, zanim trafi na niewłaściwą lokalizację.
Podgląd stanu kartoteki w czasie rzeczywistym
Po otwarciu kartoteki operator widzi stan taki, jaki jest w tej chwili, a nie taki, jaki wyliczył nocny proces. Uwzględnia on operacje wykonane minutę wcześniej przez innego pracownika w innej części magazynu. Przy dwóch osobach kompletujących z tej samej lokalizacji druga nie próbuje pobrać towaru, którego już nie ma.
Stan dzieli się na cztery poziomy szczegółowości, dostępne z jednej kartoteki:
- Stan sumaryczny - łączna ilość towaru na wszystkich lokalizacjach w magazynie.
- Stan według lokalizacji - rozbicie ilości na regały oraz strefy składowania.
- Stan zarezerwowany - ilość przypisana do otwartych zamówień, niedostępna do ponownego pobrania.
- Stan dostępny do wydania - różnica między stanem fizycznym a rezerwacjami, czyli to, czym operator faktycznie dysponuje.
Rozdzielenie stanu fizycznego od dostępnego jest częstym źródłem nieporozumień przy przejściu z arkusza na dedykowany system magazynowy. W arkuszu widać jedną liczbę, a w WMS operator od razu widzi, ile towaru leży na regale i ile jest już przypisane do innego zamówienia. Zapytanie poniżej pokazuje ten podział; sumy fizyczne i rezerwacje liczy się w osobnych podzapytaniach, żeby złączenie nie zdublowało wierszy przy towarze leżącym na wielu lokalizacjach.
-- przykładowy podgląd stanu fizycznego oraz stanu dostępnego do wydania
SELECT t.Indeks,
s.StanFizyczny,
ISNULL(r.Zarezerwowane, 0) AS Zarezerwowane,
s.StanFizyczny - ISNULL(r.Zarezerwowane, 0) AS DostepneDoWydania
FROM dbo.Towar AS t
JOIN (SELECT IdTowaru, SUM(Ilosc) AS StanFizyczny
FROM dbo.Stan GROUP BY IdTowaru) AS s ON s.IdTowaru = t.IdTowaru
LEFT JOIN (SELECT IdTowaru, SUM(Ilosc) AS Zarezerwowane
FROM dbo.Rezerwacja WHERE Status = 'OTWARTA' GROUP BY IdTowaru) AS r
ON r.IdTowaru = t.IdTowaru
WHERE t.Indeks = @Indeks;
Aktualność odczytu zależy od poziomu izolacji. Przy domyślnym READ COMMITTED odczyt widzi tylko zatwierdzone zmiany, ale może czekać na blokadę zakładaną przez trwającą modyfikację. Wersjonowanie wierszy pozwala czytać ostatnią zatwierdzoną wersję bez czekania, co ma znaczenie przy dziesiątkach terminali odpytujących te same tabele. Zasady opisuje przewodnik po blokadach i wersjonowaniu wierszy.
Uprawnienia i historia zmian w kartotece
Nie każdy użytkownik systemu powinien zmieniać wszystkie dane w kartotece. Operator kompletujący zamówienia potrzebuje potwierdzania pobrań i zgłaszania rozbieżności, ale nie powinien dowolnie zmieniać jednostki miary ani usuwać pozycji. Podział na role porządkuje pracę tam, gdzie z systemu korzysta jednocześnie kilkanaście lub kilkadziesiąt osób. Konsekwencje dla stanowisk opisuje artykuł o rolach i użytkownikach w systemie WMS.
| Rola | Podgląd kartoteki | Edycja danych podstawowych | Zakładanie kartoteki | Usuwanie pozycji |
|---|---|---|---|---|
| Operator magazynu | Tak | Nie | Nie | Nie |
| Kierownik zmiany | Tak | Tak, w ograniczonym zakresie pól | Tak | Nie |
| Administrator systemu | Tak | Tak, pełny zakres | Tak | Tak |
Każda modyfikacja, na przykład zmiana nazwy, jednostki miary albo statusu, zapisuje się razem z identyfikatorem użytkownika i znacznikiem czasu. Administrator odtwarza wtedy dokładnie, kto i kiedy wprowadził zmianę, bez przesłuchiwania całej zmiany roboczej. W SQL Server jednym ze sposobów przechowywania takiej historii są tabele temporalne, które same zapisują poprzednie wersje wierszy.
Reguła: zmianę jednostki miary po pierwszym ruchu towaru traktuje się jak migrację, a nie zwykłą edycję pola. Dokumenty historyczne liczą ilości w dawnej jednostce, więc podmiana wartości zmienia sens zapisanych operacji.
Równoległa edycja tej samej kartoteki
Gdy dwie osoby otwierają ten sam rekord, druga zapisana zmiana mogłaby po cichu nadpisać pierwszą. System zapobiega temu blokadą rekordu albo kontrolą wersji wiersza. Druga osoba dostaje wtedy informację, że kartoteka jest modyfikowana lub została zmieniona przez kogoś innego. Prosty wariant kontroli wersji opiera się na kolumnie typu rowversion, którą baza sama zwiększa przy każdej zmianie wiersza.
-- kontrola wersji wiersza: zapis się udaje, tylko gdy nikt nie zmienił kartoteki w międzyczasie
UPDATE dbo.Towar
SET Nazwa = @NowaNazwa
WHERE IdTowaru = @IdTowaru
AND WersjaWiersza = @WersjaOdczytana; -- WersjaWiersza: kolumna typu rowversion
IF @@ROWCOUNT = 0
THROW 50002, 'Kartoteka została zmieniona przez innego użytkownika.', 1;
Aktualizacja kartoteki po dokumentach PZ i WZ
Kartoteka aktualizuje się w chwili potwierdzenia dokumentu magazynowego, bez osobnego kroku przepisywania stanu. Zatwierdzenie przyjęcia zewnętrznego dopisuje ilość do stanu na wskazanej lokalizacji. Zatwierdzenie wydania zewnętrznego pomniejsza ją w tej samej chwili, a nie po zakończeniu zmiany. Typy dokumentów omawia strona o dokumentach magazynowych.
| Krok | Operator | System |
|---|---|---|
| 1 | Skanuje kod towaru i kod lokalizacji | Dopasowuje odczyt do pozycji w kartotece |
| 2 | Sprawdza podgląd ilości do potwierdzenia | Pokazuje ilość oczekiwaną i zeskanowaną |
| 3 | Zatwierdza zgodność albo zgłasza rozbieżność | Zapisuje różnicę przy pozycji dokumentu |
| 4 | Zamyka dokument PZ lub WZ | Przelicza stan kartoteki na lokalizacji |
| 5 | Nie wykonuje żadnej czynności | Udostępnia nowy stan wszystkim zalogowanym użytkownikom |
Zmiana statusu dokumentu i zmiana stanu muszą zajść razem albo wcale. Gdyby dokument zmienił status, a zapis stanu się nie powiódł, dane w kartotece i w dokumentach rozjechałyby się bez śladu w interfejsie. W bazie zapewnia to jedna transakcja, a warunek na statusie dokumentu chroni przed podwójnym zatwierdzeniem, na przykład po ponownym wysłaniu operacji przez kolektor.
-- przykładowe zatwierdzenie dokumentu: zmiana statusu i stanu w jednej transakcji
DECLARE @IdDok int = 1001;
BEGIN TRY
BEGIN TRANSACTION;
UPDATE dbo.DokumentMag
SET Status = 'ZATWIERDZONY', DataZatwierdzenia = SYSDATETIME()
WHERE IdDok = @IdDok AND Status = 'OTWARTY';
IF @@ROWCOUNT = 0
THROW 50001, 'Dokument nie istnieje albo został już zatwierdzony.', 1;
-- dla WZ ilość na pozycji dokumentu ma znak ujemny
UPDATE s
SET s.Ilosc = s.Ilosc + p.Ilosc
FROM dbo.Stan AS s
JOIN dbo.DokumentPoz AS p
ON p.IdTowaru = s.IdTowaru AND p.KodLokalizacji = s.KodLokalizacji
WHERE p.IdDok = @IdDok;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
Taki mechanizm eliminuje typowy problem arkuszy i ewidencji papierowej, w których stan aktualizowano na koniec dnia. W międzyczasie kolejne osoby pracowały na nieaktualnych danych, co kończyło się próbą wydania towaru, którego już nie było, albo blokowaniem sprzedaży towaru, który leżał na regale. Każdy, kto patrzy na dany indeks, widzi ten sam obraz stanu magazynowego.
Praca na kolektorach i urządzeniach mobilnych
Znaczna część operacji na kartotekach odbywa się na kolektorze danych lub smartfonie z systemem Android noszonym przy sobie przez całą zmianę. Ekran kartoteki na urządzeniu jest uproszczony względem widoku na komputerze: pokazuje pola potrzebne do bieżącej czynności, a resztę chowa pod dodatkowym przyciskiem. Urządzenia i ich integrację z systemem opisuje artykuł o kolektorze danych Android WMS, a aplikację od strony użytkownika strona o aplikacji magazynowej na Androida.
Praca mobilna różni się od pracy przy komputerze czterema cechami:
- Duże elementy dotykowe - przyciski i pola dopasowane do obsługi w rękawicach ochronnych.
- Skanowanie przed wpisywaniem - kolektor domyślnie otwiera tryb skanera, a klawiatura ekranowa pojawia się dopiero po jego wyłączeniu.
- Ograniczona łączność - część urządzeń buforuje operacje lokalnie i synchronizuje je z serwerem, gdy sieć Wi-Fi w danej strefie znów jest dostępna.
- Jedna kartoteka na ekranie - zamiast tabeli aplikacja pokazuje pojedynczą pozycję, co ogranicza ryzyko pomyłki w pośpiechu.

Buforowanie operacji wymaga ostrożności po stronie serwera. W czasie, gdy urządzenie było poza zasięgiem, stan mógł się zmienić za sprawą innego operatora, więc każda zbuforowana operacja powinna być przy synchronizacji ponownie zwalidowana względem bieżącego stanu, a nie wykonana na ślepo. Odrzucona operacja wraca do operatora z komunikatem, zamiast po cichu zafałszować ilość.
Nawyki zespołu ograniczające pomyłki w kartotekach
Sprawna obsługa kartotek zależy w równym stopniu od oprogramowania i od zachowań zespołu. Cztery zasady najskuteczniej ograniczają pomyłki i rozbieżności, więc warto je włączyć do szkolenia nowych operatorów:
- Skanowanie zamiast wpisywania - jedna pomylona cyfra w ręcznie wpisanym indeksie przenosi operację na inną kartotekę.
- Zgłaszanie rozbieżności od razu - zgłoszenie w chwili zauważenia pozwala ustalić przyczynę, zanim kolejni operatorzy wykonają następne operacje na tej lokalizacji.
- Osobne konto dla każdego operatora - wspólny login niszczy historię zmian i utrudnia rozliczenie odpowiedzialności za operację.
- Sprawdzanie stanu dostępnego - przed obiecaniem terminu klientowi liczy się ilość do wydania, a nie sumaryczny stan kartoteki, który może być w większości zarezerwowany.
Te zasady nie wymagają dodatkowych funkcji w oprogramowaniu WMS SoftwareStudio, bo dotyczą sposobu korzystania z narzędzi, które już są w systemie. Krótkie szkolenie powtórzone po pierwszych tygodniach pracy zwykle wystarcza, żeby obsługa kartotek stała się rutyną zmiany, a nie dodatkowym obowiązkiem administracyjnym. Zakres funkcji systemu prezentuje serwis produktowy Studio WMS.net.




