Moduł Handel i Magazyn w enova365 obsługuje obrót towarowy w systemie klasy ERP, który prowadzi także finanse oraz kadry. Sprzedaż i magazyn korzystają ze wspólnej bazy danych, więc zmiana stanu zarejestrowana przy przyjęciu towaru jest od razu widoczna w ofertach i dokumentach handlowych.

enova365 jest produktem firmy Soneta, a nie SoftwareStudio. Opis funkcji pochodzi z dotychczasowej treści tej strony, a mechanizmy ogólne, takie jak rezerwacje czy adresowanie lokalizacji, są wiedzą inżynierską. Ustawienia konkretnej wersji potwierdza dokumentacja producenta lub partner wdrożeniowy.

Moduł Handel i Magazyn enova365 - zakres i wspólna baza

Konfiguracja obszaru Handel i Magazyn jest modułowa. Firma aktywuje tylko te funkcje, które odpowiadają jej skali, a wraz z rozwojem dokłada kolejne: obsługę wielu magazynów, cenniki indywidualne dla kontrahentów albo pracę na urządzeniach mobilnych. Unika się dzięki temu jednorazowego wdrożenia całego pakietu, z którego część nigdy nie zostanie użyta. Ogólny przegląd modułów systemu zawiera artykuł o programie enova ERP. Przy doborze zakresu pomaga jedno rozróżnienie: funkcje niezbędne w dniu startu aktywuje się od razu, a te, które wynikają z planów rozwoju, dodaje się po pierwszym pełnym cyklu rozliczeniowym.

Wspólna baza usuwa ręczne przenoszenie danych między programem do magazynu a programem do fakturowania. To właśnie ono bywa źródłem rozbieżności w mniejszych firmach, które prowadzą stany w jednym narzędziu, a dokumenty w drugim. Skutek widać w codziennej pracy: handlowiec sprawdza dostępność towaru bez telefonu do magazynu, a księgowość pracuje na tych samych cenach.

  • Jedno źródło danych - stan towaru i dane kontrahenta są takie same niezależnie od tego, kto je sprawdza.
  • Mniej błędów przy fakturowaniu - pozycje faktury pochodzą z dokumentu wydania, więc nie trzeba ich przepisywać z osobnego systemu.

Powiązanie dokumentu handlowego z magazynowym

System generuje faktury i paragony oraz zamówienia na podstawie danych z magazynu, a równolegle tworzy powiązane dokumenty magazynowe, takie jak przyjęcia zewnętrzne czy wydania do odbiorcy. Powiązanie pozwala prześledzić historię transakcji od zamówienia klienta, przez kompletację, aż po fakturę, bez ręcznego przepisywania pozycji. Rodzaje i obieg dokumentów opisuje artykuł o dokumentach magazynowych w WMS.

Mechanizm najłatwiej pokazać jako łańcuch zdarzeń. Każdy dokument zmienia jedną z dwóch liczb, które baza utrzymuje dla towaru: stan fizyczny albo stan dostępny. Poniższa tabela przedstawia typowy układ dla sprzedaży, w którym zamówienie rezerwuje towar, a dopiero wydanie zmniejsza stan fizyczny.

EtapDokumentStan fizycznyStan dostępny
Przyjęcie zamówieniaZamówienie odbiorcyBez zmianMaleje o zarezerwowaną ilość
Wydanie towaruWydanie zewnętrzne do odbiorcyMalejeBez zmian, rezerwacja zostaje zdjęta
RozliczenieFaktura sprzedaży z pozycjami z wydaniaBez zmianBez zmian
DostawaPrzyjęcie zewnętrzne od dostawcyRośnieRośnie

Reguła: sprzedaż obiecuje towar ze stanu dostępnego, a nie fizycznego. Zamówienie przyjęte na zarezerwowaną ilość kończy się reklamacją albo opóźnioną dostawą.

Stan dostępny wylicza się prostym zapytaniem, w którym rezerwacje odejmuje się od bilansu przyjęć i wydań. Przykład używa nazw wymyślonych na potrzeby artykułu i nie odzwierciedla schematu bazy enova365.

SELECT s.towar_id,
       s.stan_fizyczny,
       ISNULL(r.zarezerwowano, 0) AS zarezerwowano,
       s.stan_fizyczny - ISNULL(r.zarezerwowano, 0) AS stan_dostepny
