Spis roczny i spis ciągły - wymagania wobec programu
Program do inwentaryzacji trzeba dobierać do metody spisu, a nie odwrotnie. Spis roczny jest jednorazowym przeliczeniem całego asortymentu na dzień bilansowy. Wymaga zamrożenia stanów oraz komisji spisowej, a także kilku dni pracy całego zespołu. Spis ciągły rozkłada to samo zadanie na cały rok: lokalizacje lub grupy asortymentowe liczy się w cyklach, tak aby każdy indeks trafił do spisu co najmniej raz w ustalonym okresie.
Przepisy o rachunkowości wymagają inwentaryzacji co najmniej raz w roku dla większości grup aktywów, więc spis ciągły uzupełnia roczny, a nie zastępuje go w każdym przypadku. Sama metodyka liczenia jest opisana w artykule o metodach inwentaryzacji magazynu. Ten tekst dotyczy narzędzi: co każda metoda spisu wymaga od programu i czym różnią się arkusz i terminal Android od modułu w systemie WMS.
| Wymaganie | Spis roczny | Spis ciągły |
|---|---|---|
| Stan wyjściowy | zamrożony na dzień spisu | ruchomy, liczony na chwilę liczenia lokalizacji |
| Praca magazynu w trakcie | wydania i przyjęcia wstrzymane lub ograniczone | magazyn pracuje, lokalizacja jest blokowana tylko na czas liczenia |
| Zadania spisu | jedno duże, podzielone na strefy | wiele małych, tworzonych według harmonogramu |
| Wymagane narzędzie | arkusze spisowe i sprawny zapis wyników | zadania na terminalu i porównanie ze stanem w bazie |
| Główne ryzyko | błąd przy scalaniu wyników z wielu zespołów | ruchy towaru w trakcie liczenia fałszujące różnicę |
Z tej różnicy wynika większość decyzji zakupowych. Magazyn robiący jeden spis w roku poradzi sobie z prostszym narzędziem. Magazyn, który liczy lokalizacje codziennie, potrzebuje programu znającego stan magazynowy oraz ruchy towaru, a także blokady lokalizacji. Ciągłą metodę opisuje osobno artykuł o inwentaryzacji ciągłej w magazynie.
W spisie rocznym istotny jest jeszcze podział na strefy i zespoły liczące. Każda strefa dostaje arkusz z listą lokalizacji, a wyniki wracają do jednej osoby, która scala je w protokół. Im więcej zespołów, tym większe ryzyko rozbieżnych wersji arkusza, więc narzędzie powinno pilnować, aby jedna lokalizacja nie trafiła do dwóch zespołów naraz.

