Integracja WMS z ERP - zakres i kierunki wymiany
Integracja systemów magazynowych łączy WMS z programami używanymi w firmie. Chodzi o ERP i sklep internetowy oraz o systemy transportowe i przewoźników. Bez połączenia te same dane trzeba wpisywać do kilku programów osobno, co wydłuża pracę i zwiększa ryzyko pomyłek. Dane wprowadzone raz w jednym systemie powinny trafić tam, gdzie są potrzebne, bez udziału człowieka. Ogólny zakres omawia artykuł o integracji programu WMS z innymi systemami firmy.
Połączenie z ERP zwykle jest pierwsze. ERP prowadzi zamówienia i faktury, a WMS odpowiada za fizyczny ruch towaru. Gdy systemy wymieniają dane automatycznie, dokumenty magazynowe z przyjęcia i wydania trafiają do księgowości bez przepisywania, a dział zakupów widzi aktualny stan zamiast czekać na raport miesięczny.
| Kierunek | Dane | Wyzwalacz |
|---|---|---|
| ERP do WMS | Kartoteki towarów i kontrahentów | Zmiana w ERP lub harmonogram nocny |
| ERP do WMS | Zamówienia sprzedaży i zakupu | Zatwierdzenie dokumentu w ERP |
| WMS do ERP | Potwierdzenia przyjęć (PZ) i wydań (WZ) | Zamknięcie dokumentu w magazynie |
| WMS do ERP | Przesunięcia i korekty stanu | Operacja magazynowa lub okresowy zrzut |
Wokół WMS działają jeszcze inne systemy, a każdy z nich wymaga własnego mapowania danych:
- Platformy sprzedażowe - każda zmiana dostępności po przyjęciu lub rezerwacji aktualizuje ofertę w sklepie, co opisuje strona o systemie WMS dla sklepu internetowego.
- Systemy transportowe i kurierzy - generowanie etykiet przewozowych oraz odbiór numerów śledzenia, a do systemu przewoźnika trafiają waga i wymiary; szczegóły w artykule o firmach kurierskich.
- Kolektory i drukarki - zeskanowana etykieta GS1 identyfikuje produkt i partię bez wpisywania numerów.
- Automatyka magazynowa - przenośniki i sortery komunikują się z WMS w czasie rzeczywistym.

