Definicje wydruków

W aplikacji zostały przygotowane przykładowe wydruki, które można dowolnie modyfikować i dostosowywać do wymagań Klienta.
Wskazówka
Definicje wydruków dokumentów znajdują się domyślnie w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Printouts.
Wskazówka
Definicje wydruków raportów znajdują się domyślnie w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Printouts i podkatalogu odpowiednim dla systemu ERP, np. xl11.
Każdy wydruk składa się z trzech części:
  • Data – zapytania wyciągające dane wykorzystywane na wydruku,
  • Layout – układ wydruku,
  • Style – styl wydruku (czcionki, kolory itp.).
Uwaga
Podczas synchronizacji definicji wydruków na urządzenie brana jest pod uwagę data modyfikacji pliku. W celu wymuszenia synchronizacji wydruku należy wykonać dowolną modyfikację.
 

Dodanie nowej definicji wydruku dokumentu

Aby dodać nowy wydruk należy utworzyć jego definicję tworząc pliki Data, Layout i Style, następnie zapisać je w formacie xml. Istnieje możliwość dodania kilku definicji dla jednego dokumentu. Przykładowo dla dokumentu Zamówienie Sprzedaży istnieje standardowa definicja składająca się z plików:
  • 1#SalesOrder#data#Wydruk_domyślny.xml
  • 1#SalesOrder#layout#Wydruk_domyślny.xml
  • 1#SalesOrder#style#Wydruk_domyślny.xml
Należy dodać nową zmodyfikowaną definicję zmieniając w nazwie plików liczbę 1 na taką, która wśród definicji nie istnieje oraz frazę Wydruk_domyślny na wybraną przez siebie nazwę definicji, np:
  • 45#SalesOrder#data#Mój_wydruk.xml
  • 45#SalesOrder#layout#Mój_wydruk.xml
  • 45#SalesOrder#style#Mój_wydruk.xml
Po tych czynnościach podczas wydruku dokumentu mamy możliwość wyboru definicji wydruku:
Wybór definicji wydruku
Uwaga
W przypadku zapisu definicji wydruku w Notatniku należy wybrać kodowanie UTF-8.

Dodanie nowej definicji wydruku raportu

W celu dodania definicji wydruku raportu w katalogu Printouts i podkatalogu odpowiednim dla systemu ERP należy utworzyć pliki Data, Layout i Style zawierając w nazwie Id raportu z katalogu Reports serwera synchronizacji. Przykładowo, aby utworzyć definicję wydruku dla raportu Sprzedaż w okresach należy raport ten odszukać w katalogu Reports, nosi on nazwę 3#SalesInPeriods#pol.xml. Kolejno w katalogu Printouts i odpowienim podkatalogu utworzyć jego definicję tworząc pliki data, layout i style zawierając w nazwie jego Id:
  • 46#Report#data#3#Moj_wydruk.xml
  • 46#Report#layout#3#Moj_wydruk.xml
  • 46#Report#style#3#Moj_wydruk.xml
Po tych czynnościach w aplikacji pojawi się możliwość wydruku raportu Sprzedaż w okresach.

Usunięcie definicji wydruku

Aby usunąć istniejący wydruk, należy zmienić ID wszystkich jego elementów na ujemne, następnie zmienić datę modyfikacji i wykonać synchronizację.  
Zmiana ID wydruku na ujemne

Licznik wydruków

Funkcjonalność licznika wydruków PDF umożliwia ewidencjonowanie wydrukowanych dokumentów danego typu. Dzięki niej będzie można sprawdzić na bazie mobilnej, które dokumenty zostały wydrukowane i ewentualnie według potrzeby będzie można zablokować możliwość edycji już wydrukowanych dokumentów. Dla potrzeb funkcjonalności na bazie mobilnej została dodana tabela RealizedPrintout, w której można odszukać dokładną datę i godzinę wydruku, rodzaj obiektu, liczbę kopii itp. Informację o liczbie wydruków będzie można wykorzystać w raportach, np. ilość wydrukowanych dokumentów ZS danego dnia.

