Kasutaja tarvikud

Lehe tööriistad


Külgriba

www.directo.ee

et:yld_print_form

Väljatrükkide häälestamine

Directo väljatrükk on oma olemuselt HTML kujundus, mille kirjeldamise toimub XSL Stylesheet-i abil. Väljatrükkides võtakse andmed XML-ist (igale dokumendile ja aruandele on oma XML kogum).

Häälestamine

  • ÜLDINE > Väljatrükkide häälestamine
    või
  • ÜLDINE > Üldised seadistused > Väljtrükkide häälestamine

Parameetrid XSLis

Väljatrükis saab kasutada järgnevaid võtmesõnu, kui on vaja muuta vaikimisi seadistusi:

  • <!--mailfrom:saatja_mailiaadress -->
  • <!--mailname:saatja_nimi-->
  • <!--mailto:kellele saadetakse -->
  • <!--mailnopdf:1 -->pdfi asemelt tehakse html
  • <!--mailnoattachment: -->pdfi manust ei lisata üldse, ainult enda kirjutatud tekst
  • PDF parameetrid
    Väljund landscape:
    <!--pdfparams:BrowserWidth=1000,isLandscape=1,version=1,HeaderHeight=60,FooterHeight=60--> debug_pdf=1 - näha visuaalselt päise ja jaluse tsoon
    Engine=1 - Gecko renderer (IE asemel)
    FontEmbed=1 - lisab PDFi fondid kaasa (lisada saab serverile installitud fontide seast)
    InsetX=10,InsetY=10 - X ja Y koordinaadid joonistamise alguseks
    BrowserWidth=800 võimaldab määrata nö Zoom astet, ehk kui suur vaade välja näeb (vaikimisi 800).
  • <!--output-excel -->lisab exceli headeri - fail avatakse exceliga
  • <!--clear-output -->väljundiks on ainult puhas XSL-i transformatsioon (ilma Directo päiseta)
  • Meili saates luuakse sündmus, soovikorral saab muuta loodud sündmuse parameetreid vastavate XSL parameetritega <!--ev_type:xxx --> <!--ev_status:xxx --> <!--ev_status:xxx --> <!--ev_object:xxx --> <!--ev_start:xxx --> <!--ev_end:xxx -->
  • <!--output-pdf--> väljatrükk avaneb alati PDFina (aruannete puhul faili nime määramiseks tasub ka mailattachment parameeter määrata - vt järgmine punkt)
  • <!--mailattachment:attachmendi/faili_nimi -->saab kasutada tagi {nr} ning parameetreid {param:parami_nimi}
  • <!--mailsubject:uus_subjekt -->saab kasutada tagi {nr} ning parameetreid {param:parami_nimi}
  • <!--output-file:failinimi.txt -->väljund faili

Parameetrite mailsubject, mailattachment, output-file, mailfrom, mailto ja mailname puhul saab kasutada:

  • lisaparameetreid {param:parami_nimi} :!: nimena on kasutuses: aeg1, aeg2, projekt, objekt, keel, klient_kood, ladu, tingimus, nimi võib dokumenditi veidi erineda (klient_kood vs kl_kood), vastavalt nagu ta XMLis defineeritud on
  • dokumendi numbrit {nr} ning kuupäeva kuu aasta päev vastavalt {mm} {yy} {dd}
  • mingit andmevälja XMList {param:xml:/documents/kontakt/klass}

XSLi parameetri kasutuse näited

  • <!--mailsubject:ToreAruanne alates {param:aeg1} kuni {param:aeg2} -->
  • <!--mailsubject: pakkumiskutse {nr} Objektile: {param:objekt} -->
  • <!--mailattachment: minuManus_number_{nr}_klassile{param:xml:/documents/kontakt/klass} -->

Vihje: et testida, võib panna Kasutaja kaardilt peale „Maili redigeerimine: Jah“, siis avatakse meili aken juba valmis ehitatud subjektiga (et näha kas kõik parameetrid toimisid)

Ribakood pildina

Ribakoodi saab luua pildina, selleks tuleb luua img element ning selle src väärtuseks sisestada ribakoodi generaatori aadress konkreetsete parameetritega. Näide annab parameetrina kaasa XMList välja artikkel

<img><xsl:attribute name="src">/logos/qr.asp?t=<xsl:value-of select="artikkel"/>&amp;code=C128&amp;h=30</xsl:attribute></img>

