# Plik, który czeka na serwerze. Wymiana CSV przez SFTP między ERP a WMS

> Jak WMS pobiera pliki CSV z serwera SFTP, sprawdza indeks i magazyn, dopisuje zlecenia i odsyła potwierdzenie wydania z numerami palet. Błędy idą mailem.

Adres strony: https://magazyn.softwarestudio.com.pl/integracja-wms-erp-sftp-csv/

---

Integracja z ERP klienta nie musi zaczynać się od interfejsu API. W opisywanym wdrożeniu u operatora logistycznego zadanie cykliczne pobiera uzgodniony plik CSV z serwera SFTP, zapisuje wiersze w tabeli pośredniej i dopiero w drugim etapie tworzy zlecenia. Po wydaniu na serwer wraca plik potwierdzenia z numerami palet.
Integracja z ERP klienta nie musi zaczynać się od interfejsu API. W opisywanym wdrożeniu u operatora logistycznego z południa Polski wystarcza uzgodniony plik CSV na serwerze SFTP i zadanie, które przetwarza dane w dwóch etapach, z kontrolą po każdym. Poniżej pokazujemy, co zawiera plik i w którym miejscu zatrzymuje się błędny wiersz.

Mechanizm z tego artykułu należy do warstwy dedykowanej wdrożenia, czyli do skryptów i procedur napisanych dla tego klienta na platformie [Studio WMS.net](/wms/), a nie do standardu produktu. Wymiana plikowa jest jedną z trzech metod łączenia WMS z ERP, a dwie pozostałe porównuje artykuł o [integracji ERP z WMS](/integracja-erp-z-wms-webapi/). Tamten tekst opisuje inne wdrożenie, więc fakty z obu artykułów się nie mieszają.

Plik pasuje, gdy żaden interfejs nie jest dostępny albo wymiana ma być prosta. WMS nie potrzebuje wtedy dostępu do bazy ERP, a ERP do bazy WMS, bo obie strony widzą tylko uzgodniony zestaw pól.

## Dwa kierunki plików

Operator wymienia z ERP klienta dwa rodzaje plików. Dostawy przychodzące tworzą w WMS zlecenia przyjęcia (ZPZ), a dostawy wychodzące zlecenia wydania z magazynu (ZWZ). Nazwa pliku niesie system, testowy albo produkcyjny, oraz kierunek wymiany. Resztę nazwy zajmują numer dostawy i znacznik czasu z datą oraz godziną.

Kanał wymiany ustala się osobno dla każdego klienta, bo w modelu 3PL każdy z kilku właścicieli towaru może mieć własny sposób przekazywania danych. Ten model opisuje strona o [WMS dla operatorów logistycznych](/wms-dla-operatorow-logistycznych/), a dokumenty, które powstają ze zleceń, strona o [dokumentach magazynowych](/dokumenty-magazynowe/).

Zawartość plików zależy od kierunku. Plik przyjęcia identyfikuje paletę numerem [SSCC](/sscc-jednostki-logistyczne/), a plik wydania niesie dane transportu. Numer dostawy występuje w obu plikach, więc wiąże wiersze jednej dostawy. Zestawienie pokazuje, które pole występuje w którym pliku.

| Pole | Plik przyjęcia | Plik wydania |
| --- | --- | --- |
| SSCC | tak | nie |
| Numer dostawy | tak | tak |
| Numer transportu | nie | tak |
| Kierowca | nie | tak |
| Numer auta | nie | tak |
| Planowana data i godzina załadunku | nie | tak |
| Indeks | tak | tak |
| Partia | tak | tak |
| Opis | tak | nie |
| Ilość | tak | tak |
| Jednostka | tak | tak |
| Magazyn | tak | tak |

## SFTP z kluczem SSH zamiast hasła

Pliki leżą na serwerze SFTP klienta, a logowanie odbywa się parą kluczy SSH zamiast hasła. Klient zrezygnował wcześniej ze zwykłego FTP, więc wymiana przeszła na protokół szyfrowany.

Para kluczy składa się z klucza prywatnego i publicznego. Dostęp ma strona, która posiada klucz prywatny, a odebranie dostępu sprowadza się do usunięcia klucza publicznego z serwera. Zwykły FTP przesyła zawartość plików i dane logowania bez szyfrowania, a SFTP szyfruje całe połączenie.

## Tabela pośrednia i dwa etapy importu

Zadanie cykliczne, czyli usługa w tle, pobiera pliki z serwera i usuwa je po przetworzeniu. Import składa się z dwóch etapów. W pierwszym wiersze pliku trafiają do tabeli pośredniej ze statusem 0. W drugim WMS wykonuje sprawdzenia i zapisuje dane w zleceniach, a wiersz dostaje status 1.

