Skip to end of metadata
Go to start of metadata

Podczas działania modułu możliwa jest konwersja pliku EDI na plik PDF, dla którego wykorzystane mogą zostać standardowe szablony pobierania indeksów. Konwersja ma miejsce, gdy spełnione są następujące warunki:

  • analizowany załącznik posiada rozszerzenie edi (wielkość liter nie ma znaczenia)
  • analizowany załącznik został wysłany przez dostawcę, dla którego została określona konwersja pliku o rozszerzeniu EDI na plik PDF w procesie zarządzania szablonami

 

Konwersja pliku EDI na plik PDF odbywa się za pomocą szablonu docx. Wartości z pliku EDi są podstawiane do szablonu na podstawie placeholder'ów. Poprawny placeholder posiada następującą składnię:

${obiekt:sekcja w pliku EDI:segment w pliku EDI(filtr)...(filtr):numer komponentu w segmencie:numer wartości w pobranym szeregu:nazwa funkcji(parametry):...:nazwa funkcji(parametry)}

Poszczególne elementy placeholder'a są rozdzielone znakiem dwukropka :, a ich znaczenie jest następujące:

ElementOpisWymagany
obiektOznacza typ obiektu w szablonie. Możliwe są następujące wartości: value i table. Obiekt value wskazuje na pojedynczą wartość z pliku EDI, która ma zostać wstawiona w dane miejsce. Placeholder ten może występować wszędzie - w ciele głównym szablonu, nagłówkach, tabelach itd. Obiekt table oznacza wartość, która może zostać wielokrotnie powielona, w zależności od ilości dopasowań placeholder'a w pliku EDI. Placeholder ten może występować jedynie w komórkach tabeli w dowolnym miejscu - pierwszy wiersz, drugi wiersz n-ty wiersz, nie musi to także być ostatni wiersz, dopuszczalne jest także dodanie wierszy podsumowujących w wierszu pod placeholder'em. Zostanie on zamieniony pierwszą dopasowaną wartością, a pozostałe utworzą nowe komórki dodane od obecnej komórki. W jednej komórce możliwe jest wykorzystanie kilku placeholder'ów, wartości zostaną połączone za pomocą spacji. Dodawanych jest tyle komórek, ile wymaga najdłuższy szereg wartości. Dla pozostałych kolumn, które mają mniej wartości dodawane są puste komórki. Podczas kopiowania komórek są przenoszone właściwości wierszy i komórek (np. obramowanie, kolor tła komórek).(tick)
sekcja w pliku EDIOznacza nazwę sekcji w pliku EDI wynikającą ze standardu EDI. Możliwe są następujące wartości: header, details, summary. W celu uzyskania informacji o sekcjach i wykrywaniu ich granic w pliku EDI należy zapoznać się ze standardem np. dla UN/EDIFACT (http://www.unece.org/cefact/edifact/welcome.html w tym np. dla typu D96A http://www.unece.org/trade/untdid/d96a/Welcome.html). Wartości są grupowane dla poszczególnych sekcji.(tick)
segment w pliku EDIOznacza tag segmentu, najczęściej trzyliterowy znacznik, pierwszy element w każdej nowej linii pliku EDI.(tick)
(filtr)...(filtr)Oznacza szereg dodatkowych filtrów postaci (wartość)(wartość) itd. Możliwe jest dodanie dowolnej ilości filtrów lub ich pominięcie. Pozwala on selektywnie wybierać wartości dla danego segmentu. Kolejne filtry są dopasowywane do kolejnych wartości w segmencie, jeżeli wartości z segmentu i filtru są takie same, to wartość jest brana pod uwagę. Możliwe jest także filtrowanie za pomocą pustych wartości - filtr postaci () oraz akceptowanie każdej wartości - filtr postaci (*). Filtrowanie jest szczególnie przydatne w przypadku danych tabelarycznych (patrz przykłady). 
numer komponentu w segmencieOznacza pozycję wartości w segmencie, która ma zostać pobrana. Wartości są liczone od 1, włącznie z pustymi wartościami. Np. w segmencie postaci CUX+2:EUR:4' wartość "EUR" jest komponentem o numerze 2 w segmencie CUX.(tick)
numer wartości w pobranym szeregu

Oznacza numer wartości w pobranym szeregu. Wartości są liczone od 1. W przypadku braku wartości i dopasowaniu do placeholder'a większej ilości wartości są one łączone w jedną wartość i rozdzielane znakiem spacji. Np. dla segmentów:

MOA+79:9086.83'

MOA+125:9086.83'

MOA+124:0'

MOA+128:9086.83'

pobranie wartości z pozycji numer 2 skutkuje zwróceniem wartości "9086.83 9086.83 0 9086.83", w przypadku wskazania numeru wartości w szeregu o wartości 3 zwrócona jest wartość "0".

Wartość nie ma znaczenia dla placeholder'ów z obiektem typu table. Po wprowadzeniu numeru wartości nie będą rozpoznawane.

 
nazwa funkcji(parametry):...:nazwa funkcji(parametry)Oznacza szereg dodatkowych funkcji postaci functionName1(parameter2,...,parameterN):functionName1(parameter2,...,parameterN). Funkcje te formatują pobrane wartości. Może być ich nieskończenie wiele, wartość jest krok po kroku formatowana. Dla każdego kolejnego wywołania funkcji, wartość wejściowa jest rezultatem poprzedniego wywołania funkcji. Jeżeli w danej funkcji wystąpi błąd, to zwracana jest aktualna wartość wejściowa. Jeżeli funkcja o podanej nazwie nie istnieje, to zwracana jest aktualna wartość. Jeżeli liczba parametrów funkcji nie zgadza się z oczekiwaną liczbą parametrów, to zwracana jest aktualna wartość. Jeżeli w wartościach parametrów stosujemy znaki ":" lub ",", to należy je poprzedzić znakiem "\". Zestaw dostępnych funkcji jest zdefiniowany poniżej. 

W przypadku wskazania wartości, która nie istnieje zwracana jest pusta wartość.

 

Podczas formatowania wartości można skorzystać z następujących zdefiniowanych funkcji:

  • addPrefix - dodaje przedrostek na początku formatowanej wartości.
    • Parametry funkcji:

      NazwaOpis
      prefixPrzedrostek dodawany na początku wartości.
  • addPostfix - dodaje przyrostek na końcu formatowanej wartości.
    • Parametry funkcji:

      NazwaOpis
      postfixPrzyrostek dodawany na końcu wartości.
  • customFunction - uruchamia dowolną funkcję, która formatuje wartość.
    • Parametry funkcji:

      NazwaOpis
      classNamePełna nazwa klasy Java wraz z pakietem.
      methodNameNazwa metody w klasie Java podanej w parametrze className. Metoda musi być publiczna, statyczna, musi jako parametry przyjmować String (wartość wejściowa), List<String> (pozostałe parametry customFunction) oraz zwracać obiekt typu String.
      ...Pozostałe parametry, które są przekazywane w formie interface List do wywołania metody. Parametrów może być nieskończenie wiele.
  • formatAmount - formatuje wartość kwotową postaci 123456.56789.
    • Parametry funkcji:

      NazwaOpis
      formatFormat wyjściowy zgodny z językiem Java (patrz DecimalFormat). Wartością wejściową musi być liczba nie zawierająca separatorów tysięcznych i posiadająca kropkę jako separator dziesiętny lub też brak separatora dziesiętnego.
  • formatDateTime - formatuje datę lub czas.
    • Parametry funkcji:

      NazwaOpis
      fromFormatWejściowy format daty zgodny z językiem Java (patrz DateFormat).
      toFormatWyjściowy format daty zgodny z językiem Java (patrz DateFormat).
  • removeCharacters - usuwa dowolne ciągi znaków z wartości.
    • Parametry funkcji:

      NazwaOpis
      charactersUsuwany ciąg znaków. Funkcja może posiadać nieskończenie wiele parametrów, znaki te są kolejno usuwane z wartości.
      ......
  • replaceCharacters - zamienia dowolny ciąg znaków innym ciągiem znaków.
    • Parametry funkcji:

      NazwaOpis
      searchPoszukiwany ciąg znaków.
      replacementCiąg znaków, którym jest zastępowany znaleziony ciąg znaków z parametru search.
  • skipEmptyTableValue - pomija wiersz z pustą wartością w danych tabelarycznych.
    • Parametry funkcji: brak

     
  • transformUnit - zamienia jednostki miar i wag znane dla pliku EDI, nazwy jednostek występują w języku angielskim.
    • Parametry funkcji: brak


Przykłady

Załóżmy, że dysponujemy następującą fakturą EDI typu UN/EDIFACT D96A:

UN/EDIFACT D96A
UNB+UNOC:3+1542051826HUTC+1542035753JFT1+150128:1346+10440'
UNH+1+INVOIC:D:96A:UN:EAN008'
BGM+380+824I087819150121+9'
DTM+137:20150121:102'
FTX+AAI+++FRANCH TVA, ART 275 CGI:LES PAIEMENTS SE FONT COMPTANT ET:SANS ESCOMPTE'
FTX+REG+++PAULSTRA                      SNC:SNC AU CAPITAL DE 450.000 EUR:450000:EUR:R.C.S. PARIS B 314.397.670'
FTX+PMT'
NAD+BY+06321248Q++LE JOINT FRANCAIS+DOMAINE  1248Q+CHATEAU GONTIER++53200+FR'
RFF+VA:FR47542035753'
RFF+GN:542035753'
NAD+IV+06321248Q++LE JOINT FRANCAIS+DOMAINE  1248Q+CHATEAU GONTIER++53200+FR'
RFF+VA:FR47542035753'
RFF+GN:542035753'
NAD+SE+50000151247I++PAULSTRA  JOINTS DYNAMIQUES+Z.I. D?'ETRICHE ROUTE D?'AVIRE+SEGRE CEDEX++49504+FR'
RFF+XA:R.C.S. PARIS B 314.397.670'
RFF+VA:FR39314397670'
RFF+GN:314397670'
NAD+RE+1542051826HUTC++CENTRE SERVICES PARTAGES+COMPTA CLIENTS - PAULSTRA CS20700+CHATELLERAULT  CEDEX++86107'
CUX+2:EUR:4'
PAT+3'
DTM+13:20150121:102'
PAT+22'
PCD+12:0'
PAT+20'
PCD+15:0'

************** Granica sekcji header i details **************

LIN+1++8RE15A:IN'
PIA+1+020013000:SA'
IMD+E+ANM+:::MELANGE:8RE15A'
IMD+F++:::4005910000'
MEA+AAI+AAA+KGM:49'
MEA+AAI+AAB+KGM:874'
QTY+47:49:KGM'
MOA+203:387.59'
PRI+AAA:7.91:::1'
RFF+ON:F041002'
RFF+AAK:264649'
TAX+7+VAT+++:::0'
LIN+2++7RH208T:IN'
PIA+1+020168000:SA'
IMD+E+ANM+:::HNBR NOIR:7RH208T'
IMD+F++:::4005910000'
MEA+AAI+AAA+KGM:144'
MEA+AAI+AAB+KGM:0'
QTY+47:144:KGM'
MOA+203:1841.76'
PRI+AAA:12.79:::1'
RFF+ON:F041002'
RFF+AAK:264649'
TAX+7+VAT+++:::0'
LIN+3++7RZ258F:IN'
PIA+1+020184000:SA'
IMD+E+ANM+:::7RZ258F'
IMD+F++:::4005910000'
MEA+AAI+AAA+KGM:84'
MEA+AAI+AAB+KGM:0'
QTY+47:84:KGM'
MOA+203:5171.04'
PRI+AAA:61.56:::1'
RFF+ON:F041002'
RFF+AAK:264649'
TAX+7+VAT+++:::0'
LIN+4++8RD261E:IN'
PIA+1+020186000:SA'
IMD+E+ANM+:::8RD261E'
IMD+F++:::4005910000'
MEA+AAI+AAA+KGM:317'
MEA+AAI+AAB+KGM:0'
QTY+47:317:KGM'
MOA+203:1686.44'
PRI+AAA:5.32:::1'
RFF+ON:F041002'
RFF+AAK:264649'
TAX+7+VAT+++:::0'

************** Granica sekcji details i summary **************

UNS+S'
MOA+79:9086.83'
MOA+125:9086.83'
MOA+124:0'
MOA+128:9086.83'
TAX+7+VAT++9086.83+:::0'
MOA+124:0'
UNT+80+1'
UNZ+1+10440'

Dla poniższych placeholder'ów dla obiektu value staną zwrócone następujące wartości:

  • ${value:header:CUX:2} - EUR
  • ${value:header:DTM:2:1:formatDateTime(yyyyMMdd,yyyy-MM-dd)} - 2015-01-21
  • ${value:header:FTX:4} - FRANCH TVA, ART 275 CGI PAULSTRA                      SNC
  • ${value:header:FTX:4:1} - FRANCH TVA, ART 275 CGI
  • ${value:header:RFF:2} - FR47542035753 542035753 FR47542035753 542035753 R.C.S. PARIS B 314.397.670 FR39314397670 314397670
  • ${value:header:RFF(VA):2} - FR47542035753 FR47542035753 FR39314397670
  • ${value:header:RFF(VA):2:3} - FR39314397670
  • ${value:details:MEA:4} - 49 874 144 0 84 0 317 0
  • ${value:details:MEA(AAI)(AAA):4} - 49 144 84 317
  • ${value:summary:TAX:4} - 9086.83

Dla poniżych placeholder'ów dla obiektu table zostaną zwrócone następujące tabele:

${table:header:NAD:4}${value:header:RFF(VA):2}

na

06321248QFR47542035753
06321248QFR47542035753
50000151247IFR39314397670
1542051826HUTC 
${table:details:LIN:3}${table:details:MEA(AAI)(AAA):4}${table:details:MEA(AAI)(AAA):3}${table:details:MEA(AAI)(AAA):4}${table:details:MEA(AAI)(AAA):3:transformUnit()}${table:details:MOA:2}
${value:summary:MOA:2:4}
${value:summary:MOA:2:4:formatAmount(###\,###\,###.##):addPostfix( $)}

na

8RE15A49 KGM49 kilogram387.59
7RH208T144 KGM144 kilogram1841.76
7RZ258F84 KGM84 kilogram5171.04
8RD261E317 KGM317 kilogram1686.44
9086.83
9 086,83 $

 

Podczas konwersji szablonu docx na pdf za pomocą Docx4J wykorzystywana jest transformacja XSLT, która posiada pewne ograniczenia. Jeżeli pewne komponenty są zmieniane lub znikają, to moduł nie ma na to wpływu. Podczas uzupełniania szablonu w celu poprawnego uzupełnienia danych usuwane/zmieniane są następujące elementy:

  • content control - usuwane
  • bookmark'i - usuwane
  • floating images - usuwane
  • załamane nagłówki tabel - zmieniane, wyraz jest w jednej linii, co może powodować wychodzenie liter poza komórkę
  • numeracja stron - zmieniane, nie zmienia numeracji
  • No labels
Write a comment…