HermesSQL i Studio WMS.net pracują na Microsoft SQL Server, ale każdy z nich ma własny model danych i własną logikę. Integracja musi ustalić, który system jest właścicielem danego rekordu, w jakiej kolejności przepływają dokumenty i co się dzieje po błędzie. Poniżej opisano poziomy integracji oraz scenariusze przyjęć i wydań. Osobna część dotyczy zasad projektowych dla zespołu IT.

Poziomy integracji z HermesSQL

Integrację można zrealizować na czterech poziomach. Wybór zależy od tego, jakie interfejsy udostępnia dostawca ERP, jak szybko dane mają krążyć i jak duże jest ryzyko przerw. W jednym wdrożeniu zwykle łączy się dwa z nich: dane słownikowe przez bazę, a dokumenty przez kolejkę.

PoziomMetodaKierunekTypowe zastosowanie
Baza danychbezpośredni dostęp SQL lub widokidwukierunkowysynchronizacja słowników i stanów
Pliki płaskieCSV, XML lub EDIdwukierunkowyasynchroniczny import i eksport dokumentów
API lub web serviceREST albo SOAP, jeśli dostępnedwukierunkowywymiana w czasie rzeczywistym
Middleware i ETLwłasny serwis Windows albo BizTalkdwukierunkowyzłożone transformacje i kolejkowanie

Obie bazy działają na MS SQL Server, więc możliwa jest integracja przez wspólną bazę albo przez linked servers. Takie połączenie wymaga otwartego dostępu między serwerami, co uzgadnia się z administratorem sieci. Opis aplikacji po stronie WMS znajduje się na stronie o systemie WMS.

Kto jest właścicielem danych

Pierwsza zasada projektowa brzmi: jedno źródło prawdy dla każdego bytu. Podział nie jest symetryczny, bo ERP odpowiada za handel, a WMS za fizyczny ruch towaru.

Reguła: nie zapisuje się danych bezpośrednio do tabel produkcyjnych HermesSQL. System ma wewnętrzną logikę, w tym triggery i procedury składowane. Po jego stronie działają też numeratory dokumentów. Zapis powinien iść przez procedury udostępnione przez dostawcę, tabele pośrednie z własnymi procedurami importu albo wbudowany import plików XML lub CSV.

Synchronizacja kartotek instrukcją MERGE

Dane słownikowe płyną z HermesSQL do WMS cyklicznie, na przykład co 15 minut, albo zdarzeniowo przez trigger. Synchronizacja obejmuje indeksy z jednostkami miary i kodami EAN. Dołączają do nich grupy towarowe. Dochodzą kontrahenci i lokalizacje, a osobną grupę tworzą jednostki logistyczne, takie jak palety i kartony. Po stronie WMS zadanie odpytuje widok i uzupełnia własne tabele.

Operacja musi być bezpieczna przy wielokrotnym uruchomieniu. Instrukcja MERGE wykonuje wstawienie albo aktualizację w jednym przebiegu. Poniższy przykład jest ilustracyjny, a nazwy tabel i widoku nie pochodzą z HermesSQL ani ze Studio WMS.net.

MERGE dbo.Towary WITH (HOLDLOCK) AS cel
USING (SELECT Symbol, Nazwa, JednostkaMiary, Ean
       FROM integracja.WidokTowarowERP) AS zrodlo
   ON cel.Symbol = zrodlo.Symbol
WHEN MATCHED AND (cel.Nazwa <> zrodlo.Nazwa
               OR cel.JednostkaMiary <> zrodlo.JednostkaMiary
               OR ISNULL(cel.Ean, '') <> ISNULL(zrodlo.Ean, ''))
    THEN UPDATE SET Nazwa = zrodlo.Nazwa,
                    JednostkaMiary = zrodlo.JednostkaMiary,
                    Ean = zrodlo.Ean
WHEN NOT MATCHED BY TARGET
    THEN INSERT (Symbol, Nazwa, JednostkaMiary, Ean)
         VALUES (zrodlo.Symbol, zrodlo.Nazwa, zrodlo.JednostkaMiary, zrodlo.Ean);

Warunek w klauzuli MATCHED ogranicza aktualizację do rekordów, które faktycznie się zmieniły. Podpowiedź HOLDLOCK zapobiega wyścigowi dwóch równoległych uruchomień, które mogłyby wstawić ten sam symbol. Składnię opisuje dokumentacja MERGE w T-SQL.

Scenariusze przyjęć, wydań i inwentaryzacji

