Definiční soubor tiskových sestav

Z K.A.P.
Skočit na navigaciSkočit na vyhledávání

Systém Sklad6 i Účto používá při vytváření některých sestav definiční soubor tiskových sestav. Soubor má obvykle jméno SKLAD-??.DEF (popř. UCTO-??.DEF), kde místo znaků ?? je buď 01 nebo zkratka firmy, která aplikaci používá. V dokumentaci je obvykle označován jako definiční soubor nebo zkráceně DEF soubor.

V souboru jsou např. uloženy definice těchto sestav :

  1. Definice všech formulářů pro tisk zaevidovaných dokladů (např. definice tiskové podoby faktur, převodek, dodacích listů, příjemek, doklady na obaly a chystačky apod.); jedna definice může být společná pro více typů dokladů (např. faktury a dobropisy mohou mít společnou definici)
  2. Definice soupisu daňových dokladů, definice nakládacího listu
  3. Definice tisku na obálky ze seznamu adres a z dokladů
  4. Definice hromadného příkazu k úhradě
  5. Objednávky, požadavky, seznamy a sestavy z objednávek a požadavků
  6. Formulář pro tisk hlavičky karty a pohybů na kartě; formulář pro tisk štítků z karet
  7. Definice nabídkových listů (seznamů skladových karet)
  8. Definice některých výpočtových sestav (prodej za období, kontrola záruční doby, zisk za faktury, nákupy a prodeje, součty dokladů a další)
  9. Definice sestav z obalového konta, definice inventurních sestav
  10. Definice sekce pro tisk na poštovní složenky
  11. seznam vratných obalů pro zrychlenou práci s vratnými obaly (není to sestava)
  12. Proměnné
    #x , kde x je číslo proměnné definované programem nebo definované ve struktuře souborů viz. Systémové menu
  13. Výrazy
    #{výraz}, výraz je vyhodnocen podle aktuálních hodnot. Ve výrazu můžeme použít proměnné a funkce

V definočním souboru sestav můžeme nadefinovat nebo opravit formulář pro tisk na tiskárnu. Formulář je vytištěn přesně tak, jak je zde nadefinován - proměnné a výrazy jsou nahrazeny skutečnými hodnotami.

Definiční soubor je rozdělen na sekce. Každá sekce má svůj název, který je ohraničený v hranatých závorkách. Např. [Faktura] je název sekce obvykle používaný při tisku faktur. Název sekce lze měnit jen u definice faktur (popř. definice nabídkových listů), ale je pak nutné změnu promítnout také v nastavení typů dokladů.
Řádky dané sekce se do sestavy tisknou v tom pořadí, v jakém jsou uvedeny v definičním souboru. Výjimečné postavení mají řádky začínající jedním z následujících výrazů (u těchto řádků řídí pořadí a počet opakování program):