Võimalikud parameetrid:

  • t - sisend, millest ribakood luuakse (olenevalt standardist võib selleks vabalt olla ka tekst)
  • h - kõrgus pixelites
  • code - soovitud ribakoodi standard (vastavalt järgnevale tabelile)
Standardcode parameetri väärtus
QR Codeqr
CODE 39C39
CODE 39 CHECKSUMC39c
CODE 39EC39E
CODE 39E CHECKSUMC39Ec
CODE 93C93
STANDARD 2 5S25
STANDARD 2 5 CHECKSUMS25c
INTERLEAVED 2 5I25
INTERLEAVED 2 5 CHECKSUMI25c
CODE 128C128
CODE 128 AC128A
CODE 128 BC128B
CODE 128 CC128C
EAN 2EAN2
EAN 5EAN5
EAN 8EAN8
EAN 13EAN13
UPC AUPCA
UPC EUPCE
MSIMSI
MSI CHECKSUMMSIc
POSTNETPOSTNET
PLANETPLANET
RMS4CCRMS4CC
KIXKIX
IMBIMB
CODABARCODABAR
CODE 11CODE11
PHARMA CODEPHARMA
PHARMA CODE TWO TRACKSPHARMA2T
AusPost 4 State Customer Codeauspost
Aztec Codeazteccode
Compact Aztec Codeazteccodecompact
Aztec Runesaztecrune
BC412bc412
Channel Codechannelcode
Codablock Fcodablockf
Code 11code11
Code 128code128
Code 16Kcode16k
Code 25code2of5
Italian Pharmacodecode32
Code 39code39
Code 39 Extendedcode39ext
Code 49code49
Code 93code93
Code 93 Extendedcode93ext
Code Onecodeone
COOP 2 of 5coop2of5
Custom 4 state symbologydaft
GS1 DataBar Expandeddatabarexpanded
GS1 DataBar Expanded Compositedatabarexpandedcomposite
GS1 DataBar Expanded Stackeddatabarexpandedstacked
GS1 DataBar Expanded Stacked Compositedatabarexpandedstackedcomposite
GS1 DataBar Limiteddatabarlimited
GS1 DataBar Limited Compositedatabarlimitedcomposite
GS1 DataBar Omnidirectionaldatabaromni
GS1 DataBar Omnidirectional Compositedatabaromnicomposite
GS1 DataBar Stackeddatabarstacked
GS1 DataBar Stacked Compositedatabarstackedcomposite
GS1 DataBar Stacked Omnidirectionaldatabarstackedomni
GS1 DataBar Stacked Omnidirectional Compositedatabarstackedomnicomposite
GS1 DataBar Truncateddatabartruncated
GS1 DataBar Truncated Compositedatabartruncatedcomposite
Datalogic 2 of 5datalogic2of5
Data Matrixdatamatrix
Data Matrix Rectangulardatamatrixrectangular
DotCodedotcode
EAN-13ean13
EAN-13 Compositeean13composite
GS1-14ean14
EAN-2 (2 digit addon)ean2
EAN-5 (5 digit addon)ean5
EAN-8ean8
EAN-8 Compositeean8composite
Flattermarkenflattermarken
GS1-128gs1-128
GS1-128 Compositegs1-128composite
GS1 Composite 2D Componentgs1-cc
GS1 Data Matrixgs1datamatrix
GS1 Data Matrix Rectangulargs1datamatrixrectangular
GS1 North American Coupongs1northamericancoupon
GS1 QR Codegs1qrcode
Han Xin Codehanxin
HIBC Aztec Codehibcazteccode
HIBC Codablock Fhibccodablockf
HIBC Code 128hibccode128
HIBC Code 39hibccode39
HIBC Data Matrixhibcdatamatrix
HIBC Data Matrix Rectangularhibcdatamatrixrectangular
HIBC MicroPDF417hibcmicropdf417
HIBC PDF417hibcpdf417
HIBC QR Codehibcqrcode
IATA 2 of 5iata2of5
Deutsche Post Identcodeidentcode
Industrial 2 of 5industrial2of5
Interleaved 2 of 5 (ITF)interleaved2of5
ISBNisbn
ISMNismn
ISSNissn
ITF-14itf14
Japan Post 4 State Customer Codejapanpost
Royal Dutch TPG Post KIXkix
Deutsche Post Leitcodeleitcode
Matrix 2 of 5matrix2of5
MaxiCodemaxicode
MicroPDF417micropdf417
Micro QR Codemicroqrcode
MSI Modified Plesseymsi
USPS Intelligent Mailonecode
PDF417pdf417
Compact PDF417pdf417compact
Pharmaceutical Binary Codepharmacode
Two-track Pharmacodepharmacode2
USPS PLANETplanet
Plessey UKplessey
PosiCodeposicode
USPS POSTNETpostnet
Pharmazentralnummer (PZN)pzn
QR Codeqrcode
CodabarrationalizedCodabar
Custom 1D symbologyraw
Royal Mail 4 State Customer Coderoyalmail
SSCC-18sscc18
Miscellaneous symbolssymbol
Telepentelepen
Telepen Numerictelepennumeric
Ultracodeultracode
UPC-Aupca
UPC-A Compositeupcacomposite
UPC-Eupce
UPC-E Compositeupcecomposite