ScenariuszPrzepływDokumentyDane krytyczne
PrzyjęcieERP, WMS, ERPzamówienie zakupu (ZZ) lub awizo, potem PZilość rzeczywista, partia, data ważności, numer seryjny
WydanieERP, WMS, ERPzamówienie sprzedaży (ZS), potem WZilość wydana, numery partii i serii, numer listu przewozowego
InwentaryzacjaWMS do ERParkusz różnic, potem dokumenty korygujące PW i RWmoment zamrożenia stanów
Stany on-lineWMS do ERPodczyt dostępności i rezerwacjatabela buforowa, zapytanie przez linked server lub endpoint stanów

Przy przyjęciu operator potwierdza w WMS rzeczywiste ilości i lokalizacje. Wpisuje też partie oraz serie, a WMS odsyła do HermesSQL dokument PZ z kompletem danych. ERP księguje go i aktualizuje stan. Uwaga dla programistów: HermesSQL nie ma natywnego pola na lokalizacje WMS, więc rozbieżności i adresy mapuje się na pole uwag dokumentu albo na dedykowaną cechę użytkownika.

Studio WMS.net - wypełniony formularz nagłówka WZ wydanie z magazynu, kontrahent Nowomex Wieliczka, zlecenie ZWZ
Formularz WZ w Studio WMS.net - ten dokument wraca do ERP z rzeczywiście wydanymi pozycjami i staje się podstawą dokumentu sprzedaży

Wydanie przebiega w odwrotnej kolejności: ERP generuje zamówienie sprzedaży, WMS planuje trasy kompletacji i generuje WZ z rzeczywistymi pozycjami. Ilość wydana może różnić się od zamówionej, na przykład przez brak albo substytut, więc potwierdzenie pozycji jest częścią komunikatu. Spis z natury w takim układzie opisuje strona o inwentaryzacji, a rodzaje dokumentów opisują dokumenty magazynowe.

Reguła: przed przekazaniem wyników inwentaryzacji do ERP trzeba uzgodnić moment zamrożenia stanów. WMS blokuje operacje na czas transferu danych, bo ruch w trakcie spisu zniekształciłby różnice.

Kolejka dokumentów z ponawianiem

Dokumenty magazynowe muszą dotrzeć do ERP także przy chwilowej niedostępności systemu. Rozwiązaniem jest tabela kolejki ze statusem i licznikiem prób. Zapisuje się w niej także ostatni błąd. Mechanizm ponawiania stosuje rosnące odstępy, a po przekroczeniu limitu prób wysyła alert.

CREATE TABLE integracja.queue_documents (
    id          bigint IDENTITY(1,1) PRIMARY KEY,
    doc_type    varchar(10)   NOT NULL,
    status      varchar(10)   NOT NULL DEFAULT 'NEW',
    retry_count int           NOT NULL DEFAULT 0,
    last_error  nvarchar(400) NULL,
    created_at  datetime2     NOT NULL DEFAULT SYSUTCDATETIME()
);

SELECT id, doc_type, retry_count, last_error
FROM integracja.queue_documents
WHERE status = 'ERROR' AND retry_count >= 3;

Schemat jest ilustracyjny. Drugie zapytanie wskazuje dokumenty, które wymagają reakcji człowieka. Minimalny zestaw alertów obejmuje cztery sytuacje.

Pułapki mapowania danych

ProblemRozwiązanie
Różne kody towarów w WMS i ERPtabela mapowań, na przykład map_indeksy, z kodem WMS i symbolem ERP
Niezgodne jednostki miarytabela przeliczników, bo WMS operuje na sztukach i paletach, a ERP może mieć kilogramy
Kontrahenci bez mapowaniasynchronizacja po NIP lub kodzie kontrahenta, nie po nazwie
Dokumenty walutowewartości po stronie WMS zawsze w PLN
Strefy czasowe i czas letniznaczniki czasu w UTC, konwersja przy wyświetlaniu

Pułapki wychodzą zwykle w pierwszym tygodniu pracy produkcyjnej. Tabela mapowań działa wtedy jak słownik tłumaczeń i jest jedynym miejscem, które trzeba poprawić.

Zastosowania według typu firmy

Typ firmyCo przepływaEfekt
Produkcjazlecenia produkcyjne z HermesSQL do WMS, rozchody materiałów do modułu produkcjikrótsze przygotowanie materiałów na linię i inwentaryzacja bez zatrzymania produkcji
Dystrybucjazamówienia sprzedaży do kolejki kompletacji, stany z powrotem do ERPmniej błędnych wysyłek, brak sprzedaży towaru, którego nie ma
Wiele magazynówdokumenty MM po wydaniu z lokalizacji źródłowejspójne opisy i jednostki oraz konsolidacja raportów w ERP
E-commercezamówienia z kanałów online przez ERP do WMS, zwroty z WMS do ERPstan aktualizowany po wydaniu paczki, obsługa zwrotów i reklamacji

