XL014 – Konfiguracja wydruków kodów kreskowych

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”>

&#02;&#10;H07&#10;D11&#10;m&#10;1911008000800041&#10;<xsl:value-of select=”@Twr_Kod” />&#10;3a6210000000050&#10;<xsl:value-of select=”@Twr_EAN” />&#10;PCS&#10;E&#10;

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

Uwaga
Zalecane jest, aby nie korzystać z zapytań typu select *. Przy wpisywaniu nazw kolumn należy zwrócić uwagę na wielkość liter gdyż XML jest ‘case sensitive’

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:

&#02;&#10;H07&#10;D11&#10;m&#10;1911008000800041&#10;<xsl:value-of select=”@Twr_Kod” />&#10;3a6210000000050&#10;<xsl:value-of select=”@Twr_EAN” />&#10;PCS&#10;E&#10;

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.

Uwaga
W przypadku niektórych drukarek język instrukcji sterujących drukarką jest dość skomplikowany np. drukarki DYMO. Dlatego w ich przypadku należy posłużyć się zestawem obiektów COM, dostarczanych przez producenta.

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.

Czy ten artykuł był pomocny?