Přeskočit na hlavní obsah

Možnosti tiskových výstupů z ESO9

Možnosti tiskových výstupů z ESO9​

Tento článek popisuje různé možnosti tiskových výstupů z ESO9. Na příkladu sestavy faktury vydané (Start i Profi verze) projdeme nejpoužívanější kombinace parametrů pro tisk na monitor, na tiskárnu, do souboru, odeslání e-mailem a uložení do DMS.
Všechny řídící parametry pro tisk sestavy lze předat dvěma základními způsoby: z vazby nebo na odkazu.

  • V případě předání parametrů z vazby musí všechny parametry existovat v datovém zdroji sestavy v syntaxi %PARAM%. Takto definované parametry se následně budou předávat z datového zdroje formuláře, z nějž se sestava volá. Nevýhodou tohoto řešení je (většinou) nutnost upravit datový zdroj sestavy. Výhodou je pak možnost tisknout takovou sestavu hromadně.
  • Pokud předáme řídící parametry sestavě na odkazu, nemusí být definovány v datovém zdroji sestavy, tj. implementace takového tisku zpravidla znamená přidat uživatelskou akcí odkaz na tisk požadované sestavy; zdrojový formulář i cílová sestava tak mohou zůstat beze změn. Nevýhodou je nemožnost takovou sestavu tisknout hromadně. V případě ukázek nad Profi sestavou bude upraven datový zdroj sestavy přidáním řídících parametrů pro práci se souborem (a e-mailem) a jednotlivé parametry se budou plnit z vazby. V případě Start sestavy budou všechny řídící parametry předávány na odkazu (struktura sestavy musí zůstat beze změn tak, aby se po instalaci další verze ESO9 dala synchronizovat z ESO9Start).

Sestava faktury vydané - Profi verze​

V datovém zdroji sestavy faktury vydané (FavForm.idc) doplníme řídící parametry pro různé cíle tisku:

select *,
dbo.fnTxt_TXTKurzHdok (%idHdok%, 'Kurz pouze pro účely DPH', '%PRN_Lang%') as TXTKurzHdok,
(select count(*)
from dbo.fnDZ_RekapDPHZalohV23(%idHdok%, '%PRN_Lang%', NULL)
where vlDetail_Soucet < 10
) as PocetDPHZaloh,
'%SENDMAILTO%' as MF_SENDMAILTO,
'%SENDMAILSUBJECT%' as MF_SENDMAILSUBJECT,
'%SENDMAILBODY%' as MF_SENDMAILBODY,
'%FILENAME%' as MF_FILENAME,
%SHOWMAIL% as mf_ShowMail
from dbo.fnDZ_FormularHDOK(
%idHdok%,
%idLogUser%,
'%PRN_Lang%',
'%mf_NeAnoPrefVeta%')

Nově přidané parametry se musí objevit i v seznamu parametrů sestavy: image
Pouhou úpravou hyperlinku tak bude možné přesměrovat výstup téže sestavy do různých cílů.

Formulář faktury vydané​

Parametry přidané do datového zdroje sestavy v předchozí kapitole musíme přidat i do datového zdroje formuláře faktury vydané (Prodej\FaV.htm). Jednotlivé položky datového zdroje faktury by se v reálu plnily dynamicky, zde budou naplněné statickými hodnotami:

SELECT ...
'josef.novak@email.com; BCC: %UP_UZIV_EMAIL%' as SENDMAILTO,
'Faktura č.' + CIS_DOK as SENDMAILSUBJECT,
'&lt;html&gt;&lt;head&gt;&lt;title&gt;E-mail&lt;/title&gt;&lt;BODY&gt;&lt;p&gt;&lt;font size=10 color=red&gt;Tělo e-mailu.&lt;/font&gt;&lt;/p&gt;&lt;/BODY&gt;&lt;/HTML&gt;' as SENDMAILBODY,
'c:\Reports\FV' + CIS_DOK as FILENAME,
0 as SHOWMAIL,
case
when CIS_DOK='0117090001' then 2
else 0
end as DPRINT
FROM QHDOK_FAV
%WHERE%
%ORDERBY%"