.ZS začátek sestavy; takto začínající řádky se chovají jako řádky bez tohoto výrazu, tzn. že se tisknou pouze jednou a to na začátku sestavy
.HH horní hlavička 1; řádek se opakuje na začátku každé stránky
.H2 horní hlavička 2; řádek se opakuje na začátku každé stránky počínaje druhou stranou sestavy
-HH horní hlavička sloupce; nadpis sloupce u vícesloupcových ceníků (číslo strany se zadává symbolem {PAGE}
.DH dolní hlavička 1; řádek se opakuje na konci každé stránky
.D2 dolní hlavička 2; řádek se opakuje na konci každé stránky
.KS konec sestavy; řádek se tiskne pouze jednou a to na konci sestavy
.REM poznámka; tyto řádky se netisknou a slouží pouze jako komentář
.KS.GOn tiskne se na konci sestavy, tak aby daný řádek byl vytištěn na řádku n; pokud již sestava obsahuje více než n řádků, pak se tiskne přímo za poslední řádek. Pokud za celým výrazem .KS.GOn následuje středník, pak se text za středníkem opakuje až do řádku n. Pokud je číslo n záporné, pak se počítá jako n řádků od standardního počtu řádků na stránce (dle definované tiskárny).
KS.GO je možné definovat výraz, který určí číslo řádku, od kterého se má v sestavě pokračovat (používá se pro určení pozice patičky sestavy). Nově je možné sekci zadat ve formě .KS.GO=výraz nebo .KS.GO=výraz;opakovaný text. Hodnota výrazu musí vyjít jako celé číslo (maximum je počet řádků na stránce). Pokud je výsledkem záporné číslo, tak se chápe jako počet řádků před koncem stránky.

V sekci .KS.GO je možné definovat výraz, který určí číslo řádku, od kterého se má v sestavě pokračovat (používá se pro určení pozice patičky sestavy). Nově je možné sekci zadat ve formě .KS.GO=výraz nebo .KS.GO=výraz;opakovaný text. Hodnota výrazu musí vyjít jako celé číslo (maximum je počet řádků na stránce). Pokud je výsledkem záporné číslo, tak se chápe jako počet řádků před koncem stránky.

.Mn obsahuje definice opakovaných nebo speciálně umístěných řádků. Písmeno n smí být z rozsahu 0 až 9 nebo A až Z. Místo tisku a význam těchto řádků je vždy řízen příslušným obslužným programem sestavy; platí však, že program nikdy netiskne doprostřed jednotlivých bloků (.ZS, .HH, .DH, .KS); pomocí těchto řádků jsou definovány např. položky faktury, seznamy faktur v soupisu daňových dokladů apod.
.NP zruší režim stránkování sestavy (není kontrolován přechod na novou stránku a .HH a .DH se tisknou pouze na začátku a na konci sestavy)
.ZB ohraničuje začátek bloku, který musí být vytištěn celý na 1 stránce
.KB ohraničuje konec bloku, který musí být vytištěn celý na 1 stránce
.IF{výraz;řádek} tiskne řádek, pokud je splněna podmínka zadaná pomocí výraz. .IF může být kombinováno s jinými příkazy (např. .HH, .DH, .KS)
.SET#n=výraz nastaví hodnotu proměnné s číslem a na novou hodnotu danou výrazem. Výsledek výrazu se vždy ukládá jako text. Doporučujeme měnit hodnoty pouze pro proměnné s číslem 210 až 240. Příkaz .SET může být použit také současně s příkazy .HH, .DH, .KS, .Mn apod. Např. .M1.SET#211=Str(val(#211)+1,10,0)
.NAME=výraz zapíše do sestavy dolní hlavičku a uloží soubor s rozpracovanou sestavou a veškeré další výstupy do sestavy bude směrovat do nového souboru se jménem určeným dle vyhodnocovaného výrazu výraz. Nový soubor je zahájen horní hlavičkou. Příkaz .NAME nesmí být použit v horní a dolní hlavičce sestavy.
.CPn mění kódovou stránku vytvářené sestavy (0=ASCII, 1=Kamenický, 2=ASCII s rámečky, 3=LATIN2, 4=Windows). Pokud změníte kódování na LATIN2 nebo Windows, pak výslednou sestavu nepůjde správně zobrazit ve skladovém programu (znaky s diakritikou budou „nesmyslné“).
.GOx pokusí se přejít na x-tý řádek na stránce (záporná čísla znamenají počet řádků před koncem stránky). Pokud je x kladné a aktuální číslo řádku je větší než x (tisk je již za řádkem x), pak se provede odstránkování. Zpravidla používáme v sekci .KS. Sekci je možné zadat také ve formě .KS.GO=výraz nebo .KS.GO=výraz;opakovaný text. Hodnota výrazu musí vyjít jako celé číslo (maximum je početřádků na stránce). Pokud je výsledkem záporné číslo, tak se chápe jako počet řádků před koncem stránky. Text za znakem ; se opakuje na každém řádku od aktuální pozice až do řádku určeného číslem nebo výrazem.
.MA až .MZ mezisoučtové řádky označené písmeny A až Z (vuyžití pouze jen u tisku dokladu)

V každém řádku mohou být speciální znaky začínající #, které tiskový program transformuje :

#n obsah proměnné s číslem n; proměnné tvoří jádro celého tiskového systému; program před každým tiskem (popř. před každým opakovaným řádkem) nastaví proměnné odpovídající dané sestavě (např. před tiskem faktury nastaví proměnné odpovídající jednotlivým údajům z hlavičky faktury a před každou položkou/operací nastaví proměnné odpovídající jednotlivým údajům z operace a skladové karty). Seznam čísel proměnných a jejich významů pro různé sestavy je obvykle umístěn na konci definičního souboru. Programově je obvykle vazba mezi proměnnými a údaji realizována pomocí souboru "struktur databází", který lze nalézt v menu Další služby/Nastavení programu/Systémové menu/Struktura souborů. Zde můžete nalézt údaj "Proměnná", který obsahuje číslo proměnné v definičním souboru.
# aktuální číslo stránky
#: aktuální číslo stránky formátované na čtyři znaky dorovnané mezerami zleva
#+ číslo následující stránky
#- číslo předchozí stránky
#* celkový počet stran sestavy; doporučujeme za znak * ještě přidat jednu nebo více mezer. To pak umožní tisk celkového počtu stran i u sestav, které mají více než 9999 stran (jinak se celkový počet stran tiskne vždy na 4 znaky se zarovnáním vlevo)
#{výraz} program zpracuje výraz, který je ve složených závorkách a dosadí jeho hodnotu; je možné používat stejné funkce a operátory, jako u vyhledávání pomocí výběrové podmínky nebo jako u generátoru sestav; v rámci výrazu se mohou používat proměnné #n, je však potřeba mít na paměti, že tyto proměnné se vždy chovají jako textové položky (čísla jsou převedena na odpovídající řetězec znaků). Výsledkem výrazu musí být také textový údaj. Příkladem může být výraz #{SETRIGHT(#25,16)} použitý při tisku faktur, který vrací formu úhrady zarovnanou mezerami zleva na 16 míst.
Ve výrazech je možné použít funkci #LINE, která vrací aktuální číslo řádku (možno např. použít pro otestování, zda už se tisk neblíží ke konci stránky) a také funkci #MAX_LINE, která vrácí celkový počet řádků na stránce dle aktuálně nastavené tiskárny.
{$jmeno_souboru_s_obrazkem;w;h} program zobrazí soubor ve formátu bmp nebo jpg na aktuální pozici s šířkou w palců a výškou h palců (1 palec = 25,4 milimetru). Jako oddělovač desetinných míst lze použít tečku nebo čárku. Tisk obrázků lze použít pouze při tisku s použitím grafického ovladače (nastavení tiskárny WIN, v textových režimech např. LPT1 je tisk potlačen - vyjímku tvoří tisk pomocí ovladače DOSEXEC ).
{$jmeno_souboru_s_obrazkem;x;y;w;h} program zobrazí soubor ve formátu bmp nebo jpg na pozici x,y (v palcích) s šířkou w palců a výškou h palců (1 palec = 25,4 milimetru). Jako oddělovač desetinných míst lze použít tečku nebo čárku. Tisk obrázků lze použít pouze při tisku s použitím grafického ovladače (nastavení tiskárny WIN , v textových režimech např. LPT1 je tisk potlačen - vyjímku tvoří tisk pomocí ovladače DOSEXEC )).
{|TypČárovéhoKódu;Kod;w;h} Umožní tisk čárového kódu. Typ čárového kódu může být tento: CODE39, CODE39WCHECK, EAN13, EAN8, ITF, ITFWCHECK, POSTNET, UPCA, CODE128. Pokud není typ uveden, tak se předpokládá EAN13 (resp. EAN8). Pokud není určena šířka nebo výška, tak se použijí automatické hodnoty (1.468" x 1.034" dle normy EAN13 resp. 1.034x0.852 pro EAN8). Tisk čárových kódů lze použít pouze při tisku s použitím grafického ovladače (nastavení tiskárny WIN). w je šířka_v_palcích, h je výška_v_palcích (1 palec = 25,4 milimetru).
znak s ASCII kódem 1: následující znaky se budou tisknout zvýrazněně.
znak s ASCII kódem 2: ruší účinek ☺
znak s ASCII kódem 15: následující znaky budou tisknuty zúženě (kondenz)
znak s ASCII kódem 18:ruší účinek ☼
znak s ASCII kódem 14:následující znaky se budou tisknout dvakrát široké
znak s ASCII kódem 20: ruší účinek ♫
znak s ASCII kódem 4:následující znaky se budou tisknout kurzívou
znak s ASCII kódem 3: ruší účinek ♦
znak s ASCII kódem 5:následující znaky se budou tisknout středním písmem (není podporováno všemi tiskárnami)
znak s ASCII kódem 6: ruší účinek ♣
znak s ASCII kódem 24:horní index
§ znak s ASCII kódem 21: ruší účinek ↑
znak s ASCII kódem 22:dolní index
znak s ASCII kódem 23: ruší účinek ▬
znak s ASCII kódem 29:následující znaky se budou tisknout velkým písmem (dvakrát široké, dvakrát vysoké)
znak s ASCII kódem 30: ruší účinek ↔