Code128 ribakoodi kasutamine skriptiga

Code 128 standardile vastavat ribakoodi saab väljatrükis kasutada ilma väliste fontide olemasoluta. Lahendusena on pakkuda väljatrükk, kus ribakoodi tarbeks genereeritakse pilt html-is

Tähelepanu tuleks pöörata järgnevale:

Scripti kasutamine XSLis

<xsl:stylesheet> lehe deklareerimisel, peavad olema defineeritud ka järgnevad script atribuudid:

  • xmlns:script = "http://topxml.com/forum/script"
  • xmlns:x="ignore" exclude-result-prefixes="script"
<xsl:stylesheet version="1.0"  xmlns:str="http://xsltsl.org/string" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="str" xmlns:script = "http://topxml.com/forum/script"	xmlns:x="ignore" exclude-result-prefixes="script">
  <xsl:output method="html"/>
  <xsl:decimal-format name="ocra" decimal-separator='.' grouping-separator=' ' />
 
 <msxsl:script language="JScript" implements-prefix="script">
<![CDATA[ 
]]>
  </msxsl:script>
 
</xsl:stylesheet>

Ribakoodi funktsioon

Kõik <msxsl:script> blokis tuleks ka oma kujundusse kopeerida (siin asub funktsioon, mille abil tehakse ribakoodi pilt)

Funktsiooni väljakutse

  • Ribakoodi kuvamiseks kutsutakse välja eelpool mainitud funktsioon
    <xsl:value-of disable-output-escaping="yes" select="string(script:code128(string(artikkel)))"/>
  • Võib juhtuda, et mõningate sümbolite korrektsena kuvamiseks tuleb ribakoodilugejat seadistada õiget tüüpi klaviatuuri emuleerima (testitud käpaga õnnestus kood lugeda, kui klaviatuuri tüübiks oli määratud SWE/FIN)

Näidis

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:fo="http://www.w3.org/1999/XSL/Format"
	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
	xmlns:script = "http://topxml.com/forum/script"
	xmlns:x="ignore" exclude-result-prefixes="script">
   <xsl:output method="html"/>
   <xsl:decimal-format name="ocra" decimal-separator='.' grouping-separator=' ' />
   <xsl:template match="/">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
	<html>
	<style>
                .bcdiv {float:left;height: 30px; /*size*/}
		.bar1 { border-left:1px solid black; }
		.bar2 { border-left:2px solid black; }
		.bar3 { border-left:3px solid black; }
		.bar4 { border-left:4px solid black; }
		.space0 { margin-right:0 }
		.space1 { margin-right:1px }
		.space2 { margin-right:2px }
		.space3 { margin-right:3px }
		.space4 { margin-right:4px }r
		label {clear:both;display:block;text-align:center; font: 0.125in/100% helvetica;}
	</style>
	<body>
		<table>
		<xsl:for-each select="/documents/document/rows/row">
			<tr>
				<td><xsl:value-of select="artikkel"/></td>
				<td><xsl:value-of disable-output-escaping="yes" select="string(script:code128(string(artikkel)))"/></td>
			</tr>
		</xsl:for-each>
		</table>
	</body>
	</html>
</xsl:template>
 