Wybór kanału wymiany
Kanał zależy od wieku systemów i częstotliwości wymiany oraz od tego, co się dzieje, gdy druga strona jest chwilowo niedostępna. Metody można łączyć w jednym wdrożeniu: kartoteki mogą płynąć plikiem raz na dobę, a potwierdzenia wydań przez kolejkę na bieżąco.
| Kanał | Jak działa | Zachowanie przy awarii drugiej strony | Kiedy się sprawdza |
|---|---|---|---|
| REST (JSON przez HTTP) | Żądanie i odpowiedź w czasie rzeczywistym | Nadawca dostaje błąd i sam powtarza próbę | Sklepy internetowe i zapytania wymagające odpowiedzi |
| Pliki (CSV, XML) | Eksport i import w ustalonych odstępach | Plik czeka w katalogu do następnego przebiegu | Integracje z niższą częstotliwością i mniejszym budżetem |
| EDI (na przykład EANCOM) | Ustandaryzowane komunikaty między firmami | Zależy od operatora sieci lub kanału transmisji | Duże sieci handlowe i partnerzy B2B |
| Kolejka komunikatów | Asynchroniczna wymiana przez brokera | Komunikat czeka w kolejce do odbioru | Wiele systemów i duża liczba zdarzeń |
| Middleware lub ESB | Warstwa pośrednia tłumacząca formaty | Zależy od konfiguracji warstwy | Firmy z kilkoma równoległymi systemami |
Z czasem firmy zwykle przechodzą z wymiany plików na REST albo kolejki, bo pliki przestają nadążać za tempem magazynu. Warstwę pośrednią opisuje artykuł o Linkway.BRIDGE i integracji systemów w logistyce, a same zasady komunikacji WMS z innymi programami - strona o komunikacji systemu WMS z innymi systemami.
Reguła: dokument, który zmienia stan magazynu lub księgi, wysyła się kanałem z potwierdzeniem odbioru i śladem, a nie żądaniem bez odpowiedzi.
REST między WMS a ERP
REST dobrze pasuje do zdarzeń pojedynczych dokumentów. WMS po zamknięciu wydania wysyła do ERP potwierdzenie w formacie JSON, a ERP odpowiada kodem statusu. Metoda POST nie jest z natury idempotentna, więc powtórzone żądanie może utworzyć drugi dokument. Definicje metod idempotentnych zawiera specyfikacja RFC 9110. Praktycznym obejściem jest klucz idempotentności, czyli identyfikator komunikatu, który nadawca generuje raz i przesyła w nagłówku przy każdej próbie.
{
"messageId": "6f1c0d52-3b1a-4c1e-9d55-1b7d8a0c9e11",
"type": "IssueConfirmed",
"documentNo": "WZ/2026/09/00123",
"orderRef": "ZS/2026/09/00456",
"lines": [ { "sku": "A100", "qty": 12, "batch": "L2609A" } ]
}
Po stronie nadawcy powtórzenia obejmują tylko błędy przejściowe: przekroczenie czasu, kody 5xx i przeciążenie serwera. Błąd 4xx oznacza wadliwe dane, więc kolejna próba niczego nie zmieni. Odstęp między próbami rośnie wykładniczo, żeby nie dobijać niedostępnego ERP.
Kontrakt interfejsu obejmuje też wersję adresu, na przykład /v1/, sposób uwierzytelnienia tokenem oraz limity rozmiaru odpowiedzi. Dane o stanach zwracane są stronami, bo jedno zapytanie o cały magazyn przeciąża obie strony. Transmisję zabezpiecza TLS.
public async Task<bool> SendIssueAsync(IssueConfirmation dto, CancellationToken ct)
{
var json = JsonSerializer.Serialize(dto);
for (int attempt = 1; attempt <= 4; attempt++)
{
using var req = new HttpRequestMessage(HttpMethod.Post, "/api/warehouse/issues");
req.Headers.Add("Idempotency-Key", dto.MessageId.ToString());
req.Content = new StringContent(json, Encoding.UTF8, "application/json");
try
{
using var res = await _http.SendAsync(req, ct);
if (res.IsSuccessStatusCode) return true;
if ((int)res.StatusCode < 500
&& res.StatusCode != HttpStatusCode.RequestTimeout
&& res.StatusCode != HttpStatusCode.TooManyRequests) return false;
}
catch (HttpRequestException) { }
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)), ct);
}
return false;
}
Pliki wymiany i EDI
Wymiana plikowa jest najprostsza technicznie: jedna strona zapisuje plik do katalogu lub na serwer SFTP, druga go odbiera w harmonogramie. Wymaga jednak trzech zasad, których pominięcie kończy się połowicznymi plikami. Plik zapisuje się pod nazwą tymczasową i zmienia nazwę dopiero po zakończeniu zapisu. Nazwa zawiera numer kolejny lub znacznik czasu. Odbiorca po przetworzeniu przenosi plik do archiwum, a błędny do katalogu wyjątków.
W wymianie między firmami standardem jest EDI. Komunikaty EANCOM opisują przebieg zamówienia: ORDERS jest zamówieniem, DESADV awizem wysyłki, a RECADV potwierdzeniem przyjęcia. Awizo wysyłki z numerami SSCC pozwala utworzyć przyjęcie bez przepisywania, co omawia artykuł o awizacji ładunków. Plik EDI jest tylko formatem, więc te same problemy z duplikatami i kolejnością trzeba rozwiązać po stronie przetwarzania.
Przy plikach CSV i XML większość awarii wynika ze szczegółów formatu. Kodowanie ustala się jawnie na UTF-8, żeby polskie znaki nie zamieniły się w krzaki. Separator dziesiętny musi być taki sam po obu stronach, a daty zapisuje się w formacie ISO 8601, na przykład 2026-09-30T14:05:00. Liczba pól w wierszu i kolejność kolumn są częścią kontraktu, więc zmiana wersji pliku wymaga uzgodnienia z odbiorcą.

