Skocz do zawartości

Eksport CSV do Weblkient DPD

Polecane posty

Witam,

Od kliku tygodni korzystam z usług DPD wykorzystując testową wersję Smart BL (30 dni), która powoli dobiega końca. Oczywiście można wykupić pełną płatną wersję, ale wiem, że od niedawna w Sello istnieje eksport plików CSV i tak też udało mi się znaleźć jakąś formatkę, ale niestety eksportuje ona wszystkie dane w jednej linii a DPD wymaga konkretnych danych w osobnych kolumnach. Czy ktoś z Was ma już gotowca?

 

Poniżej transformata która się nie nadaje:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://www.sello.pl/export">

  <xsl:output method="text" encoding="Windows-1250"/>

  <xsl:strip-space elements="*" />

  <xsl:variable name="comma">;</xsl:variable>

  <xsl:variable name="kurier">DPD</xsl:variable>

 

  <!-- PoniĹĽsze dane proszÄ™ wyedytować --> 

  <xsl:variable name="S_Name"></xsl:variable>

  <xsl:variable name="S_Address"></xsl:variable>

  <xsl:variable name="S_Zip"></xsl:variable>

  <xsl:variable name="S_City"></xsl:variable>

  <xsl:variable name="S_Phone"></xsl:variable>

  <xsl:variable name="S_Email"></xsl:variable>

  <xsl:variable name="S_Contact_Person"></xsl:variable>

 

  <!-- PoniĹĽej naleĹĽy wpisać nazwy sposobĂłw dostawy odpowiednich dla kategorii paczek -->

  <xsl:variable name="Kategoria_Paczki_Kopertowka">Przesyłka kurierska</xsl:variable>

  <xsl:variable name="Kategoria_Paczki_Kopertowka_Pobraniowa">Przesyłka kurierska pobraniowa</xsl:variable>

  <xsl:variable name="Kategoria_Paczki_do5kg"></xsl:variable>

  <xsl:variable name="Kategoria_Paczki_do10kg"></xsl:variable>

  <xsl:variable name="Kategoria_Paczki_do20kg"></xsl:variable>

  <xsl:variable name="Kategoria_Paczki_do30kg"></xsl:variable>

  <xsl:variable name="Kategoria_Paczki_do50kg"></xsl:variable>

  <xsl:variable name="Kategoria_Paczki_do70kg"></xsl:variable>

 

 

 

  <!-- PowyĹĽsze dane proszÄ™ wyedytować -->

 

  <xsl:template match="/">

    <xsl:text>S_Name;S_Address;S_Zip;S_City;S_Phone;S_Email;S_Contact_Person;P_Cat_KP;P_Cat_5;P_Cat_10;P_Cat_20;P_Cat_30;P_Cat_50;P_Cat_70;R_Name;R_Address;R_Zip;R_City;R_Phone;R_Email;R_Contact_Person;P_Courier_Name;P_Comment;P_Cod</xsl:text>

    <xsl:text></xsl:text>

    <xsl:apply-templates select="s:ExportData/s:Package" />

  </xsl:template>

 

  <xsl:template match="s:Package">

    <xsl:value-of select="$S_Name"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$S_Address"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$S_Zip"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$S_City"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$S_Phone"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$S_Email"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$S_Contact_Person"/><xsl:value-of select="$comma"/>

   

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_Kopertowka or s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_Kopertowka_Pobraniowa">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>

    <xsl:value-of select="$comma"/>

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do5kg">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>   

    <xsl:value-of select="$comma"/>

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do10kg">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>

    <xsl:value-of select="$comma"/>

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do20kg">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>   

    <xsl:value-of select="$comma"/>

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do30kg">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>   

    <xsl:value-of select="$comma"/>

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do50kg">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>   

    <xsl:value-of select="$comma"/>

    <xsl:choose>

      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do70kg">1</xsl:when>

      <xsl:otherwise>0</xsl:otherwise>

    </xsl:choose>

    <xsl:value-of select="$comma"/>

   

    <xsl:value-of select="s:DeliveryAddress/s:Name"/><xsl:value-of select="$comma"/>

      <xsl:value-of select="s:DeliveryAddress/s:Line1"/>

    <xsl:value-of select="' '" />

    <xsl:value-of select="s:DeliveryAddress/s:Line2"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="s:DeliveryAddress/s:ZipCode"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="s:DeliveryAddress/s:City"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="s:DeliveryAddress/s:PhoneNumber"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="../s:Customer[@CustomerID = current()/s:Customer/@CustomerID]/s:EmailAddress[@IsDefault = 1]"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="s:DeliveryAddress/s:Name"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$kurier"/><xsl:value-of select="$comma"/>

    <xsl:value-of select="$comma"/>

    <xsl:value-of select="s:Charge"/><xsl:value-of select="$comma"/>

    <xsl:text></xsl:text>

  </xsl:template>

