StudioSystem

Listy przewozowe DHL - generowanie z systemu

Dane odbiorcy i przesyłki wprost z dokumentu magazynowego, zamienione na plik XML zgodny ze specyfikacją e-case DHL - bez ręcznego przepisywania adresów.

studiosystem.softwarestudio.com.pl/transakcje/
Formularz konfiguracji pozycji menu w StudioSystem z polami transakcji do uruchomienia i parametrów transakcji
Formularz konfiguracji pozycji menu w StudioSystem z polami transakcji do uruchomienia i parametrów transakcji
W skrócie

StudioSystem generuje plik XML zgodny ze specyfikacją aplikacji e-case DHL na podstawie danych z dokumentu magazynowego. Plik importuje się do narzędzia przewoźnika, które wystawia właściwy list przewozowy. Źródło danych definiuje zapytanie SQL zapisane w skorowidzu XML, więc dane mogą pochodzić z dowolnej tabeli.

Co system robi, a czego nie

Zanim przejdziemy do konfiguracji, warto jasno rozgraniczyć zakres odpowiedzialności - to oszczędza rozczarowań na etapie wdrożenia. Generowanie listów przewozowych DHL z poziomu systemu magazynowego oznacza w praktyce przygotowanie kompletu poprawnych danych w formacie, który rozumie aplikacja przewoźnika.

EtapKto wykonujeEfekt
Zebranie danych odbiorcy i przesyłkiStudioSystem - zapytanie SQLKomplet pól wymaganych przez przewoźnika
Zamiana danych na plik wymianyStudioSystem - transakcja eksportuPlik XML w katalogu na serwerze
Import plikuOperator w aplikacji e-case DHLPrzesyłka zarejestrowana u przewoźnika
Wystawienie listu i etykietyDHLWłaściwy list przewozowy z numerem przesyłki

Taki podział ról ma konkretne uzasadnienie. Numer przesyłki i format etykiety należą do przewoźnika i zmieniają się wraz z jego regulaminem - system magazynowy nie powinien ich odtwarzać. Odpowiada natomiast za to, na czym zna się najlepiej: za poprawność danych adresowych i parametrów przesyłki, które i tak są już w bazie.

Zysk jest wymierny wszędzie tam, gdzie dziennie powstaje kilkadziesiąt wydań z magazynu. Znika przepisywanie adresu z dokumentu do formularza przewoźnika, a wraz z nim najczęstsze źródło błędów w dostawie: literówka w kodzie pocztowym albo pominięty numer telefonu do awizacji.

Jak przebiega generowanie

Cały mechanizm sprowadza się do czterech kroków wykonywanych w momencie kliknięcia przycisku w rejestrze dokumentów.

Od dokumentu magazynowego do pliku dla przewoźnika
DokumentUżytkownik wskazuje wydanie w rejestrze
ZapytanieSkorowidz XML wskazuje tabelę i kolumny
Plik XMLZapis w katalogu App_Xml na serwerze
PobranieImport do aplikacji e-case DHL

Wynikowy plik udostępniany jest przyciskiem pobrania, który otwiera go w nowym oknie. Aby zapisać plik na dysku zamiast go otwierać, wystarczy kliknąć przycisk prawym przyciskiem myszy i wybrać polecenie zapisania pliku.

Transakcja i jej parametry

Za eksport odpowiada transakcja role_sys/dhl2xml.aspx, należąca do zbioru transakcji uniwersalnych opisanych w materiale o architekturze transakcji. Do poprawnego działania wymaga dwóch parametrów przekazanych w wywołaniu:

  • typ - identyfikator pozycji skorowidza XML, czyli wskazanie, która definicja zapytania ma zostać użyta.
  • refno - identyfikator dokumentu, dla którego tworzony jest list przewozowy.

Rozdzielenie tych dwóch parametrów daje elastyczność, która przydaje się w praktyce. Jedna definicja zapytania obsługuje wszystkie dokumenty tego samego rodzaju, a jednocześnie nic nie stoi na przeszkodzie, by przygotować kilka definicji - osobną dla przesyłek krajowych i osobną dla zagranicznych, różniących się kodem usługi.

