OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru

programovani.png Minule ste si vytvorili ovládacie makrá a dnes sa s použitím týchto makier budete snažiť dostať dáta z vytvorenej faktúry do zošita faktúry.ods, tak isto si vytvoríte makrá, ktoré vám faktúru uložia pod originálnym názvom.  

Začnite opäť tým, že si otvoríte dokument faktúra a prejdite do editora makier do modulu faktura , ktorý ste si vytvorili v minulom diele. Teraz si zapíšete do tohoto modulu nasledovné makrá.

Makrá sú myslím dostatočne okomentované , ale ak nebudete rozumieť, tak sa spýtajte.

Hlavné makro, ktoré bude ukladať dokument a exportovať dáta do zošitu faktúry.ods:

sub export 'pre faktúru euro
dim  tlacidlo, tlacidlo1 ,cislo,zaznam as integer
dim dokument,oDoc,octl,ocell, list, bunka ,document, dispatcher,  
bunka_zaznam,bunka_cesta as object
dim cesta as string

dim hore(1) as new com.sun.star.beans.PropertyValue
hore(0).Name = "By"
hore(0).Value = 1
hore(1).Name = "Sel"
hore(1).Value = false

document= ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dokument=stardesktop.currentcomponent
list=dokument.sheets(0)
bunka=list.GetCellByPosition(11,0)'L1
cislo=trim(bunka.string)
bunka_zaznam=list.GetCellByPosition(10,0)'K1
zaznam=trim(bunka_zaznam.string)
bunka_cesta=list.GetCellByPosition(9,0)'J1
cesta=trim(bunka_cesta.string)
bunka_odberatel=list.GetCellByPosition(5,7)'F8
odberatel=trim(bunka_odberatel.string)
'zafixovanie dát:
ovladanie.vyberlb("faktúra","C3")'dátum
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
ovladanie.vloz
'uloženie dát:
'-------------------------------------------------------------------------------
tlacidlo=msgbox("Chceš uložiť dáta z dokumentu ako záznam do databázy?",  
35,"Databáza")
if tlacidlo=6 then ' ano tlacidlo
ovladanie.uloz_novy_zosit("C:\firma\faktúry\faktúra  
"+cesta+".ods")'uloženie tohto dokumentu
if zaznam=1 then 'záznam už je v  
databáze'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'-------------tento zošit---------------------------
ovladanie.aktualizovat_tabulky("spotreba","A1")
gosub kopiruj
with ovladanie
.vyberlb("faktúra","C3")
.uloz_zosit("C:\firma\faktúry\faktúra "+cesta+".ods")
.otvor("C:\firma\databázy\faktúry.ods")
.najdi(cislo,"data")
.vloz
.uloz_zosit("C:\firma\databázy\faktúry.ods")
end with
msgbox("Všetky údaje z faktúry č."+cesta+"  boli zaktualizované  
",0,"Databáza")'hláška
'-------------------------------------------------------------------------------
elseif zaznam=0  then' zaznam nie je v databáze  
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'--------------tento zošit---------------------------------------
'--------------fix čísla faktúry---------------------------------
gosub fix
'---------------zošit----(databáza)
gosub kopiruj
ovladanie.vyberlb("faktúra","C3")
ovladanie.otvor("C:\firma\databázy\faktúry.ods")
ovladanie.vyberlb("data","A10000")
gosub vloz_novyzaznam
ovladanie.uloz_zosit("C:\firma\databázy\faktúry.ods")
msgbox("Všetky údaje boli uložené do databázy",0,"Databáza")'hláška
'-------------------------------------------------------------------------------ovladanie.uloz_zosit("C:\firma\faktúry\faktúra  
"+cesta+".ods")'uloženie a zatvorenie dokumentu
'-------------------------------------------------------------------------------
elseif zaznam=2 then'dokument bol uložený ale záznam nie  
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'--------------fix čísla faktúry---------------------------------
gosub fix
ovladanie.uloz_ako("C:\firma\faktúry\faktúra "+cesta+".ods")'uloženie  
dokumentu
'---------------zošit ----(databáza)
gosub kopiruj
ovladanie.vyberlb("faktúra","C3")
ovladanie.otvor("C:\firma\databázy\faktúry.ods")
ovladanie.vyberlb("data","A10000")
gosub vloz_novyzaznam
ovladanie.uloz_zosit("C:\firma\databázy\faktúry.ods" )
bunka_zaznam.value=1 'vloží číslo 1 do bunky K1 (že je už uložené do  
databázy)
msgbox("Všetky údaje boli uložené do databázy",0,"Databáza")'hláška
'----------------------------------------------------------------------------   
ovladanie.uloz_a_zavri'ulož a zavri
'-------------------------------------------------------------------------------
end if' koniec zaznam
'-------------------------------------------------------------------------------
elseif tlacidlo=7 then ' nie tlacidlo
tlacidlo1=msgbox("Chceš aspoň uložiť dokument ako koncept faktúra  
"+odberatel+".ods?", 35,"Databáza")
if tlacidlo1=6 then ' ano tlacidlo
bunka_zaznam.Value=2 'vloží číslo 2 do bunky K1 (že je zošit uložený, ale  
neuložené do databázy)
ovladanie.uloz_novy_zosit("C:\firma\faktúry\pripravené\faktúra  
"+odberatel+".ods")'uloženie dokumentu
ovladanie.zavri 'zavrieť dokument
elseif  tlacidlo1=7 then   'nie tlacidlo2
ovladanie.zavri       'zavrieť dokument bez uloženia
endif' koniec tlacidlo1
'-------------------------------------------------------------------------------
end if' koniec tlacidlo
exit sub
'-------------------------------------------------------------------------------
vloz_novyzaznam:
set document= ThisComponent.CurrentController.Frame
dispatcher.executeDispatch(document, ".uno:GoUPToStartOfData", "", 0,  
hore())'presun na koniec dát
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0,  
Array())'skok na nasledujúcu bunku
ovladanie.vloz
return
fix:
ovladanie.vyberlb("faktúra","J1")'číslo faktúry
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
ovladanie.vloz
return
kopiruj:
with ovladanie
.vyberlb("export","A2:GP2")
.zkopiruj
end with                
return
end sub

 

Ako vidíte, sú tu veľmi málo používané samotné procedúry – väčšinou sú volané makrá z modulu ovladanie s nejakými premennými.

Každý si musí v tomto makre prepísať cestu k súborom podľa toho, kde ich má skutočne umiestnené. V editore makier si zvoľte možnosť Upraviť | Nájsť a nahradiť a nahraďte za vašu; napríklad pre Windows: /home/firma/faktúry/pripravené/ za C:\firma\faktúry\pripravené\ .

Teraz si vložte do modulu faktura ďalšie makro. Toto je makro len pre používateľov systému Linux, používatelia systému Windows si jeho spúšťanie zrušia, ako bolo písané v treťom diele: Nástroje | Prispôsobiť | Udalosti | Otvoriť dokument.

sub skontroluj_sablona_faktura
'je to tu len kvôli tomu, že v Linuxe sa to s iným obsahom otvára pri spustení aplikácie je možné, že sa otvorí dokument ako .ots
ovladanie.nastav_sablonu("faktúra") 'názov dokumentu
end sub

Makro nastav_sablonu je v makrách modulu ovladanie, v súbore s makrami tohto modulu: Ovládacie makrá . Je to tu preto, že v Linuxe sa môže stať, že si vytvoríte pevný link a ak otvoríte napríklad súbor faktúra.ots z iného adresára, ako je adresár so šablónami, môže se stať, že by vám ho program otvoril ako faktúra.ots a nie ako nový.ods. Mne sa to osobne stalo, a preto som to ošetril týmto makrom.

Príklad: súbor faktúra.ots máte defaultne vo vašom domovskom adresári home/firma/šablony/ a vytvoríte nového používateľa user, ktorému vytvoríte pevný odkaz na priečinok šablony v adresári /home/user/. Ak ho otvorí kliknutím, akcia, ktorá sa vykoná (pokiaľ ju nemá nastavenú inak), je otvoriť a nie otvoriť ako nový. Otvorí se súbor faktúra.ots z umiestnenia /home/user/šablony/ a nie z pôvodného umiestnenia home/firma/šablony/ . Týmto makrom, ktoré je spustené pri otvorení súboru, ho zavriete a otvoríte ako nový na základe šablóny faktúra.ots. Musíte však mať povolené spúšťanie makier aj z tejto novej cesty (viď prvý diel OpenOffice.org vo výrobnej firme 1). Samozrejme, kto to nebude potrebovať, tak si ho tiež dezaktivuje.

Ďalšie makro v module faktura bude slúžiť na tlač dokumentu (je to, ako vidíte, cez nahrávač makier), nakoľko som to robil dávnejšie a je to funkčné, nechal som to tak:

sub tlacit_fakturu
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 2
args1(1).Name = "Collate"
args1(1).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
end sub

A posledné v tomto module je makro na export do .pdf:

sub fa_export_pdf
dim dokument, list, bunka as object
dim cesta as string
dokument=stardesktop.currentcomponent
list=dokument.sheets(0)'list1
bunka=list.GetCellByPosition(9,0)'J1
cesta=trim(bunka.string)'číslo faktúry
ovladanie.SheetToPDF("pdf","/home/firma/faktúry/pdf/faktura "+cesta+".pdf")'volanie makra SheetToPDF s premennými názvu listu a cesty pod akou sa uloží .pdf
ovladanie.vyberlb("faktúra")
end sub

Samozrejme aj tu si zmeníte cestu podľa seba. Teraz si môžete zavrieť editor makier. Predpokladám, že máte stále otvorený dokument bez_názvu1. Teraz si na paneli Ovládacie prvky formulára zapnite režim návrhu tak, ako ste to robili v minulých dieloch, a vyvolajte kontextovú ponuku (ovládací prvok) na tlačidle Ukončiť, ktoré ste si tiež minule vytvorili. Samozrejme predtým musíte odomknúť list. Prejdite na kartu Udalosti a vyberte Pri inicializácii.

UdalostiUdalosti

Tu priradíte činnosť, a to makro export z modulu faktura.

Priradiť činnosťPriradiť činnosť

Vyberač makierVyberač makier

Pri tejto činnosti je potrebné mať nainštalované prostredie Java (JRE), pokiaľ ho nemáte, OpenOffice.org vás na to upozorní.

Teraz tak isto priraďte makro tlacit_fakturu k tlačítku Tlač a k tlačítku Export do pdf samozrejme makro fa_export_pdf. K tlačidlu Nový si priradíte makro neskôr, nakoľko je v module odberatel, ktorý je spätý so zošitom odberateľ a o ňom si povieme v inej časti seriálu.

Nemusíte si dialóg Úpravy ovládacích prvkov zatvárať a opäť otvárať na novom prvku, stačí, ak myšou označíte ďalší prvok (tlačidlo), a už upravujete vlastnosti tohto prvku, samozrejme bez zatvorenia dialógu.

Teraz si nezabudnite na paneli Ovládacie prvky formulára vypnúť režim návrhu, zamknite list a uložte ako faktúra.ots. Ešte vám odporúčam dokument uložiť napríklad do záloh ako faktúra.ods, lebo makro vám zapisuje a mení šablónu. No ak by ste potrebovali niečo stratené alebo pôvodné nájsť, tak to bude v poslednom uloženom dokumente. Pokiaľ máte nastavenú cestu k zálohám ako v prvom diele, tak si ešte nastavte v Nástroje | Možnosti | Načítať/uložiť | Vždy vytvoriť záložnú kópiu a hľadajte potom v priečinku firma/zálohy/OOo.

Nastavenie vytvorenia záložnej kópieNastavenie vytvorenia záložnej kópie

Otvorte znovu dokument na základe šablóny faktúra.ots (bez_názvu1) a môžte si vyskúšať, ako fungujú makrá. Stlačte tlačidlo Export do pdf a pozrite sa na vytvorený pdf dokument v priečinku firma/faktúry/pdf ,teraz si vyskúšajte tlačidlo Ukončiť a skontrolujte v súbore firma/databázy/faktúry.ods záznam, ktorý ste exportovali, a tiež v priečinku firma/faktúry dokument, ktorý sa uložil. Skúste a skontrolujte všetky možnosti makra spúšťaného tlačidlom Ukončiť.

Ak je všetko v poriadku, môžete pokračovať ďalej. Pokiaľ ste sa dostali až sem, ďalšiu prácu na systéme už poľahky zvládnete. Nabudúce začnete pracovať na ďalších dokumentoch spätých s faktúrou.

 

(Jako ve škole) Průměr: 1,17 | Hodnotilo: 24
 

Komentáře

user avatar Miroslav Gešvantner
Odpovědět
OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
20. 05. 2009, 13:49:55
Pre tých, ktorý si stiahli makrá z modulu faktura : najnovšia upravená verzia makra export je priamo tu v texte na stánke nakoľko verzia na stiahnutie je staršia.
Najnovšie verzie budú ponúknuté na stiahnutie hneď v ďalšom diele.
V makre je upravená časť ak bol dokument uložený, ale dáta neexportované a časť keď sa pripravený dokument neuloží pod číslom, ale pod menom odberateľa do predpripravených.
user avatar Riso
Odpovědět
OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
25. 05. 2009, 17:14:03
Čakám na pokračovanie.Už sa neviem dočkať.Uvítal by som niečo podobné aj pre obchodnú firmu.
user avatar Miroslav Gešvantner
Odpovědět
Re:OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
25. 05. 2009, 21:06:14
No pre obchodnú firmu je to ešte jednoduchšie nakoľko nepracuje so vstupmi do výroby. Stačí tento sytém trochu pozmeniť (oklieštiť).
Dokonca by to malo potom zrýchliť jednotlivé načítania dokumentov (nakoľko nebudú obsahovať toľko výpočtov. Pokiaľ by bol záujem môžem venovať po skončení častí o výrobe nejaký ten diel úpravám pre obchodnú firmu.
user avatar Čižma
Odpovědět
Re:Re:OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
26. 05. 2009, 16:30:51
Velice se přimlouvám za to, aby jste úpravy pro obchodní firmu zpracoval. Rád bych Vám poděkoval za fantasticky zpracovaný seriál, který mi - jak nikdo před tím - ukázal možnosti OpenOffice.
user avatar Miroslav Gešvantner
Odpovědět
OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
27. 05. 2009, 10:00:56
Ďakujem za podporu-poteší. Určite nejaký ten diel venujem aj úprave pre obchodnú firmu, no až keď seriál bude v štádiu, keď bude systém vyzerať tak ako je prezentovaný v úvode. Naozaj uvidíte že použijete väčšinu dokumentov ktoré popisujem teraz len z nich odmažete veci ktoré nebudete potrebovať + drobná zmena v makrách napríklad v rozsahu oblasti z ktorej sa kopírujú dáta.
user avatar Miroslav Gešvantner
Odpovědět
OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
27. 05. 2009, 10:01:00
Ďakujem za podporu-poteší. Určite nejaký ten diel venujem aj úprave pre obchodnú firmu, no až keď seriál bude v štádiu, keď bude systém vyzerať tak ako je prezentovaný v úvode. Naozaj uvidíte že použijete väčšinu dokumentov ktoré popisujem teraz len z nich odmažete veci ktoré nebudete potrebovať + drobná zmena v makrách napríklad v rozsahu oblasti z ktorej sa kopírujú dáta.
user avatar Miroslav Gešvantner
Odpovědět
OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
27. 05. 2009, 10:02:14
prepáčte odoslalo mi to dva krát (stane sa)
user avatar peter
Odpovědět
OpenOffice.org vo výrobnej firme 5 - Makrá pre faktúru
1. 09. 2015, 15:53:59
Dobrý deň.
Zaujal ma Váš seriál, nakoľko hľadám riešenie pre reštauračnú činnosť. chcel som vyskúšať celý systém, žial na makrách mi hlási chybu syntaxe, tak neviem...už je dosť veľký časový odstup tak asi preto.
ozvite sa prosím, či mi viete s tým pomôcť, alebo mám hľadať niečo iné. :)

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Miroslav Gešvantner

Miroslav Gešvantner

 
 
 
woo jaw demo hz