Ogólna struktura mechanizmu wydruków tekstowych
Wydruki tekstowe zostały oparte o mechanizm wydruków XML, dlatego na początku w skrócie zostanie nakreślona zasada działania wydruków XML.
Wydruki XML
Definicja wydruku XML zawiera 4 sekcje: [SQL], [XSL], [FILE] i [RUN]
Sekcja SQL
Sekcja ta zawiera zapytanie (lub zapytania SQL), które zostaną zadane do bazy danych. Na podstawie zwróconych recordsetów tworzony jest plik XML o strukturze:
<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>
Tagów RECORDSETn jest tyle, ile recordsetów zwracają zapytania z sekcji [SQL] (są one kolejno numerowane).
Tagów RECORD w każdym tagu RECORDSETn jest tyle, ile wierszy zwróciło dane zapytanie.
Każdy tag RECORD posiada tyle atrybutów, ile kolumn zwraca zapytanie. Nazwa danego atrybutu odpowiada nazwie kolumny, a wartość atrybutu – wartości kolumny, np.
<RECORD Knt_GIDNumer=”1” Knt_Kod=”COMARCH” />
Sekcja XSL
Sekcja XSL zawiera schemat, który jest „nakładany” na plik XML wygenerowany zgodnie z opisem w poprzednim punkcie. W wyniku tego „nałożenia” powstaje plik wynikowy.
Sekcja FILE
Sekcja FILE zawiera nazwę pliku, pod jaką zostanie zapisany wynikowy plik XML. Jeżeli sekcja FILE jest pusta, wówczas plik wynikowy zostanie zapisany w katalogu tymczasowym pod nazwą rptNNN.tmp (gdzie NNN jest liczbą szesnastkową)
Sekcja RUN
Sekcja RUN zawiera nazwę programu, do którego zostanie przesłany plik wynikowy. Jeżeli sekcja RUN jest pusta, wówczas plik wynikowy zostanie wysłany do programu domyślnego ze względu na rozszerzenie pliku, np.:
[FILE]
C:\wynik.xml
[RUN]
spowoduje zapisanie pliku wynikowego do pliku C:\wynik.xml i otwarcie go za pomocą przeglądarki internetowej.
Parametry dynamiczne
Cała definicja wydruku XML jest poddawana analizie przez silnik parametrów dynamicznych. Może to być wykorzystywane w dwóch przypadkach:
- do przekazywania parametrów dynamicznych wydruku (np. filtr aplikacji, opis wydruku itp.),
- do wywoływania okienka z parametrami, które do wydruku przekazuje użytkownik.
Aplikacja może przekazać do wydruku listę parametrów dynamicznych, zgodnie z zawartością zakładki Parametry na oknie Konfiguracja wydruków.
Dodatkowo użytkownik może definiować własne parametry dynamiczne, dla których, w chwili wykonywania wydruku, zostanie wyświetlone okno z zapytaniem o wartość parametru.
Opis działania parametrów dynamicznych znajduje się w biuletynie poświęconym modułowi analiz (tworzenie wykresów)
Działanie parametrów dynamicznych zostanie w dalszej części zilustrowane na przykładzie.
Wydruk tekstowy
Do potrzeb wydruków tekstowych przygotowany został program PrintTxt.EXE, który jako parametr wejściowy otrzymuje plik XML o określonej strukturze i w wyniku swego działania przetwarza ten XML na plik tekstowy, który jest kierowany na drukarkę.
Pełny mechanizm generowania wydruku polega na przygotowaniu pliku XML o określonej strukturze, a następnie przetworzenie go przez program PrintTxt.EXE
Struktura plików XML dla wydruków tekstowych
Plik XML, który jest przekazywany do programu PrintTxt.EXE powinien mieć następującą strukturę:
<ROOT> <!– one, req –>
<RAPORT> <!– many, req –>
<PARAM/> <!– many, opt –>
<RPT_HEADER> <!– one, opt –>
<LINE> <!– many, opt –>
<PARAM/> <!– many, opt –>
<FIELD/> <!– many, opt –>
</LINE>
</RPT_HEADER>
<PG_HEADER> <!– one, opt –>
<LINE> <!– many, opt –>
<PARAM/> <!– many, opt –>
<FIELD/> <!– many, opt –>
</LINE>
</PG_HEADER>
<DETAIL> <!– many, req –>
<LINE> <!– many, req –>
<PARAM/> <!– many, opt –>
<FIELD/> <!– many, opt –>
</LINE>
</DETAIL>
<PG_FOOTER> <!– one, opt –>
<LINE> <!– many, opt –>
<PARAM/> <!– many, opt –>
<FIELD/> <!– many, opt –>
</LINE>
</PG_FOOTER>
<RPT_FOOTER> <!– one, opt –>
<LINE> <!– many, opt –>
<PARAM/> <!– many, opt –>
<FIELD/> <!– many, opt –>
</LINE>
</RPT_FOOTER>
</RAPORT>
</ROOT>
Oczywiście komentarze nie muszą występować w pliku XML – tutaj zostały dodane, aby oznaczyć czy dany tag ma występować, czy też nie: many oznacza, że tag może wystąpić wiele razy, one oznacza, że dany tag (na określonym poziomie) może wystąpić tylko raz, req oznacza, że dany tag jest wymagany, opt oznacza, że dany tag jest opcjonalny. Na najwyższym poziomie pliku XML musi wystąpić tylko jeden tag o nazwie ROOT RAPORT zawiera definicję pojedynczego wydruku. Na ogół ROOT zawierał będzie jeden tag RAPORT, jednakże w przypadku konstruowania wydruków seryjnych możliwe jest umieszczenie wielu tagów RAPORT. Istotne jest to, że dla każdego tagu RAPORT zerowana jest numeracja stron. Tag ten zawiera definicję wyglądu nagłówka raportu. Nagłówek ten zostanie wydrukowany jeden raz na początku raportu. Tag ten zawiera definicję wyglądu nagłówka strony. Nagłówek ten zostanie wydrukowany na początku każdej strony. Tag ten zawiera definicję zawartości wierszy raportu. Tag ten zawiera definicję wyglądu stopki strony. Stopka ta zostanie wydrukowana na końcu każdej strony. Tag ten zawiera definicję wyglądu stopki raportu. Stopka ta zostanie wydrukowana jeden raz na końcu raportu. Tag ten zawiera definicję parametrów. Parametry są zmiennymi raportu, w których można zapisywać pewne informacje (np. takie, do których się potem wielokrotnie odwołujemy) czy dokonywać pewnych obliczeń (np. sumy). Każdy raport posiada pewną predefiniowaną listę parametrów systemowych (takich jak np. numer strony, numer linii, typ drukarki itp.). Nazwy parametrów systemowych są poprzedzone znakiem @. Jeżeli odwołujemy się do jakiegoś parametru (np. przy obliczeniach) to jego nazwę poprzedzamy znakiem @, stąd odwołanie do parametrów systemowych poprzedzone jest poprzez @@ (np. @@PAGENO) Tag PARAM może posiadać następujące atrybuty: Tagi PARAM mogą być elementami tagu RAPORT (zainicjalizowanie lub jednorazowe ustawienie parametru na początku wydruku). W tym miejscu można ustawiać niektóre parametry systemowe (np. typ drukarki, nazwa urządzenia wyjściowego) oraz zapamiętywać w zmiennych stałe wartości parametrów, które będą później wielokrotnie wykorzystywane w raporcie. Tagi PARAM mogą być również elementami tagów LINE . wówczas są one przeliczane dla każdej linii. Dla wydruku definiowane są następujące parametry systemowe Tag ten zawiera definicję wyglądu linii oraz (opcjonalnie) definicje parametrów. Przy przetwarzaniu tagu LINE najpierw obliczane są parametry zdefiniowane dla danej linii, a następnie na podstawie zawartości tagów FIELD tworzony jest .wygląd. linii na wydruku. Po przetworzeniu tagu LINE do pliku wynikowego dodawany jest automatycznie znak nowej linii Tag FIELD zawiera definicję pojedynczego pola w drukowanej linii. Tag ten może posiadać następujące atrybuty: Wszędzie tam gdzie parametr może przyjmować wartości true lub false możliwe jest również wprowadzanie wyrażeń. Poniższy przykład ilustruje sposób wydrukowania pola tylko na ostatniej stronie: <LINE> W poniższym rozdziale zostaną omówione kwestie ustalania kodów sterujących dla drukarek oraz przekodowania polskich liter. Obecnie program drukujący potrafi obsługiwać 2 standardy drukarek: EPSON (drukarki igłowe) oraz PCL (większość drukarek atramentowych i laserowych). Ustalenie typu drukarki jest niezbędne ze względu właściwą obsługę kodów sterujących drukarki, w szczególności przełączania pisma na pogrubione i zawężone. Jeżeli drukarka wymaga innych kodów sterujących, można to osiągnąć poprzez ustawienie parametrów: Przykładowo, ustawienie kodów równoważnych dla trybu EPSON można uzyskać poprzez wpisanie: <PARAM calc=”true” type=”text” name=”@FONT_NARROW” value=”String.fromCharCode(15)”/> <PARAM calc=”true” type=”text” name=”@FONT_NARROW_” value=”String.fromCharCode(18)”/> <PARAM calc=”true” type=”text” name=”@FONT_BOLD” value=”String.fromCharCode(14)”/> <PARAM calc=”true” type=”text” name=”@FONT_BOLD_” value=”String.fromCharCode(20)”/> Natomiast ustawienie kodów równoważnych dla trybu PCL można uzyska poprzez wpisanie: <PARAM calc=”true” type=”text” name=”@FONT_NARROW” value=”String.fromCharCode(27)+’&k2S'”/> <PARAM calc=”true” type=”text” name=”@FONT_NARROW_” value=”String.fromCharCode(27)+’&k0S'”/> <PARAM calc=”true” type=”text” name=”@FONT_BOLD” value=”String.fromCharCode(27)+'(s7B'”/> <PARAM calc=”true” type=”text” name=”@FONT_BOLD_” value=”String.fromCharCode(27)+'(s0B'”/> Obecnie program drukujący potrafi obsługiwać polskie litery w standardach Mazovia i Latin oraz emulować polskie litery poprzez wydruk litery łacińskiej i dodanie do niej akcentu czy ogonka. Jeżeli drukarka obsługuje polskie litery w jakimś innym standardzie, można uzyskać wydruki poprzez ustalenie wartości parametrów: Przykładowo, aby uzyskać przekodowanie polskich liter na litery łacińskie (wydruk bez polskich liter) należałoby wpisać: <PARAM type=”text” name=”@INPUTCODE” value=”Ą|ą|Ć|ć|Ę|ę|Ł|ł|Ń|ń|Ó|ó|Ś|ś|Ź|ź|Ż|ż|”/> <PARAM type=”text” name=”@OUTPUTCODE” value=”A|a|C|c|E|e|L|l|N|n|O|o|S|s|Z|z|Z|z|”/> Zasady budowania definicji wydruku zostaną omówione na przykładzie wydruku Faktury sprzedaży. Przykład ten został wybrany na względu na stosunkowo prostą formę wydruku oraz powszechność w użyciu. Definicja tego wydruku jest w standardowej bazie wydruków programu. W niniejszym biuletynie omówimy tylko ciekawsze fragmenty formatu wydruku. Dla potrzeb sprawnego wykonania wydruku należy wcześniej dokładnie zaplanować jego wygląd. Ze względu na to, że na wydrukach tekstowych wyrównanie kolumn uzyskuje się przez dobór ich szerokości (liczonej w znakach) szczególnie ważne jest zaplanowanie rozkładu poszczególnych pól na wydruku. Do potrzeb wydruku przyjęto, że na stronie mieści się 80 znaków w trybie normalnym oraz 133 znaki w trybie zagęszczonym. Sekcja SQL zawiera pięć zapytań – tak więc do „pierwotnego” pliku XML zostanie podstawionych pięć recordsetów. Select Frm_Nazwa1, Frm_Nazwa2, Frm_Nazwa3, Frm_KodP+’ ‘+Frm_Miasto As Frm_Miasto, Frm_Ulica, ‘NIP: ‘+ Frm_NIP As Frm_Nip From CDN.Firma where Frm_GIDNumer=1 Powyższe zapytanie wyciąga dane firmy (pieczątkę firmy) z odpowiedniej tabeli. exec CDN.wydrTabelkaPlatnosciIVat ??_QFiltr Powyższe zapytanie wyciąga tabelkę płatności oraz vat dla danego dokumentu. Jak widzimy w sekcji SQL oprócz zapytania SELECT możemy również wywołać procedurę serwerową – klauzula EXEC (EXECUTE). Aby wydruk z procedurą serwerową wykonał się poprawnie, rola ERPRaport musi mieć prawa wykonywania tej procedury. Dla naszej przykładowej procedury: CDN.wydrTabelkaPlatnosciIVat należałoby dodatkowo wykonać poniższe zapytanie: GRANT EXECUTE ON CDN.wydrTabelkaPlatnosciIVat TO CDNRaport Zastosowanie w sekcji parametrów procedury wyrażenia ??_QFiltr spowoduje podstawienie w jego miejsce filtru przekazanego z listy (a więc wydruk będzie zawierał dokładnie płatności i tabelę VAT dla wybranego dokumentu). Użycie wywołania wyrażenia ??_QFiltr było możliwe dzięki temu, że we wcześniejszym zapytaniu (w sekcji WHERE klauzuli SQL) użyliśmy deklaracji tego parametru ?@H200_NQ|Filtr:’’@?. Warto zwrócić uwagę, że parametr dynamiczny został wywołany z opcją H, co spowoduje, że użytkownik nie będzie monitowany o podanie jego wartości (parametr zostanie przekazany z aplikacji). Kolejną opcją, na którą warto zwrócić uwagę to opcja NQ w deklaracji parametru i Q (brak N w tej opcji) w wywołaniu tego parametru. Oznacza ona, że przekazany filtr nie będzie otaczany apostrofami (NQ) lub będzie (Q). Początkowy fragment definicji, tzn. <xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”1.0″> <xsl:output method = “xml” omit-xml-declaration=”yes”/> <xsl:preserve-space elements=”*”/> <xsl:template match=”/”> <xsl:for-each select=”ROOT”> <xsl:value-of disable-output-escaping=”yes” select=”string(‘<?xml version="1.0" encoding="windows-1250"?>’)”/> można w zasadzie uznać za stały. Ustala on sposób przetwarzania „wejściowego” pliku XML oraz ustawia nagłówek pliku wyjściowego. Następnie rozpoczyna się właściwa deklaracja definicji wydruku. W tagu RAPORT jest ustalonych kilka tagów PARAM (a więc zdefiniowanych kilka zmiennych raportu). Ich znaczenie jest następujące: Poniższe 3 tagi zawierają ustawienia wartości parametrów systemowych, powodujące ustalenie portu wydruku jako LPT1, typu drukarki jako EPSON i standardu polskich liter na drukarce jako MAZOVIA <PARAM type=”text” name=”@PRINTER” value=”LPT1″/> <PARAM type=”text” name=”@PRINTERTYPE” value=”EPSON”/> <PARAM type=”text” name=”@CODEPAGE” value=”MAZOVIA”/> Kolejny tag: <xsl:apply-templates select=”RECORDSET1″/> powoduje wykonanie template dla recordsetu 1. Są z nim związane następujące dalsze fragmenty w definicji: <xsl:template match=”RECORD” mode=”r1″> <P type=”text” name=”FRM_NAZWA1″><xsl:attribute name=”value”><xsl:value-of select=”@Frm_Nazwa1″ /></xsl:attribute></P> <P type=”text” name=”FRM_NAZWA2″><xsl:attribute name=”value”><xsl:value-of select=”@Frm_Nazwa2″ /></xsl:attribute></P> <P type=”text” name=”FRM_NAZWA3″><xsl:attribute name=”value”><xsl:value-of select=”@Frm_Nazwa3″ /></xsl:attribute></P> <P type=”text” name=”FRM_ULICA” ><xsl:attribute name=”value”><xsl:value-of select=”@Frm_Ulica” /></xsl:attribute></P> <P type=”text” name=”FRM_MIASTO”><xsl:attribute name=”value”><xsl:value-of select=”@Frm_Miasto” /></xsl:attribute></P> <P type=”text” name=”FRM_NIP” ><xsl:attribute name=”value”><xsl:value-of select=”@Frm_Nip” /></xsl:attribute></P> </xsl:template> Cały ten zabieg powoduje podstawienie wartości pól odczytanych z pierwszego recordsetu do odpowiednich parametrów. W tagu RPT_HEADER znajduje się pieczątka firmy, dane faktury (numer, data wystawienia, data sprzedaży, numer konta bankowego, dane kontrahentów itp.). Informacje te będą drukowane tylko na pierwszej stronie wydruku. Zawiera on kilkanaście tagów L [LINE] . tak więc nagłówek raportu będzie liczył tyleż linii. Omówimy tylko kilka linii na które należy zwrócić uwagę: <L> <F value=”+-Sprzedawca:” width=”42″ fill=”-“/> <F value=”+” width=”5″/> <F calc=”true” value=”@@FONT_BOLD”/> <F value=”Faktura VAT”/> <F calc=”true” value=”@@FONT_BOLD_”/> </L> W powyższej linii na wydruku będzie wydrukowane +-Sprzedawca:—————————+ Faktura VAT Czyli na 42 znakach (width=”42”) zostanie wydrukowany tekst „+-Sprzedawca” (zawartość atrybutu value), 30 znaków minus – (minus bo atrybut fill=”-“, 30 bo 42-12 gdzie 42 to wartość atrybutu width, a 12 to długość stringu w wartości atrybutu value). Jest to pierwsze pole w linii. Drugie pole to + i cztery spacje, następne pole to pogrubiony napis Faktura VAT (dzięki wstawieniu znaków sterujących zapisanych w parametrze @FONT_BOLD). Następne linie będą drukowane fontem normalny, ponieważ został wstawiony znacznik końca fontu pogrubionego (@FONT_BOLD_). <L> <F value=”|” width=”2″/> <F calc=”true” value=”@FRM_NAZWA1″ width=”40″/> <F value=”|”/> </L> W powyższej linii mamy wstawioną nazwę firmy na długości 40 znaków otoczonej znakami |. Nazwa firmy znajduje się w parametrze @FRM_NAZWA1, którego wartość brana jest z zapytania SQL omawianego w sekcji SQL. <L hide=”!(@NAB_NAZWA2!=” || @ODB_NAZWA2!=”)”> <F calc=”true” value=”@NAB_NAZWA2″ width=”60″/> <F calc=”true” value=”@ODB_NAZWA2″ width=”60″/> </L> Powyższa linia zawiera drugi człon nazwy kontrahenta głównego (nabywca) oraz docelowego (odbiorca). Warto zwrócić uwagę na atrybut hide, który steruje wyświetlaniem tej linii. Linia ta będzie drukowana wtedy, gdy jedna z wartości @NAB_NAZWA2 lub @ODB_NAZWA2 będzie niepusta, czyli jeżeli na odpowiednich adresach kontrahentów będą wypełnione drugie pola w nazwie kontrahenta. Dzięki temu unikniemy „pustych” linii na wydruku. Kolejnym tagiem jest PG_HEADER. Zawiera on 3 tagi L [LINE], tak więc nagłówek strony będzie liczył 3 linie, które są nagłówkiem tabelki z pozycjami faktury. Kolejny tag DETAIL zawiera pozycje faktury. Do jego wygenerowania wykorzystany jest template tworzący linię dla każdego wiersza z recordsetu czwartego <DETAIL> <xsl:apply-templates select=”RECORDSET4″/> </DETAIL> i dalej <xsl:template match=”RECORDSET4″> <xsl:apply-templates select=”RECORD” mode=”r4″/> </xsl:template> <xsl:template match=”RECORD” mode=”r4″> ….. </xsl:template> Każda pozycja na fakturze generuje na wydruku jedną linię. W ramach tej linii obliczane są pewne zmienne oraz drukowane pola. RPT_FOOTER zawiera podsumowanie całego wydruku, czyli tabelkę płatności, tabelkę VAT, kwotę dokumentu itp. PG_FOOTER zawiera dolne obramowanie tabelki pozycji faktury, stronę wydruku oraz informuje o nazwie programu, z którego powstał wydruk. Proszę zwrócić uwagę, że linia, która jest obramowaniem tabelki pozycji drukowana na ostatniej stronie wygląda inaczej niż linia drukowana na innych stronach (ze względów estetycznych, na ostatniej stronie, linia ta stanowi równocześnie górne obramowanie tabelki z płatności i vat). Zostało to uzyskane przez wykorzystanie atrybutu hide. <L><F value=”+—-+————+——————————————–+—————–+————–+—–+————–+————–+” hide=”@@PAGENO==@@PAGETOT”/></L> <L/> <L hide=”@@PAGENO==1″> <F value=”Strona:” width=”10″/> <F calc=”true” value=”@@PAGENO” width=”3″ type=”number”/> <F value=”/”/> <F calc=”true” value=”@@PAGETOT” width=”3″ type=”number”/> <F value=”CDN XL (C) COMARCH S.A.” align=”right” width=”120″/> </L> <L hide=”@@PAGENO!=1″><F value=”ERP XL (C) COMARCH S.A.” align=”right” width=”133″/></L> Warto zaznaczyć również, że numer strony w stopce strony nie drukowany jest na pierwszej stronie tylko na każdej następnej (warunek @@PAGENO==1). Na pierwszej stronie, drukowany jest w nagłówku raportu RPT_HEADER Sekcja FILE nie została wypełniona „pomocniczy” plik XML będzie więc zapisywany do katalogu TEMP. Jeżeli w sekcji file wpiszemy np. C:\FS.XML to zostanie stworzony plik XML wygenerowany poprzez wydruk XML, jest to plik będący bezpośrednio działaniem mechanizmu wydruków XML i jest on poddawany dalszej obróbce przez program PrintTXT. W ramach testów mechanizmu wydruków można taki plik wygenerować i zobaczyć jego strukturę. Sekcja RUN zawiera wywołanie programu PrintTXT.EXE, przetwarzającego plik XML na plik tekstowy wysyłany do drukarki. Wymagania systemowe dla poprawnego działania systemu ERP XL zostały opisane w dokumencie Wymagania Minimalne Systemu do aktualnej wersji… Dodatkowo dla poprawnego działania wydruków tekstowych konieczne są komponenty: Wersje instalacyjne powyższych komponentów oraz więcej informacji na ich temat można znaleźć w lokalizacji: http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp Program printtxt.exe który obsługuje drukowanie txt nie pozwala na drukowanie gdy program XL pracuje w usługach terminalowych na drukarki zmapowane w sesji terminalowej. Do obsługi drukowania na drukarkach mapujących się w usługach terminalowych wykorzystano drukowania porze kanału wirtualne. Aby móc drukować wydruki txt w takim środowisku należy:
Zawartość tagów
ROOT
RAPORT
RPT_HEADER
PG_HEADER
DETAIL
PG_FOOTER
RPT_FOOTER
PARAM | P
name nazwa parametru
type typ parametru Dopuszczalne wartości to text i number. Domyślnym typem jest text
Uwaga: typ parametru jest istotny ze względu na operacje dokonywane na nich.
Przykładowo, mając dwa parametry P1 i P2 o wartościach odpowiednio 1 i 2, jeżeli
wykonamy na nich operację @P1+@P2, to w przypadku parametrów typu number
w wyniku otrzymamy 3, a jeśli co najmniej jeden z nich będzie typu text, to w wyniku
otrzymamy 12
value wartość parametru
calc przyjmuje wartości true i false (domyślnie false). Określa, czy wartość parametru jest podana przez wartość (calc=”true”), czy przez wyrażenie (calc=”false”). Przykładowo, jeśli value=”@P1+@P2” calc=”true” to jako wartość parametru zostanie podstawiony wynik wykonania działania na parametrach P1 i P2. Jeżeli natomiast calc=”false”, wówczas jako wartość parametru zostałby podstawiony po prostu tekst @P1+@P2.
@PRINTER nazwa urządzenia wyjściowego (np. LPT1, \\KOMPUTER\DRUKARKA, C:\PLIK.TXT – jeżeli chcemy w wydruku zaszyć urządzenie wyjściowe). Możemy również zastosować drukowanie na drukarkę Windows służy do tego parametr dynamiczny ?@Hs100_NQ|Printer:''@?.
@VIEWER nazwa programu służącego do podglądu wydruku, domyślnie jest to „notepad.exe” .
@CODEPAGE sposób kodowania polskich znaków na drukarce. Aktualnie dostępne wartości MAZOVIA, LATIN i EMULATOR (oznacza tworzenie polskiej litery poprzez wydrukowanie litery łacińskiej, cofnięcie karetki i wydrukowanie ogonka lub akcentu). Ustawienie tego parametru inicjalizuje wartość parametrów @INPUTCODE i @OUTPUTCODE. Domyślnie wartość pusta, oznaczająca brak przekodowania. Zagadnienie dotyczące przekodowania polskich liter omówione jest szczegółowo dalej.
@INPUTCODE tekst wejściowy dla algorytmu przekodowania polskich liter. Inicjalizowany zgodnie z parametrem @CODEPAGE.
@OUTPUTCODE tekst wyjściowy dla algorytmu przekodowania polskich liter. Inicjalizowany zgodnie z parametrem @CODEPAGE.
@PRINTERTYPE typ drukarki. Aktualnie dostępne wartości to EPSON i PCL. Powodują ustalenie kodów sterujących dla drukarki (w szczególności tryby zagęszczone i pogrubione)
@FONT_NARROW kod przełączenia drukarki w tryb czcionki zagęszczonej. Inicjalizowany zgodnie z ustawieniem parametru @PRINTERTYPE
@FONT_NARROW_ kod końca tryby czcionki zagęszczonej. Inicjalizowany zgodnie z ustawieniem parametru @PRINTERTYPE
@FONT_BOLD kod przełączenia drukarki w tryb czcionki pogrubionej. Inicjalizowany zgodnie z ustawieniem parametru @PRINTERTYPE
@FONT_BOLD_ kod końca trybu czcionki pogrubionej. Inicjalizowany zgodnie z ustawieniem parametru @PRINTERTYPE
@CR znak cofnięcia karetki do początku strony (domyślnie znak o kodzie 13)
@LF znak przejścia do nowej linii (domyślnie znak o kodzie 10)
@FF znak końca strony (domyślnie znak o kodzie 12)
@BS znak cofnięcia karetki o jeden znak (domyślnie znak o kodzie 8)
@PAGENO numer strony
@PAGETOT łączna liczba stron wydruku
@LINENO numer linii na stronie
@PAGELENGTH liczba wierszy na stronie (domyślnie 60)
LINE | L
FIELD | F
name Jeżeli atrybut nazwa jest ustawiony, to pole jest traktowane tak jak parametr, tzn. wartość aktualnie drukowanego pola jest zapamiętywana jako zmienna
type Typ pola. Dopuszczalne wartości to text i number (domyślnie text). Od ustawienia typu pola zależy jego formatowanie, wyrównywanie itp.
value Wartość pola. Może być podana jako wartość (jeżeli calc=”false”) lub jako wyrażenie (jeżeli calc=”true”)
align Sposób wyrównania pól. Dopuszczalne wartości to left, right i center (domyślnie: brak wyrównania dla tekstu i wyrównanie do prawej dla liczb)
width Szerokość pola.
prec Dla pól typu number oznacza liczbę miejsc po przecinku.
calc Określa, czy value zawiera wartość (calc=”false”) czy wyrażenie (calc=”true”)
fill Znak dopełniający pole do pełnej szerokości podanej w width. Domyślnie spacja.
hide Jeżeli hide=”true” to pole jest ukrywane
hidezero Jeżeli hidezero=”true” to dla pól typu number ukrywane są nieznaczące miejsca po przecinku (w ich miejsce pojawia się spacja)
blankzero Jeżeli blankzero=”true” to pola typu number o wartości 0 są ukrywane.
<FIELD value=”napis na stronie” hide=”@@PAGENO!=@@PAGETOT” />
</LINE>Parametry systemowe a typ drukarki
Ustawienie typu drukarki
Ustawienie standardu polskich liter
Przykład definicji wydruku
Projektowanie wydruku
Sekcja SQL
Sekcja XSL
RAPORT
RPT_HEADER
PG_HEADER
DETAIL
RPT_FOOTER
PG_FOOTER
Sekcja FILE
Sekcja RUN
Wymagania systemowe
Drukowanie tekstowe w usługach terminalowych