Warto dodać, że mechanizm jest niezależny od tego, skąd pochodzą dane wyjściowe. Firmy pracujące równolegle na systemie ERP - Comarch, SAP czy innym - często zadają pytanie, czy listy przewozowe da się wystawiać z ich środowiska. Odpowiedź sprowadza się do jednego warunku: dane muszą znaleźć się w bazie SQL, do której sięga zapytanie. Jeśli dokumenty sprzedaży lub wydania trafiają do StudioSystem przez integrację, eksport dla przewoźnika działa dokładnie tak samo, bo transakcja nie wie i nie musi wiedzieć, jaki system był pierwotnym źródłem rekordu.

Skorowidz XML - definicja zapytania

Ustawienia eksportu zapisane są w skorowidzu o prefiksie XML. To tam definiuje się, skąd pobrać dane i jak je nazwać. Konfiguracja opiera się na trzech elementach:

Pole skorowidzaZnaczeniePrzykład
tabelaŹródło danych, z którego odczytywane są informacjeKNKON - kartoteka kontrahentów
kolumnyLista kolumn wraz z aliasami zgodnymi ze specyfikacją przewoźnikaSKROCO AS RECEIVER_NAME
warunekKlauzula WHERE wskazująca konkretny rekordNRIDODN=(SELECT TOP(1) NRIDODN FROM DPMAG WHERE REFNO=@REFNO)

Zapytanie budowane jest dynamicznie z tych trzech części, a zmienna @REFNO podstawiana jest z parametru refno przekazanego przy uruchomieniu transakcji. W efekcie powstaje polecenie odczytujące dane kontrahenta, dla którego wystawiono dokument magazynowy o wskazanym numerze referencyjnym:

SELECT TOP(1)
  NRIDODN AS RECEIVER_ID,
  SKROCO AS RECEIVER_NAME,
  KODPOCZTOWY AS RECEIVER_POSTCODE,
  MIEJSCOWOSC AS RECEIVER_CITY,
  ULICA AS RECEIVER_STREET,
  TELEFON AS RECEIVER_TEL,
  EMAIL AS PRE_REC_EMAIL
FROM KNKON
WHERE NRIDODN=(SELECT TOP(1) NRIDODN FROM DPMAG WHERE REFNO=@REFNO)

Ponieważ zapytanie jest w pełni konfigurowalne, listy przewozowe da się tworzyć na podstawie różnych dokumentów i kartotek. Wymaga to jednak znajomości struktury tabel opisanej w materiale o bazie danych platformy, a w przypadku wydań magazynowych - rejestru dokumentów DPMAG.

Kolumny wymagane przez e-case

Najważniejsza zasada całej konfiguracji brzmi: nazwy zwracanych kolumn muszą dokładnie odpowiadać specyfikacji e-case DHL. Aplikacja przewoźnika rozpoznaje dane po nazwach, nie po kolejności, dlatego w zapytaniu nadaje się aliasy poleceniem AS.

Część pól pochodzi wprost z kartoteki, a część to wartości stałe określające rodzaj usługi i sposób rozliczenia:

  • RECEIVER_ID, RECEIVER_NAME - identyfikator i nazwa odbiorcy.
  • RECEIVER_POSTCODE, RECEIVER_CITY, RECEIVER_STREET, RECEIVER_HOUSENUMBER - adres dostawy.
  • RECEIVER_TEL, PRE_REC_EMAIL - dane kontaktowe wykorzystywane do awizacji przesyłki.
  • PRODUCT - kod usługi przewoźnika, podawany jako wartość stała.
  • PAYMENT_TYPE, INVOICE_TO - sposób rozliczenia i wskazanie płatnika.
  • CASH_ON_DELIVERY, GOODS_VALUE - kwota pobrania i deklarowana wartość towaru.
  • DOCUMENT, BLP - znaczniki dodatkowych opcji przesyłki.

Wartości stałe wpisuje się w zapytaniu jako literały w apostrofach, na przykład 'P' AS PAYMENT_TYPE. Warto zwrócić uwagę na drobiazg, który potrafi kosztować godzinę diagnostyki: kopiowanie definicji z edytora tekstu bywa źródłem tak zwanych inteligentnych cudzysłowów zamiast prostych apostrofów, co powoduje błąd zapytania.

