Skocz do zawartości

Eksport CSV do Weblkient DPD

Polecane posty

Zrobiłem (pewno "niezgrabnie" bo mało się na tym znam) plik gdzie jest nick i waga - ślę do DPD, zobaczymy co wyjdzie.

 

<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="s:Customer/s:Nick"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$comma"/>
    <xsl:value-of select="s:Charge"/><xsl:value-of select="$comma"/>
<xsl:if test="s:Weight">
   <xsl:element name="Atrybut">
      <xsl:attribute name="Typ"/>
       <xsl:attribute name="Nazwa">Masa</xsl:attribute>
       <xsl:value-of select="round(number(s:Weight*1000))"/>
   </xsl:element>
</xsl:if>
    <xsl:text>& # x a ;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

Link to postu

Bardzo proszę o pomoc, w powyższym kodzie potrzebuję zmienić dwie zmienne:

 

1. waga > *1000 daje z np. 1,34 1340 a potrzebuję żeby w pliku wynikowym pojawiała się waga taka jak w sello czyli 1,34 > 1,34

 

2. co zmienić żeby pole z paczki "adres c.d." generował się w nowej kolumnie csv, a nie tak, jak jest teraz, że razem z ulicą jest w jednym polu (dpd ma ograniczenie długości znaków pola 'ulica' i ucina na wydruku)?

Link to postu

1. Chyba nie rozumiem za bardzo o co chodzi :)

2. A jest taka kolumna w formacie DPD? Jesli tak, należy ją dopisać w odpowiednim miejscu tam gdzie jest generowany nagłówek pliku csv z nazwami kolumn, czyli

S_Name;S_Address;S_Zip;S_City;S_Phone;S_Email;S_Contact_Person;...

a następnie oddzielić Line2 od Line1 za pomocą separatora $comma, w tej chwili jest tam po prostu spacja.

<xsl:value-of select="' '" /> <---- tu jest spacja, należy wstawić seperator
<xsl:value-of select="s:DeliveryAddress/s:Line2"/><xsl:value-of select="$comma"/>

czyli

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

Link to postu

Zacznę od tego, że plik wynikowy csv jest w formacie, który nie przyjmuje webklient - generują się błędy mapowania (chodzi mi o ich stronę https://webklient.dpd.com.pl/logout.do ). Dlatego też plik csv wygenerowany z sello wysłałem (jak i kolega, który zaczął ten wątek) do PH z DPD w celu prawidłowego zmapowania - i wszystko (prawie) działa poprawnie. Poza wspomnianymi sprawami:

 

1. Transformata, której używam:

<xsl:value-of select="round(number(s:Weight))"/>

tworzy wagę w postaci pełnych kilogramów; np. jeśli w sello jest 1,59 to w csv jest 1 - nie wchodzi w grę mnożnik na 1000 (jak było w wyjściowym pliku skopiowane z transformaty poczty [dla EN tak ma być]) bo wtedy csv zawiera liczbę 1590, co podobno nie jest zrozumiałe dla webklenta. Więc chodzi o to żeby tę linijkę powyżej napisać tak, aby waga przenosiła się z przecinkiem, jeśli w sello jest 1,59 to i csv powinno być 1,59.

 

2. Podane nazwy pól z DPD nie mają dużego znaczenia - bo i tak DPD musi to zmapować po swojemu (chyba, że ktoś napisze transformatę pod webklienta, która od razu będzie działać prawidłowo). Chodzi o to, żeby dane z pola paczki (adres c.d.) znalazły się w osobnym polu csv - można dodać kolejne pole jakoś tam nazwane. Pokombinuję zgodnie z podpowiedzią, ale nie jestem biegły w kodowaniu...

 

Link to postu

1. Wychodzi 1 bo masa s:Weight jest zaokrąglona przez funkcję round().

 

Powinno być:

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

 

Wtedy masa będzie przenoszona zgodnie z tym co jest w Sello. Przy okazji masy w paczkach nadmienię, że w przyszłej wersji planujemy zwiększyć jej precyzję do 3 miejsc po przecinku (pojedynczych gramów).

Link to postu

1. Wychodzi 1 bo masa s:Weight jest zaokrąglona przez funkcję round().

 

Powinno być:

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

 

Wtedy masa będzie przenoszona zgodnie z tym co jest w Sello. Przy okazji masy w paczkach nadmienię, że w przyszłej wersji planujemy zwiększyć jej precyzję do 3 miejsc po przecinku (pojedynczych gramów).

 

BartKu dzięki - wszystko zadziałało poprawnie. Może będzie można omijać płatne programy :)

Link to postu
  • 10 miesięcy temu...
  • 2 lata później...

Temat stary ale...

 

Ktoś ma aktualny ten transpormator.... ? i Czy opcja ta nadaje się do przesyłek wielopaczkowych ?

 

Czy jest jakieś inne rozwiązanie do przesyłek wielopaczkowych w DPD ? dodam ze wcześniej nie korzystałem wcale z opcji paczek/generowania danych dla kurierów z/w sello ...

 

DPD daje teraz programik do Sello, całkiem przyzwoicie działa hulam na nim od kilku miesięcy i bardzo przyzwoicie gada z Sello oraz z SGT, za darmo:

 

 

 

https://www.dpd.com.pl/klienci-biznesowi/Produkty-i-uslugi/Rozwiazania-IT/Smart-Paczka-DPD

Link to postu
  • 3 tygodnie później...

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ę...