Wydruki/XML/Przyklad2

Wydruki XML - przykład 2

Kolejny przykład pokaże jak wygenerować raport, który zostanie zaprezentowany w przeglądarce www. Jak już widzieliśmy w poprzednim przykładzie można definiować kilka zapytań dla takiego raportu, może on się składać z kilku elementów. Na potrzeby tej lekcji wyciągniemy sobie przykładowe dane z tabeli dokumentów. Raport prezentuje możliwość wykorzystania kilku technik:

  • generowanie strony w formacie html
  • korzystanie z parametrów dynamicznych - pobieranych w czasie tworzenia wydruku
  • korzystanie z parametrów zdefiniowanych w CDN XL (np. pieczątka firmy)
  • formatowanie wyglądu raportu w celu prezentacji na ekranie
  • formatowanie wyglądu raportu w celu wydruku (tutaj zasymulujemy wygląd znany w CDN XL z raportów CrystalReports)

parametry

Zaczynamy od definicji parametrów zapytania

@PAR ?@D17|DataOd|&Od:{Today()}@? PAR@
@PAR ?@D17|DataDo|&Do:{Today()}@? @COND(??DataDo >= ??DataOd) @CONDMSG(nie wcześniejsza niż data Od) PAR@
@PAR ?@N-1|Sortuj|&Sortowana Kolumna:1@? PAR@

sql

Następnie definiujemy 2 zapytania sql:

  • pierwsze z nich, pobiera listę dokumentów (zielonych) w buforze
  • drugie przekształca parametry przekazane do wydruku z systemu
SELECT
        case trn_gidtyp 
        when 2033 then 'FS'
        when 2049 then 'PA'
        end as dok,
        TrN_TrNSeria as seria, 
        TrN_TrNNumer as numer, 
        Ope_Ident as operator, 
        trn_nettor as netto,
        convert( char(10), DATEADD(day,Trn_Data2,CONVERT(DATETIME,'1800-12-28  00:00:00.000',121)), 121 ) AS datawys,
        convert( char(10), DATEADD(day,Trn_Data3,CONVERT(DATETIME,'1800-12-28  00:00:00.000',121)), 121 ) AS dataope,
        Knt_Akronim as akronim
FROM 
        (CDN.TraNag INNER JOIN CDN.OpeKarty ON TrN_OpeNumerW = Ope_GIDNumer) 
        INNER JOIN 
        CDN.KntKarty ON 
        TrN_KntNumer = Knt_GIDNumer
where 
        (trn_stan=1 or trn_stan=2) and 
        (trn_gidtyp=2033 or trn_gidtyp=2049) and 
        Trn_data2 >= ??DataOd and Trn_data2 <= ??DataDo
order by ??Sortuj

select 
convert(char(10),dateadd(day,??DataOd,convert(datetime,'1800-12-28',121)),121) as DataPoczatkowa,
convert(char(10),dateadd(day,??DataDo,convert(datetime,'1800-12-28',121)),121) as DataKoncowa,
??Sortuj as SortowanaKolumna

szablon xsl

Następnie tworzymy szablon przekształcenia XSL, tym razem generujemy kod html. Tutaj pokażę tylko fragment, cała definicja XPT znajduje się w załączniku do artykułu.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
<xsl:output method="html" version="1.0" encoding="windows-1250" indent="yes" />
<xsl:template match="ROOT">
<html>
 <head>
  <meta><xsl:attribute name="http-equiv">Content-Type</xsl:attribute><xsl:attribute name="content">text/html; charset=windows-1250</xsl:attribute></meta>
 </head>
 <body>
  <div><xsl:attribute name="id">naglowek</xsl:attribute>
   <div><xsl:attribute name="id">pieczatka</xsl:attribute>
    <p>?@H100_N|CDN_Firma1:''@?</p>
    <p>?@H100_N|CDN_Firma2:''@?</p>
    <p>?@H100_N|CDN_Firma3:''@?</p>
    <p>?@H100_N|CDN_FMiasto:''@?</p>
    <p>?@H100_N|CDN_FUlica:''@?</p>
    <p>?@H100_N|CDN_FNip:''@?</p>
   </div>
   <div><xsl:attribute name="id">metka</xsl:attribute>
    <h3><xsl:attribute name="id">gora</xsl:attribute>Faktury w buforze</h3>
    <xsl:apply-templates select="RECORDSET2/RECORD"/>
    <h3><xsl:attribute name="id">dol</xsl:attribute>Operator: ?@H100_N|CDN_Operator:''@?</h3>
   </div>
...

wykonanie

Po uruchomieniu tak przygotowanego wydruku, program poprosi o wypełnienie danych, czyli podanie zakresu dat z jakich mają być prezentowane dokumenty, a także numer sortowanej kolumny.

zapytanie o parametry

Zaś po ustaleniu parametrów i wygenerowaniu pliku uzyskamy następujący wynik:

Raport bez formatowania

formatowanie wyglądu

Jak widać, prosta strona HTML nie jest jeszcze tym, co "tygryski" lubią najbardziej :). Dlatego w definicji przekształcenia HTML dodajemy dwie linijki, podłączające akrusze stylów css, w których to możemy dowolnie zmieniać wygląd raportu.

<link><xsl:attribute name="href">http://cdn.3lance.pl/astyl_xpt.css</xsl:attribute><xsl:attribute name="REL">StyleSheet</xsl:attribute><xsl:attribute name="media">screen</xsl:attribute></link>
<link><xsl:attribute name="href">http://cdn.3lance.pl/astyl_crystal.css</xsl:attribute><xsl:attribute name="REL">StyleSheet</xsl:attribute><xsl:attribute name="media">print</xsl:attribute></link>

powyższe arkusze są linkowane z serwera forum, nic nie stoi na przeszkodzie by sobie je ściągnąć, zmodyfikować i załączać z lokalnego dysku.

Wygląd raportu na ekranie

Drugi arkusz stylu css, służy do tego by raport dedykować do wydruku (należy włączyć podgląd wydruku, lub wydrukować wygenerowany raport, aby uzyskał taką formę):

Wygląd podglądu wydruku

No i to w zasadzie wszystko w ramach tej lekcji, kolejne elementy o jakie można rozszerzyć taki raport, to zbudowanie go z kilku sekcji pokazujących np. 10 najlepszych transakcji, poniżej 10 najgorszych, listę nowo wprowadzonych produktów, czy takich, które wyszły z produkcji. Wszystko na jednej stronie ... czyli tzw. One Page Solution :) Zalecam też wykorzystanie funkcji <xls: ... > do formatowania warunkowego i podsumowywania wyników.

Attachments