Podpięcie przycisku do rejestru

Aby użytkownik mógł wywołać eksport, transakcję podpina się jako polecenie w rejestrze dokumentów - najczęściej w zestawieniu wydań z magazynu. Służy do tego moduł Konfigurator, w którym każda pozycja menu wiąże nazwę transakcji z parametrami jej uruchomienia.

StudioSystem

Transakcja i parametry w jednym formularzu

Pola „Transakcja do uruchomienia" oraz „Parametry transakcji" decydują o tym, co wywoła przycisk. W przykładzie widoczna jest inna transakcja uniwersalna - mechanizm podpięcia pozostaje identyczny.

Po zapisaniu konfiguracji w rejestrze dokumentów pojawia się polecenie uruchamiające eksport. Numer referencyjny zaznaczonego dokumentu przekazywany jest automatycznie, więc użytkownik wykonuje jedną czynność: zaznacza wydanie i klika przycisk.

Gdzie powstaje plik i typowe błędy

Wygenerowane pliki zapisywane są na serwerze w katalogu App_Xml, a ich nazwa ma postać dhl-@REFNO, gdzie @REFNO to wartość parametru refno. Każdy dokument ma więc własny, jednoznacznie nazwany plik, co ułatwia późniejsze odszukanie eksportu dla konkretnej przesyłki.

Jeżeli konfiguracja kolumn jest błędna albo brakuje wymaganych parametrów uruchomienia, plik nie powstanie, a w oknie transakcji wyświetli się komunikat o błędzie. W praktyce wdrożeniowej najczęściej odpowiadają za to trzy przyczyny:

  1. Nieprzekazany parametr - najczęściej brak typ przy podpinaniu przycisku do menu.
  2. Alias niezgodny ze specyfikacją - literówka w nazwie kolumny docelowej, na przykład RECEIVER_POSTCODE zapisane inaczej.
  3. Warunek nietrafiający w rekord - zapytanie wykonuje się poprawnie, ale nie zwraca żadnego wiersza.

Ten sam mechanizm eksportu do XML wykorzystywany jest szerzej w platformie, co opisuje strona o eksporcie danych do XML. Jeśli natomiast interesuje Cię obsługa przesyłek kurierskich po stronie samego magazynu, warto zajrzeć do materiału o transakcji kurierskiej oraz do zestawienia transakcji WMS.

Podsumowanie

Generowanie listów przewozowych DHL w StudioSystem opiera się na prostym założeniu: system dostarcza dane, przewoźnik wystawia dokument. Transakcja dhl2xml.aspx odczytuje ustawienia ze skorowidza XML, wykonuje zapytanie z podstawionym numerem referencyjnym dokumentu i zapisuje plik XML w katalogu App_Xml, skąd trafia on do aplikacji e-case DHL.

Kluczem do poprawnego wdrożenia jest zgodność nazw kolumn ze specyfikacją przewoźnika oraz przemyślany warunek zapytania. Ponieważ całość opiera się na konfigurowalnym zapytaniu SQL, ten sam mechanizm da się wykorzystać dla innych dokumentów i innych formatów wymiany danych.

Słownik pojęć

Podstawowe pojęcia z generowania listów przewozowych

Terminologia przydatna przy konfigurowaniu wymiany danych z przewoźnikiem.

LList przewozowy
Dokument towarzyszący przesyłce, identyfikujący nadawcę, odbiorcę, rodzaj usługi i sposób rozliczenia transportu.
Ee-case DHL
Aplikacja przewoźnika przyjmująca dane przesyłek w formacie XML o ściśle określonych nazwach kolumn.
XSkorowidz XML
Słownik konfiguracyjny z definicją tabeli źródłowej, listy kolumn i warunku zapytania SQL.
RREFNO
Numer referencyjny dokumentu przekazywany do transakcji i podstawiany w zapytaniu jako zmienna @REFNO.
AAlias kolumny
Nazwa nadana kolumnie poleceniem AS, decydująca o zgodności wyniku ze specyfikacją odbiorcy.
AApp_Xml
Katalog na serwerze, w którym zapisywane są wygenerowane pliki XML listów przewozowych.
FAQ