FROM dbo.stan_magazynowy AS s
LEFT JOIN (SELECT towar_id, SUM(ilosc) AS zarezerwowano
           FROM dbo.rezerwacja
           WHERE status = 'otwarta'
           GROUP BY towar_id) AS r ON r.towar_id = s.towar_id
WHERE s.magazyn_id = 1;
Ilustracja obiegu dokumentów magazynowych powiązanych z dokumentami sprzedaży
Łańcuch dokumentów od zamówienia do faktury - miejsce, w którym rezerwacja zamienia się w wydanie.

Widok stanów w czasie opisuje artykuł o stanach magazynowych w ujęciu bieżącym i historycznym. Wspólna baza upraszcza uzgadnianie stanów, ponieważ obie liczby zawsze pochodzą z tych samych dokumentów źródłowych.

Jednoczesna rezerwacja tego samego towaru

Wspólna baza rodzi pytanie o współbieżność. Dwóch handlowców przyjmuje w tej samej chwili zamówienia na ostatnie dziesięć sztuk towaru i każdy z nich widzi stan dostępny równy dziesięć. Bez kontroli po stronie bazy obie rezerwacje przejdą, a magazyn dostanie zamówienia na dwadzieścia sztuk. Rozwiązaniem jest transakcja, w której odczyt stanu blokuje wiersz do końca zapisu rezerwacji.

SET XACT_ABORT ON;
BEGIN TRANSACTION;

DECLARE @dostepny decimal(18,3);

SELECT @dostepny = s.stan_fizyczny - ISNULL(r.zarezerwowano, 0)
FROM dbo.stan_magazynowy AS s WITH (UPDLOCK, ROWLOCK)
OUTER APPLY (SELECT SUM(ilosc) AS zarezerwowano
             FROM dbo.rezerwacja
             WHERE towar_id = s.towar_id AND status = 'otwarta') AS r
WHERE s.towar_id = 101 AND s.magazyn_id = 1;

IF @dostepny >= 10
    INSERT dbo.rezerwacja (towar_id, ilosc, status) VALUES (101, 10, 'otwarta');
ELSE
    THROW 50001, 'Brak wystarczającej ilości dostępnej.', 1;

COMMIT TRANSACTION;

Wskazówka UPDLOCK powoduje, że druga transakcja czeka na zakończenie pierwszej, a po jej zatwierdzeniu widzi już zmniejszony stan dostępny. Zapytanie jest wzorcem ogólnym z przykładowymi nazwami. Sposób, w jaki konkretny ERP zabezpiecza rezerwacje, opisuje jego dokumentacja. Działanie poziomów izolacji wyjaśnia strona SET TRANSACTION ISOLATION LEVEL w Microsoft Learn.

Lokalizacje magazynowe i identyfikacja towaru

Przypisanie towaru do miejsca składowania skraca jego wyszukiwanie i ogranicza pomyłki przy kompletacji zamówień. enova365 pozwala oznaczać lokalizacje kodem odzwierciedlającym strukturę magazynu, na przykład strefą i poziomem regału. Każda zmiana miejsca składowania zostaje odnotowana w historii towaru. Dokładne zarządzanie lokalizacjami poprawia wykorzystanie powierzchni i przyspiesza operacje, zwłaszcza przy wielu tysiącach indeksów. Zasady kodowania miejsc opisuje artykuł o kodach miejsc składowania i typach regałów.

Kod lokalizacji jest ciągiem znaków o stałej strukturze, więc daje się go rozbić na części i zwalidować już przy skanie. Poniższy przykład w C# sprawdza format strefa-rząd-kolumna-poziom, na przykład A-02-05-3.

using System.Text.RegularExpressions;

static readonly Regex Lokalizacja =
    new Regex(@"^(?<strefa>[A-Z])-(?<rzad>\d{2})-(?<kolumna>\d{2})-(?<poziom>\d)$");

static bool TryParse(string kod, out string strefa, out int poziom)
{
    var m = Lokalizacja.Match(kod);
    strefa = m.Success ? m.Groups["strefa"].Value : null;
    poziom = m.Success ? int.Parse(m.Groups["poziom"].Value) : 0;
    return m.Success;
}
Regały magazynowe z oznaczeniem lokalizacji według strefy, rzędu i poziomu
Adresowanie miejsc składowania - kod lokalizacji, który kolektor podaje magazynierowi przy pobraniu.