</xsl:stylesheet>

Link to postu

Sprawdź ten wątek, są tam transformaty:

https://forum.sello.pl/index.php?topic=6950.msg42757#msg42757

To właśnie stamtąd mam w/w transformatę, ale ona zaciąga wszystko w jednej lini, a nie w kolumnach. Prawidłowy plik otrzymany od DPD wygląda mniej więcej tak:

range_labels from to sections

range 2014-04-09 2014-04-16 Zapłacone (do wysłania)

transaction_labels parentId RecipientName RecipientCompanyName RecipientPhone RecipientAddress RecipientZip RecipientCity RecipientCountryCode RecipientCountryName CustomerLogin CustomerEmail

transaction kamila g 434343212 batorego 0 28-142 tuczępy PL Polska kamil k@emial.pl

transaction Arkadiusz Kr GAL 123123123 kolejowa 1 20-325 Lublin PL Polska kre a@email.pl

transaction Jan Szcz 234234234 Niemoa8 45-865 Opole PL Polska jon 1@emial.pl

 

Link to postu

W transformacie jest błąd, zapewne powstał w wyniku wklejania jej na forum.

 

W linijkach

<xsl:template match="/">
<xsl:text>S_Name;S_Address;S_Zip;S_City;S_Phone;S_Email;S_Contact_Person;P_Cat_KP;P_Cat_5;P_Cat_10;P_Cat_20;P_Cat_30;P_Cat_50;P_Cat_70;R_Name;R_Address;R_Zip;R_City;R_Phone;R_Email;R_Contact_Person;P_Courier_Name;P_Comment;P_Cod</xsl:text>
    <xsl:text></xsl:text>
    <xsl:apply-templates select="s:ExportData/s:Package" />
  </xsl:template>

 

a dokładniej w

<xsl:text></xsl:text>

brakuje znaku nowej linii. Linia ta powinna pomiędzy tagami zawierać kod:

& # x a ;

 

czyli

<xsl:text>& # x a ;</xsl:text>

bez spacji.

 

Spacje należy z niego usunąć - ma to być jeden zlepek liter.

Podobnie pod koniec transformaty jest również <xsl:Text></xsl:Text> z wyciętym znakiem nowej linii, należy go tam również dodać.

Link to postu

Wstawienie kodu "& # x a ;" (bez spacji) w dwóch miejscach  pomogło. Dziękuje. Jest tylko jeden minus, nie importuje do CSV: "R_Email", co za tym idzie, jeśli nie uzupełnimy ręcznie w Sello nr nadania lub nie wkleimy ręcznie adresu emial do Weblient'a to klient nie otrzyma info o nadaniu przesyłki.

Jest na to jakaś rada?

Link to postu

Pole R_Email o ile dobrze patrzę pobierane jest w tej linii:

<xsl:value-of select="../s:Customer[@CustomerID = current()/s:Customer/@CustomerID]/s:EmailAddress[@IsDefault = 1]"/>

co oznacza, że jest brany domyślny email z modułu klienci. Sprawdziłem u siebie i adres e-mail jest przenoszony poprawnie. Proszę się upewnić, że w kliencie jest adres email domyślny na zakładce Kontakt. Ewentualnie, sprawdziłbym jeszcze czy w słowniku eksportu przy pozycji DPD jest zaznaczony w środku eksport danych paczek i klientów, a nie tylko samych paczek.

Link to postu

Pole R_Email o ile dobrze patrzę pobierane jest w tej linii:

<xsl:value-of select="../s:Customer[@CustomerID = current()/s:Customer/@CustomerID]/s:EmailAddress[@IsDefault = 1]"/>

co oznacza, że jest brany domyślny email z modułu klienci. Sprawdziłem u siebie i adres e-mail jest przenoszony poprawnie. Proszę się upewnić, że w kliencie jest adres email domyślny na zakładce Kontakt. Ewentualnie, sprawdziłbym jeszcze czy w słowniku eksportu przy pozycji DPD jest zaznaczony w środku eksport danych paczek i klientów, a nie tylko samych paczek.

Bingo! W słowniku nie było zaznaczone: "Eksportuj także powiązanych klientów"

Wielkie Dzięki!

Link to postu

Po nadaniu pierwszej listy pojawił się jeszcze jeden mały mankament, w/w transformata nie eksportuje pola: "Firma", za to w pliku CSV pojawia się 2x imię i nazwisko w kolumnie "R_Name" oraz "R_Contact_Person", może mieć to negatywne skutki w momencie dostarczenia przesyłki do biurowca gdzie pod tym samym adresem jest wiele firm. Co należałoby zmienić, aby do CSV importować również pole "Firma"?