Parametr SENDMAILBODY (který následně v datovém zdroji sestavy plní parametr MF_SENDMAILBODY) obsahuje běžný text v HTML, pouze speciální znaky jsou překódované v HTML encodingu tak, aby datový zdroj korektně prošel aplikačním serverem a oběma klienty. Pokud je tělo e-mailu v HTML kódu, přepne se při odesílání mailu jeho formát na HTML.
Jednotlivé tisky z níže uváděných příkladů lze formou odkazu doplnit buď přímo do předlohy formuláře všem, nebo pomocí uživatelských akcí (činnost 9.6.14) jen vybraným uživatelům nebo jejich skupinám.

Tisk sestavy na monitor​

Nejjednodušším tiskovým výstupem je výstup sestavy na monitor. Protože však sestava i formulář obsahují řídící parametry pro jiné cíle výstupu (e-mail), musím tyto parametry pro výstup na monitor potlačit/vynulovat v odkazu (parametry v odkazu mají přednost před parametry z vazby). Provedu to přiřazením prázdné hodnoty. Syntaxe odkazu pak bude vypadat následovně:

<a href="esoform.asp?TPage=prodej/TForm/FavForm.idc&amp;RelType=Parameters&amp;RepeatFor=Query&amp;Legislativa=<%UP_Legislativa%>&amp;SENDMAILTO=&amp;FILENAME=">Tisk sestavy na monitor</a>

Pro výstup na monitor se použije výchozí formát sestavy, kterým je typ výpisu STI. V obecném klientovi to bude formát HTML5 zobrazený s nástrojovou lištou, která umožňuje tisk zobrzené sestavy, její uložení do souboru či odeslání e-mailem.
Sestavy lze tisknout i hromadně použitím parametru RepeatFor=Query, který vyvolá před tiskem dialog s dotazem na tisk jedné sestavy / všech označených / všech.

Tisk sestavy do PDF​

Pokud chci sestavu vytisknout do některého z dostupných souborových formátů (PFD, JPG, DOCX, XLSX, ...), doplním stávající odkaz o parametr PRINTDEST s příslušnou hodnotou, např.:

<a href="esoform.asp?TPage=prodej/TForm/FavForm.idc&amp;RelType=Parameters&amp;RepeatFor=Query&amp;Legislativa=<%UP_Legislativa%>&amp;SENDMAILTO=&amp;FILENAME=&amp;PRINTDEST=STIPDF">Tisk faktury do PDF</a>

Sestava se vygeneruje do požadovaného formátu a otevře se přímo ve formuláři ESO9 k náhledu:
image
Pokud prohlížeč neumí zobrazit daný typu souboru přímo (např. XLSX), pouze jej stáhne a nabídne uživateli k zobrazení či rovnou otevření v programu asociovaném s danou příponou (např. MS Excel).

Odeslání sestavy e-mailem​

Pro odeslání sestavy e-mailem použijeme parametr SENDMAILTO z datového zdroje formuláře, kterým se v datovém zdroji sestavy naplní parametr MF_SENDMAILTO. Tento parametr tedy přenášíme vazbou na na odkaze jej již neuvádíme.

Konfigurace e-mailového klienta v obecném klientovi​

Před odesláním první sestavy je třeba provést jednorázové nastavení poštovního klienta. Obecný klient neodesílá e-maily sám, ale využívá k tomu aplikační server; konfigurace pošty proto probíhá přímo v aplikaci nastavením aplikačních parametrů ze skupiny EMAIL: image
Pro jednotlivé aplikační parametry lze definovat buď specifickou hodnotu pro jednotlivé uživatele, nebo globální hodnotu pro celou aplikaci. V uvedeném příkladu mají všichni vyjmenovaní uživatelé nastavenou hodnotu parametru SMTP_FROM (adresa odesílatele), všichni ostatní pak budou odesílat e-maily s globální adresou danou parametrem na úrovni aplikace.