Ve Windows verzi je zavedena podpora nových formátovacích značek pro formátování tiskových sestav pomocí definičního souboru. Formátování lze využít pro formuláře, které se netisknou v textovém režimu (ale pouze v grafice). Popis syntaxe: {!formátovací znaky}.

Syntaxe Příklad Popis
\f="název fontu" \f="Arial" název fontu
\s="velikost" \s="12" absolutní velikost
+2 \s+ je totéž jako relativní zvětšení
\s="+1"
-2 \s- je totéž jako relativní zmenšení
\s="-1"
\c="barva fontu rgb" \c="255" barva (desítková hodnota RGB)
\r="znaková sada" \r="238" středoevropská znaková sada (čeština)
\b[+/-] \b+ ... ano tučnost písma
\i[+/-] \i ... ne kurzíva (nakloněné písmo)
\u[+/-] \u ... ano podtržené písmo
\o[+/-] \o ... ne přeškrtnuté písmo
\n ... ruší \b,\i\o,\u \n normální písmo
\x[+/-]pozice \x="1,5" pozice v palcích ve směru X
\y[+/-]pozice \y="0,5" pozice v palcích ve směru Y
\a="zarovnání" \a="c" ... centrovat zarovnání textu C..centrovat, R nebo P zprava, ostatní zleva; zarovnání funguje pouze pro typ vloženého objektu {? ...\t="text"}