Link to postu

Działa :) Dziękuje

Czy istnieje również możliwość eksportu rzeczywistej wagi paczki z Sello do pliku CSV?

Za szybko się cieszyłem. Podczas importu do Webklienta DPD wyrzuca błąd:

Błędy danych w XX pozycjach. Sprawdź plik logu.

Domyślam się, że to z powodu pustego pola R_Name w eksportowanym pliku CSV z Sello w pozycjach, gdzie brak firmy, gdyż te które były z nazwą firmy zaimportowały się do Webklienta poprawnie.

Regułka musiałaby zatem ulec zmianie: s:Company jeśli puste to s:Name

Jakieś pomysły?

Link to postu

Najprościej wstawić tam s:Company a potem po spacji s:Name - wtedy będzie "Firma S.A Jan Kowalski"

 

Ewentualnie można też dodać instrukcję warunkową:

 

<xsl:choose>
  <xsl:when test="s:DeliveryAddress/s:Company != ''">
     <xsl:value-of select="s:DeliveryAddress/s:Company"/>
  </xls:when>
  <xsl:otherwise>
     <xsl:value-of select="s:DeliveryAddress/s:Name"/>
  </xsl:otherwise>
</xls:choose>

 

Zastąpić tym należy poprzedni fragment z

<xsl:value-of select="s:DeliveryAddress/s:Company"/>

 

Powyższy kod sprawdza czy Firma nie jest pusta, jesli nie jest to wstawia w tym miejscu w pliku wynikowym nazwę firmy, w przeciwnym wypadku nazwę (imię i nazwisko).

Link to postu

<xsl:choose>
  <xsl:when test="s:DeliveryAddress/s:Company != ''">
     <xsl:value-of select="s:DeliveryAddress/s:Company"/>
  </xls:when>
  <xsl:otherwise>
     <xsl:value-of select="s:DeliveryAddress/s:Name"/>
  </xsl:otherwise>
</xls:choose>

 

Zastąpić tym należy poprzedni fragment z

<xsl:value-of select="s:DeliveryAddress/s:Company"/>

 

Pokazuje Błąd w składni XSL przy próbie zapisu w słownikach. Prawdopodobnie wycięło jakiś fragment podczas wklejania na forum?

Link to postu

Działa prawidłowo, pozostało nam jedynie umieszczenie "zawartości", czyli np. tytuł aukcji lub nazwy towaru z Subiekta?

Jakieś pomysły jak udoskonalić transformatę do mega super wypaśnej wersji??

 

 

Jakie dane mogą być wyeksportowane transformatą można sprawdzić eksportując przykładową paczkę do XMLa.

Zdaje się, że nazw towarów i aukcji tam nie ma.

Byłby też problem, bo po pierwsze jak dopisać wiele towarów w jednym polu, a po drugie pola opisów na etykietach mają zwykle mało znaków do dyspozycji.

 

Z tego względu powszechnie stosowane jest wpisywanie tam numeru paczki lub nicku klienta, ewentualnie numeru telefonu odbiorcy, jednak to ostatnie to raczej w przypadku poczty polskiej, bo kurierzy mają w tym celu odpowiednie pola.

 

Link to postu

Działa prawidłowo, pozostało nam jedynie umieszczenie "zawartości", czyli np. tytuł aukcji lub nazwy towaru z Subiekta?

Jakieś pomysły jak udoskonalić transformatę do mega super wypaśnej wersji??

 

W mojej próbie nie przenosi nazwy nadawcy lub imienia i nazwiska. Poza tym nie przenosi wagi. Co należało by poprawić?

 

Może mógłbyś podać kod w całości?

Link to postu