Vlastní odeslání sestavy​

Vlastní odeslání sestavy e-mailem provedeme přenesením hodnoty položky SENDMAILTO vazbou z datového zdroje formuláře do položky MF_SENDMAILTO v datovém zdroji sestavy (adresa příjemce). V našem příkladu se e-mail odesílá na dvě adresy (// 'josef.novak@email.com; BCC: %UP_UZIV_EMAIL%' as SENDMAILTO*); prefix //BCC:* říká, že se každá odesílaná sestava pošle zároveň ve slepé kopii na uživatele, který ji odesílá. Lze si tak snadno archivovat veškeré odeslané sestavy. Stejným způsobem (tj.vazbou) se předají i parametry SENDMAILSUBJECT, SENDMAILBODY a FILENAME. Odkaz bude vypadat následovně:

<a href="esoform.asp?TPage=prodej/TForm/FavForm.idc&amp;RelType=Parameters&amp;RepeatFor=Query&amp;PageBreak=Auto&amp;PRN_LANG=<%UP_Legislativa%>&amp;Legislativa=<%UP_Legislativa%>">Odeslání faktury mailem</a>

Parametr PRINTDEST změní výchozí formát sestavy z STI (tedy HTML5) na STIPDF.

Odeslání sestavy s náhledem​

E-mail lze z aplikace ESO9 odeslat buď automaticky na pozadí, nebo s možností zobrazit si jej před odesláním ve výchozím e-mailovém klientovi. Zobrazení náhledu se nastavuje přímo v aplikaci v parametru SHOW_EMAIL (sekce EMAIL). Tento parametr může být přetížen parametrem MF_SHOWMAIL, který jsme přidali do datového zdroje sestavy a plníme jej položkou SHOWMAIL v datovém zdroji formuláře. V našem případě je sice náhled e-mailu v aplikačních parametrech vypnutý, ale přesto se zobrazí, protože v datovém zdroji formuláře je uvedeno 1 as SHOWMAIL. Stejnou sestavu lze tedy jedním odkazem např. většině odběratelů odeslat automaticky a vybraným zobrazit před odesláním k náhledu/ke kontrole.
K náhledu se používá EML soubor s obsahem e-mailu. Ten se stáhne na klientskou stanici, následně je možné jej otevřít ve výchozím e-mailovém programu a dále s ním pracovat. Po stažení prvního EML souboru lze v některých prohlížečích (MS Edge, Google Chrom) ve vlastnostech staženého souboru zaškrtnout volbu „Vždycky otevírat soubory tohoto typu“. E-mail se tak po svém stažení automaticky otevře ve výchozím e-mailovém klientovi (např. MS Outlook).
image
Náhled takto vygenerovaného e-mailu bude vypadat následovně:
image

Odeslání sestavy e-mailem s pojmenovanou přílohou​

V datovém zdroji formuláře jsme si nadefinovali položku FILENAME jako 'c:\Reports\FV' + CIS_DOK. Sestavili jsme si tak absolutní cestu k souboru. Pokud jméno souboru uvedeme bez přípony, doplní ji aplikační server automaticky dle typu generovaného souboru. Datová položka FILENAME se následně vazbou přenese do položky MF_FILENAME v datovém zdroji sestavy. Generátor sestav pak použije takto předané jméno souboru pro všechny typy výstupů, které zahrnují generování souboru se sestavou. V případě odeslání sestavy e-mailem se předaný název souboru použije k pojmenování přílohy, jak je vidět v náhledu e-mailu.

Pokud je soubor zadán pouze svým jménem bez cesty, použije se pouze pro vygenerování e-mailu a po odeslání se z disku smaže (dočasně se ukládá do uživatelského TEMP adresáře). Pokud je soubor zadán včetně plné cesty (jako v našem příkladu), zůstane soubor po odeslání e-mailu v souborovém úložišti (viz [datový zdroj formuláře faktury vydané](#Formulář faktury vydané)). Jedním odkazem tak lze odeslat sestavu e-mailem a zároveň souborově archivovat.

Odeslání sestavy s více přílohami​

Pokud chceme spolu se sestavou odeslat e-mailem více příloh (např. ceníky, atesty či smlouvy), stačí na začátek e-mailové adresy příjemce uvést znak "$" (např. '$josef.novak@email.com; BCC: %UP_UZIV_EMAIL%' as SENDMAILTO). Taková syntaxe odešle kromě vlastní sestavy i všechny přílohy daného dokladu z DMS, které jsou na zdrojový řádek (resp. tabulku a řádek) navázány vazbou s typem dle hodnoty parametru DMS_VLTYPVAZBY.

V rámci implementace je možné přikládat k e-mailu se sestavou další dokumenty z DMS podle typu vazby (položka VLTYPVAZBY v tabulce DOKUMENT_VAZBA). Standardně jsou v ESO9Start dokumenty navázané přes typ vazby 0. V rámci implementace si lze stejný dokument(-y) navázat zároveň na další tabulky. Aby se taková vazba nezobrazovala v běžných formulářích DMS, lze ji odlišit typem (např. 1) a provázat tak např. všechny dokumenty navázané ke zboží (potažmo ke složkám dokladu) zároveň k hlavičce dokladu (např. skladové výdejky). Dojde tím pouze k agregaci vazeb, vlastní dokumenty zůstanou v dokumentové databázi beze změny. Při odeslání sestavy skladové výdejky se k e-mailu přiloží všechny dokumenty z DMS navázané typem vazby 1.
Nastavení typu vazby se provádí v aplikačním parametru DMS_VLTYPVAZBY.

Tisk sestavy do souboru​

Pokud chceme sestavu pouze uložit do souboru, ponecháme hodnotu parametru MF_FILENAME z předchozího příkladu a vynulujeme hodnotu parametru MF_SENDMAILTO (tj. parametr SENDMAILTO na odkazu). Zároveň opět parametrem PRINTDEST přepneme typ výstupu z HTML5 na PDF.

<a href="esoform.asp?TPage=prodej/TForm/FavForm.idc&amp;RelType=Parameters&amp;RepeatFor=Query&amp;Legislativa=<%UP_Legislativa%>&amp;SENDMAILTO=&amp;PRINTDEST=STIPDF">Tisk sestavy do souboru</a>

Sestavy lze samozřejmě tisknout i hromadně použitím parametru RepeatFor=Query. Označením několika dokladů a volbou při tisku "Všechny označené" snadno vytiskneme sestavy do souboru(-ů) hromadně:
image
Ve složce c:\reports (dané hodnotou datové položky FILENAME jsou pak uložené všechny vytištěné sestavy:
image
Při počtu sestav cca nad 100 je výhodnější (z hlediska rychlosti tisku i spotřeby operační paměti) použít další produkt z oblasti technologie ESO9, kterým je Reporting Server.

Přímý tisk sestavy na tiskárnu​

Vzhledem k rozsáhlosti tohoto tématu je nastavení přímého tisku popsáno ve vlastním článku.

Přímý tisk sestavy do DMS​

Pokud je ve firmě nasazen čistě elektronický oběh dokladů, lze použít přímý tisk sestav do DMS. Tisk je implementován parametrem DIRECTPRINT a to buď jen do DMS (hodnota 3), do DMS v kombinaci s tiskem na monitor (hodnota 4) nebo do DMS v kombinaci s tiskem do souboru a na monitor (hodnota 7).

<a href="esoform.asp?TPage=prodej/TForm/FavForm.idc&amp;RelType=Parameters&amp;RepeatFor=Query&amp;Legislativa=<%UP_Legislativa%>&amp;SENDMAILTO=&amp;FILENAME=&amp;DIRECTPRINT=3&amp;PRINTDEST=STIPDF">Přímý tisk do DMS</a>

Po tisku se zobrazí informační hlášení "Sestava(-y) byla uložena do DMS." a řízení se vrací na formulář s původním dokladem. Pokud po tisku do DMS chceme automaticky obnovit formulář tak, aby bylo vidět nově založený dokument(-y), stačí v záhlaví HTML formuláře uvést META tag:

<meta name="REQUERY" content="1">

Pokud je při použití parametru DIRECTPRINT s hodnotou 4 zároveň použit některý z parametrů MF_SendMailTo nebo MF_FileName, provede se kromě uložení sestavy do DMS ještě její odeslání e-mailem nebo uložení do souboru. Při kombinaci obou cílů (e-mail i soubor) bude parametr MF_FileName zároveň definovat jméno souboru s přílohou e-mailu.

Typ dokumentu​

Při přímém tisku sestavy do DMS vzniká dokument, který ve výchozím stavu nemá definován žádný typ (každý dokument v DMS může být určitého typu, ty se definují v tabulce TYPDOC a jejich číselník je dostupný na všech formulářích s DMS). Pokud chceme, aby dokument rovnou vznikal s definovaným typem, je třeba v datovém zdroji sestavy naplnit položku MF_IDTYPDOC hodnotou IDTYPDOC z číselníku typů dokumentů. Např.:

(select IDTYPDOC from TYPDOC where KOD_TYPDOC='UCD') as MF_IDTYPDOC

Přímý tisk sestavy na monitor, do souboru a do DMS​

Pokud jste prošli ultimativním testem trpělivosti až sem, zbývá poslední kombinace zpracování sestavy a tou je přímý tisk na monitor, do souboru a do DMS. Tisk je realizován parametrem DIRECTPRINT s hodnotou 7.

<a href="esoform.asp?TPage=prodej/TForm/FavForm.idc&amp;RelType=Parameters&amp;RepeatFor=Query&amp;Legislativa=<%UP_Legislativa%>&amp;SENDMAILTO=&amp;DIRECTPRINT=7&amp;PRINTDEST=STIPDF">Přímý tisk monitor, do souboru a do DMS</a>

Odeslání sestavy e-mailem - Start varianta​

V ESO9 Start se všechny parametry potřebné pro odeslání sestavy mailem doplňují automaticky v činnosti 9.6.3.5 Odesílání dokladů e-mailem. V této činnosti se nastaví:

  • osoba subjektu, která je příjemcem mailu
  • e-mailová adresa příjemce se bere primárně z osoby subjektu; není-li zde vyplněna, bere se adresa zadaná v tomto formuláři (sekundární e-mail)
  • typ dokladu, pro který se má sestava odesílat (nepovinný parametr) - není-li vyplněn, budou se tímto způsobem na danou osobu odesílat všechny typy dokladů (malá/jednoduchá řešení)
  • předmět mailu - prostý text, může být parametrizován datovými položkami z aktuálního řádku dat.zdroje sestavy nebo z UP parametrů
  • tělo mailu - prostý text nebo HTML, možnost parametrizace stejná, jako v předmětu

V datovém zdroji sestavy, která se bude tisknout s využitím této tabulky, je třeba doplnit:

  • výstup z vyhodnocovací funkce fnDok_EMail:
OUTER APPLY dbo.fnDok_EMail(%VLSENDMAIL%, dbo.fnDZ_FormularHDOK.idhdok) email
  • do výběru položek přidat ty, které vrací funkce fnDok_EMail:
SELECT ..., email.MF_SendMailTo, email.MF_SendMailSubject, email.MF_SendMailBody
  • např.datový zdroj Startkové verze faktury vydané pak vypadá následovně:
SELECT *,
dbo.fnTxt_TXTKurzHdok (%idHdok%, 'Kurz pouze pro účely DPH', '%PRN_Lang%') as TXTKurzHdok,
(select count(*)
from dbo.fnDZ_RekapDPHZalohV23(%idHdok%, '%PRN_Lang%', NULL)
where vlDetail_Soucet < 10
) as PocetDPHZaloh,
email.MF_SendMailTo,
email.MF_SendMailSubject,
email.MF_SendMailBody
FROM dbo.fnDZ_FormularHDOK(
%idHdok%,
%idLogUser%,
'%PRN_Lang%',
'%mf_NeAnoPrefVeta%')
OUTER APPLY dbo.fnDok_EMail(%VLSENDMAIL%, dbo.fnDZ_FormularHDOK.idhdok) email
  • na odkaz pro tisk sestavy přidat parametr VLSENDMAIL=1
  • např.Startkový odkaz pro odeslání faktury e-mailem vypadá následovně:
<a href="esoform.asp?TPage=FavForm.idc&RelType=Parameters&RepeatFor=Query&PageBreak=Auto&PRN_LANG=<%UP_Legislativa%>&Legislativa=<%UP_Legislativa%>&VLSENDMAIL=1">Odeslání faktury mailem</a>
  • funkce fnDok_EMail vyhodnotí, zda se má sestava odeslat mailem a příp. s jakými parametry a ty nastaví a vrátí; vyhodnocení se provádí na základě shody osoby příjemce a typu tištěného dokladu s tím, co je nastaveno v činnosti 9.6.3.5
  • pokud funkce odeslání vyhodnotí negativně, dojde k tisku s původním cílem
  • funkce pro vyhodnocení tisku je k dispozici pro případné implementační úpravy

Digitální podpis​

Je-li sestava vytištěna do formátu PDF, může být opatřena digitálním podpisem, resp. podpisy. Příslušný certifikát, jímž bude sestava podepsána, je třeba nejprve zaevidovat v aplikaci v činnosti 9.8.11 Certifikáty. Sériové číslo certifikátu se následně zadává do aplikačního parametru CERT_SN ze skupiny EMAIL. Všichni uživatelé mohou podepisovat sestavy stejným certifikátem, nebo mohou mít vybraní uživatelé vlastní certifikáty; v takovém případě se využívá hodnota parametru CERT_SN pro jednotlivé uživatele.
Každý certifikát má ve svých vlastnostech uveden mj. účel svého vystavení; pro účely podepisování PDF musí být vystaven za účelem digitálního podepisování.

Chyby CSP (Cryptographic Services Provider)​

Pokud v PDF výstupech z ESO9 digitální podpis chybí, na vině může být zastaralý tzv. CSP (Cryptographic Services Provider). Pokud je digitální certifikát vystaven s CSP "Microsoft Enhanced Cryptographic Provider v1.0", nepodporuje podepisování algoritmem SHA256, ale pouze zastaralým SHA1. Certifikát proto musí být vystaven s CSP "Microsoft Enhanced RSA and AES Cryptographic Provider". Pokud již máme takový certifikát zakoupený, lze do něj správný CSP "přidat".
Postup:

  • K transformaci budeme potřebovat nástroj OpenSLL (https://sourceforge.net/projects/openssl-for-windows/)
  • Z certifikátu ve formátu PFX vyexportujeme privátní a veřejný klíč (výsledné mezi-soubory budou bez hesla). Při exportu budeme vyzváni k zadání hesla k PFX certifikátu:
openssl pkcs12 -in cert.pfx -nocerts -out key.pem -nodes
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
  • Tímto postupem vzniknou soubory key.pem (privátní klíč) a cert.pem (veřejný klíč).
  • Z těchto souborů znovu vytvoříme certifikát ve formátu p12 se správným CSP. Při exportu budeme vyzváni k zadání hesla k novému certifikátu:
openssl pkcs12 -export -out NewCert.p12 -inkey key.pem -in cert.pem -name My -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider"

Vkládání ISDOC do tiskových výstupů účetních dokladů​

Pokud se v ESO9 tiskne účetní doklad, automaticky obsahuje vložený soubor ISDOC pro snadný import dokladu protistranou. Vložení ISDOCu do PDF sestavy je podmíněno parametrem TYP_DOK_ISDOC v datovém zdroji sestavy. V rámci ESO9 Start je tato položka součástí obecného datového zdroje hlaviček pro hlavičky dokladů fnDZ_FormularHDOK. Tzn., že v rámci ESO9 Start se do všech sestav tištěných z účetních dokladů vkládá příloha ve formátu ISDOC.