Lze také použít jinou variantu pro formátované texty: {?formatovaci znaky\t="Text k tisku"} Pro formátování lze použít stejné formátovací znaky jako pro funkci {!formatovaciznaky}. Hlavní rozdíl je v tom, že program vytiskne text dle parametru \t jako jeden text s využitím formátování fontů dle předchozích parametrů a po skončení tisku zůstává pozice k tisku dalších znaků beze změny (na stejné pozici jako by text nebyl vytisknut). Také font je nastaven na předchozí stav. Hlavní využití je pro tisk nápisů, které je nutné vytisknout proporcionálním písmem (např. Arial nebo Times New Roman) Příklad: {?\f="Times New Roman"\c="255"\a="left"\s=+1\t="Proporcionalni text"}

Upozornění
Pro úpravu formulářů je potřeba mít znalosti o používání funkcí a programování a při úpravě stávajících formulářů je třeba být maximálně opatrný. Autoři programu nenesou zodpovědnost za chybné úpravy formulářů provedené uživateli.



Nová možnost vkládání formátovaného textu v sestavách vytvářených pomocí DEF souboru.

Popis syntaxe:
{?formatovaci znakyt="Text k tisku"}Popis syntaxe:

Pro formátování lze použít stejné formátovací znaky jako pro funkci {!formatovaciznaky}. Hlavní rozdíl je v tom, že program vytiskne text dle parametru t jako jeden text s využitím formátování fontů dle předchozích parametrů a po skončení tisku zůstává pozice k tisku dalších znaků beze změny (na stejné pozici jako by text nebyl vytisknut). Také font je nastaven na předchozí stav. Hlavní využití je pro tisk nápisů, které je nutné vytisknout proporcionálním písmem (např. Arial nebo Times New Roman)

Příklad:
{?f="Times New Roman"c="255"a="left"s=+1t="Proporcionalni text"}.
Nově jsou doplněny tyto formátovací znaky:

Znak Hodnota Popis
r="cislo_znakove_sady" 1 výchozí
2 symbol
238 Východní Evropa
a="alignment" R nebo P zarovnání vpravo
C centrovat
ostatní vlevo


Technická poznámka
Ve standardních sestavách tisknutých pomocí DEF souboru je možné ve výrazech použít proměnnou MAX_LINE, která vrací aktuální počet řádků na stránce (dle nastavení tiskárny z konfigurace programu).
Nastavení do menu programu kód menu 7,11
Při tisku dokladů označených příznakem očíslování dodávek se použije režim pro tisk mezisoučtů za dodávky i v případě, že doklad má jen jednu dodávku (pro tisk hlaviček dodávek musí existovat sekce .M5 nebo .M6 v definičním souboru sestav)

Při tisku dokladů lze využívat ve výrazech pole s názvy položek dle struktury jednotlivých tabulek vracející hodnoty z operací, karet nebo hlavičky dokladu. Podobně lze používat pole z dalších tabulek (s odpovídajícím aliasem)