Walidacja formatu przy skanie wyłapuje pomyłki, zanim dokument zostanie zapisany. Kod spoza wzorca, na przykład z poziomem regału o nieistniejącym numerze, jest odrzucany od razu, a magazynier nie odkłada towaru pod adres, którego w strukturze magazynu nie ma. Sama lista dozwolonych adresów pochodzi wtedy z konfiguracji magazynu, a nie z pamięci pracowników.

Integracja z czytnikami kodów kreskowych ogranicza błędy wynikające z ręcznego wpisywania. Magazynier, który zeskanuje kod towaru, otrzymuje na ekranie kolektora informację o lokalizacji, ilości do pobrania albo miejscu odłożenia palety i nie wraca do stanowiska komputerowego. Rozwiązanie sprawdza się przy dużej rotacji, bo każda dodatkowa minuta na szukanie informacji przekłada się na opóźnienie zamówienia. Dobór sprzętu opisuje artykuł o kolektorach danych z Androidem.

Inwentaryzacja i korekty po zatwierdzeniu

Regularna inwentaryzacja utrzymuje zgodność stanu ewidencyjnego z fizycznym. enova365 wspiera ją przez generowanie arkuszy spisowych, rejestrowanie różnic inwentaryzacyjnych oraz automatyczne księgowanie korekt po zatwierdzeniu wyników. Ważne jest to ostatnie: korekta powstaje dopiero po decyzji osoby odpowiedzialnej, więc ewidencja nie zmienia się w trakcie liczenia. Nadwyżka zwiększa stan jako przyjęcie wewnętrzne, a niedobór zmniejsza go jako rozchód, oba wyceniane według metody przyjętej w firmie.

Częstsza inwentaryzacja wycinkowa wybranych lokalizacji lub grup towarowych wykrywa rozbieżności szybciej niż jeden duży spis roczny i mniej obciąża pracę magazynu. Różnice między dwoma podejściami zestawia poniższa tabela. Ogólny opis procesu zawiera artykuł o inwentaryzacji magazynowej i spisie z natury.

Rodzaj spisuZakresSkutek dla pracy magazynu
Spis całościowyWszystkie lokalizacje w jednym terminieWymaga wstrzymania wydań i przyjęć
Spis wycinkowyWybrane lokalizacje lub grupy towarowePraca magazynu trwa, liczone są tylko wskazane fragmenty
Spis kontrolnyPozycje z dużą różnicą po pierwszym liczeniuKrótki, wykonywany przez inną osobę niż pierwsze liczenie

Kontrahenci z limitami i raporty sprzedaży

Ewidencja kontrahentów zawiera historię współpracy z warunkami płatności oraz bieżący stan rozliczeń. Dostęp do tych danych z poziomu dokumentu sprzedaży skraca obsługę zamówienia, bo handlowiec widzi, czy odbiorca przekroczył limit kredytu kupieckiego, zanim wystawi wydanie. Decyzja o wstrzymaniu dostawy do dłużnika zapada wtedy z pełnym obrazem sytuacji.

Kontrola limitu opiera się na prostej regule, którą stosuje wiele programów handlowych: do należności otwartych dolicza się wartość nowego dokumentu i porównuje sumę z limitem odbiorcy. Wynik może zablokować zatwierdzenie albo tylko ostrzec sprzedawcę, zależnie od przyjętej polityki. Warto ustalić przed wdrożeniem, kto ma prawo odblokować dokument i jak zapisuje się taką decyzję, bo od tego zależy ślad audytowy w rozliczeniach z kontrahentem.

Wbudowane raporty oceniają sprzedaż w podziale na asortyment lub kontrahenta, a także według regionu albo przedstawiciela handlowego. Zestawienia dostępne w czasie zbliżonym do rzeczywistego ułatwiają korygowanie planów zakupowych i wskazują towary o malejącej rotacji, zanim zamrożą nadmierną część kapitału obrotowego. Przebieg samej sprzedaży opisuje artykuł o tym, jak działa sprzedaż w systemie enova365, a przygotowanie zestawień omawia artykuł o raportowaniu w enova365.

Standardowy moduł enova365 a dedykowany WMS

