Sisujuht

FIXME Ta strona nie jest jeszcze kompletnie przetłumaczona. Pomoc mile widziana.
(po skompletowaniu usuń ten komentarz)

Väljatrükkide häälestamine

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

Häälestamine

Väljatrükkide häälestamiseks peab kasutajal olema õigus, mida saab määrata kasutaja/grupi õiguste MUU saki alt.

Seadistused> Üldised seadistused > Väljatrükkide häälestamine

Igal dokumendiliigil saab olla mitu erinevat väljatrükivormi. Kasutaja saab trükkides või meilides valida sobiva vormi, klõpsates Trüki või Meil nupu peal parema hiireklahviga. Juhul, kui kasutaja ise väljatrükki ei vali, teeb Directo seda automaatselt.

Automaatvaliku korral kasutatakse esimest väljatrükimalli, mis sobib kõikide kirjeldatud tingimustega, st seadistustes määratud keel, projekt, objekt vms kattuvad trükitaval dokumendil olevate väärtustega. Automaatvaliku järjekorra määramiseks muudetakse seadistustes välja Järjekord väärtust - väljatrükimallide valik käib selle numbri järgi kasvavas järjekorras.

:!: Alati peab seadistama vähemalt ühe väljatrükimalli, millel ei ole määratud ühtegi filtrit ja mis on järjekorras viimane (kõige suurema järjekorranumbriga). Niimoodi välditakse olukorda, kus ühtegi vormi valida ei õnnestu ja trükkimine ebaõnnestub.

Väljatrükimall, mille juures on märgitud tulba Nupp alt valik Trüki, Meil või Trüki+Meil, ilmub vastav toiming dokumendi päisesse eraldi nupuna. Nii saab kiiresti ja mugavalt kasutada erinevaid väljatrükimalle, ilma et peaks neid parema hiireklahvi abil valima.

Nupp „Kõik tühjaks“ kustutab väljatrükkide lisavalikud. Näiteks keele, projekti, seeria, objekti, lao jmt info

Väljatrükivormi kujundus asub nupu XSL all. Akna paremal ääres on ülevaade tervest koodist, mis aitab paremini navigeerida ning kiirelt erinevate sektsioonide peale hüpata või nende vahel liikuda. Kui sisestada koodi algus, pakub redigeerija vasteid ja abistab koodi lõpuleviimisega. Muudatused tuleb rakendumiseks salvestada.

Kõik salvestamised jäädvustatakse igal real lingi XSL alla, kust on võimalik avada varasem versioon. Samuti on võimalik näha koodide erinevusi nupu Erinevus viimasest või linkide Erinevus praegusest ja Erinevus järgmisega abil.

Parameetrid XSLis

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

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

XSLi parameetri kasutuse näited

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:

Standard code parameetri väärtus
QR Code qr
CODE 39 C39
CODE 39 CHECKSUM C39c
CODE 39E C39E
CODE 39E CHECKSUM C39Ec
CODE 93 C93
STANDARD 2 5 S25
STANDARD 2 5 CHECKSUM S25c
INTERLEAVED 2 5 I25
INTERLEAVED 2 5 CHECKSUM I25c
CODE 128 C128
CODE 128 A C128A
CODE 128 B C128B
CODE 128 C C128C
EAN 2 EAN2
EAN 5 EAN5
EAN 8 EAN8
EAN 13 EAN13
UPC A UPCA
UPC E UPCE
MSI MSI
MSI CHECKSUM MSIc
POSTNET POSTNET
PLANET PLANET
RMS4CC RMS4CC
KIX KIX
IMB IMB
CODABAR CODABAR
CODE 11 CODE11
PHARMA CODE PHARMA
PHARMA CODE TWO TRACKS PHARMA2T
AusPost 4 State Customer Code auspost
Aztec Code azteccode
Compact Aztec Code azteccodecompact
Aztec Runes aztecrune
BC412 bc412
Channel Code channelcode
Codablock F codablockf
Code 11 code11
Code 128 code128
Code 16K code16k
Code 25 code2of5
Italian Pharmacode code32
Code 39 code39
Code 39 Extended code39ext
Code 49 code49
Code 93 code93
Code 93 Extended code93ext
Code One codeone
COOP 2 of 5 coop2of5
Custom 4 state symbology daft
GS1 DataBar Expanded databarexpanded
GS1 DataBar Expanded Composite databarexpandedcomposite
GS1 DataBar Expanded Stacked databarexpandedstacked
GS1 DataBar Expanded Stacked Composite databarexpandedstackedcomposite
GS1 DataBar Limited databarlimited
GS1 DataBar Limited Composite databarlimitedcomposite
GS1 DataBar Omnidirectional databaromni
GS1 DataBar Omnidirectional Composite databaromnicomposite
GS1 DataBar Stacked databarstacked
GS1 DataBar Stacked Composite databarstackedcomposite
GS1 DataBar Stacked Omnidirectional databarstackedomni
GS1 DataBar Stacked Omnidirectional Composite databarstackedomnicomposite
GS1 DataBar Truncated databartruncated
GS1 DataBar Truncated Composite databartruncatedcomposite
Datalogic 2 of 5 datalogic2of5
Data Matrix datamatrix
Data Matrix Rectangular datamatrixrectangular
DotCode dotcode
EAN-13 ean13
EAN-13 Composite ean13composite
GS1-14 ean14
EAN-2 (2 digit addon) ean2
EAN-5 (5 digit addon) ean5
EAN-8 ean8
EAN-8 Composite ean8composite
Flattermarken flattermarken
GS1-128 gs1-128
GS1-128 Composite gs1-128composite
GS1 Composite 2D Component gs1-cc
GS1 Data Matrix gs1datamatrix
GS1 Data Matrix Rectangular gs1datamatrixrectangular
GS1 North American Coupon gs1northamericancoupon
GS1 QR Code gs1qrcode
Han Xin Code hanxin
HIBC Aztec Code hibcazteccode
HIBC Codablock F hibccodablockf
HIBC Code 128 hibccode128
HIBC Code 39 hibccode39
HIBC Data Matrix hibcdatamatrix
HIBC Data Matrix Rectangular hibcdatamatrixrectangular
HIBC MicroPDF417 hibcmicropdf417
HIBC PDF417 hibcpdf417
HIBC QR Code hibcqrcode
IATA 2 of 5 iata2of5
Deutsche Post Identcode identcode
Industrial 2 of 5 industrial2of5
Interleaved 2 of 5 (ITF) interleaved2of5
ISBN isbn
ISMN ismn
ISSN issn
ITF-14 itf14
Japan Post 4 State Customer Code japanpost
Royal Dutch TPG Post KIX kix
Deutsche Post Leitcode leitcode
Matrix 2 of 5 matrix2of5
MaxiCode maxicode
MicroPDF417 micropdf417
Micro QR Code microqrcode
MSI Modified Plessey msi
USPS Intelligent Mail onecode
PDF417 pdf417
Compact PDF417 pdf417compact
Pharmaceutical Binary Code pharmacode
Two-track Pharmacode pharmacode2
USPS PLANET planet
Plessey UK plessey
PosiCode posicode
USPS POSTNET postnet
Pharmazentralnummer (PZN) pzn
QR Code qrcode
Codabar rationalizedCodabar
Custom 1D symbology raw
Royal Mail 4 State Customer Code royalmail
SSCC-18 sscc18
Miscellaneous symbols symbol
Telepen telepen
Telepen Numeric telepennumeric
Ultracode ultracode
UPC-A upca
UPC-A Composite upcacomposite
UPC-E upce
UPC-E Composite upcecomposite

GS1 kood

GS1 standard võimaldab koodis edastada andmeid mitme erineva parameetri kohta. Näiteks seerianumber, parim enne jne. Konkreetne parameeter ehk nn.AI on standardis defineeritud. Koodi genereerimisel tuleks AI esitada sulgudes, näiteks ribakoodi seerianumbri ja parim enne jaoks oleks kood formaadis (01)ribakood(21)seerianr(15)YYMMDD

GS1-128 ribakoodina
qr.asp

GS1 QR koodina
qr.asp

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:

<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äljakutsumine

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>

Pilt tabeli taustaks

Pildi saab kasutada tabeli taustana, selleks tuleb määrata tabeli stiil järgnevalt:

<table style="background: url(/logos/files/pilt.png);background-size: 150px; background-position: 260px 10px;background-repeat:no-repeat;" border="0" cellpadding="0" cellspacing="0" valign="top">

Pdfparams parameeter Engine peab antud juhul olema 1.

<!--pdfparams:BrowserWidth=1000,isLandscape=1,version=1,HeaderHeight=60,FooterHeight=60,Engine=1-->

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:

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"  />

PDF manuseks

Kui dokumendile on loodud PDF väljatrükk, mida on vaja digiallkirjastada, saab sellest väljatrükist mugavalt ühe nupu vajutusega luua manuse. Selleks tuleb Seadistused > Väljatrükid alt leida õige dokument, soovitud väljatrüki real teha „Signeeri“ tulbas valik PDF manuseks ja salvestada.

Kui eelnev seadistus on tehtud, tekib dokumendile nupp „PDF manuseks“. Olukorras, kus seadistus on tehtud ühe dokumenti mitmele väljatrükile, on nuppudel lisaks ka väljatrüki nimetus.

Nupu vajutuse tagajärjel tekib väljatrükist dokumendi alla manus.

PDF manuseks loomise tugi on hetkel järgmistel dokumentidel:

EveryPay Linkpay