Kolejki komunikatów i wzorzec outbox
Największy problem integracji dotyczy chwili między zapisem w bazie a wysłaniem komunikatu. Jeśli WMS zapisze wydanie, a proces padnie przed wysyłką, ERP nigdy się o nim nie dowie. Odwrotna kolejność jest gorsza: komunikat wychodzi, a zapis w bazie się wycofuje. Wzorzec outbox rozwiązuje to jedną transakcją, w której zmiana biznesowa i wiadomość do wysłania trafiają do bazy razem.
BEGIN TRAN;
UPDATE dbo.IssueDocuments SET Status = 'CLOSED' WHERE DocumentId = @DocumentId;
INSERT INTO dbo.Outbox (MessageId, MessageType, Payload, CreatedAt, Status)
VALUES (NEWID(), 'IssueConfirmed', @PayloadJson, SYSUTCDATETIME(), 'NEW');
COMMIT;
Osobny proces, na przykład zadanie SQL Agent lub usługa w C#, czyta wiersze o statusie NEW i publikuje je do brokera albo wywołuje REST. Po potwierdzeniu odbioru zmienia status na SENT. Awaria między publikacją a zmianą statusu powoduje ponowną wysyłkę tej samej wiadomości, więc odbiorca musi ją rozpoznać. Gwarancja dostarczenia co najmniej raz jest prostsza do zapewnienia niż dokładnie raz, a brakujące ogniwo dopowiada idempotentny odbiór.
Kolejność też ma znaczenie. Korekta dokumentu nie może wyprzedzić jego utworzenia, dlatego komunikaty jednego dokumentu numeruje się wersją i przetwarza po kolei. Komunikaty różnych dokumentów mogą płynąć równolegle.
Powtórzenia bez dublowania dokumentów
Odbiorca chroni się przed duplikatami tabelą przyjętych komunikatów z unikalnym indeksem na MessageId. Wstawienie identyfikatora i przetworzenie dokumentu następuje w jednej transakcji. Drugie doręczenie tego samego komunikatu narusza indeks, transakcja się wycofuje, a odbiorca odpowiada sukcesem, bo praca została już wykonana. Składnię indeksów unikalnych opisuje dokumentacja tworzenia indeksów unikalnych w SQL Server.
CREATE UNIQUE INDEX UX_Inbox_MessageId ON dbo.Inbox (MessageId);
BEGIN TRY
BEGIN TRAN;
INSERT INTO dbo.Inbox (MessageId, ReceivedAt)
VALUES (@MessageId, SYSUTCDATETIME());
INSERT INTO dbo.ReceiptDocuments (ExternalRef, SupplierId, CreatedAt)
VALUES (@ExternalRef, @SupplierId, SYSUTCDATETIME());
COMMIT;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
IF ERROR_NUMBER() IN (2601, 2627) RETURN 0; -- duplikat: komunikat już przetworzony
THROW;
END CATCH;
Reguła: identyfikator komunikatu powstaje raz, razem z dokumentem, i nie zmienia się przy żadnym powtórzeniu.
Częsty błąd polega na generowaniu nowego identyfikatora przy każdej próbie. Wtedy odbiorca nie ma czym rozpoznać powtórki, a indeks unikalny nie chroni niczego. Drugi błąd to klucz oparty na numerze dokumentu w ERP, który pojawia się dopiero po jego utworzeniu i przy pierwszej wysyłce jest pusty.
Obsługa błędów i monitorowanie
Integracja bez obsługi wyjątków ukrywa problemy: rozbieżność danych wychodzi po kilku tygodniach. Błędy dzieli się według tego, kto może je naprawić, a każda klasa ma inną ścieżkę.
| Klasa błędu | Przykład | Reakcja systemu | Kto naprawia |
|---|---|---|---|
| Techniczny | Przekroczenie czasu, kod 503, brak sieci | Powtórzenie z rosnącym odstępem | Nikt, gdy próba się powiedzie; administrator po wyczerpaniu prób |
| Danych | Nieznany SKU, brak jednostki miary, zły format daty | Odrzucenie i wpis do kolejki wyjątków | Osoba prowadząca kartoteki |
| Biznesowy | Zamówienie zamknięte w ERP lub nadwyżka wydania | Status Odrzucone z przyczyną i alert | Dyspozytor lub dział sprzedaży |
Monitoring opiera się na kilku prostych zapytaniach: liczba wiadomości w Outbox starszych niż zadany czas, wiek najstarszego wyjątku i liczba odrzuceń w ostatniej dobie. Alert o zablokowanej kolejce trafia do administratora zanim magazyn zauważy brak dokumentów w ERP. Stan zapasów pokazany w obu systemach powinien się zgadzać, a różnice wykrywa porównanie okresowe, co dotyczy każdej ewidencji ilościowej.
Poza obsługą pojedynczych błędów potrzebne jest okresowe uzgadnianie. Nocne zadanie porównuje sumy ilości na SKU w WMS i w ERP, a różnice zapisuje do osobnej tabeli. Rozbieżność, która rośnie z dnia na dzień, wskazuje zgubioną albo zdublowaną wiadomość jeszcze zanim zauważy ją księgowość lub magazyn.
Wskazówka: przed uruchomieniem produkcyjnym trzeba przeprowadzić test na ograniczonej próbce i porównać wynik ręcznie, pole po polu. Błąd mapowania wykryty na dziesięciu rekordach kosztuje kilka minut, a wykryty po tygodniu oznacza prostowanie stanów i dokumentów księgowych.

