Ogólna struktura mechanizmu wydruków
Wydruki kodów kreskowych w programie ERP XL, realizowane są przy pomocy funkcjonalności tak zwanych wydruków XML. Całość instrukcji dotyczących definicji wydruków zawarta jest w pliku o rozszerzeniu XPT, który jest importowany do programu ERP XL. Dla lepszego zobrazowania posłużono się przykładem pliku Wydruk.xpt przeznaczonego dla drukarki Datamax.
Struktura pliku XPT
Plik o rozszerzeniu XPT składa się z dwóch części. Pierwszej [SQL] zawierającej zapytania SQL, oraz drugiej [XSL]. Przykładowy plik Wydruk.xpt wygląda następująco:
[SQL]
select Twr_Kod,Twr_EAN FROM cdn.TwrKarty WHERE ?@Hs200_NQ|Filtr:”@?
[XSL]
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”1.0″>
<xsl:output omit-xml-declaration=”yes”/>
<xsl:preserve-space elements=”*”/>
<xsl:template match=”/”>
<xsl:for-each select=”ROOT”>
<xsl:apply-templates select=”RECORDSET1″/>
</xsl:for-each>
</xsl:template>
<xsl:template match=”RECORDSET1″>
<xsl:apply-templates select=”RECORD”/>
</xsl:template>
<xsl:template match=”RECORD”>
 H07 D11 m 1911008000800041 <xsl:value-of select=”@Twr_Kod” /> 3a6210000000050 <xsl:value-of select=”@Twr_EAN” /> PCS E
</xsl:template>
</xsl:stylesheet>
Sekcja SQL
Sekcja ta zawiera zapytania SQL (w przypadku naszego przykładu jedno zapytanie), które zostaną zadane do bazy i na podstawie zwróconych odpowiedzi utworzony zostanie plik XML o określonej strukturze.
Zastosowanie w sekcji WHERE wyrażenia ?@s200H_NQ|Filtr:”@? spowoduje wstawienie w jego miejsce filtru przekazanego z programu. Jest to tak zwany parametr dynamiczny. Struktura pliku XML otrzymanego w wyniku zapytań SQL wygląda następująco: <ROOT> <RECORDSET1> <RECORD NazwaKolumny1=”wartość kolumny 1” NazwaKolumny2=”Wartość kolumny 2” /> <RECORD NazwaKolumny1=”wartość kolumny 1” NazwaKolumny2=”Wartość kolumny 2” /> </RECORDSET1> <RECORDSET2> <RECORD NazwaKolumny1=”wartość kolumny 1” NazwaKolumny2=”Wartość kolumny 2” /> <RECORD NazwaKolumny1=”wartość kolumny 1” NazwaKolumny2=”Wartość kolumny 2” /> </RECORDSET2> …… </ROOT> Każdy XML wygenerowany z zapytań z sekcji [SQL] rozpoczyna się od Tagu <ROOT>. Tagi <RECORDSETn> odpowiadają kolejnym zapytaniom select tzn. pierwszy select generuje <RECORDSET1> itd. Każdy wiersz z odpowiedzi przedstawiony jest w formie Tagu <RECORD>. Każdy z nich posiada tyle atrybutów, ile kolumn zwraca zapytanie. Nazwa atrybutu odpowiada nazwie kolumny a wartość atrybutu wartości kolumny. Plik XML dla naszego przykładu może więc wyglądać następująco: <ROOT> <RECORDSET1> <RECORD Twr_Kod=”MAG770T” Twr_EAN=”8” /> </RECORDSET1> </ROOT> Sekcja zawiera schemat, który jest „nakładany” na XML z danymi. Tłumaczy plik XML na język poleceń drukarki. W naszym przykładzie dla Tagu <RECORD> zdefiniowany został zestaw instrukcji dla drukarki:  H07 D11 m 1911008000800041 <xsl:value-of select=”@Twr_Kod” /> 3a6210000000050 <xsl:value-of select=”@Twr_EAN” /> PCS E W instrukcjach sterujących drukarką osadzone zostały instrukcje xsl-a, pozwalające na wykorzystanie danych uzyskanych z zapytania SQL. W przypadku innych typów drukarek należy przeczytać dokumentację producenta w celu zapoznania się ze składnią instrukcji sterujących dla drukarki. Struktura pliku XPT będzie więc różnić się od przedstawionej w przykładzie. Przykładowy plik XPT zawierający instrukcje sterujące dla drukarki DYMO wygląda następująco: [SQL]
select Twr_Kod,Twr_Nazwa,Twr_GrupaPod,Twr_EAN FROM cdn.TwrKarty where ?@Hs200_NQ|Filtr:”@? [XSL]
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” xmlns:ms=”urn:schemas-microsoft-com:xslt” xmlns:usr=”urn:the-xml-files:xslt” version=”1.0″> <xsl:output omit-xml-declaration=”yes” method=”html”/> <ms:script language=”VBScript” implements-prefix=”usr”> <![CDATA[ Function PrintEan(Ean) Dim DymoAddIn, DymoLabel Set DymoAddIn = CreateObject(“DYMO.DymoAddIn”) Set DymoLabel = CreateObject(“DYMO.DymoLabels”) DymoAddIn.Open “C:\Program Files\Dymo Label\Label Files\Barcode Label (30252, 30320).LWL” DymoLabel.SetField “Barcode”,Ean DymoAddIn.Print 1, TRUE PrintEan=”” End Function ]]> </ms:script> <xsl:output omit-xml-declaration=”yes”/> <xsl:preserve-space elements=”*”/> <xsl:template match=”/”> <xsl:for-each select=”ROOT”> <xsl:apply-templates select=”RECORDSET1″/> </xsl:for-each> </xsl:template> <xsl:template match=”RECORDSET1″> <xsl:apply-templates select=”RECORD”/> </xsl:template> <xsl:template match=”RECORD”> <xsl:value-of select=”usr:PrintEan(123456)”/> </xsl:template> </xsl:stylesheet> W przypadku drukarek DYMO najwygodniej posłużyć się językiem skryptowym. W naszym przykładzie jest to VBscript. <ms:script language=”VBScript” implements-prefix=”usr”> Dzięki temu można łatwo zdefiniować funkcje, w których można wykorzystać obiekty COM, dostarczone przez producenta.
Sekcja XSL