Stan magazynowy i masowe operacje na produktach
Moduł 3: Produkty · Czas czytania: 10 min
Cel lekcji: Po tej lekcji będą Państwo potrafili świadomie ustawić stan magazynowy w WooCommerce (zarządzanie, rezerwacja, powiadomienia, zamówienia przy braku towaru, produkty wyprzedane) oraz bezpiecznie eksportować i importować produkty masowo za pomocą pliku CSV.
Kluczowe pojęcia: zarządzanie stanem magazynowym, stan magazynowy na poziomie produktu lub wariantu, rezerwacja stanu magazynowego (Hold stock), próg niskiego stanu magazynowego, próg braku w magazynie, powiadomienia o stanie magazynowym, zamówienia przy braku towaru (backorders), ukrywanie wyprzedanych produktów, sposób wyświetlania stanu magazynowego, eksport CSV, import CSV, aktualizacja istniejących produktów, kodowanie znaków (UTF-8), separator, integracje z systemem kasowym lub hurtownią
Dlaczego stan magazynowy to coś więcej niż liczba
Liczba sztuk w magazynie wydaje się prosta: mają Państwo dwanaście dzbanków do herbaty, sprzedaje się dwanaście, potem towaru już nie ma. W sklepie internetowym wiele rzeczy dzieje się jednocześnie. Dwóch klientów wkłada ostatni dzbanek do koszyka. Klient zaczyna płacić i w połowie się rozmyśla. Ten sam dzbanek sprzedają Państwo także w sklepie stacjonarnym lub na targu. Źle ustawiony stan magazynowy prowadzi do najgorszego, co może spotkać sklep: opłaconego zamówienia, którego nie da się zrealizować. Oznacza to zwrot pieniędzy, niezadowolonego klienta, a czasem negatywną opinię.
WooCommerce ma na to szereg ustawień. Znajdą je Państwo w WooCommerce > Ustawienia > Produkty > Magazyn (Inventory), a dla każdego produktu w zakładce Magazyn.
Ustawienia po kolei
Zarządzanie stanem magazynowym (Enable stock management) jest domyślnie włączone. Następnie dla każdego produktu wybierają Państwo, czy WooCommerce ma śledzić liczbę sztuk. Bez liczby sztuk ustawia się tylko status: na stanie, brak w magazynie lub zamówienie przy braku towaru. To pasuje do produktów wykonywanych na zamówienie lub dostępnych zawsze. Przy produkcie z wariantami wybierają Państwo, czy stan magazynowy dotyczy każdego wariantu osobno, czy całego produktu (lekcja 3.2).
Rezerwacja stanu magazynowego (w minutach) (Hold stock), domyślnie 60. Gdy klient rozpoczyna składanie zamówienia, WooCommerce tworzy zamówienie ze statusem Oczekujące na płatność i odkłada towar. Jeśli po tej liczbie minut płatność nie wpłynie, WooCommerce anuluje otwarte zamówienie, a towar wraca na stan. Zbyt krótki czas sprawi, że klient, który musi chwilę zalogować się do banku, zobaczy anulowane zamówienie. Zbyt długi czas sprawi, że dzbanek przez pół dnia będzie zarezerwowany dla kogoś, kto dawno opuścił stronę. Dla większości sklepów rozsądna jest jedna godzina. Uwaga: anulowanie jest zadaniem zaplanowanym. Jeśli zaplanowane zadania nie działają prawidłowo, nieopłacone zamówienia pozostaną w zawieszeniu (lekcja 7.3).
Powiadomienia (Notifications): e-mail przy niskim stanie magazynowym, przy braku w magazynie i przy zamówieniu przy braku towaru, domyślnie na adres administratora. Prosimy wpisać tu adres osoby odpowiedzialnej za zakupy.
Próg niskiego stanu magazynowego (Low stock threshold), domyślnie 2, oraz próg braku w magazynie (Out of stock threshold), domyślnie 0. Czy sprzedają Państwo również w sklepie stacjonarnym i aktualizują sklep internetowy tylko raz dziennie? Wtedy warto ustawić próg braku w magazynie na 1 lub 2. Sklep internetowy nie sprzeda wówczas ostatniego egzemplarza, który być może został już sprzedany w sklepie stacjonarnym.
Widoczność wyprzedanych produktów (Hide out of stock items from the catalog), domyślnie wyłączona. Ukrywanie utrzymuje porządek na stronach sklepu. Jednak wyprzedany produkt, który wraca do oferty, tymczasowo traci swoje miejsce w kategorii. Sama strona produktu pozostaje dostępna. Lekcja 7.1 omawia, co to oznacza dla widoczności w wyszukiwarkach.
Sposób wyświetlania stanu magazynowego (Stock display format): zawsze pokazuj liczbę („12 w magazynie”), tylko przy niskim stanie („Zostały tylko 2”) lub nigdy. „Zostały tylko 2” pomaga klientom podjąć decyzję, ale prosimy pokazywać to tylko wtedy, gdy jest prawdą; sztuczne wywoływanie wrażenia niedoboru wprowadza w błąd.
Zamówienia przy braku towaru (Allow backorders?) dla każdego produktu: nie zezwalaj, zezwalaj, ale informuj klienta, lub zezwalaj. Zezwolenie oznacza, że klienci mogą kupować, choć nie mają Państwo towaru. Sprawdza się to przy produkcie, który na pewno dotrze w ciągu tygodnia. Prosimy wtedy jednak poinformować o tym klienta (opcja środkowa) i podać realistyczny czas dostawy: czas dostawy należy do informacji, które przekazują Państwo przed zakupem (lekcja 5.1).
Integracje i jedno źródło prawdy
Jeśli sprzedają Państwo w kilku miejscach (sklep internetowy, sklep stacjonarny z systemem kasowym, platforma sprzedażowa) lub hurtownia wysyła towar bezpośrednio do Państwa klientów, szybko powstają dwie lub trzy listy stanów magazynowych. Prosimy wybrać jedno źródło prawdy: system, który określa rzeczywisty stan magazynowy. Najczęściej jest to system kasowy lub magazynowy, a WooCommerce otrzymuje liczby sztuk przez integrację. Taka integracja używa SKU jako klucza. Produkt bez SKU albo z SKU zapisanym w systemie kasowym inaczej nie zostanie zaktualizowany. Dlatego SKU było tak ważne w lekcji 3.1.
Integracje korzystają zwykle z REST API WooCommerce i klucza API. Prosimy nadawać takiemu kluczowi tylko niezbędne uprawnienia (lekcja 2.4).
Produkty masowo: eksport i import
Dziesięć produktów można obsłużyć w panelu administracyjnym. Przy stu zmianach cen, nowym sezonie lub przejściu z innego systemu sklepu warto użyć wbudowanego eksportu i importu CSV: przycisków Eksportuj (Export) i Importuj (Import) nad listą produktów w Produkty > Wszystkie produkty.
Plik CSV to plik tekstowy z jednym wierszem na produkt i kolumnami rozdzielonymi przecinkami. Otwierają go Państwo w arkuszu kalkulacyjnym. Właśnie tam często pojawiają się błędy:
- Kodowanie znaków. WooCommerce używa UTF-8. Jeśli arkusz kalkulacyjny otworzy plik w innym kodowaniu, „é” zmieni się w coś w rodzaju „é”. Przy otwieraniu i zapisywaniu prosimy wyraźnie wybrać UTF-8.
- Separator i znak dziesiętny. Przy ustawieniach regionalnych dla Holandii (podobnie jak dla Polski) arkusz kalkulacyjny często używa średnika jako separatora i przecinka jako znaku dziesiętnego. WooCommerce oczekuje w cenach kropki (24.00). Cena „24,00” może zostać odczytana jako coś innego. Przed importem prosimy sprawdzić kilka wierszy w edytorze tekstu.
- Puste kolumny. Przy aktualizacji pusta komórka może oznaczać wyczyszczenie wartości. Kolumny, których nie chcą Państwo zmieniać, lepiej całkowicie usunąć z pliku.
- Warianty. Każdy wariant to osobny wiersz z odwołaniem do produktu nadrzędnego.
Podczas importu wybierają Państwo Aktualizuj istniejące produkty (Update existing products). WooCommerce wyszukuje wtedy istniejący produkt po ID lub SKU. Produkty, które nie istnieją, są przy tej opcji pomijane. Bez tej opcji import tworzy nowe produkty, a SKU, które już istnieje, powoduje błąd.
Bezpieczna praca: najpierw na małą skalę, najpierw gdzie indziej
Import może jednym kliknięciem zmienić setki produktów. Dlatego:
- Prosimy wykonać kopię zapasową (kurs WordPress, lekcja 8.1) lub najpierw pracować w sklepie testowym (lekcja 2.1).
- Najpierw wyeksportować dane, aby mieć plik z aktualnym stanem.
- Przetestować plik z jednym wierszem. Sprawdzić produkt w panelu i na stronie.
- Dopiero potem zastosować cały plik.
- Duże pliki mogą przekroczyć limit przesyłania lub limit czasu PHP. Prosimy podzielić je na części albo zapytać dostawcę hostingu o ustawienia PHP (baza wiedzy 200).
Podsumowanie
- Zarządzanie stanem magazynowym zapobiega opłaconym zamówieniom, których nie da się zrealizować.
- Rezerwacja stanu magazynowego (domyślnie 60 minut) blokuje towar podczas płatności; późniejsze anulowanie jest zadaniem zaplanowanym.
- Progi, powiadomienia, widoczność i zamówienia przy braku towaru ustawiają Państwo świadomie, z rzetelnym czasem dostawy.
- Prosimy wybrać jedno źródło prawdy i używać SKU jako klucza w integracjach.
- Import CSV: UTF-8, kropka jako znak dziesiętny, najpierw eksport, test z jednym wierszem, aktualizacja po ID lub SKU.
Quiz
Zadanie
Zadanie D3.4: Eksport i import. Prosimy wykonać je w sklepie testowym lub po wykonaniu świeżej kopii zapasowej.
Kroki:
- Prosimy wyeksportować wszystkie produkty do pliku CSV przyciskiem Eksportuj nad listą produktów (Produkty > Wszystkie produkty).
- Otworzyć plik w arkuszu kalkulacyjnym i wybrać UTF-8. Sprawdzić, jaki separator i jaki znak dziesiętny są widoczne.
- Utworzyć nowy plik zawierający tylko kolumny ID (lub SKU) i Stan magazynowy, z jednym produktem. Zmienić stan magazynowy.
- Zaimportować ten plik przyciskiem Importuj nad listą produktów, z włączoną opcją Aktualizuj istniejące produkty.
- Sprawdzić produkt w panelu oraz w oknie prywatnym na stronie.
- Przejrzeć ustawienia stanu magazynowego w WooCommerce > Ustawienia > Produkty > Magazyn.
Lista kontrolna (obowiązkowa): kopia zapasowa lub sklep testowy; wykonany eksport; plik otwarty z właściwym kodowaniem znaków; zmieniony jeden wiersz; zaimportowany tylko ten wiersz z opcją „aktualizuj istniejące produkty”; sprawdzony wynik.
Prosimy odpowiedzieć:
- Której kolumny użył WooCommerce, aby odnaleźć produkt: ID czy SKU?
- Co poszło nie tak lub prawie nie tak (znaki, znak dziesiętny, puste kolumny)?
- Jakich ustawień stanu magazynowego Państwo używają (rezerwacja stanu magazynowego, progi, powiadomienia, zamówienia przy braku towaru) i dlaczego?
Dobra odpowiedź wskazuje ID lub SKU jako klucz, konkretną pułapkę, na którą Państwo trafili lub której uniknęli, oraz dla każdego ustawienia uzasadnienie pasujące do Państwa sklepu.
Zadanie D3.4: Eksport i import
To zadanie wykonuje się samodzielnie, nikt go nie sprawdza. Prosimy zaznaczyć wykonane punkty i oznaczyć zadanie jako wykonane.
ID lub SKU jako klucz; konkretna pułapka (przecinek jako separator dziesiętny, średnik jako separator pól, é zamienia się w é); wybór dotyczący zamówień oczekujących (backorders) wraz z uzasadnieniem.
Zaznaczenia i notatki pozostają tylko w tej przeglądarce; nie są nigdzie wysyłane. Po zalogowaniu w Moje kursy zapisywana jest jedynie informacja, że zadanie zostało wykonane.
Dalsza lektura
- Product CSV importer and exporter (woocommerce.com, po angielsku): https://woocommerce.com/document/product-csv-importer-exporter/
- Darmowy kurs WordPress 8.1: Kopie zapasowe: co, gdzie i jak często
- Przesyłanie pliku nie powiodło się: prosimy zwiększyć wartości upload_max_filesize oraz max_execution_time
- Instrukcja DirectAdmin 18.5: Zbyt duży plik do przesłania (błąd 413) lub przekroczenie czasu oczekiwania
Kroki opisane w bazie wiedzy i w instrukcji dotyczą paneli WebOké; u innych dostawców działa to podobnie.