Kolejność wdrożenia integracji
Poniższa kolejność sprawdza się przy jednym systemie i przy kilku jednocześnie. Pominięcie któregoś etapu odbija się później na jakości danych.
- Inwentaryzacja systemów i danych - spis programów wymieniających dane oraz dokładnego zakresu informacji w każdą stronę.
- Mapowanie pól i formatów - ustalenie, które pole odpowiada któremu w drugim systemie, wraz z ujednoliceniem jednostek miary i formatów dat.
- Wybór kanału i test na środowisku testowym - dopasowanie kanału do możliwości obu stron oraz sprawdzenie wymiany na próbce transakcji.
- Uruchomienie i monitoring - praca równoległa ze starym procesem w pierwszym okresie, ustalenie osoby reagującej na wyjątki i uruchomienie alertów.
Uruchomienie integracji zwykle idzie razem z wdrożeniem systemu WMS. Operator obsługujący wielu klientów utrzymuje osobny profil integracji dla każdego z nich, tak jak w opisie WMS dla operatora 3PL.
Integracja z SAP i innymi ERP
SAP jest jednym z najczęściej spotkanych ERP w średnich i dużych firmach, dlatego integracja WMS z SAP należy do częstych zadań. Oznacza zwykle dwukierunkową wymianę zleceń magazynowych oraz potwierdzeń ich realizacji, a także stanów zapasów między modułem magazynowym SAP a WMS obsługującym halę. Integracja nie wymusza rezygnacji z dedykowanego WMS: SAP zostaje źródłem danych finansowych i zamówień, a WMS optymalizuje pracę magazynu, której ogólny moduł ERP zwykle nie obsługuje tak precyzyjnie.
Podobnie wygląda współpraca z innymi ERP. Zakres wymiany warto ustalać etapami: najpierw dokumenty przyjęcia i wydania, potem stany zapasów, a na końcu zestawienia kosztowe. Taki układ pozwala wychwycić błędy mapowania na małej liczbie transakcji. Integrację konkretnego systemu opisuje artykuł o integracji Comarch WMS z systemami ERP.
Integracja w Studio WMS.net
Studio WMS.net firmy SoftwareStudio udostępnia mechanizmy integracji z ERP oraz platformami e-commerce, a także z oprogramowaniem firm kurierskich, więc połączenia nie trzeba budować od podstaw. Konfiguracja obejmuje mapowanie dokumentów oraz harmonogram wymiany danych, a osobno reguły obsługi wyjątków, ustalane z zespołem wdrożeniowym na etapie analizy przedwdrożeniowej. Informacje o produkcie zawiera serwis Studio WMS.net, a o usługach integracyjnych - strona integracji systemów informatycznych.