Rozdzielenie etapów ma praktyczny skutek. Po usunięciu pliku z serwera dane zostają w tabeli pośredniej razem z wynikiem kontroli. Zmiana statusu wiersza z 1 na 0 pozwala przegrać dane ponownie, bez ponownego pobierania pliku.

Dla serwisu status jest najkrótszą odpowiedzią na pytanie, dlaczego zlecenia nie ma w WMS. Wiersz ze statusem 0 czeka na sprawdzenia albo nie przeszedł ich pomyślnie, a przyczynę podaje wtedy kolumna błędu. Wiersz ze statusem 1 trafił już do zleceń.

Tabele pośrednie przechowują historię wymiany. Według stanu z sierpnia 2026 tabela przyjęć liczy ponad 2,3 mln wierszy, a tabela wydań ponad 0,5 mln.

## Kontrole magazynu i indeksu

Przed zapisem do zleceń WMS wykonuje trzy sprawdzenia. Kod magazynu z pliku musi istnieć w skorowidzu magazynów, w kolumnie kodu importu. Indeks musi istnieć w kartotece tego magazynu. Kontrahent nie pochodzi z pliku, tylko z kartoteki asortymentu, więc indeks bez kontrahenta w kartotece kończy się błędem.

Błąd trafia do kolumny błędu w tabeli pośredniej, przy wierszu, którego dotyczy. Zestawienie opisuje komunikaty i ich przyczyny, a budowę samej kartoteki omawia strona o [kartotece magazynowej](/kartoteka-magazynowa/).

| Typ | Komunikat | Przyczyna |
| --- | --- | --- |
| ERR | Nieprawidłowy indeks | Indeksu z pliku nie ma w kartotece danego magazynu. |
| ERR | Brak identyfikatora kontrahenta | Z kartoteki asortymentu nie da się ustalić kontrahenta. |
| ERR | Brak kodu magazynu | Kodu magazynu z pliku nie ma w skorowidzu magazynów. |
| WAR | Indeks OP | Wiersz nie trafia na stan, a WMS zapisuje tylko ostrzeżenie. |

## Indeksy pomijane przy imporcie

Plik klienta zawiera też wiersze, które nie są towarem. Indeksy z oznaczeniem OP oznaczają elementy dodatkowe, na przykład przekładki, i WMS nie przyjmuje ich na stan. Taki wiersz kończy się tylko ostrzeżeniem WAR, a nie błędem, a listę indeksów OP konfiguruje klient w roli kierownika magazynu.

> Indeksy z oznaczeniem OP nie są przyjmowane na stan. Lista należy do klienta i zmienia się bez udziału programisty.

## Mail z raportem błędów

Mail z raportem wychodzi do klienta tylko wtedy, gdy w imporcie wystąpi błąd typu ERR. Samo ostrzeżenie WAR nie uruchamia wysyłki. W raporcie błędy i ostrzeżenia leżą w osobnych sekcjach, więc indeks OP nie zasłania błędu, który wymaga reakcji.

Przyczynę odrzucenia pokazuje kolumna błędu w tabeli pośredniej. Dane, które przeszły już do zleceń, przegrywa się ponownie zmianą statusu z 1 na 0. Cofnięcie zlecenia, które trafiło do WMS, opisuje artykuł o [wycofaniu zlecenia w WMS](https://www.programmagazyn.pl/wycofanie-zlecenia-w-wms/).

## Potwierdzenie wydania z numerami palet

Po poprawnym imporcie wydania WMS zapisuje plik potwierdzenia, który wraca na serwer SFTP. Plik łączy numer dostawy i numer pozycji z numerem palety. Numery palet pochodzą z realizacji zlecenia na wózku, więc w pliku stoją palety, które operator faktycznie potwierdził. Plik wydania zawiera dane transportu, a potwierdzenie z numerami palet pokazuje klientowi, które palety wyjechały w której dostawie.

Podział pozycji wydania na palety pełne i końcówkę mix opisuje artykuł o [wydaniu palet pełnych i mix](https://system.wms.net.pl/wydanie-palet-pelnych-i-mix/), ale dotyczy on importu z arkusza Excel. Wymianę komunikatów EDI zamiast plików CSV opisujemy w tekście o [integracji EDI z WMS przez SFTP](/integracja-edi-wms-sftp/), a pracę magazynu z wieloma właścicielami towaru pokazuje strona [WMS dla operatora 3PL](https://www.programmagazyn.pl/wms-dla-operatora-3pl/).

## Pytania i odpowiedzi o wymianie CSV przez SFTP

## Słownik pojęć o wymianie CSV przez SFTP

Terminy używane przez dział IT i kierownika projektu, gdy WMS wymienia z ERP klienta pliki przez serwer SFTP.