EveryPay Linkpay abil on võimalik arve väljatrükile luua unikaalne makselink.

Alustamine

LinkPay lahenduse kasutamiseks Directos võta ühendust endale sobivaima EveryPay partnerpangaga, milleks on kas LHV, SEB või Swedbank. Sind saab aidata sinu kliendihaldur või täida ise ära vastava panga taotlusvorm. Hinnainfo koos lepingu tingimustega saad otse pangalt. Loe, kuidas täpsemalt kasutada LinkPayd EveryPay portaalist.

Seadistamine

  1. EveryPay portaalis tuleb luua LINKPAY>Lingid alt link
  2. Lingi detailvaates on kuvatud Lingi token, mis tuleb kopeerida ning määrata Directo süsteemi seadistustes EveryPay LinkPay lingi token väärtuseks
  3. Lingi Muuda vaates tuleb Aktiivne tulbas valida aktiivseks ainult Arve number väli. Kui kasutusel on ka viitenumber ning EveryPay poolt on aktiveeritud Pangalingi maksed, tuleks valida ka Viitenumber.
  4. Määrata linnud tulbas URL MUUDETAV väljadele Tasumisele kuuluv summa (transaction_amount) ning Arve nr (invoice_number), Viitenumbri puhul ka Viitenumber (reference_number) :!: Kui URL MUUDETAV tulpa pole näha, pöörduda EveryPay kasutajatoe poole, et see lisada.
    :!: Viitenumber saadetakse, kui süsteemiseadistus Transpordi viitenumber on Arvelt või Kliendilt
    :?: Süsteemiseadistus EveryPay tasuda välja alus võimaldab määrata, milline summa saadetakse makselingile - arve saldo, kliendi saldo või arve tasuda summa
  5. EveryPay portaali SEADED>Üldised seaded alt kopeerida API parool Directo süsteemiseadistuse EveryPay LinkPay API parool väärtuseks
  6. Süsteemi seadistus EveryPay LinkPay URL on vaikimisi täidetud testkeskkonna aadressiga https://igw-demo.every-pay.com Pärast testimist tuleb see täita live teenuse aadressiga https://pay.every-pay.eu
  7. Link tekib nii arve kui ka tellimuse XMLi, kui väljatrüki definitsiooni aknasse Väljad alt on valitud EveryPay LinkPay link
    :?: See valik tekib automaatselt peale salvestamist, kui lisada everypay_link XMLi tag järgmises punktis toodud näite alusel. Analoogselt arvele edastatakse ka tellimuse puhul viitenumber
  8. Lingi võib lisada väljatrükile sobivasse kohta, loomise näide:
    <a><xsl:attribute name="href"><xsl:value-of select="/documents/document/everypay_link" disable-output-escaping = "yes"/></xsl:attribute>MAKSA SIIN</a>

:!: Makselingi kaasa minevat tasuda summat saab seadistada süsteemi seadistusega EveryPay LinkPay tasuda välja alus.

:!: Vajadusel saab mitme lingi olemasolul luua eraldi loogika, mis valib mis iganes kriteeriumi põhjal sobiva (eeldefineeritud) lingi, mida konkreetsele väljatrükile luuakse. Seadistamiseks kirjuta palun info@directo.ee

HMAC signatuuri loomine välisele lingile

Võimalus on luua signatuur arvest (või tellimusest) välisele osapoolele.

Näide

Arve nr: 201400285 Summa : 136.30

$secret = "85b97cd7a1"; # Directo süsteemiseadistustes salatunnus
$data = "sum=136&num=201400285"	#hashitav string NB! arve summas ainult täisosa
$hmac = hash_hmac("sha256", $data, $secret); # d62f1b4761cede20b37c189aab95a55fb60e8b4f8a98c4e74194a47622b7a07a

Nipid

0 (mitte NaN), kui pole andmeid

Mingi bloki X korda joonistamine

Node-set XML muutuja, sealt unikaalsete kirjete kuvamine

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

dateAdd - kuupäevale mingi päevade arvu lisamine

Splitter - Mingi tekstilise sisu laiali jagamine separaatori alusel

Parameetrid 1. String, 2. separaator (näiteks tühik ' '), 3. mitmes element tagastada (algab 0-iga, ehk siis esimene tagastatav element on 0)

dateDiff - kuupäevade vahemiku päevade arvu arvutamine

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.

  <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>

Page break

Et printeris/PDFis tekkiks uus leht:

    <div style="page-break-before: always;">

Summeerimine

Universaalne 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
    • 3 - grupi summa ilma summat tühjendamata
 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 || ret == 3 )
			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-before(substring-after(substring-after(substring-after(substring-after(pjaak, ';'), ';'), ';'), ';'), ';')"/>
 
<xsl:value-of select="format-number($pjaak2 - $pjaak3 - $pjaak1 - $pjaak4, '#####0')"/>