Dodatkowe informacje na wydrukach

Na wszystkich wydrukach dostępnych z poziomu aplikacji wprowadzone są dodatkowe informacje, które dotyczą:
  • numeru wydruku,
  • identyfikatora określającego, że wydruk został stworzony w aplikacji mobilnej,
  • liczby kopii wydruku,
  • identyfikatora operatora.
Dodatkowe dane pozwalają na dokładniejszą weryfikację wydruków wykonanych z poziomu aplikacji przez przedstawicieli.

Źródło danych

Wydruk do pdf

Ź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 wykonywane na mobilnej bazie danych aplikacji Comarch Mobile.  
Uwaga
Prezentowane zapytania SQL mogą różnić się w zależności od wersji aplikacji Comarch Mobile.
  Przykład standardowego pliku data.xml występującego w definicji wydruku dokumentu Zamówienie Sprzedaży (1#SalesOrder#data#Wydruk_domyślny.xml):
Przyklad
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE data PUBLIC "//UNKNOWN/" "unknown.dtd"> <data> <setf> <set> <name>Header</name> <query> ... </query> </set> <set> <name>DocumentsPositions</name> <query> ... </query> </set> <set> <name>VatAggregation</name> <query> ... </query> </set> <set> <name>Logo</name> <query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query> </set> <set> <name>FooterAppVersionNumber</name> <query> SELECT MajorVersion AS MajorVersion, MinorVersion AS MinorVersion, BuildVersion AS BuildVersion FROM Packages </query> </set> <set> <name>FooterOperatorCode</name> <query> SELECT Name AS OperatorCode FROM Users </query> </set> <set> <name>FooterCopyNumber</name> <query> SELECT CASE WHEN COUNT(Number) = 0 THEN 1 ELSE COUNT(Number) + 1 END AS Numbers FROM Documents INNER JOIN RealizedPrintouts rp ON(Documents.Number = rp.DocumentNumber) WHERE Documents.Id=@Id@ </query> </set> </setf> </data>

 

Wydruk termiczny

Jedyną różnicą w definicji pliku data.xml dla wydruków termicznych względem definicji wydruku do pdf jest brak elementu setfPrzykład takiego wydruku (11#SalesOrder#data#Thermal#Vline112#Wydruk_domyślny.xml) wygląda nastepująco:
Przyklad
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE data PUBLIC "//UNKNOWN/" "unknown.dtd"> <data> <set> <name>Header</name> <query> ... </query> </set> <set> <name>DocumentsPositions</name> <query> ... </query> </set> <set> <name>VatAggregation</name> <query> ... </query> </set> <set> <name>FooterAppVersionNumber</name> <query> SELECT MajorVersion AS MajorVersion, MinorVersion AS MinorVersion, BuildVersion AS BuildVersion FROM Packages </query> </set> <set> <name>FooterOperatorCode</name> <query> SELECT Name AS OperatorCode FROM Users </query> </set> <set> <name>FooterCopyNumber</name> <query> SELECT CASE WHEN COUNT(Number) = 0 THEN 1 ELSE COUNT(Number) + 1 END AS Numbers FROM Documents INNER JOIN RealizedPrintouts rp ON(Documents.Number = rp.DocumentNumber) WHERE Documents.Id=@Id@ </query> </set> </data>

Układ wydruku

Zawartość oraz układ wydruku definiowany jest w pliku Layout.xml. Głównym elementem w pliku jest document. Musi zawierać on element body, który zawiera główną część wydruku. Zawartość elementów body czy też footer może zostać skomponowana z innych elementów opisanych poniżej. Elementy te mogą być zagnieżdżane. Parametr class odwołuje się do klasy stylu zdefiniowanej w pliku Styles.xml dla danego elementu stylującego. 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:
  • 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.
Wszystkie dostępne elementy, które mogą zostać zastosowane podczas tworzenia układu wydruku zostały opisane poniżej.  

Elementy - wydruk do pdf

 
Nazwa Document
Opis Otwarcie/zamknięcie dokumentu
Parametry Brak
Elementy stylujące Brak
 
Nazwa Body
Opis Główna część wydruku
Parametry Brak
Elementy stylujące
  • Body
 
Nazwa Footer
Opis Stopka wydruku
Parametry Brak
Elementy stylujące
  • Footer
 
Nazwa pageNumber
Opis Numeracja stron
Parametry Brak
Elementy stylujące Brak
Przyklad
<footer> Comarch Mobile, v <data set="FooterAppVersionNumber" var="MajorVersion" />.<data set="FooterAppVersionNumber" var="MinorVersion" />.<data set="FooterAppVersionNumber" var="BuildVersion" />, Operator: <data set="FooterOperatorCode" var="OperatorCode" />, nr kopii: <data set="FooterCopyNumber" var="Numbers" /> <br /> Strona <pageNumber/> </footer>
 
Nazwa Horizontal
Opis Podział na sekcje ułożone poziomo
Parametry Brak
Elementy stylujące
  • Horizontal
Elementy podrzędne
  • Section
 
Nazwa Horizontal: Section
Opis Sekcja
Parametry
  • weight – waga szerokości kolumny. Wartość domyślna 1.
Elementy stylujące
  • Section
Przyklad
<horizontal> <section class="header"> <p class="header">Nabywca</p> </section> <section weight="0.05"/> <section class="header"> <p class="header">Odbiorca</p> </section> </horizontal>
 
Nazwa Image
Opis Obraz z bazy lub z dysku
Parametry
  • path – ścieżka do pliku względnie do katalogu głównego definicji wydruku. Jeżeli ustawiamy parametr path pozostałe parametry będą ignorowane.
  • set – Nazwa źródła danych
  • var – Nazwa kolumny w źródle danych
  • index – Indeks wiersza w źródle danych
Elementy stylujące
  • Image
Przyklad
<image set="Logo" var="Data" />
 
Nazwa P
Opis Paragraf
Parametry Brak
Elementy stylujące
  • P
Przyklad
<p class="centered">Uprawniony do odbioru dokumentu</p>
 
Nazwa Data
Opis Element zwracający dane ze źródła danych w postaci tekstowej
Parametry
  • set – nazwa zestawu danych
  • var – nazwa kolumny
  • index – indeks wiersza ze źródła danych (wartość domyślna 0)
  • format – todo
Elementy stylujące Brak
Przyklad
<data set="Header" var="CompanyName" />
 
Nazwa Hr
Opis Linia pozioma
Parametry Brak
Elementy stylujące
  • Hr
Przyklad
<section> <hr/> <p class="centered">Uprawniony do wystawienia dokumentu</p> </section>
 
Nazwa Br
Opis Złamanie linii w tekście
Parametry Brak
Elementy stylujące Brak
Przyklad
<data set="Header" var="CompanyName" /><br/> <data set="Header" var="Street" /><br/>
 
Nazwa Spacer
Opis Separator
Parametry Brak
Elementy stylujące Brak
Przyklad
... </horizontal> <spacer/><spacer/> <if> ...
 
Nazwa If
Opis Element testowy pozwalający na układ wydruku zależny od dowolnych warunków
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 mieć postać: eq - równy, lt - mniej niż, gt - więcej niż.
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.
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.
Parametry Brak
Elementy stylujące Brak
Przyklad
<if> <test><data set="Header" var="ReverseCharge" /> eq 1</test> <true> <p class="right">*) - odwrotne obciążenie</p> </true> <false> <p class="right">Odwrotne obciążenie nie występuje</p> </false> </if>
 
Nazwa Table
Opis Tabela dynamiczna o ustalonej liczbie kolumn.
Zawartość Jeden lub więcej elementów column
Parametry
  • 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.
Zawartość Element nie może zawierać żadnych elementów.
Parametry
  • var - nazwa kolumny ze zbioru danych.
  • format - format danych
Elementy stylujące Brak
Przyklad
<table set="DocumentPositions"> <column weight="2" description="Lp." class="number"> <rowNumber /> </column> <column weight="12" description="[Kod] Nazwa towaru"> [<tableData var="Code" />] <tableData var="Name" /> </column> <column weight="4" description="Ilość" class="number"> <tableData var="RealizedQuantity" /> </column> <column weight="4" description="Jm. (podstawowa)"> <tableData var="BasicUnitSymbol" /> </column> <column weight="4" description="Ilość" class="number"> <tableData var="SecondaryQuantityRealized" /> </column> <column weight="4" description="Jm. (pomocnicza)"> <tableData var="SecondaryUnitSymbol" /> </column> </table>
   

Elementy - wydruk termiczny

 
Nazwa Document
Opis Otwarcie/zamknięcie dokumentu
Parametry Brak
 
Nazwa Command
Opis
Parametry
  • comment
  • format 
  • code
Przyklad
<command comment="next_line" format="hex" code="0A"/>
 
Nazwa Data
Opis Element zwracający dane ze źródła danych w postaci tekstowej
Parametry
  • query - nazwa zbioru danych z pliku data
  • columnName - nazwa kolumny
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
  • maxlines - maksymalna ilość linii, którą może zająć element
 
Nazwa Text
Opis Element testowy
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
 
Nazwa Line
Opis Znacznik linii
Parametry Brak
Przyklad
<line> <text offset="30" length="35" align="left">Data dostawy/wykonania usługi: </text> <data query="Header" columnName="ExecutionDate" offset="65" length="15" align="left" /> </line>
 
Nazwa Table
Opis Tabela dynamiczna o ustalonej liczbie kolumn.
Parametry
  • query - nazwa zbioru danych z pliku data
  • length - szerokość elementu
Elementy podrzędne
  • Header
  • Row
 
Nazwa Table: Header
Opis Nagłówek tabeli (nazwy kolumn).
Parametry Brak
Elementy podrzędne
  • Column
 
Nazwa Table: Header: Column
Opis Element definiujący kolumnę tabeli.
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
 
Nazwa Table: Row
Opis Element definiujący wiersz tabeli.
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
Elementy podrzędne
  • Row_item
 
Nazwa Table: Row: Row_item
Opis Element definiujący zawartość wiersza tabeli.
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
Przyklad
<table query="DocumentsPositions" length="80"> <header> <column offset="0">L.p.</column> <column offset="7">[Kod]Nazwa</column> <column offset="22">Ilość</column> <column offset="32">J.M.</column> <column offset="39"><data query="Header" columnName="PriceType"/></column> <column offset="53">Rabat</column> <column offset="61">Wartość</column> <column offset="77">VAT</column> </header> <row> <line> <row_item name="Ordinal" offset="0" length="7" align="center" /> <row_item name="ItemName" offset="7" length="70" align="left" maxlines="2"/> </line> <line> <row_item name="Quantity" offset="17" length="10" align="right" /> <row_item name="UnitName" offset="28" length="9" align="left" /> <row_item name="Price" format="currency" decimal-places="PriceDecimalPlaces" offset="37" length="10" align="right" /> <row_item name="Discount" format="currency" offset="52" length="7" align="right" /> <row_item name="Value" format="currency" offset="60" length="10" align="right" /> <row_item name="VatRateValue" offset="70" length="10" align="right" /> </line> </row> </table>

Wygląd wydruku

Wydruk do pdf

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 pliki #style#.xml, np. standardowym plikiem definiującym wygląd Faktury Sprzedaży jest plik 7#SalesInvoice#style#Wydruk_domyślny.xml. Głównym elementem tego pliku jest style, który zawiera elementy określające wygląd poszczególnych elementów wydruku zdefiniowanych w pliku layout. Jednym z elementów podrzędnych elementu style jest element fonts, który określa wszystkie czcionki, 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.
Przyklad
<font name="title" face="Arial" size="20" color="#9fc54c"/>
Atrybuty elementu font to:
  • 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.
Przyklad
<fonts> <font face="Trebuchet MS" size="10"/> <font name="title" face="Arial" size="20" color="#9fc54c"/> <font name="header" face="Tahoma" size="8" color="#999999"/> <font name="summary_value" face="Trebuchet MS" size="15" color="#9fc54c" style="bold"/> </fonts>
  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.  
Przyklad
<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.  
Przyklad
<p> <text font="normal"/> </p> <p class="title"> <text font="title"/> </p>
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 style 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 Body
Opis Selektor dla głównego elementu wydruku
Elementy stylowane
  • Body
Parametry zawężające
  • class
Reguły
  • page
  • margin
Przyklad
<body> <page size="a4" orientation="portrait"/> <margin left="20" right="20" top="27" bottom="27"/> </body>
 
Nazwa Footer
Opis Selektor dla stopki dokumentu
Elementy stylowane
  • Footer
Parametry zawężające
  • class
Reguły
  • margin
  • text
Przyklad
<footer> <text align="right"/> </footer>
 
Nazwa DataCell
Opis Selektor dla komórki w tabeli dynamicznej
Elementy stylowane
  • Column
Parametry zawężające
  • class
  • index
Reguły
  • border
  • background
  • text
Przyklad
<dataCell class="index"> <background color="#26437E"/> <text font="header" align="right"/> </dataCell>
 
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
Przyklad
<headCell> <background color="#26437E"/> <border left="0.5" right="0.5" top="0.5" bottom="0.5" color="#E4F0F7"/> <text font="header" align="center"/> </headCell>
 
Nazwa Hr
Opis Selektor dla linii poziomej
Elementy stylowane
  • Hr
Parametry zawężające
  • class
Reguły
  • line
Przyklad
<hr> <line style="dotted"/> </hr>
 
Nazwa Image
Opis Selektor dla obrazka
Elementy stylowane
  • Image
Parametry zawężające
  • class
Reguły
  • fit
Przyklad
<image class="signature"> <fit width="80" height="80" /> </image>
 
Nazwa P
Opis Selektor dla paragrafu
Elementy stylowane
  • P
Parametry zawężające
  • class
Reguły
  • margin
  • text
  • border
  • background
Przyklad
<p class="title"> <text font="title"/> </p>
 
Nazwa Section
Opis Selektor dla sekcji
Elementy stylowane
  • Section
Parametry zawężające
  • class
Reguły
  • border
  • background
  • text
Przyklad
<section class="header"> <background color="#26437E"/> <border left="0.5" right="0.5" top="0.5" bottom="0.5" color="#E4F0F7"/> </section>
 
Nazwa Table
Opis Selektor dla tabeli dynamicznej
Elementy stylowane
  • Table
Parametry zawężające
  • class
Reguły
  • width
  • border
  • background
  • text
Przyklad
<table> <width percentage="100"/> </table>
 

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łady wydruków fiskalnych

W aplikacji Comarch Mobile Sprzedaż nie ma możliwości modyfikacji wydruków z drukarki fiskalnej. Poniżej prezentowane są przykładowe wydruki paragonu oraz faktury na drukarce fiskalnej. W przypadku faktury drukowana jest również kopia dokumentu.
Przykład wydruku faktury na drukarce fiskalnej
Przykład wydruku paragonu na drukarce fiskalnej

Przykłady wydruków termicznych

W aplikacji Comarch Mobile możliwy jest wydruk dokumentów na drukarce termicznej. Wygląd wydruków można dowolnie modyfikować zgodnie z instrukcją dostępną TUTAJ. Poniżej znajduje się przykład standardowego wydruku termicznego dokumentu Zamówienia Sprzedaży.
Przykład wydruku Zamówienia Sprzedaży na drukarce fiskalnej

Przykłady modyfikacji wydruków do pdf

Dodawanie kolumny

Do omówienia tej modyfikacji, wykorzystany zostanie przykład dodania kolumny zawierającej informację o rabacie. W celu dodania nowej kolumny należy wyedytować plik #data#. Należy odszukać zapytanie wydobywające dane związane z pozycjami dokumentu. Aby wykorzystać te dane w definicji dokumentu konieczne jest stworzenie aliasu tej kolumny np. Discount. Po dokonaniu zmian zapisujemy dokument.
Dodanie aliasu kolumny odpowiedzialnej za wyświetlanie rabatu
Aby dane te pokazywały się na dokumencie, konieczne jest odpowiednie zmodyfikowanie pliku #layout#, w którym w odpowiedniej sekcji należy dodać kolumnę o nazwie „Rabat”. W description należy wpisać nazwę kolumny, class - określenie klasy, w tym przypadku jest to numer, var - odniesienie do aliasu kolumny określonej w pliku data tj. Discount. Aby poza wartością rabatu wyświetlany był również symbol procentów, należy dodać na końcu linii znak „%”. Ponieważ rabat powinien być wyświetlany zarówno na dokumencie tworzonym od wartości brutto jak i netto, należy skopiować definicje kolumny do poniższej sekcji. Na koniec zapisujemy zmiany.
Dodanie kolumny Rabat w pliku layout
 

Zmiana kolorystyki

W celu zmiany kolorystyki wydruku należy wyedytować plik #style#, zmieniając kod koloru dla poszczególnych elementów definicji wydruku w sekcji <fonts>. Kolory podawane są w zapisie heksadecymalnym.
Wskazówka
Zalecanym programem do tej modyfikacji jest Notepad++. Definicje kolorów w zapisie heksadecymalnym dostępne są w Internecie.
Zmiana koloru w pliku style

Dodawanie/usuwanie/zmiana logo

Aby logo było dodane na wydruku, należy wybraną grafikę zapisać pod nazwą logo.png w folderze wydruków Printouts. Zmiana logo na inne możliwa jest poprzez zmianę nazwy poprzedniej grafiki oraz dodanie nowej, jako plik o nazwie logo.png o nowszej dacie modyfikacji od poprzedniego, tak jak zostało to zaprezentowane na poniższym rysunku:
Zmiana logo na wydruku
W celu usunięcia logo z wydruku dokumentu, należy usunąć zapytania zwracające logo tj.
  • W pliku Data: <set> <name>Logo</name> <query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query> </set>
  • W pliku Layout: <image set="Logo" var="Data" />

Dodanie nowych danych na wydruk

Jeżeli istnieje potrzeba pokazania na wydruku niestandardowych danych można to zrealizować w następujący sposób:
  • przesynchronizować potrzebne dane do tabeli Configuration bazy mobilnej
  • umieścić nowe dane na wydruku
Poniżej przedstawiony jest przykład dodania na wydruk dokumentu danych pracownika, który wystawił dokument: Zamówienie Sprzedaży przy współpracy z Comarch ERP XL 2018.2.1. W sposób opisany poniżej można synchronizować dowolne dane z systemu ERP i prezentować je na wydruku.
Uwaga
Zapytania SQL wykorzystywane w tym przykładzie mogą różnić się w zależności od systemu ERP oraz jego wersji.
W pierwszej kolejności należy w odpowiednim dla wersji systemu ERP pliku konfiguracyjnym znajdującym się w katalogu Methods serwera synchronizacji (ścieżka domyślna: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods\configuration) dodać następujące zapytanie:  
UNION ALL
select
1,
0,
'ImieNazwisko',
cast ((Prc_Imie1 +' '+ Prc_Nazwisko) as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'telefon',
cast (Prc_Telefon3 as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'email',
cast (Prc_EMail as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
  Powyższe zapytania pobierają z bazy systemu ERP dane dotyczące pracownika: imię i nazwisko, telefon, e-mail. Dodanie zapytań do pliku spowoduje, że konkretne dane zostaną przesynchronizowane do tabeli Configuration na bazie mobilnej. Kolejnym krokiem jest modyfikacja pliku wydruku 1#SalesOrder#data#Wydruk_domyślny.xml znajdującego się w katalogu Printouts serwera synchronizacji. Należy dodać zapytania pobierające zsynchronizowane wcześniej dane do tabeli Configuration. Nowo dodane fragmenty zostały oznaczone kolorem żółtym:  
...
<set>
<name>Logo</name>
<query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query>
</set>
<set>
<name>Wystawil</name>
<query>SELECT Value FROM Configuration WHERE key like 'ImieNazwisko'</query>
</set>
<set>
<name>Wystawiltel</name>
<query>SELECT Value FROM Configuration WHERE key like 'telefon'</query>
</set>
<set>
<name>Wystawilemail</name>
<query>SELECT Value FROM Configuration WHERE key like 'email'</query>
</set>
...
  Ostatnim krokiem jest modyfikacja pliku wydruku 1#SalesOrder#layout#Wydruk_domyślny.xml, która polega na dodaniu wpisów odpowiedzialnych za wyświetlanie danych, które zostały zwrócone w zapytaniach w pliku 1#Order#data#Wydruk_domyślny.xml:  
…
<horizontal split="no">
<section weight="2.4"/>
<section weight="0.8">
<image class="signature" set="Header" var="Signature" />
</section>
</horizontal>
<horizontal split="no">
<section weight="1.5">
<p class="left"><data set="Wystawil" var="Value" /></p>
<p class="left">Telefon: <data set="Wystawiltel" var="Value" /></p>
<p class="left">E-mail: <data set="Wystawilemail" var="Value" /> </p>
<hr/>
<p class="centered">Uprawniony do wystawienia dokumentu</p>
</section>
  Po wykonaniu powyższych modyfikacji należy wykonać synchronizację z urządzenia mobilnego. Po modyfikacji wydruk powinien wglądać następująco:
 
Zamówienie Sprzedaży z danymi osoby wystawiającej
 

Przykłady modyfikacji wydruków termicznych

Usunięcie tabeli i przesunięcie tekstu

Opis modyfikacji będzie dotyczył standardowej definicji wydruku termicznego dokumentu Faktura sprzedaży. Opisane zostanie usunięcie tabeli zawierającej informacje o VAT oraz przesunięcie informacji o zapłacie na prawą stronę wydruku.
Standardowy wydruk termiczny dokumentu Faktura Sprzedaży
  Należy zmodyfikować plik: 17#SalesInvoice#layout#Thermal#Vline112#Wydruk_domyślny.xml. W pliku tym należy usunąć lub zakomentować linijki dotyczące tabeli zawierającej informacje o VAT jak poniżej:
<table query="VatAggregation" length="64">
<header>
<column offset="0">Stawka VAT</column>
<column offset="18">Wartość netto</column>
<column offset="34">Wartość VAT</column>
<column offset="48">Wartość brutto</column>
</header>
<row>
<line>
<row_item name="VatRateName" offset="0" length="18" align="left" />
<row_item name="NetValue" format="currency" offset="18" length="13" align="right" />
<row_item name="VatValue" format="currency" offset="31" length="14" align="right" />
<row_item name="GrossValue" format="currency" offset="45" length="17" align="right" />
</line>
</row>
</table>
oraz dla części zawierającej informacje o zapłacie zmodyfikować wartości offset z 0 na 40 (cały wydruk ma szerokość 80) poszczególnych danych jak w przykładzie poniżej zaznaczono kolorem czerwonym:
...
<line>
<text offset="40" length="21" align="left">Razem do zapłaty:</text>
<data query="Summary" columnName="Value" format="currency" offset="22" length="10" align="right" />
</line>
<line>
<text offset="40" length="21" align="left">Zapłacono:</text>
<data query="Summary" columnName="Paid" format="currency" offset="22" length="10" align="right" />
</line>

<command comment="set_bold_font" format="hex" code="1B47"/> 
<line>
<text offset="40" length="21" align="left">Pozostaje do zapłaty:</text>
<data query="Summary" columnName="ToPay" format="currency" offset="22" length="10" align="right" />
<data query="Header" columnName="Currency" offset="33" length="5" align="left" />
</line>
...
  Po wprowadzeniu tej modyfikacji wydruk termiczny Faktury sprzedaży powinien wyglądać następująco:
Wydruk dokumentu Faktura Sprzedaży po modyfikacji
 

Dodanie nowych danych na wydruk

Jeżeli istnieje potrzeba pokazania na wydruku niestandardowych danych można to zrealizować w następujący sposób:
  • przesynchronizować potrzebne dane do tabeli Configuration bazy mobilnej
  • umieścić nowe dane na wydruku
 
Standardowy wydruk termiczny dokumentu Faktura Sprzedaży
  Poniżej przedstawiony jest przykład dodania na wydruk dokumentu danych pracownika, który wystawił dokument: Faktura Sprzedaży przy współpracy z Comarch ERP XL 2018.2.1. W sposób opisany poniżej można synchronizować dowolne dane z systemu ERP i prezentować je na wydruku.
Uwaga
Zapytania SQL wykorzystywane w tym przykładzie mogą różnić się w zależności od systemu ERP oraz jego wersji.
W pierwszej kolejności należy w odpowiednim dla wersji systemu ERP pliku konfiguracyjnym znajdującym się w katalogu Methods serwera synchronizacji (ścieżka domyślna: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods\configuration) dodać następujące zapytanie:  
UNION ALL
select
1,
0,
'ImieNazwisko',
cast ((Prc_Imie1 +' '+ Prc_Nazwisko) as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'telefon',
cast (Prc_Telefon3 as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'email',
cast (Prc_EMail as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
  Powyższe zapytania pobierają z bazy systemu ERP dane dotyczące pracownika: imię i nazwisko, telefon, e-mail. Dodanie zapytań do pliku spowoduje, że konkretne dane zostaną przesynchronizowane do tabeli Configuration na bazie mobilnej. Kolejnym krokiem jest modyfikacja pliku wydruku 11#SalesOrder#data#Thermal#Vline112#Wydruk_domyślny.xml znajdującego się w katalogu Printouts serwera synchronizacji. Należy dodać zapytania pobierające zsynchronizowane wcześniej dane do tabeli Configuration. Nowo dodane fragmenty zostały oznaczone kolorem żółtym:
...
<set>
<name>Logo</name>
<query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query>
</set>
<set>
<name>Wystawil</name>
<query>SELECT Value FROM Configuration WHERE key like 'ImieNazwisko'</query>
</set>
<set>
<name>Wystawiltel</name>
<query>SELECT Value FROM Configuration WHERE key like 'telefon'</query>
</set>
<set>
<name>Wystawilemail</name>
<query>SELECT Value FROM Configuration WHERE key like 'email'</query>
</set>
...
  Ostatnim krokiem jest modyfikacja pliku wydruku 11#SalesOrder#layout#Thermal#Vline112#Wydruk_domyślny.xml, która polega na dodaniu wpisów odpowiedzialnych za wyświetlanie danych, które zostały zwrócone w zapytaniach w pliku 11#SalesOrder#data#Thermal#Vline112#Wydruk_domyślny.xml w miejsce nad linię z informacją o osobach uprawnionych i dacie odbioru:  
<line>
<data query="Wystawil" columnName="Value" format="currency" offset="0" length="30" align="center" />
</line>
<line>
<data query="Wystawiltel" columnName="Value" format="currency" offset="0" length="30" align="center" />
</line>
<line>
<data query="Wystawilemail" columnName="Value" format="currency" offset="0" length="30" align="center" />
</line>

<line>
<text offset="0" length="30" align="center">Uprawniony do wystawienia dok.</text>
<text offset="31" length="18" align="center">Data odbioru</text>
<text offset="50" length="30" align="center">Uprawniony do odbioru dok.</text>
</line>
…
  Po wykonaniu powyższych modyfikacji należy wykonać synchronizację z urządzenia mobilnego. Po modyfikacji wydruk termiczny powinien wglądać następująco:
 
Wydruk dokumentu Faktura Sprzedaży z dodatkowymi danymi