<msxsl:script language="JScript" implements-prefix="script"><![CDATA[
var BARS       = [212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,221312,231212,112232,122132,122231,113222,123122,123221,223211,221132,221231,213212,223112,312131,311222,321122,321221,312212,322112,322211,212123,212321,232121,111323,131123,131321,112313,132113,132311,211313,231113,231311,112133,112331,132131,113123,113321,133121,313121,211331,231131,213113,213311,213131,311123,311321,331121,312113,312311,332111,314111,221411,431111,111224,111422,121124,121421,141122,141221,112214,112412,122114,122411,142112,142211,241211,221114,413111,241112,134111,111242,121142,121241,114212,124112,124211,411212,421112,421211,212141,214121,412121,111143,111341,131141,114113,114311,411113,411311,113141,114131,311141,411131,211412,211214,211232,23311120]
    , START_BASE = 38
    , STOP       = 106 //BARS[STOP]==23311120 (manually added a zero at the end)
    ;
 
  function code128(code, barcodeType) {
    if (arguments.length<2) barcodeType = code128Detect(code);
    if (barcodeType=='C' && code.length%2==1) code = '0'+code; 
    var a = parseBarcode(code,  barcodeType);
    return bar2html(a.join('')) + '<label>' + code + '</label>'; 
  }
 
  function bar2html(s) {
    for(var pos=0, sb=[]; pos<s.length; pos+=2) {
      sb.push('<div class="bcdiv bar' + s.charAt(pos) + ' space' + s.charAt(pos+1) + '"></div>');
    }
    return sb.join('');
  }
 
  function code128Detect(code) {
    if (/^[0-9]+$/.test(code)) return 'C';
    if (/[a-z]/.test(code)) return 'B';
    return 'A';
  }
 
  function parseBarcode(barcode, barcodeType) {
    var bars = [];
    bars.add = function(nr) {
      var nrCode = BARS[nr];
      this.check = this.length==0 ? nr : this.check + nr*this.length;
      this.push( nrCode || ("UNDEFINED: "+nr+"->"+nrCode) );
    };
    bars.add(START_BASE + barcodeType.charCodeAt(0));
    for(var i=0; i<barcode.length; i++) {
      var code = barcodeType=='C' ? +barcode.substr(i++, 2) : barcode.charCodeAt(i);
      converted = fromType[barcodeType](code);
      if (isNaN(converted) || converted<0 || converted>106) throw new Error("Unrecognized character ("+code+") at position "+i+" in code '"+barcode+"'.");
      bars.add( converted );
    }
    bars.push(BARS[bars.check % 103], BARS[STOP]);
    return bars;
  }
  var fromType = {
    A: function(charCode) {
      if (charCode>=0 && charCode<32) return charCode+64;
      if (charCode>=32 && charCode<96) return charCode-32;
      return charCode;
    },
    B: function(charCode) {
      if (charCode>=32 && charCode<128) return charCode-32;
      return charCode;
    },
    C: function(charCode) {
      return charCode;
    }
  }
 
]]></msxsl:script>
 
</xsl:stylesheet>

Lingi kasutamine

<a target="_blank">
    <xsl:attribute name="href">
       <xsl:value-of disable-output-escaping = "yes" select="artikkel_andmed/url"/>
    </xsl:attribute>
    <xsl:value-of disable-output-escaping = "yes" select="keelne_seletus"/>
</a>

* Antud näites artikli pealkirjale vajutades suunatakse lingile, mis on seadistatud artiklikaardi väljale URL. Väline link peab olema kujul

http://www.directo.ee

Signeerimise tugi

Signeerimine väljatrüki kontekstis tähendab seda, et dokumendile kuvatakse nupp Signeeri. Tavaliselt on see kasutuses olukorras, kus on vaja kliendilt küsida allkirja, näiteks mingi akti allkirjastamine kliendi juuresolekul . Selleks luuaks spetsiaalne väljatrükk signeerimiseks, Signeeri nupu vajutus dokumendil avab selle ning väljatrükil kuvatakse ala allkirjastamisesk, mida saab siis kas arvutist hiirega või tahvlist näpuga „sodides“ allkirjastada. Peale Valmis nupu vajutamist salvestub väljatrükk koos joonistatud allkirjaga väljatrükis ettenähtud kohta selle sama dokumendi külge PDF manuseks.

Dokumendid, mis toetavad signeerimist:

  • Pakkumine
  • Tellimus
  • Lähetus
  • Arve
  • Sündmus
  • Klient
  • Leping
  • Liikumine

Signeerimise väljatrüki lisamiseks tuleb väljatrüki definitsioonile määrata tulbast Signeeri signeerimise ala laius :

