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