Uruchomienie i lista kontrolna

Integrację testuje się zawsze na kopii bazy produkcyjnej. Dla każdej zmiany schematu przygotowuje się skrypt wycofania. Pierwsze uruchomienie produkcyjne trwa 24 godziny w trybie tylko do odczytu, a dopiero potem włącza się zapis. Serwis integracyjny, uruchamiany jako usługa Windows albo zadanie SQL Agent, działa osobno dla każdego kierunku, a konfigurację trzyma poza kodem.

  1. Model danych. Tabela mapowań obejmuje wszystkie encje i jest uzgodniona z obiema stronami.
  2. Reguły konfliktu. Ustala się, co się dzieje, gdy oba systemy zmienią ten sam rekord.
  3. Scenariusze brzegowe. Sprawdza się brak towaru w WMS, zerową ilość na PZ i anulowanie dokumentu w ERP po przyjęciu.
  4. Pełna resynchronizacja. Procedura działa na wypadek poważnej desynchronizacji i ma własny plan kopii zapasowej.

Terminale z Androidem opisuje strona o WMS na Androida. Układ regałów opisuje zarządzanie magazynem wysokiego składowania, a ogólne zasady obiegu oprogramowanie do zarządzania magazynem. Przestrzenny kontekst hali przedstawia strona o magazynie wysokiego składowania.

Dane z wielu magazynów zbiera program magazynowy online. Partie i numery seryjne, które przy pełnej identyfikowalności przekazuje się przy każdym ruchu, opisuje strona o partiach produkcyjnych i datach ważności. Różnice między systemami nadrzędnymi opisuje strona WMS a SAP.

Pytania i odpowiedzi o integrację WMS z HermesSQL

Na czterech: przez bazę danych lub widoki, przez pliki płaskie CSV albo XML, przez API albo web service oraz przez middleware z kolejkowaniem. W jednym wdrożeniu często łączy się dwa poziomy, na przykład bazę dla słowników i kolejkę dla dokumentów.

System ma wewnętrzną logikę, w tym triggery i procedury składowane. Zapis wprost omija te mechanizmy. Bezpieczne ścieżki to procedury od dostawcy, tabele pośrednie z własnym importem albo import plików XML lub CSV.

ERP jest masterem indeksów towarowych i dokumentów handlowych. WMS jest masterem lokalizacji i stanów fizycznych. Dokumenty PZ i WZ powstają operacyjnie w WMS, a finansowo należą do ERP.

Dokument zostaje w tabeli kolejki ze statusem i licznikiem prób. Mechanizm ponawia wysyłkę z rosnącym odstępem, a po przekroczeniu limitu prób zgłasza alert. Operatorzy w magazynie pracują dalej.

Adres lokalizacji mapuje się na pole uwag dokumentu albo na dedykowaną cechę użytkownika. Pełna historia miejsc składowania pozostaje w WMS, który jest masterem lokalizacji.

Glosariusz pojęć związanych z integracją HermesSQL i WMS

HermesSQL
System ERP firmy Humansoft działający na Microsoft SQL Server, partner integracji ze Studio WMS.net po stronie handlowej i księgowej.
Master danych
System będący jedynym miejscem zapisu danego rekordu. Drugi system otrzymuje jego kopię i jej nie zmienia.
Staging
Tabela pośrednia, do której trafiają dane przed importem do systemu docelowego. Chroni tabele produkcyjne przed bezpośrednim zapisem.
MERGE
Instrukcja T-SQL wykonująca wstawienie, aktualizację lub usunięcie rekordów w jednym przebiegu, według warunku porównania źródła i celu.
Linked server
Połączenie SQL Server z drugim serwerem bazodanowym, które pozwala odpytywać obce tabele zapytaniem SQL.
Idempotentność
Cecha operacji, której powtórzenie daje ten sam skutek co jedno wykonanie, co chroni przed duplikatami.
Ponawianie z rosnącym odstępem
Exponential backoff, w którym kolejne próby wysyłki następują w coraz dłuższych odstępach czasu.
Zamrożenie stanów
Wstrzymanie operacji magazynowych na czas przekazania wyników inwentaryzacji, aby ruch nie zniekształcił różnic.
Tabela mapowań
Słownik tłumaczący kody, jednostki i identyfikatory jednego systemu na odpowiedniki w drugim.

Warto przeczytać