XSL-is tuleb allkirja koht määrata järgmiselt:

<img sign="signhere" width="600" border="0"  />

:?: võimalus on signeerimist kasutada ka lihtsalt nö manusena PDFi salvestajana. Sellisel juhul signeerimist ei toimu, lihtsalt signeerimise väljatrükk salvestatakse PDFina dokumendi manuseks. Selle saavutamiseks tuleks lisada XSLi ülal mainitud IMG tag veidi teisiti:

<img sign="signhere" emulator="1" width="1" border="0"   />

Nipid

0 (mitte NaN), kui pole andmeid

  • Päisesse numbri formaat paika
    <xsl:decimal-format name="N" NaN="0" decimal-separator='.' grouping-separator=' ' />
  • Kasutamine
    <xsl:value-of select="format-number(mingi_vali, '0.00', 'N')"/>

Mingi bloki X korda joonistamine

  • Luua eraldi template, kus on väljund, mida joonistatakse
    <xsl:template name="kast">
        <xsl:param name="count"/>
    
        <xsl:choose>
          <xsl:when test="$count &lt;= 0"/>
    
          <xsl:otherwise>
            <!-- Sisu mida tahame X korda kuvada-->
            <table border="1">
              <tr>
                <td>Mingi sisu</td>
              </tr>
            </table>
            
    
            <xsl:call-template name="kast">
              <xsl:with-param name="count" select="$count - 1"/>
            </xsl:call-template>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
  • Kutsume joonistaja välja nii palju kui vaja
    <xsl:call-template name="kast">
              <xsl:with-param name="count" select="2"/>
            </xsl:call-template>

Node-set XML muutuja, sealt unikaalsete kirjete kuvamine

  • stylesheet päises peab olema atribuut xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  • XML struktuuriga muutuja andmed loomine mingi olemasoleva XMLi põhjal
    <xsl:variable name="andmed" xmlns="">
    	<xsl:for-each select="/document/rows/row">
    		<rida>
    			<artikkel><xsl:value-of select="artikkel"/></artikkel>
    			<nimi><xsl:value-of select="nimi"/></nimi>
    		</rida>
    	</xsl:for-each>
    </xsl:variable>

:!: xmlns="" on vajalik Excel-i XML Spreadsheet 2003 formaadis väljundi jaoks (muidu pole võimalik loodud XMList näiteks sum() teha).

  • Ülal loodud muutuja andmete kuvamine
  • tänu filtrile [not(artikkel = preceding-sibling::rida/artikkel)] kuvatakse ainult unikaalsed artiklikoodid
    <table>
    	<xsl:for-each select="msxsl:node-set($andmed)/rida[not(artikkel = preceding-sibling::rida/artikkel)]">
    		<xsl:sort select="artikkel" data-type="text" order="ascending"/>
     
    		<tr>
    			<td>Artikkel:  <xsl:value-of select="artikkel"/></td>
    			<td>Nimi:  <xsl:value-of select="nimi"/></td>
    		</tr>
    	</xsl:for-each>
    </table>

dateAdd - kuupäevale mingi päevade arvu lisamine

  • XSL- päises peab olema skripti deklaratsioon
  • dateaAdd funktsioon
    function dateadd(time, paevi)
    {      
     
           var d, time, time_spl,aaa, a;
           time_spl=time.split(' ');
           a = time_spl[0].split('.');
           aaa = new Date(a[2], a[1]-1, Number(a[0])+Number(paevi)); 
           d=String(((aaa.getDate()<9)?'0':'' )+aaa.getDate())+'.'+((aaa.getMonth()<9)?'0':'') + String(aaa.getMonth()+1)+'.'+String(aaa.getFullYear());
           return(d);
    }
  • Funktsiooni kutsumine
              <xsl:for-each select="/documents/document/rows/row">
                <xsl:variable name="paevi" select="artikkel_andmed/garantii"/>
                  <tr>
     
                    <td height="10" valign="top">
                      <xsl:value-of select="ribakood"/>
                    </td>
                      <td> <xsl:value-of select="artikkel_lisavaljad/lisa[@kood='REALT']"/>&#160;<xsl:value-of select="string(script:dateadd(string(../../lahetusaeg), string($paevi)))"/>                  
                      </td>
                    </td>
                  </tr>