Proszę bardzo, ale pamiętaj aby w trzeciej linii od końca i mniej więcej w środku usunąć spacje między znakami w <xsl:text>& # x a ;</xsl:text>, gdyż wklejając kod na forum bez spacji znika jego fragment:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://www.sello.pl/export">
  <xsl:output method="text" encoding="Windows-1250"/>
  <xsl:strip-space elements="*" />
  <xsl:variable name="comma">;</xsl:variable>
  <xsl:variable name="kurier">DPD</xsl:variable>
  
  <!-- PoniĹĽsze dane proszÄ™ wyedytować -->  
  <xsl:variable name="S_Name"></xsl:variable>
  <xsl:variable name="S_Address"></xsl:variable>
  <xsl:variable name="S_Zip"></xsl:variable>
  <xsl:variable name="S_City"></xsl:variable>
  <xsl:variable name="S_Phone"></xsl:variable>
  <xsl:variable name="S_Email"></xsl:variable>
  <xsl:variable name="S_Contact_Person"></xsl:variable>
  
  <!-- PoniĹĽej naleĹĽy wpisać nazwy sposobĂłw dostawy odpowiednich dla kategorii paczek -->
  <xsl:variable name="Kategoria_Paczki_Kopertowka">Przesyłka kurierska</xsl:variable>
  <xsl:variable name="Kategoria_Paczki_Kopertowka_Pobraniowa">Przesyłka kurierska pobraniowa</xsl:variable>
  <xsl:variable name="Kategoria_Paczki_do5kg"></xsl:variable>
  <xsl:variable name="Kategoria_Paczki_do10kg"></xsl:variable>
  <xsl:variable name="Kategoria_Paczki_do20kg"></xsl:variable>
  <xsl:variable name="Kategoria_Paczki_do30kg"></xsl:variable>
  <xsl:variable name="Kategoria_Paczki_do50kg"></xsl:variable>
  <xsl:variable name="Kategoria_Paczki_do70kg"></xsl:variable>
  
  
  
  <!-- PowyĹĽsze dane proszÄ™ wyedytować -->
  
  <xsl:template match="/">
    <xsl:text>S_Name;S_Address;S_Zip;S_City;S_Phone;S_Email;S_Contact_Person;P_Cat_KP;P_Cat_5;P_Cat_10;P_Cat_20;P_Cat_30;P_Cat_50;P_Cat_70;R_Name;R_Address;R_Zip;R_City;R_Phone;R_Email;R_Contact_Person;P_Courier_Name;P_Comment;P_Cod</xsl:text>
    <xsl:text>& # x a ;</xsl:text>
    <xsl:apply-templates select="s:ExportData/s:Package" />
  </xsl:template>
  
  <xsl:template match="s:Package"> 
    <xsl:value-of select="$S_Name"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$S_Address"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$S_Zip"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$S_City"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$S_Phone"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$S_Email"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$S_Contact_Person"/><xsl:value-of select="$comma"/>
    
    <xsl:choose>
      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_Kopertowka or s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_Kopertowka_Pobraniowa">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>
    <xsl:value-of select="$comma"/>
    <xsl:choose>
       <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do5kg">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>    
    <xsl:value-of select="$comma"/>
    <xsl:choose>
       <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do10kg">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>
    <xsl:value-of select="$comma"/>
    <xsl:choose>
       <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do20kg">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>    
    <xsl:value-of select="$comma"/>
    <xsl:choose>
       <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do30kg">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>    
    <xsl:value-of select="$comma"/>
    <xsl:choose>
       <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do50kg">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>    
    <xsl:value-of select="$comma"/>
    <xsl:choose>
      <xsl:when test="s:DeliveryMethod/s:DeliveryName = $Kategoria_Paczki_do70kg">1</xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
    </xsl:choose>
    <xsl:value-of select="$comma"/>
    
   <xsl:choose>
  <xsl:when test="s:DeliveryAddress/s:Company != ''">
     <xsl:value-of select="s:DeliveryAddress/s:Company"/>
  </xsl:when>
  <xsl:otherwise>
     <xsl:value-of select="s:DeliveryAddress/s:Name"/>
  </xsl:otherwise>
</xsl:choose><xsl:value-of select="$comma"/>
       <xsl:value-of select="s:DeliveryAddress/s:Line1"/>
    <xsl:value-of select="' '" />
    <xsl:value-of select="s:DeliveryAddress/s:Line2"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="s:DeliveryAddress/s:ZipCode"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="s:DeliveryAddress/s:City"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="s:DeliveryAddress/s:PhoneNumber"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="../s:Customer[@CustomerID = current()/s:Customer/@CustomerID]/s:EmailAddress[@IsDefault = 1]"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="s:DeliveryAddress/s:Name"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$kurier"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$comma"/>
    <xsl:value-of select="s:Charge"/><xsl:value-of select="$comma"/>
    <xsl:text>& # x a ;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

Link to postu

Przykładowy plik CSV wyeksportowany z Sello (z danego dnia) za pomocą tego kodu przesłałem do swojego opiekuna DPD, który nadawał mi login i hasło do programu, a on już za ich pomocą zrobił tam czary mary zapisał pod nazwą: "X" i teraz podczas importu krajowego wybieram szablon "X" i wsio działa piknie ;)

 

No to jest dobry pomysł - tak zrobię, niech skonfigurują import. A jak z wagą? Przenosi Ci się do weblikenta waga paczki czy uzupełniasz ręcznie? Chyba się nie przenosi, bo w pliku z sello jej nie ma...

Link to postu

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Użytkownik forum
Odpowiedz...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...