Struktura Alias Popis Příklad
OPERACE   operace dokladu #{Kod}
DOKLAD DOK. údaje z hlav.dokladu #{FormatDate(DOK.DatOdeslan,"dd.mm.yyyy")}
INI INI. údaje z INI hodnot #{Str(INI.Dan1Sazba,5,1)}
KONFIGUR KFG. údaje z konfigurace #{Str(KFG.Pokladna,3,0)}
KARTA KAR. skladové karty #{KAR.Vyrobce}
KARTAZAS ZAS. zásoby na kartách #{Str(ZAS.PrumerCena,8,2)}
DOKLADSL DKS. sloučený doklad (DL) #{DKS.Jmeno+DKS.ExtJmeno1}
ADRESA ADS. adresa dle sl.dokladu #{using(ADS.KJmeno,20)}

(DKS. a ADS. jen u dokladů s dodávkami)
Vrácené hodnoty nemusí být zarovnané na pevný počet znaků dle šířky pole. Pro úpravu délky je vhodné využít funkce using, setright apod. Číselné hodnoty jsou vraceny jako čísla (a ne jako řetězec znaků). Lze také využít zkrácené vyhodnocování polí pomocí proměnných #jmeno_pole, např. samostatně zapsané #DOK.DatOdeslan odpovídá číselné proměnné #6. Takto lze ale vyhodnocovat i pole, které nemají přidělenou číselnou proměnnou. Takto vyhodnocené pole nejsou zarovnané na pevný počet míst jako číselné proměnné. Čísla jsou zobrazena v obecném formátu bez mezer.

Je možné nastavovat také hodnoty proměnných, které lze zjišťovat pomocí funkce GetVar("jménoproměnné"). Dosud šlo tímto způsobem nastavovat hodnoty číselných proměnných, které je možné vyhodnocovat pomocí #čísloproměnné. Pokud je použit následující formát příkazu .SET"jménoproměnné"=výraz, tak program uloží hodnotu proměnné stejně jako to provádí funkce SetVar("jménoproměnné",výraz)

Úprava tisku dodatkových formulářů za fakturou. V předchozí verzi šlo tisk operací dokladu v rámci jednoho tiskového formuláře opakovat pouze v případě, že v číselníku typů dokladů byl v sekci pro dodatek uvedený formulář Dodací list. Obdobné nastavení se nově použije i pro všechny formuláře obsahující kdekoli v názvu sekce vykřičník. Pokud je tedy v DEF souboru definován například formulář [Form3!], tak do sekce pro dodatek se uvedete Form3! a program pak bude při tisku dokladu tisknout za běžným formulářem ještě druhý formulář Form3! a tento formulář může také používat sekci .M1 (a jiné sekce) pro výpis jednotlivého zboží.



Komponenty pro zobrazování 1D čárových kódů tisknutých pomocí definičního souboru sestav

Pro tisk čárových kódů lze použít tuto definici:{|TypČárovéhoKódu;Kod;šířka_v_palcích;výška_v_palcích}

TypČárovéhoKódu Popis
EAN8B, EAN13B, EAN128B, CODE128B čárový kód s využitím nových komponent bez textového popisu
EAN8T, EAN13T, EAN128T, CODE128T čárový kód s využitím nových komponent s textovým popisem v kódu

U čárového kódu ve formátu EAN128B, popř. EAN128T se automaticky dopočítává kontrolní číslice, což může způsobovat problémy při čtení čárových kódů (doporučujeme tedy raději použít Code128T).
V čárovém kódu může být také vložen speciální znak označovaný jako "FNC1", který se používá jako prefix pro rozlišení typu údaje, který bude následovat. Jde o situace, kdy čárový kód obsahuje více různých informací (kód zboží, šarži, datum výroby, ..) viz. např. https://en.wikipedia.org/wiki/GS1-128. Pro tisk znaku FNC1 vložte do textu na odpovídající místo znak ^.


Podpora pro tisk QR kódů v sestavách vytvářených za pomocí definičního souboru sestav.

V DEF souboru použijte následující formát pro vložení QR2 kódu {|QRx;Kod;šířka_v_palcích;výška_v_palcích}
x je nepovinný znak vyjadřující tzv. EccLevel - 0..Lowest, 1..Medium, 2..Quality, 3..Highest
V kódu můžete definovat např. kód pro QR platbu nebo odkaz na webové stránky (vč. http://).


Rozšíření interního vyhodnocovače používaného pro definiční soubor tiskových sestav či v generátoru sestav. Nově lze ve výrazech používat také funkce, které jsou dostupné v rámci QR2 sestav. Pokud má funkce stejný název jako interní funkce, tak pro preferenci QR2 varianty použijte před funkcí prefix QR. (např. QR2.Using). Za jménem funkce musí být vždy závorky - i v případě, že funkce nemá parametry.