dateDiff - kuupäevade vahemiku päevade arvu arvutamine

  • XSL- päises peab olema skripti deklaratsioon
  • dateDiff funktsioon (NB! tegemist on VbScript-iga)
    <msxsl:script language="VbScript" implements-prefix="script">
        <![CDATA[
    function ddiff(m,d1,d2)
        ddiff = DateDiff(m,d1,d2)
    end function
    ]]>
      </msxsl:script>
  • Funktsiooni kutsumine
     <xsl:value-of select="script:ddiff('d',string(aeg1),string(aeg2))"/>
  • Funktsiooni kutsumine juhul, kui vaja, et arvestaks ka algkuupäeva
     <xsl:value-of select="script:ddiff('d',string(r_aeg1),string(r_aeg2)) + 1"/>

Textarea sisu (rea vahedega, näiteks sündmuse kirjeldus) kuvamine ka väljatrükis reavahedega

Kuna reavahetuse ei kajastu HTML-is siis kasutame <pre> tagi.

  • tähtis on, et oleks määratud ka konteineri laius, ehk siis see, mille sees soovitud algne sisu asub, peaks omama width definitsiooni, selle näite puhul on see <td>
  • <pre> puhul on vaikimisi kasutusel ka teine stiil, seega tuleks fondid jms määrata ka <pre> tagile
  <td valign="top" style="width:700px" >
      <pre style="white-space: pre-wrap; word-wrap: break-word;">
          <xsl:value-of select="/documents/document/sisu"/>
       </pre>
  </td>

Summeerimine

Univeraalne summeerimise funktsioon, parameetrid:

  1. sisend number mida lisatakse
  2. grupp (suvaline konteksti kirjeldav string, kui üks summimine siis võib olla näiteks summ)
  3. väljund
    • 0 - sisend number
    • 1 - grupi summa
    • 2 - tühjus

Väljund on string tüüpi, seega kui on vaja tulemusega arvutada, tuleb see numbriks konvertida enne. 1 ja 2 nullivad ka hetkel grupi.

<xsl:stylesheet version="1.0"  xmlns:str="http://xsltsl.org/string" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="str" xmlns:script = "http://topxml.com/forum/script"	xmlns:x="ignore" exclude-result-prefixes="script">
  <xsl:output method="html"/>
  <xsl:decimal-format name="ocra" decimal-separator='.' grouping-separator=' ' />
 
 
<xsl:for-each select="/documents/document/rows/row[rv=rn]">
 
  <xsl:choose>
	<xsl:when test ="artikkel='VAHESUMMA'">
		<xsl:value-of select="string(script:summer(0,'summ', 1))"/><!-- siin kuvatakse grupi summa-->
	</xsl:when>
	<xsl:otherwise>
		<xsl:if test="kogus!='' and kogus!=0">
			<xsl:value-of select="format-number( string(script:summer( number(rv_summa),'summ', 0)) , '### ##0.00', 'ocra')"/> <!-- siin lisatakse grupile mingi väärtus-->
		</xsl:if>
	</xsl:otherwise>
  </xsl:choose>
 
</xsl:for-each> 
 
 <msxsl:script language="JScript" implements-prefix="script">
<![CDATA[ 
 
	var sums = [];
 
	function summer( v, grp, ret ){
		var rt = ''; 
		if( !sums[grp] ){
			sums[grp] = 0;
		}
		sums[grp]+=Number(v);
 
		if( ret == 0 )
			rt = ''+v;
		if( ret == 1 )
			rt = ''+Number(sums[grp]);
		if( ret == 1 || ret == 2 )
			sums[grp] = 0;
		return rt
	}
 
]]>
  </msxsl:script>
 
</xsl:stylesheet>

Palgateatisele puhkusejäägi kuvamine

<xsl:variable name="pjaak1" select="substring-before(substring-after(pjaak, ';'), ';')"/>
<xsl:variable name="pjaak2" select="substring-before(substring-after(substring-after(pjaak, ';'), ';'), ';')"/>
<xsl:variable name="pjaak3" select="substring-before(substring-after(substring-after(substring-after(pjaak, ';'), ';'), ';'), ';')"/>
<xsl:variable name="pjaak4" select="substring-after(substring-after(substring-after(substring-after(pjaak, ';'), ';'), ';'), ';')"/>
 
<xsl:value-of select="format-number($pjaak2 - $pjaak3 - $pjaak1 - $pjaak4, '#####0')"/>
et/yld_print_form.txt · Viimati muutnud: 2019/10/28 16:28 persoon kristina