Standardowy moduł magazynowy sprawdza się w firmach handlowych o umiarkowanej liczbie indeksów i prostej strukturze magazynu. Gdy rośnie liczba pozycji i powierzchnia magazynu, a zamówienia trzeba realizować szybciej, pojawia się potrzeba funkcji dedykowanego WMS: strategii rozmieszczania towaru albo obsługi magazynu wysokiego składowania. Poniższe zestawienie wyznacza granicę między modułem a systemem magazynowym zintegrowanym z enova365.

KryteriumStandardowy moduł enova365Dedykowany WMS zintegrowany z enova365
Liczba indeksówUmiarkowana, prosta struktura magazynuDuża, złożona struktura stref i poziomów
Strategie rozmieszczania towaruPodstawowe, definiowane ręcznieAutomatyczne, dopasowane do rotacji
Magazyn wysokiego składowaniaOgraniczona obsługaPełna obsługa stref i poziomów
Praca na urządzeniach mobilnychPodstawowa rejestracja skanemRozbudowane procesy dla wielu operatorów jednocześnie
Integracja z systemami zewnętrznymiPunktowa, przez dodatkiOparta na dedykowanych złączach

Dla wielu firm najlepsza jest kombinacja obu podejść. WMS przejmuje operacyjną obsługę magazynu, a enova365 pozostaje systemem centralnym dla finansów i rozliczeń z kontrahentami. Klasy takich rozwiązań opisuje artykuł o informatycznym systemie magazynowym, a możliwości Studio WMS.net prezentuje serwis SoftwareStudio.

Integracja enova365 z WMS - etapy i typowe błędy

Integracja z zewnętrznym WMS przebiega w uporządkowanych etapach, niezależnie od wielkości magazynu. Cztery z nich decydują o jakości wymiany danych.

  1. Podział procesów - zespół określa, które operacje zostają w enova365, a które przejmuje WMS.
  2. Mapowanie dokumentów - ustala się, jak dokumenty magazynowe z WMS odwzorowują się na dokumenty handlowe w ERP.
  3. Konfiguracja wymiany i testy - uruchamia się wymianę danych i sprawdza ją na wybranej grupie towarów lub jednym magazynie.
  4. Uruchomienie z nadzorem - po starcie analizuje się rozbieżności i dostosowuje reguły synchronizacji.

Sam mechanizm wymiany kartotek i zamówień oraz dokumentów PZ i WZ opisuje osobny artykuł o integracji ENOVA z systemem magazynowym, a ogólne wzorce łączenia systemów zawiera tekst o integracji WMS z ERP. Nawet dobrze zaprojektowana wymiana bywa źródłem problemów, jeśli pominie się kilka zasad organizacyjnych.

  • Brak jednego właściciela procesu - gdy za integrację odpowiada kilka osób bez podziału ról, decyzje o konfiguracji zapadają niespójnie.
  • Testy na zbyt małej próbce - wymiana sprawdzona na kilkudziesięciu towarach zachowuje się inaczej przy tysiącach pozycji dziennie.
  • Niespójne nazwy statusów - te same operacje opisane różnie w obu systemach utrudniają szukanie rozbieżności.
  • Brak trybu awaryjnego - bez procedury na przerwę w łączności magazyn może stanąć.

Reguła: przed uruchomieniem wymiany przeprowadza się inwentaryzację referencyjną w obu systemach jednocześnie. Zgodny punkt startowy pozwala od razu odróżnić rozbieżności z wymiany od zaległości sprzed wdrożenia.

Dla kogo wystarcza moduł Handel i Magazyn

Moduł dobrze służy firmom handlowym i produkcyjnym, dla których magazyn jest jednym z kilku obszarów obsługiwanych przez wspólny system ERP. Przedsiębiorstwo unika wtedy utrzymywania odrębnych aplikacji do finansów i magazynu. Opis systemu i jego modułów udostępnia producent na stronie enova.pl.

Firmy, w których magazyn staje się głównym ośrodkiem kosztów albo wymaga obsługi wysokiego składowania, zyskują najwięcej na połączeniu enova365 z dedykowanym WMS. Model zachowuje enova365 jako system rozliczeniowy, a operacyjną obsługę magazynu przekazuje narzędziu zaprojektowanemu pod te procesy. Ustawienie samego programu pod specyfikę firmy opisuje artykuł o dostosowaniu programu magazynowego enova365.