Jak odřádkovat text bez mezer v tiskové sestavě
V tomto návodu si ukážeme, jak lze upravit tiskovou sestavu, aby zalamovala text u dlouhých názvů bez mezer, kde nezafunguje automatické zalamování slov.
K editaci tiskových sestav je potřeba mít oprávnění. Pokud jej nemáte, je potřeba si jej nechat přidělit nebo svěřit editaci oprávněné osobě.
U běžných názvů, jako jsou například názvy firem nebo názvy skladových karet s mezerami, stačí pro zalomení slov v tiskové sestavě zatrhnout volbu Zalamování slov a je problém vyřešen.
Následně se text automaticky zalamuje.
Totéž však nefunguje u názvů, které neobsahují žádné mezery. Pro příklad tohoto návodu jsme vytvořili skladovou kartu s názvem "FPLT403015_122_ba_47", který bychom v tiskové sestavě potřebovali zalomit. Automatické zalamování slov však v tomto případě nezafunguje, protože text se nemá sám na základě čeho rozdělit.
Zalamování pomocí výrazu podle počtu písmen
Možností, jak tento problém vyřešit na úrovni tiskové sestavy, je více. V tomto návodu ukazujeme jednu z nich.
Název bychom ideálně potřebovali rozdělit a odřádkovat po vytištění 15 znaků. Tzn. jeden řádek "FPLT403015_122_" a druhý řádek zbývající část názvu "ba_47".
K tomuto účelu použijeme funkci NxLeft, která nám zkrátí řetězec zleva na požadovanou délku. V našem případě tedy na 15 znaků. Pro odřádkování použijeme funkci NxCRLF. V posledním kroku musíme zkopírovat název od 16. znaku dále. K tomu využijeme funkci Copy.
Celý výraz bude vypadat následovně:
NxLeft(Main.Mame, 15) + NxCRLF() + Copy(Main.Mame, 16,30)
V náhledu tiskové sestavy již vidíme, že se odřádkování po 15 znacích provedlo.
Vylepšení výrazu o podmínku
Výraz výše nám dlouhý název rozdělí po 15 znacích. Problémem je, že rozdělí i názvy, které obsahují mezery. Tedy i ty, u kterých by došlo za běžných okolností k automatickému rozdělení nebo by se vešly na jeden řádek. Například název "DVD přehrávač SONY" rozdělí náš výraz na "DVD přehrávač S" a po odřádkování zůstane "ONY".
V následujících řádcích budeme používat ve větách slovo (výraz) "řetězec". Tento výraz se používá v Quick report funkcích a zastupuje libovolný text. V našem případě je tímto řetězcem název skladové karty.
Vytvoříme tedy podmínku, že pokud bude délka řetězce do 20 znaků (včetně), nebude se rozdělovat pomocí výrazu, protože víme, že se nám 20 znaků vejde na jeden řádek. Počet znaků v řetězci nám vrátí funkce NxStrLen. Využijeme této funkce ve spojení s podmínkovou funkcí If. Pokud bude řetězec delší než 20 znaků, odřádkujeme ho po 15 znacích. V opačném případě nebudeme s řetězcem pracovat.
Výraz tedy bude vypadat následovně:
if(NxStrLen(MAIN.Name)>=20, NxLeft(Main.Name, 15) + NxCRLF() +Copy(Main.Name, 16,30), Main.Name)
Podmínka nám zajistí, že se řetězec dlouhý do 20 znaků vytiskne na jeden řádek (samozřejmě musíme mít prostor na to, aby se 20 znaků na tento řádek vešlo a nedošlo k automatickému zalomení slov).
V případě kombinace záznamů, které mají názvy do 20 znaků a obsahují mezery, a záznamů bez mezer v názvu s více než 20 znaky bude tisk v pořádku a nebudeme nadbytečně zalamovat i ty názvy, kdy to není třeba.