Najczęściej zadawane pytania

01

Czy system drukuje gotowy list przewozowy DHL?

Nie. StudioSystem generuje plik XML zgodny ze specyfikacją aplikacji e-case DHL. Plik ten importuje się następnie do narzędzia przewoźnika, które tworzy właściwy list przewozowy i etykietę. Podział ról jest celowy: system dostarcza poprawne dane, a dokument wystawia przewoźnik.

02

Z jakich dokumentów można wygenerować list przewozowy?

Z dowolnych, ponieważ źródło danych definiuje się w skorowidzu XML. Najczęściej jest to dokument wydania z magazynu, ale zapytanie może odczytywać dane z kartoteki kontrahentów, dokumentu zlecenia lub innej tabeli bazy danych.

03

Jakie parametry przyjmuje transakcja generująca plik?

Transakcja wymaga dwóch parametrów. Parametr typ wskazuje pozycję skorowidza XML, czyli definicję zapytania, a parametr refno identyfikuje dokument, dla którego tworzony jest list przewozowy.

04

Dlaczego nazwy kolumn muszą być dokładnie takie jak w specyfikacji?

Aplikacja e-case DHL rozpoznaje dane po nazwach kolumn, a nie po ich kolejności. Dlatego w zapytaniu SQL nadaje się aliasy poleceniem AS, na przykład SKROCO AS RECEIVER_NAME. Niezgodna nazwa oznacza, że pole nie zostanie odczytane po stronie przewoźnika.

05

Gdzie zapisywany jest wygenerowany plik?

Pliki powstają na serwerze w katalogu App_Xml, a ich nazwa ma postać dhl-@REFNO, gdzie @REFNO to wartość parametru refno przekazana przy uruchomieniu. Dzięki temu każdy dokument ma własny, jednoznacznie nazwany plik.

06

Co się dzieje, gdy konfiguracja jest błędna?

Plik nie zostanie utworzony, a w oknie transakcji pojawi się komunikat o błędzie. Najczęstsze przyczyny to brak wymaganych parametrów uruchomienia oraz niezgodne ze specyfikacją nazwy kolumn w zapytaniu zapisanym w skorowidzu.

Warto przeczytać

Powiązane materiały o wymianie danych

Kolejne kroki, jeśli chcesz zautomatyzować obieg dokumentów między systemami.

Eksport

Eksport danych do pliku XML

Uniwersalny mechanizm zamiany wyniku zapytania na plik XML, wykorzystywany nie tylko dla przewoźników. Przydatny wszędzie tam, gdzie system zewnętrzny oczekuje danych w ustalonej strukturze.

Czytaj dalej →
Konfiguracja

Skorowidze - słowniki konfiguracyjne

Jak działają słowniki, w których zapisuje się definicje zapytań, szablony i parametry transakcji. Podstawa większości zmian wykonywanych bez udziału programisty.

Czytaj dalej →
Magazyn

Transakcje WMS - wydania z magazynu

Dokumenty, na podstawie których najczęściej powstają listy przewozowe. Opis rejestrów przyjęć i wydań oraz miejsca, w którym podpina się polecenia eksportu.

Czytaj dalej →
Interfejs

Konfigurator - przyciski i pozycje menu

Jak dodać własne polecenie do paska nad tabelą i przekazać mu parametry wywołania. Krok niezbędny, by użytkownik mógł uruchomić eksport jednym kliknięciem.

Czytaj dalej →
Dane

Baza danych i konfigurowalne widoki SQL

Struktura tabel, z których zapytanie pobiera dane odbiorcy i przesyłki. Punkt wyjścia przy budowaniu własnej definicji eksportu dla innego dokumentu.

Czytaj dalej →
Przesyłki

Obsługa przesyłek kurierskich

Transakcja wspierająca pracę z przesyłkami po stronie magazynu. Uzupełnia temat wymiany danych o codzienną obsługę wysyłek realizowanych przez kurierów.

Czytaj dalej →

Chcesz zobaczyć generowanie listów przewozowych?

Uruchom demo StudioSystem i sprawdź, jak z dokumentu wydania powstaje plik dla przewoźnika.