Narzędzia użytkownika

Narzędzia witryny



pl:yld_print_form

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
pl:yld_print_form [2025/04/14 12:33] – usunięto karolinapl:yld_print_form [2025/04/14 12:33] (aktualna) – utworzono karolina
Linia 1: Linia 1:
 +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. {{:et:triin20211110-142625.png}}
 +
 +''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
 +
 +{{:et:triin20210527-102013.png}}
 +
 +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. {{:et:triin20210527-111605.png}}
 +
 +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. {{:et:triin20210527-114606.png}}
 +
 +===== 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 \\ Parameetrid eraldatakse komaga. Näide: PDF luuakse landscape formaadis: \\ %%<!--%%pdfparams:BrowserWidth=1000,isLandscape=1,version=1,HeaderHeight=60,FooterHeight=60%%-->%% <WRAP>^ Parameeter ^ Selgitus ^
 +| **debug_pdf=1** | näha visuaalselt päise ja jaluse tsoon |
 +| **BrowserWidth=800** | Lehe laius joonistamisel pikslites (vaikimisi 800, landcape puhul 1000) |
 +| **isLandscape=1** | PDF luuakse lanscape formaadis (laius suurem kui kõrgus) |
 +| **version=1** | vajalik parameeter, et koordinaadid arvutataks lehe äärest äärde piksli pealt |
 +| **Engine=1** | Gecko renderer (IE asemel) NB! sellega ei toimi üle lehe "voolavad" layoudid |
 +| **HeaderHeight=60** | Päise kõrgus mm |
 +| **FooterHeight=60** | Jaluse kõrgus mm |
 +| **HeaderHeight1=60** | Esilehe päise kõrgus mm (kui see peab erinema ülejäänutest) |
 +| **FooterHeight1=60** | Esilehe jaluse kõrgus mm (kui see peab erinema ülejäänutest) |
 +| **FontEmbed=1** | lisab PDFi fondid kaasa (lisada saab serverile [[et:fntlist|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) |
 +| **ImageQuality=10** | pildifailide kompressioon 0 - 100  (0=pakitud, halb kvaliteet, 100=ilma pakkimata, kvaliteedikaota) |
 +| **MediaBox=A4** | lehe suurus (vaikimisi A4) |
 +| **Rect=0 0 210 297** | meedia "ruudu" dimensioonid mm, näide on A4 (0 0 = x ja y joonistamise alguspunkt lehe vasakul alanurgas; 210 - laius mm; 297 kõrgus mm) |
 +</WRAP>
 +  * %%<!--%%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, soovi korral saab muuta loodud sündmuse parameetreid vastavate XSL parameetritega %%<!--ev_type: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 
 +  * %%<!--%%charset:windows-xxx%% -->%%tavapäraselt on //output-file// puhul encodinguks windows-1257, seda juhul, kui xsl-is pole kusagil //charset=utf-8// (siis on encodinguks mõistagi UTF-8). Kui aga määrata charset parameeter eraldi, siis võetakse siin määratud encoding 
 +  * %%<!--%%mailbody:xxx%% -->%%massmeili puhul meili sisu tekst. Kui xxx on number, võetakse sisu antud numbriga tekstist, mis on kirjeldatud ''Üldised seadistused>Tekstid'' all
 +
 +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//
 +
 +<code ->
 +<img><xsl:attribute name="src">/logos/qr.asp?t=<xsl:value-of select="artikkel"/>&amp;code=C128&amp;h=30</xsl:attribute></img>
 +</code>
 +
 +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)
 +
 +^ 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.[[https://www.gs1.org/standards/barcodes/application-identifiers|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 \\  {{https://login.directo.ee/logos/qr.asp?t=(01)ribakood(21)seerianr(15)YYMMDD&code=gs1-128&.png}}
 +
 +GS1 QR koodina \\ {{https://login.directo.ee/logos/qr.asp?t=(01)ribakood(21)seerianr(15)YYMMDD&code=gs1qrcode&.png}}
 +
 +===== 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:
 +
 +  * <code ->
 +xmlns:script = "http://topxml.com/forum/script"
 +</code>
 +  * <code ->
 +xmlns:x="ignore" exclude-result-prefixes="script"
 +</code>
 +
 +<code xml>
 +<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>
 +</code>
 +
 +==== Ribakoodi funktsioon ====
 +
 +Kõik <msxsl:script> blokis tuleks ka oma kujundusse kopeerida (siin asub funktsioon, mille abil tehakse ribakoodi pilt)
 +
 +==== Funktsiooni väljakutsumine ====
 +
 +  * Ribakoodi kuvamiseks kutsutakse välja eelpool mainitud funktsioon <code ->
 +<xsl:value-of disable-output-escaping="yes" select="string(script:code128(string(artikkel)))"/>
 +</code>
 +  * 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 ====
 +
 +<code xml>
 +<?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>
 +</code>
 +
 +===== Pilt tabeli taustaks =====
 +
 +Pildi saab kasutada tabeli taustana, selleks tuleb määrata tabeli stiil järgnevalt:
 +
 +<code ->
 +<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">
 +</code>
 +
 +Pdfparams parameeter Engine peab antud juhul olema 1.
 +
 +<code ->
 +<!--pdfparams:BrowserWidth=1000,isLandscape=1,version=1,HeaderHeight=60,FooterHeight=60,Engine=1-->
 +</code>
 +
 +===== Lingi kasutamine =====
 +
 +<code xsl>
 +<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>
 +</code>
 +
 +* Antud näites artikli pealkirjale vajutades suunatakse lingile, mis on seadistatud artiklikaardi väljale URL. Väline link peab olema kujul
 +
 +<code ->
 +http://www.directo.ee
 +</code>
 +
 +===== 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
 +  * Personal
 +
 +Signeerimise väljatrüki lisamiseks tuleb väljatrüki definitsioonile määrata tulbast **Signeeri** signeerimise ala laius : \\ {{:et:ott20190515-112604.png}}
 +
 +XSL-is tuleb allkirja koht määrata järgmiselt:
 +
 +<code html4strict>
 +<img sign="signhere" width="600" border="0"  />
 +</code>
 +
 +  * Soovikorral kuvatakse eraldi sisestuskast, kuhu saab tekstina sisestada allkirjastaja nime. {{:et:ott20200512-153928.png}}. \\ Selleks tuleb lisada väljatrükki eraldi //div// näites toodud id-ga, sisestatud nimi kuvatakse //div//i sisse. Võimalus on ka kuvada eeldefineeritud nimedega rippmenüü (lang atribuut) <code ->
 +<div lang="Kaimar Karu,Toomas Tava" id="signer"></div>
 +</code> :!: atribuut id="signer" peab olema div-i viimane atribuut. \\ 
 +  * 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** tagi **emulator** atribuut: <code html4strict>
 +<img sign="signhere" emulator="1" width="1" border="0"   />
 +</code>
 +
 +===== 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.\\  {{:et:evelint20220902-103249.png}}
 +
 +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. {{:et:evelint20220902-103412.png}}
 +
 +Nupu vajutuse tagajärjel tekib väljatrükist dokumendi {{:et:evelint20220902-105915.png}} alla manus.
 +
 +PDF manuseks loomise tugi on hetkel järgmistel dokumentidel:
 +
 +  * Pakkumine
 +  * Tellimus
 +  * Lähetus
 +  * Arve
 +  * Sündmus
 +  * Klient
 +  * Leping
 +  * Liikumine
 +  * Personal
 +
 +===== EveryPay Linkpay =====
 +
 +[[https://merchant.every-pay.com/et/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 [[https://support.every-pay.com/et/merchant-support/online-maksete-vastuvotmise-alustamine/|vastava panga taotlusvorm]]. Hinnainfo koos lepingu tingimustega saad otse pangalt. Loe, kuidas täpsemalt kasutada LinkPayd  [[https://support.every-pay.com/et/merchant-support/kuidas-kasutada-linkpayd/|EveryPay portaalist]].
 +
 +==== Seadistamine ====
 +
 +  - EveryPay portaalis tuleb luua **LINKPAY>Lingid** alt link
 +  - Lingi detailvaates on kuvatud **Lingi token**, mis tuleb kopeerida ning määrata Directo süsteemi seadistustes ''EveryPay LinkPay lingi token'' väärtuseks
 +  - 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. 
 +  - Määrata linnud tulbas  //URL MUUDETAV// väljadele //Tasumisele kuuluv summa (transaction_amount)// ning //Arve nr (invoice_number)//, Viitenumbri puhul ka Viitenumber (reference_number)   {{:et:ott20210831-171549.png}} :!: 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
 +  - EveryPay portaali **SEADED>Üldised seaded** alt kopeerida **API parool** Directo süsteemiseadistuse ''EveryPay LinkPay API parool'' väärtuseks
 +  - 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%%
 +  - 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
 +  - Lingi võib lisada väljatrükile sobivasse kohta, loomise näide: <code xsl>
 +<a><xsl:attribute name="href"><xsl:value-of select="/documents/document/everypay_link" disable-output-escaping = "yes"/></xsl:attribute>MAKSA SIIN</a>
 +</code>
 +
 +:!: 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.
 +
 +  * Signatuur luuakse dokumendi summa täisosa ja numbri omavahel liitmisel eraldatuna **&** märgiga ning selle signeerimisega osapoolte vahel jagatud salatunnusega **SHA2 256** algoritmi alusel. 
 +  * Salatunnus määratakse Directos süsteemiseadistuse ''Väljatrüki HMAC signatuuri salatunnus'' väärtuseks.
 +  * Signatuuri saab lisada väljatrükile sobivasse kohta (mingi välise lingi osana): <code xsl>
 +<a><xsl:attribute name="href">http://www.minukoht.ee/?hmac=<xsl:value-of select="/documents/document/hmac_signature" disable-output-escaping = "yes"/></xsl:attribute>Mingi link</a>
 +</code>
 +
 +==== Näide ====
 +
 +Arve nr: 201400285 Summa : 136.30
 +
 +<code php>
 +$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
 +</code>
 +
 +===== Nipid =====
 +
 +==== 0 (mitte NaN), kui pole andmeid ====
 +
 +  * Päisesse numbri formaat paika <code xsl>
 +<xsl:decimal-format name="N" NaN="0" decimal-separator='.' grouping-separator=' ' />
 +</code>
 +  * Kasutamine \\ <code ->
 +<xsl:value-of select="format-number(mingi_vali, '0.00', 'N')"/>
 +</code>
 +
 +==== Mingi bloki X korda joonistamine ====
 +
 +  * Luua eraldi template, kus on väljund, mida joonistatakse \\ <code ->
 +<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>
 +</code>
 +  * Kutsume joonistaja välja nii palju kui vaja\\ <code ->
 +<xsl:call-template name="kast">
 +          <xsl:with-param name="count" select="2"/>
 +        </xsl:call-template>
 +</code>
 +
 +==== 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 <code xml>
 +<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>
 +</code>
 +
 +  :!: **%%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 <code xml>
 +<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>
 +</code>
 +
 +==== dateAdd - kuupäevale mingi päevade arvu lisamine ====
 +
 +  * XSL- päises peab olema [[et:yld_print_form#scripti_kasutamine_xslis|skripti deklaratsioon]]
 +  * dateaAdd funktsioon <code js>
 +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);
 +}
 +</code>
 +  * Funktsiooni kutsumine <code xml>
 +          <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>
 +</code>
 +
 +==== 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)
 +
 +  * XSL- päises peab olema [[et:yld_print_form#scripti_kasutamine_xslis|skripti deklaratsioon]]
 +  * splitterfunktsioon <code js>
 +function splitter( str, splitter, pos ){
 + ret = '';
 +    var arr = str.split(splitter); 
 +    if(arr[pos])
 +      ret = arr[pos]
 +
 + return ret
 + }
 +</code>
 +  * Funktsiooni kutsumine <code xml>
 +          <xsl:for-each select="/documents/document/rows/row">
 +           
 +                  <td> <xsl:value-of select="string(script:splitter(string(nimetus),' ', 1))"/>                  
 +                  </td>
 +                
 +              </tr>
 +</code>
 +
 +==== dateDiff - kuupäevade vahemiku päevade arvu arvutamine ====
 +
 +  * XSL- päises peab olema [[et:yld_print_form#scripti_kasutamine_xslis|skripti deklaratsioon]]
 +  * dateDiff funktsioon (NB! tegemist on VbScript-iga)<code js>
 +<msxsl:script language="VbScript" implements-prefix="script">
 +    <![CDATA[
 +function ddiff(m,d1,d2)
 +    ddiff = DateDiff(m,d1,d2)
 +end function
 +]]>
 +  </msxsl:script>
 +</code>
 +  * Funktsiooni kutsumine <code xml>
 + <xsl:value-of select="script:ddiff('d',string(aeg1),string(aeg2))"/>
 +</code>
 +  * Funktsiooni kutsumine juhul, kui vaja, et arvestaks ka algkuupäeva <code xml>
 + <xsl:value-of select="script:ddiff('d',string(r_aeg1),string(r_aeg2)) + 1"/>
 +</code>
 +
 +==== 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
 +
 +<code html4strict>
 +  <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>
 +</code>
 +
 +==== Page break ====
 +
 +Et printeris/PDFis tekkiks uus leht:
 +
 +      <div style="page-break-before: always;">
 +
 +==== Summeerimine ====
 +
 +Universaalne summeerimise funktsioon, parameetrid:
 +
 +  - sisend number mida lisatakse
 +  - grupp (suvaline konteksti kirjeldav string, kui üks summimine siis võib olla näiteks summ)
 +  - 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.
 +
 +<code xsl>
 +<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>
 +</code>
 +
 +==== Palgateatisele puhkusejäägi kuvamine ====
 +
 +<code xsl>
 +<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')"/>
 +</code>
 +
  
pl/yld_print_form.1744623194.txt.gz · ostatnio zmienione: 2025/04/14 12:33 przez karolina

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki