Makrá v OpenOffice.org – jednoduchá faktúra pre podnikateľov

Július Pastierik  /  04. 08. 2010, 09:21

Hľadáte program pre tlač dvoch kópií faktúry vo formáte A5 na jednu stranu A4? Vytvorte si ju v OpenOffice.org, skopírujte pomocou makra a vytlačte.

 

Mnohí podnikatelia (napríklad slobodní umelci, ale aj tzv. „zamestnanci na živnosť“) potrebujú vystaviť faktúry iba občas, pričom ich faktúry nepresahujú veľkosť A5. V takýchto prípadoch je vhodné, aby (v rámci šetrenia papierom, t. j. lesov) kópiu pre seba aj odberateľa vytlačili na jednu stranu bežného papiera vo formáta A4.

Za týmto účelom si môžete v module Writer pripraviť dve tabuľky, ktorých obsah budú predstavovať vlastné faktúry. Pravdaže, pri vlastnej práci by bolo nepohodlné, aby ste ich museli vypisovať dvakrát, a preto je potrebné, aby ste si pripravili aj makro, pomocou ktorého dokážete skopírovať obsah jednej tabuľky do druhej. Pre jednoduchú prácu je zároveň vhodné, aby ste si do tlačiva vložili tlačidlo, pomocou ktorého faktúru skopírujete a pre ešte pohodlnejšiu prácu je možné do tlačiva vložiť aj tlačidlo pre tlač faktúry.

Pre podnikateľov, ktorí nie sú platcami DPH, sme preto pripravili jednoduché tlačivo faktúr, ktoré obsahuje spomínané funkcie. Ako písmo je použité Open Source písmo Linux Libertine – linuxlibertine.sourceforge.net. Pozor, dokument obsahuje makrá, ktoré je potrebné pri jeho otváraní povoliť.



Pre správnu funkciu je potrebné vypísať prvú („hornú“) faktúru a následne stlačiť tlačidlo Kopíruj. Týmto sa všetky údaje (úplne všetky, vrátane názvu „FAKTÚRA č.“) prenesú do druhej („dolnej“) faktúry. Pre zjednodušenie práce je pod tlačidlom Kopíruj umiestnené tlačidlo Tlač, pomocou ktorého môžete oboje faktúry ihneď vytlačiť a medzi faktúrami sú vložené aj orezové značky pre rozdelenie papiera na dve polovice.



Pravdaže, všetky prednastavené údaje si každý musí najprv upraviť podľa svojej potreby. Ešte upozorňujeme, že pri kopírovaní sa neprenáša formátovanie (veľkosť písma, jeho rez – tučné písmo, kurzíva) a ani sa nemenia veľkosti buniek tabuľky, pomocou ktorej sú faktúry vytvorené a preto, pokiaľ chcete zmeniť tieto nastavenia, musíte tak urobiť v obidvoch faktúrach.



Stiahnite si tlačivo faktúr v slovenskom alebo českom jazyku.

A pre programátorov teraz uvádzame vlastné makro pre kopírovanie obsahov tabuliek a tlač dokumentu:

REM Funkcia na výmaz znaku LF z reťazca
function Vymaz_LF (S as string) as string
 dim ps as string
 ps=s
 while instr(ps,chr$(10))<>0 ' Pokiaľ je v reťazci LF
  i=instr(ps,chr$(10)) ' Poloha LF
  ps=left(ps,i-1)+right(ps,len(ps)-i) ' Ľavá časť pred LF + pravá časť za LF
 wend
 Vymaz_LF=ps
end function

REM Procedúra skopíruje "hornú" tabuľku – faktúru do "dolnej"
sub Kopiruj_fa
 dim dokument, tabulkah, tabulkad, bunkah, bunkad as object
 dokument=StarDesktop.CurrentComponent.GetTextTables()
 dim i,j,k as integer
 for k=1 to 4
  ' Výber tabuľky s číselným údajom podľa jej názvu
  tabulkah=dokument.GetByName("Tabulka"+trim(str(k)))
  tabulkad=dokument.GetByName("Tabulka"+trim(str(k+4)))
  ' Výber buniek podľa jednotlivých tabuliek
  select case k
   case 1 ' Tabulka1 – A1 – B1, A2 – A5
    for i=0 to 1
     bunkah=tabulkah.getCellByName(chr(asc("A")+i)+"1") ' Bunka A1 – B1 z "hornej" tabuľky
     bunkad=tabulkad.getCellByName(chr(asc("A")+i)+"1") ' Bunka A1 – B1 z "dolnej" tabuľky
     bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
    next i
    for i=2 to 5
     bunkah=tabulkah.getCellByName("A"+trim(str(i))) ' Bunka A2 – A5 z "hornej" tabuľky
     bunkad=tabulkad.getCellByName("A"+trim(str(i))) ' Bunka A2 – A5 z "dolnej" tabuľky
     bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
    next i
   case 2 ' Tabulka2 – A1, A2 – B2
    bunkah=tabulkah.getCellByName("A1") ' Bunka A1 z "hornej" tabuľky
    bunkad=tabulkad.getCellByName("A1") ' Bunka A1 z "dolnej" tabuľky
    bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
    for i=0 to 1
     bunkah=tabulkah.getCellByName(chr(asc("A")+i)+"2") ' Bunka A2 – B2 z "hornej" tabuľky
     bunkad=tabulkad.getCellByName(chr(asc("A")+i)+"2") ' Bunka A2 – B2 z "dolnej" tabuľky
     bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
    next i
   case 3 ' Tabulka3 – A1 – B2
    for i=1 to 2
     for j=0 to 1
      bunkah=tabulkah.getCellByName(chr(asc("A")+j)+trim(str(i))) ' Bunka A1 – B2 z "hornej" tabuľky
      bunkad=tabulkad.getCellByName(chr(asc("A")+j)+trim(str(i))) ' Bunka A1 – B2 z "dolnej" tabuľky
      bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
     next j
    next i
   case 4 ' Tabulka4 – A1 – B1, A2
    for i=0 to 1
     bunkah=tabulkah.getCellByName(chr(asc("A")+i)+"1") ' Bunka A1 – B1 z "hornej" tabuľky
     bunkad=tabulkad.getCellByName(chr(asc("A")+i)+"1") ' Bunka A1 – B1 z "dolnej" tabuľky
     bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
    next i
    bunkah=tabulkah.getCellByName("A2") ' Bunka A2 z "hornej" tabuľky
    bunkad=tabulkad.getCellByName("A2") ' Bunka A2 z "dolnej" tabuľky
    bunkad.SetString(Vymaz_LF(bunkah.GetString)) ' Vlastný prenos
  end select
 next k
end sub

REM Procedúra vytlačí dokument na defaultnú tlačiareň
sub Tlac_fa
 dim document as object
 dim dispatcher as object
 document = ThisComponent.CurrentController.Frame
 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
end sub

 

Neprehliadnite: