Definicje wydruków znajdują się w katalogu Printouts w katalogu instalacyjnym Comarch WMS Magazynier. Każda definicja znajduje się w oddzielnym katalogu, którego nazwa jest jednocześnie nazwą definicji. Wewnątrz katalogu muszą zostać umieszczone co najmniej trzy pliki definiujące źródło danych - Data.xml, układ wydruku - Layout.xml oraz jego wygląd - Styles.xml. Każdy z tych plików musi być poprawnym plikiem xml o określonej nazwie. Dokładna struktura każdego z tych plików została opisana w poszczególnych artykułach: Data.xml, Layout.xml, Styles.xml.
Źródło danych
Źródło danych dla wydruku musi zostać umieszczone w pliku o nazwie Data.xml. Głównym elementem w pliku jest sekcja data wewnątrz której musi się znaleźć dokładnie jeden element setf. Wewnątrz elementu setf musi się znaleźć jeden lub więcej elementów set. Każdy element set reprezentuje jeden zbiór danych (wynik jednego zapytania SQL). Musi on zawierać dwa elementy podrzędne: name - który określa nazwę zbioru oraz query, które definiuje zapytanie SQL na bazie danych systemu ERP XL.
Uwaga
Prezentowane zapytania SQL mogą różnić się w zależności od wersji systemu ERP XL.
Przykładowy plik Data.xml
Przykład
<?xml version="1.0" encoding="utf-8"?>
<data>
<setf><set><name>DocumentPositions</name><query>SELECT A.Code, A.Name, I.Quantity, I.RealizedQuantity, A.BasicUnitSymbol,
CAST(I.RealizedQuantity * ISNULL(AU.Denominator, 1) / ISNULL(AU.Nominator, 1) as DECIMAL(19,4)) as SecondaryQuantityRealized,ISNULL(AU.UnitSymbol, A.BasicUnitSymbol) as SecondaryUnitSymbolFROM WMS.Items IJOIN WMS.vArticles A ON I.ArticleId = A.IdLEFT JOIN WMS.vArticleUnits AU on AU.ArticleId = I.ArticleId AND AU.UnitId = I.SecondaryUnitIdWHERE I.DocumentId = @DocumentId</query></set><set><name>CompanyData</name><query>SELECT Frm_GidFirma as CompanyUnitId, Frm_Nazwa1as CompanyFullName, Frm_Ulica as Street, Frm_KodP as ZipCode, Frm_Miasto as [City], Frm_NipPrefiks as NipPrefiks, Frm_NIP as NIP, Frm_telefon1 as Phone, Frm_Email as EmailFROM [CDN].[Firma]WHERE Frm_DataArc = 0</query></set></setf>
</data>
Zapytanie może być standardowym zapytaniem SQL lub nazwą procedury składowanej, która zwraca żądany wynik. Aby skorzystać z procedury składowanej do elementu query należy dodać atrybut type z wartością StoredProcedure.
Wskazówka
Przy wykonywaniu zapytań z pliku Data.xml przekazywane są do nich parametry zależne od typu oraz kontekstu wydruku. Jakie parametry przekazywane są do określonego typu wydruku można sprawdzić w tabeli [WMS].[PrintoutsArguments]. W przykładzie powyżej wykorzystany został jeden parametr @DocumentId.
Układ wydruku
Zawartość oraz układ wydruku definiowany jest w pliku Layout.xml. Głównym elementem w pliku jest document. Musi zawierać on co najmniej element body, który zawiera główną część wydruku. Dodatkowo w elemencie document może zostać umieszczony element title oraz wiele elementów header oraz footer. Zawartość elementów body, header oraz footer może zostać skomponowana z innych elementów opisanych poniżej. Elementy te mogą być zagnieżdżane.
Elementy
Wszystkie dostępne elementy, które mogą zostać zastosowane podczas tworzenia układu wydruku zostały opisane poniżej. Opis każdego elementu zawiera następujące sekcje:
Zawartość - opisuje jakie elementy podrzędne można umieścić wewnątrz danego elementu.
Parametry - opisuje wszystkie dostępne atrybuty jakie można dodać do elementu i co oznaczają.
Elementy stylujące - zawiera listę selektorów, które dopasowują dany element w pliku Styles.xml
Elementy podrzędne - opcjonalna sekcja opisująca elementy, które mogą wystąpić tylko wewnątrz danego elementu. Dla każdego elementu podrzędnego zachowany jest układ opisu taki sam jak dla głównego elementu.
Przykład - zawiera fragment kodu z przykładowym wykorzystanie opisywanego elementu.
Nazwa
Barcode
Opis
Kod kreskowy
Zawartość
Wewnątrz elementu barcode umieszczane są dane tekstowe, które mają być przez ten kod zakodowane
Parametry
type - określa typ kodu kreskowego. Możliwe wartości: upc-a, upc-e, upc 2 digit ext., upc 5 digit ext., ean-13, jan-13, ean-8, itf-14, codabar, postnet, bookland/isbn, code 11, code 39, code 39 extended, code 39 mod 43, code 93, logmars, msi, interleaved 2 of 5, standard 2 of 5, code 128, code 128-a, code 128-b, code 128-c, telepen, fim, pharmacode
height - wysokość bazowa kody kreskowego w px. Wartość domyślna to 50
page - strona wydruku. Jeżeli nie podamy tego parametru to stopka traktowana jest jako stopka główna. Możliwe wartości: first - pierwsza strona, last - ostatnia strona, even - strona parzysta
Elementy stylujące
Footer
Przykład
<?xml version="1.0" encoding="utf-8"?>
<document>
<footer page="last"><p>Stopka ostatniej strony</p></footer><footer><p class="footer">Strona <pageNumber/> z <numOfPages/></p></footer><body>
[...]
Nazwa
Header
Opis
Nagłówek wydruku
Zawartość
Dowolny element nietekstowy
Parametry
page - strona wydruku. Jeżeli nie podamy tego parametru to nagłówek jest traktowany jako nagłówek główny. Możliwe wartości: first - pierwsza strona, even - strona parzysta
Element testowy pozwalający na układ wydruku zależny od dowolnych warunków
Zawartość
Element test oraz co najmniej jeden z elementów true i false
Parametry
Brak
Elementy stylujące
Brak
Elementy podrzędne
Test
True
False
Nazwa
If: Test
Opis
Element zawierający warunek decydujący o tym czy do wydruku zostaną dodane elementy z sekcji true czy false . Warunek może być dowolnym wyrażeniem logicznym zawierającym podstawowe operacje matematyczne, porównania. Może on także zawierać nawiasy.
Zawartość
Dowolne elementy tekstowe
Parametry
Brak
Elementy stylujące
Brak
Nazwa
If: True
Opis
Element zawierający elementy, które zostaną w przypadku kiedy warunek z sekcji test zostanie spełniony.
Zawartość
Dowolne elementy, które mogą zostać umieszone w rodzicu elementu test
Parametry
Brak
Elementy stylujące
Brak
Nazwa
If: False
Opis
Element zawierający elementy, które zostaną w przypadku kiedy warunek z sekcji test nie zostanie spełniony.
Zawartość
Dowolne elementy, które mogą zostać umieszone w rodzicu elementu test
split - określa czy tabela może zostać podzielona na kilka stron. Parametr może przyjmować wartość true lub false .
set - nazwa zestawu danych.
Elementy stylujące
Table
Elementy podrzędne
Column
TableData
Nazwa
Table: Column
Opis
Element definiujący kolumnę tabeli.
Zawartość
Dowolne elementy tekstowe
Parametry
description - nagłówek kolumny.
weight - waga szerokości kolumny. Wartość domyślna 1
Elementy stylujące
DataCell
HeadCell
Nazwa
Table: TableData
Opis
Element zwracający wartość tekstową ze zbioru danych bazującą na zbiorze danych tabeli,
kolumnie podanej w parametrze var oraz aktualnym wierszu tabeli.
Poniższy dokument składa się z opisu trzech części składających się na wygląd wydruku:
Atrybuty zawężające
Selektory
Reguły
Dostosowanie wygląd wydruku możliwe jest poprzez plik Styles.xml. Głównym elementem pliku jest style, który zawiera elementy określające wygląd poszczególnych elementów wydruku zdefiniowanych w pliku Layout.xml.
Jednym z elementów podrzędnych elementu style jest element fonts, który określa wszystkie fonty, które zostaną wykorzystane w wydruku. Może on zawierać, jeden lub więcej elementów font, który definiuje krój, wielkość, wygląd oraz styl fontu.
name - określa nazwę fontu, przez którą możemy się do niego odwołać
face - nazwa kroju fontu
size - rozmiar w punktach
color - kolor
style - style fontu. Może zawierać jedną (lub więcej wartości oddzielonych znakiem spacji) z wartości bold, italic, underline.
Wewnątrz elementu fonts powinien znaleźć się także jeden element font z pominiętym atrybutem name. Font ten będzie stosowany jako font domyślny dla wydruku.
Oprócz elementu fonts w pliku Styles.xml mogą znajdować się elementy w schemacie:
<selektor>
<reguła/><reguła/>[...]
</selektor>
Gdzie selektor decyduje o tym, czy podległe mu reguły zostaną zastosowane dla danego elementu. Większość selektorów ma taką samą nazwę jak element, który stylują. Np. w celu ostylowania paragrafu (element p w pliku Layout.xml ) należy zastosować selektor p.
Przykład
<p>
<margin top="5"/>
</p>
Powyższy przykład wszystkim paragrafom wydruku ustawi margines górny na 5 punktów. Selektor może wybrać do ostylowania tylko wybrane elementy danego typu. W tym celu do elementu w pliku Layout.xml oraz selektora w pliku Styles.xml należy dodać atrybut class. Selektor wybierze wtedy tylko te elementy, które mają identyczną wartość atrybutu class.
Powyższy przykład ustawi font wszystkich paragrafów na normal ale te, których atrybut class to title zostanie ustawiony font title. Dokładny opis innych atrybutów selektorów oraz spis reguł stylujących znajduje się w sekcji Wygląd. Lista selektorów oraz reguł, które można zastosować dla danego elementu znajduje się w opisie poszczególnych elementów w sekcji Układ. Reguły z pliku Styles.xml stosowane są od góry do dołu tzn. jeżeli dwa selektory dopasują ten sam element i zawierają one takie same reguły z innymi wartościami to zostanie zastosowana wartość występująca później.
Atrybuty zawężające
Opis każdego selektora zawiera listę elementów, które styluje oraz listę reguł, jakie można w nim umieścić. Opis każdej reguły zawiera listę atrybutów jakie można w niej zastosować.
Każdy selektor może zostać zawężony poprzez atrybut class. Dodatkowo selektory elementów związane z tabelami mogą zostać zawężone poprzez atrybut index, który może zawierać liczbę całkowitą lub wyrażenie postaci An+B, gdzie A oraz B to liczby całkowite. Selektor taki dopasuje element, jeżeli zgadza się on z indeksem wiersza tabeli (wiersze tabeli numerowane są od 0 z góry na dół).
Przykłady:
index="0" - dopasuje pierwszy wiersz w tabeli
index="first" - dopasuje pierwszy wiersz w tabeli
index="last" - dopasuje ostatni wiersz w tabeli
index="5" - dopasuje szósty wiersz w tabeli
index="2n" - dopasuje parzyste wiersze tabeli tzn. z indeksem równym 0,2,4... czyli wiersze pierwszy, trzeci, piąty...
index="3n+1" - dopasuje wiersze z indeksem 1, 4, 7...
index="3n+2" - dopasuje wiersze z indeksem 2, 5, 8...
Selektory
Nazwa
Barcode
Opis
Selektor dla kodu kreskowego
Elementy stylowane
Barcode
Parametry zawężające
class
Reguły
fit
Nazwa
Body
Opis
Selektor dla głównego elementu wydruku
Elementy stylowane
Body
Parametry zawężające
class
Reguły
page
margin
Nazwa
Cell
Opis
Selektor dla komórki w tabeli statycznej
Elementy stylowane
Cell
Parametry zawężające
class
index
Reguły
border
background
text
Nazwa
DataCell
Opis
Selektor dla komórki w tabeli dynamicznej
Elementy stylowane
Column
Parametry zawężające
class
index
Reguły
border
background
text
Nazwa
Footer
Opis
Selektor dla stopki dokumentu
Elementy stylowane
Footer
Parametry zawężające
class
Reguły
margin
text
Nazwa
HeadCell
Opis
Selektor dla komórki nagłówka w tabeli dynamicznej
Elementy stylowane
Column
Parametry zawężające
class
Reguły
border
background
text
Nazwa
Header
Opis
Selektor dla nagłówka dokumentu
Elementy stylowane
Header
Parametry zawężające
class
Reguły
margin
text
border
background
Nazwa
Hr
Opis
Selektor dla linii poziomej
Elementy stylowane
Hr
Parametry zawężające
class
Reguły
border
Nazwa
Image
Opis
Selektor dla obrazka
Elementy stylowane
Image
Parametry zawężające
class
Reguły
fit
Nazwa
P
Opis
Selektor dla paragrafu
Elementy stylowane
P
Parametry zawężające
class
Reguły
margin
text
border
background
Nazwa
Section
Opis
Selektor dla sekcji
Elementy stylowane
Section
Parametry zawężające
class
Reguły
border
background
text
Nazwa
StaticTable
Opis
Selektor dla tabeli statycznej
Elementy stylowane
StaticTable
Parametry zawężające
class
Reguły
width
border
background
text
Nazwa
Table
Opis
Selektor dla tabeli dynamicznej
Elementy stylowane
Table
Parametry zawężające
class
Reguły
width
border
background
text
Reguły
Nazwa
Background
Opis
Reguła określająca tło elementu
Atrybuty
color - kolor tła elementu. Może on być w formacie #RRGGBB lub 0xRRGGBB lub
0xAARRGGBB
Nazwa
Border
Opis
Reguła określająca obramowanie elementu
Atrybuty
left - szerokość lewego obramowania.
right - szerokość prawego obramowania.
top - szerokość górnego obramowania.
bottom - szerokość dolnego obramowania.
color - kolor obramowania elementu. Może on być w formacie #RRGGBB lub
0xRRGGBB lub 0xAARRGGBB
borderStyle - styl obramowania. Może przyjmować jedną z wartości:
o dashdot
o dashdotdot
o dashlargegap
o dashsmallgap
o dot
o none
o single
Uwagi
Szerokość obramowania może być podana w różnych jednostkach m.in.: cm, in, mm, pt. Domyślną jednostką są punkty.
Nazwa
borderLeft,borderRight,borderTop,borderBottom
Opis
Reguły określające poszczególne części obramowania elementu
Atrybuty
width - szerokość obramowania
color - kolor obramowania
borderStyle - styl obramowania
Nazwa
Fit
Opis
Reguła określająca rozmiar elementu
Atrybuty
width - szerokość elementu
height - wysokość elementu
Uwagi
Szerokość i wysokość może być podana w różnych jednostkach m.in.: cm, in, mm, pt. Stylowany
element zachowa swoje proporcje przyjmując mniejszy z podanych wymiarów.
Nazwa
Margin
Opis
Reguła określająca marginesy elementu
Atrybuty
left - lewy margines
right - prawy margines
top - górny margines
bottom - dolny margines
Uwagi
Szerokość marginesu może być podana w różnych jednostkach m.in.: cm, in, mm, pt.
Nazwa
Text
Opis
Reguła określająca styl tekstu
Atrybuty
align - wyrównanie tekstu. Przyjmuje jedną z wartości:
o right - wyrównanie do prawej
o left - wyrównanie do lewej
o justify - wyjustowanie tekstu
o center - wyśrodkowanie tekstu
indent - wcięcie pierwszej linii tekstu.
leftIndent - wcięcie tekstu z lewej.
rightIndent - wcięcie tekstu z prawej.
font - nazwa fontu zdefiniowana wcześniej w sekcji fonts .
color - kolor tekstu. Może on być w formacie #RRGGBB lub 0xRRGGBB lub
0xAARRGGBB
Nazwa
Width
Opis
Reguła określająca szerokość elementu
Atrybuty
percentage - procentowa szerokość elementu bazująca na szerokości elementu-rodzica
Przykładowa modyfikacja
W przykładzie do standardowego wydruku dokumentu Zlecenie Wydania Magazynowego dodana zostanie kolumna zawierająca informację o wadze brutto danej pozycji.
Standardowy wydruk dokumentu ZWM
W celu dodania kolumny należy wprowadzić modyfikację w plikach Data.xml oraz Layout.xml. W pliku Data.xml do zapytania SQL zwracającego dane pozycji dokumentu należy dodać kolumnę z informacją o wadze brutto (I.GrossWeight) według przykładu poniżej. Modyfikację oznaczono kolorem żółtym:
<?xml version="1.0" encoding="utf-8"?>
<data>
<setf><set><name>DocumentPositions</name><query>SELECT A.Code, A.Name, I.Quantity, I.RealizedQuantity, A.BasicUnitSymbol,CAST(I.RealizedQuantity * ISNULL(AU.Denominator, 1) / ISNULL(AU.Nominator, 1) as DECIMAL(19,4)) as SecondaryQuantityRealized,ISNULL(AU.UnitSymbol, A.BasicUnitSymbol) as SecondaryUnitSymbol, I.GrossWeightFROM WMS.Items IJOIN WMS.vArticles A ON I.ArticleId = A.IdLEFT JOIN WMS.vArticleUnits AU on AU.ArticleId = I.ArticleId AND AU.UnitId = I.SecondaryUnitIdWHERE I.DocumentId = @DocumentId</query></set>
...
Do pliku Layout.xml należy w tabeli z pozycjami natomiast dodać nową kolumnę Waga brutto według następującego przykładu: