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.
| Etap | Dokument | Stan fizyczny | Stan dostępny |
|---|---|---|---|
| Przyjęcie zamówienia | Zamówienie odbiorcy | Bez zmian | Maleje o zarezerwowaną ilość |
| Wydanie towaru | Wydanie zewnętrzne do odbiorcy | Maleje | Bez zmian, rezerwacja zostaje zdjęta |
| Rozliczenie | Faktura sprzedaży z pozycjami z wydania | Bez zmian | Bez zmian |
| Dostawa | Przyjęcie zewnętrzne od dostawcy | Rośnie | Roś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;

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;
}

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 spisu | Zakres | Skutek dla pracy magazynu |
|---|---|---|
| Spis całościowy | Wszystkie lokalizacje w jednym terminie | Wymaga wstrzymania wydań i przyjęć |
| Spis wycinkowy | Wybrane lokalizacje lub grupy towarowe | Praca magazynu trwa, liczone są tylko wskazane fragmenty |
| Spis kontrolny | Pozycje z dużą różnicą po pierwszym liczeniu | Kró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.
| Kryterium | Standardowy moduł enova365 | Dedykowany WMS zintegrowany z enova365 |
|---|---|---|
| Liczba indeksów | Umiarkowana, prosta struktura magazynu | Duża, złożona struktura stref i poziomów |
| Strategie rozmieszczania towaru | Podstawowe, definiowane ręcznie | Automatyczne, dopasowane do rotacji |
| Magazyn wysokiego składowania | Ograniczona obsługa | Pełna obsługa stref i poziomów |
| Praca na urządzeniach mobilnych | Podstawowa rejestracja skanem | Rozbudowane procesy dla wielu operatorów jednocześnie |
| Integracja z systemami zewnętrznymi | Punktowa, przez dodatki | Oparta 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.
- Podział procesów - zespół określa, które operacje zostają w enova365, a które przejmuje WMS.
- Mapowanie dokumentów - ustala się, jak dokumenty magazynowe z WMS odwzorowują się na dokumenty handlowe w ERP.
- Konfiguracja wymiany i testy - uruchamia się wymianę danych i sprawdza ją na wybranej grupie towarów lub jednym magazynie.
- 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.