Arkusz kalkulacyjny jako program do inwentaryzacji
Arkusz pozostaje najprostszym punktem wyjścia. Nie wymaga licencji na osobne oprogramowanie ani wdrożenia, a większość osób w magazynie potrafi go obsłużyć. Przy kilkuset indeksach i jednym spisie w roku bywa wystarczający, zwłaszcza gdy stan ewidencyjny da się wyeksportować z programu magazynowego do pliku.
Ograniczenia ujawniają się z rosnącą liczbą pozycji. Wpisywanie ilości ręcznie sprzyja pomyłkom, bo arkusz nie waliduje kodów kreskowych. Scalanie plików wypełnianych równolegle przez kilka osób bywa czasochłonne i ryzykowne, a raz nadpisany plik nie zostawia śladu, kto i kiedy zmienił ilość. Po stronie księgowej dochodzi kwestia dowodowa: protokół spisu zbudowany z luźnych arkuszy trudniej obronić przed audytorem.
Arkusz można wzmocnić walidacją danych na liście indeksów i blokadą komórek z ewidencją. Takie zabezpieczenia pilnuje jednak człowiek, a nie program, więc po kilku spisach zwykle ktoś wyłącza blokadę, żeby szybciej poprawić wpis. Jest to typowy moment, w którym firma zaczyna szukać narzędzia z ewidencją ilości po stronie serwera.
Import wyników z arkusza do bazy
Przejście z arkusza na program magazynowy zaczyna się zwykle od importu wyników liczenia do tabeli pośredniej. Plik CSV z trzema kolumnami (lokalizacja, indeks, ilość) wczytuje się do tabeli przygotowawczej, a dopiero po walidacji przenosi do właściwej. Poniższy przykład pokazuje wczytanie pliku i kontrolę duplikatów, przy czym nazwy tabel i ścieżka są umowne.
CREATE TABLE dbo.SpisImport (
Lokalizacja VARCHAR(20) NOT NULL,
Indeks VARCHAR(40) NOT NULL,
Ilosc DECIMAL(12,3) NOT NULL
);
BULK INSERT dbo.SpisImport
FROM 'D:\import\spis_strefa_A.csv'
WITH (FIRSTROW = 2, FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', CODEPAGE = '65001');
-- ta sama para lokalizacja-indeks wpisana więcej niż raz
SELECT Lokalizacja, Indeks, COUNT(*) AS Wpisy
FROM dbo.SpisImport
GROUP BY Lokalizacja, Indeks
HAVING COUNT(*) > 1;
Dopiero przy takiej kontroli widać, ile pozycji zostało policzonych dwa razy, a ile pominięto. To zadanie system magazynowy wykonuje automatycznie, bo przypisuje lokalizację do jednego zadania spisu naraz.
Terminal Android i kolektor przy spisie
Skanowanie zamiast wpisywania usuwa najczęstszą przyczynę błędów. Operator skanuje etykietę lokalizacji, potem kolejne towary, a program sam zlicza sztuki. Cały przebieg liczenia na urządzeniu mobilnym, ze spisem ślepym i ponownym liczeniem, opisuje artykuł o aplikacji magazynowej na Androidzie. Tutaj istotny jest wybór samego urządzenia.
Zwykły smartfon czyta kody aparatem. To rozwiązanie tanie, ale wolniejsze przy dużej liczbie skanów wykonywanych jeden po drugim. Kolektor z głowicą skanującą czyta kod w ułamku sekundy, ma obudowę odporną na upadki i zapylenie, a bateria wystarcza na całą zmianę. Kod kreskowy towaru powinien prowadzić do jednego indeksu. Gdy ten sam indeks ma kilka kodów EAN, na przykład dla opakowania jednostkowego i zbiorczego, terminal musi znać przelicznik, bo inaczej karton zeskanowany raz zostanie policzony jako jedna sztuka zamiast dwunastu.
Więcej o tym urządzeniu zawiera strona o kolektorze danych Android WMS, a ogólny wybór sprzętu ze skanerem omawia tekst o programie magazynowym ze skanerem.
| Narzędzie | Zalety | Ograniczenia | Kiedy pasuje |
|---|---|---|---|
| Arkusz kalkulacyjny | brak kosztu licencji, znany interfejs | brak walidacji, trudne scalanie | kilkaset indeksów, jeden spis w roku |
| Aplikacja mobilna na smartfonie | szybki start, skan aparatem | wolniejszy skan, wyniki trzeba przenosić do systemu | sporadyczny spis małego asortymentu |
| Moduł w systemie WMS | wspólna baza, raport rozbieżności bez przepisywania | wyższy koszt wdrożenia | dużo indeksów, spis ciągły, wiele magazynów |
| Kolektor danych | trwałość, szybki skan seryjny, bateria na zmianę | koszt sprzętu i obsługa floty | chłodnia, wiele godzin liczenia dziennie |

Moduł inwentaryzacyjny w systemie WMS
Moduł wbudowany w system WMS korzysta z tej samej bazy danych co ewidencja stanów oraz dokumenty magazynowe i lokalizacje. Spis startuje na podstawie aktualnych stanów magazynowych, a rozbieżność trafia do raportu bez ręcznego przenoszenia. W module Studio WMS.net ceny ewidencyjne oraz arkusze spisowe i dokumenty inwentaryzacyjne mieszczą się w jednym miejscu, a raporty można eksportować do arkuszy i PDF. Szczegóły opisuje moduł inwentaryzacji WMS.net.
Dostępność w wariancie chmurowym oznacza, że ten sam moduł działa przez przeglądarkę, bez instalacji na stacji roboczej. Wariant opisuje artykuł o magazynie w chmurze. Ze strony producenta dostępna jest też osobna publikacja o programie do inwentaryzacji w Studio WMS.net.
Reguła: spis ciągły ma sens dopiero wtedy, gdy program blokuje liczoną lokalizację i uwzględnia ruchy towaru z czasu liczenia.
Rozbieżności po spisie i ich księgowanie
Rozbieżność jest różnicą między ilością policzoną a ilością w ewidencji. Nadwyżka i niedobór wymagają różnych dokumentów, a decyzja o ich rozliczeniu należy do osób wskazanych w polityce rachunkowości firmy. Program powinien zestawić różnice ilościowo i wartościowo, co ułatwia zatwierdzanie korekt od największej kwoty.
Zestawienie musi objąć trzy przypadki: pozycję policzoną i znaną ewidencji, pozycję policzoną, której ewidencja nie zna, oraz pozycję z ewidencji, której nikt nie znalazł. Złączenie wewnętrzne pokaże tylko pierwszy przypadek, dlatego używa się złączenia zewnętrznego z obu stron. Zapytanie poniżej jest przykładem, a nazwy obiektów nie odpowiadają schematowi konkretnego produktu.
SELECT COALESCE(s.Indeks, e.Indeks) AS Indeks,
COALESCE(s.LokalizacjaId, e.LokalizacjaId) AS LokalizacjaId,
ISNULL(e.Ilosc, 0) AS IloscEwidencja,
ISNULL(s.IloscPoliczona, 0) AS IloscPoliczona,
ISNULL(s.IloscPoliczona, 0) - ISNULL(e.Ilosc, 0) AS Roznica,
(ISNULL(s.IloscPoliczona, 0) - ISNULL(e.Ilosc, 0))
* k.CenaEwidencyjna AS WartoscRoznicy
FROM (SELECT Indeks, LokalizacjaId, SUM(Ilosc) AS IloscPoliczona
FROM dbo.SpisLiczenie
WHERE ZadanieId = @ZadanieId
GROUP BY Indeks, LokalizacjaId) AS s
FULL OUTER JOIN dbo.StanSpisu AS e
ON e.Indeks = s.Indeks AND e.LokalizacjaId = s.LokalizacjaId
JOIN dbo.Kartoteka AS k
ON k.Indeks = COALESCE(s.Indeks, e.Indeks)
WHERE ISNULL(s.IloscPoliczona, 0) <> ISNULL(e.Ilosc, 0);
Wynik zapytania jest podstawą dwóch typów dokumentów. Nadwyżkę wprowadza się dokumentem przyjęcia wewnętrznego (PW), a niedobór dokumentem rozchodu wewnętrznego (RW), zgodnie z opisem w artykule o dokumentach magazynowych. Wycena idzie po cenie ewidencyjnej z kartoteki. Dokument korygujący powinien zachować odwołanie do zadania spisu, aby księgowość mogła odtworzyć źródło każdej korekty. Rozdział ról pomaga to utrzymać: operator liczy, kierownik zatwierdza korektę, a księgowość otrzymuje gotowy dokument z wyceną.
| Rozbieżność | Dokument w WMS | Kto zatwierdza |
|---|---|---|
| Nadwyżka po drugim liczeniu | PW z odwołaniem do zadania spisu | osoba wskazana w procedurze inwentaryzacji |
| Niedobór po drugim liczeniu | RW z przyczyną i wartością | komisja lub osoba odpowiedzialna za rozliczenie |
| Różnica poniżej progu | korekta zbiorcza według zasad firmy | kierownik magazynu |
| Pozycja nieznana ewidencji | nowa karta towaru, potem PW | dział zakupów lub księgowość |
Stan w chwili liczenia w spisie ciągłym
W spisie rocznym stan jest zamrożony, więc porównanie jest proste. W spisie ciągłym magazyn pracuje w trakcie liczenia i stan ewidencyjny zmienia się każdym wydaniem. Operator liczy lokalizację o godzinie 10:15, a wydanie zapisane o 10:20 zmniejszyło stan w bazie. Bez korekty program pokaże niedobór, którego nie ma.
Poprawne porównanie odnosi wynik liczenia do stanu z chwili liczenia. Stan na wskazany moment odtwarza się z bieżącego stanu i ruchów zapisanych po tym momencie. Zapytanie poniżej odejmuje od stanu bieżącego sumę zmian zapisanych po czasie liczenia; kolumna zmiany ma znak dodatni dla przyjęć i ujemny dla wydań.
SELECT st.Indeks, st.LokalizacjaId,
st.Ilosc - ISNULL(SUM(r.Zmiana), 0) AS IloscWChwiliLiczenia
FROM dbo.Stan AS st
LEFT JOIN dbo.RuchMagazynowy AS r
ON r.Indeks = st.Indeks
AND r.LokalizacjaId = st.LokalizacjaId
AND r.DataRuchu > @CzasLiczenia
WHERE st.LokalizacjaId = @LokalizacjaId
GROUP BY st.Indeks, st.LokalizacjaId, st.Ilosc;
Ta sama zasada tłumaczy blokadę lokalizacji w programach do spisu ciągłego: skoro system wstrzymuje ruchy w liczonej lokalizacji na kilka minut, korekta jest mała albo zbędna. Przy raportach czytających stan podczas pracy magazynu przydaje się poziom izolacji SNAPSHOT, który daje spójny obraz danych bez blokowania zapisów. Opisuje go dokumentacja SET TRANSACTION ISOLATION LEVEL w Microsoft Learn.
Kryteria wyboru programu do inwentaryzacji
Wybór rozstrzygają cztery czynniki, wymienione poniżej. Im więcej indeksów, tym mniej opłaca się ręczne przenoszenie wyników. Kilkaset pozycji obsłuży arkusz albo aplikacja mobilna, natomiast przy kilkudziesięciu tysiącach pozycji przenoszenie danych między systemami przestaje być wykonalne w rozsądnym czasie.
- Liczba indeksów i lokalizacji - skala zadań spisu i liczba operatorów liczących równolegle.
- Częstotliwość spisów - jeden spis w roku uzasadnia proste narzędzie, cykliczne liczenie wymaga planowania zadań.
- Model rozliczenia - subskrypcja w modelu SaaS albo jednorazowe wdrożenie z niższym kosztem w dłuższym okresie.
- Integracja - eksport wyników do systemu ERP lub księgowego bez ponownego wpisywania.
Model rozliczenia wpływa na całkowity koszt. Aplikacje samodzielne rozlicza się zwykle miesięcznie i rzadko pozwalają przekazać wyniki do głównej ewidencji. Moduł w systemie WMS wymaga wdrożenia, lecz nie duplikuje danych. Ślad zmian ma równie duże znaczenie jak szybkość liczenia: program powinien zapisywać, kto policzył lokalizację, kto zatwierdził korektę i kiedy to zrobił. Kontrolę wiarygodności wyniku, niezależną od wyboru narzędzia, opisuje artykuł o kontroli procesu inwentaryzacji magazynu.
Pilotaż narzędzia w jednej strefie
Rzeczywisty test na kilkuset lokalizacjach szybciej ujawnia ograniczenia niż specyfikacja dostawcy. Pilotaż przebiega w czterech krokach.
- Wybór strefy - jedna strefa magazynu z asortymentem o różnej rotacji i z lokalizacjami wysokimi.
- Spis próbny - liczenie tej samej strefy w nowym narzędziu i w dotychczasowym, aby porównać wyniki.
- Pomiar czasu i błędów - liczba pozycji na godzinę oraz liczba różnic wykrytych przy ponownym liczeniu.
- Test rozliczenia - przeniesienie różnic do dokumentów PW i RW oraz sprawdzenie, czy księgowość otrzymuje komplet danych.
Program do inwentaryzacji jest tylko częścią procesu. Zwrot z inwestycji zależy jeszcze od dyscypliny liczenia i jakości wdrożenia, co omawia artykuł o programie do inwentaryzacji. Konfigurację samego programu magazynowego, w tym uprawnień do zatwierdzania korekt, opisuje tekst o konfiguracji programu magazynowego.



