OpenOffice.org vo výrobnej firme 9 - Objednávka 3, makrá

calc.png Dokument objednávka máte takmer hotový, chýbajú vám už len makrá a prepojenie s ovládacími prvkami. Dnes popracujete práve na tomto. Stiahnite si súbor s makrami pre modul objednavka - objednavka.bas.  

Dokument objednávka máte takmer hotový, chýbajú vám už len makrá a prepojenie s ovládacími prvkami. Dnes popracujete práve na tomto. Stiahnite si súbor s makrami pre modul objednavka - objednavka.bas.

Vloženie makier

Začnite opäť tým, že si otvoríte dokument objednávka a prejdete v editore makier do modulu objednavka, ktorý ste si vytvorili v diele 4 (makrá1), Nástroje | Makrá | Usporiadať makrá | OpenOffice.org Basic... . Označte si makro main z modulu objednavka a stlačte upraviť a otvorí sa vám editor makier.

Najjednoduchšie si vložíte do tohto modulu makrá zo zdrojového súboru objednavka.bas tak, že si vyberiete vo vrchnej lište tlačidlo Vložiť zdrojový text BASIC-u a vyberiete si súbor objednavka.bas, samozrejme odtiaľ, kam ste si ho uložili.

Tlačidlo vložiť zdrojový text BASIC-uTlačidlo vložiť zdrojový text BASIC-u

Teraz si len upravíte v makrách cesty podľa toho, kde máte systém, ktorý tvoríte. Najjednoduchšie je to cez Upraviť | Nájsť a nahradiť [Ctrl+f] napríklad podľa nasledovného obrázku.

Nájsť a nahradiťNájsť a nahradiť

Pokiaľ to máte, zatvorte editor makier a môžete si priradiť makrá k jednotlivým ovládacím prvkom (tlačidlám), tak ako ste to už robili v dokumente faktúra (Makrá pre faktúru).

Priradenie makier k ovládacím prvkom

V skratke: zapnite na paneli Návrh formulára, režim návrhu zap/vyp a nasleduje kontextové menu Ovládací prvok... samozrejme na vybratom ovládacom prvku. Potom karta udalosti a v políčku pri inicializácii vyberiete makro. Priradenie makier z modulu objednavka k tlačidlám v liste objednávka je:

Tlačidlo: Export do PDF - makro: ob_export_pdf.

Tlačidlo: uložiť do databázy - makro: ulozit_objednavku.

Tlačidlo: prezrieť list výroby - makro: prezriet_list_vyroby.

Tlačidlo: tlačiť - makro: tlacit_objednavku.

Tlačidlo: + list výroby - makro: tlacit_aj_list_vyroby.

Tlačidlo: len list výroby - makro: tlacit_list_vyroby.

Tlačidlo: nový - k tomuto tlačidlu si priradíte makro neskôr (pokiaľ budete chcieť) nakoľko makro spúšťa makro z modulu odberatel, ktoré zatiaľ ešte nemáte.

Teraz prejdite na list list výroby a tlačidlu Späť na objednávku priraďte makro spet_na_objednavku.

Vypnite na paneli Návrh formulára, režim návrhu zap/vyp a makrá by ste mali priradené.

Vyberte Nástroje | Možnosti | OpenOffice.org Calc zobraziť, odznačiť Hlavičky stĺpcov/riadkov a Záložky listov a nechať vybratú možnosť nulové hodnoty, ako v diele 3 faktúra odstavec záverečné formátovanie (Faktúra 2).

Teraz prejdite na list objednávka C4 , zamknite list, uložte si súbor ako šablónu objednávka.ots do priečinku šablony a môžete súbor zavrieť.

Bol som stručnejší preto, že tieto úkony ste už robili v dokumente faktúra.

Popis funkcie makier v module objednavka

Keďže ste to tak šikovne rýchlo urobili, pozrieme sa ešte na funkciu makier trošku podrobnejšie.

Ako som už písal v diele 4 (Ovládacie makrá), makrá v module ovladanie sú využívané všetkými ostatnými modulmi, tak je to aj v tomto module (objednavka).

Na začiatok uvediem malý príklad s makrom spet_na_objednavku.

Samotné makro je:

sub spet_na_objednavku
ovladanie.vyberlb("objednávka")
end sub

Popis: ovladanie.vyberlb znamená, že voláte makro vyberlb z modulu ovladanie a ("objednávka") je názov listu a je to premenná, ktorú tomuto makru predávate. To znamená, že po inicializácii makra (napríklad stlačení tlačidla ku ktorému ste makro priradili) prejdete pomocou tohto makra z iného listu na list objednávka.

Makro vyberlb v module ovladanie pracuje nasledovne.

Makro:

sub vyberlb(optional list as string,optional bunka as string)
'Volanie procedúry - vyberlb("názov listu","A2") označí vybratú bunku v určenom liste
'Procedúra sa dá volať aj -  vyberlb("názov listu") prejde na vybratý list
'Procedúra sa dá volať aj -  vyberlb("","A2") označí vybratú bunku v aktívnom liste (ten ktorý práve vidíte)
znova:
dim oSheet,oCell,octl,oDoc as object ,tlacidlo as integer
set oDoc=ThisComponent
if IsMissing(list) or list = "" then
oSheet = oDoc.getCurrentController.getActiveSheet
else
on error goto chyba
with ThisComponent
.CurrentController.setActiveSheet(.Sheets.GetByName(list())
end with
set oSheet = ThisComponent.Sheets.GetByName(list)
end if
if IsMissing(bunka) or bunka = "" then
else
set oCell=oSheet.getCellRangeByName(bunka)
octl =ThisComponent.getCurrentController()
octl.Select(oCell)
end if
exit sub
chyba:
tlacidlo=msgbox ("neexistuje list: " +list+ Chr$(13)+ "bude vytvorený nový list s názvom: "+list+Chr$(13)+"Pokračovať?",52,"chyba")
if tlacidlo=6 then
oSheet = oDoc.createInstance( "com.sun.star.sheet.Spreadsheet" )
oDoc.Sheets.insertByName( list, oSheet )
oDoc.store("",Array()
elseif tlacidlo=7 then
stop
endif
msgbox("Chyba odstránená list: "+list+" bol vytvorený",0,"Chyba vyberlb")
goto znova
end sub

Na začiatku za apostrofom sú komentáre s akými premennými sa dá makro volať.

Potom nasleduje:

if IsMissing(list) or list = "" then
oSheet = oDoc.getCurrentController.getActiveSheet

Čo znamená, že ak neexistuje zadaný list, alebo je zadaný prázdny list, tak potom pracuje v aktívnom liste. Ak by nastala chyba, napríklad z dôvodu, že volané meno listu nie je v zošite, beh makra preskočí na návesť chyba. Táto časť makra obsahuje dialógové okno tlacidlo, kde, ak zvolíte Áno, zabezpečí vytvorenie nového listu, ktorý bude mať názov, ktorý voláte, uloží dokument.

oSheet = oDoc.createInstance( "com.sun.star.sheet.Spreadsheet" )
oDoc.Sheets.insertByName( list, oSheet )
oDoc.store("",Array()

Potom vám oznámi, aký list bol vytvorený, a beh makra prejde na začiatok na návesť znova:

msgbox("Chyba odstránená list: "+list+" bol vytvorený",0,"Chyba vyberlb")
goto znova

Ak zvolíte Nie, beh makra sa zastaví.

elseif tlacidlo=7 then
stop.

Ak však existuje list (čo je prípad aj po odstránení chyby), tak prejde na volaný list.

with ThisComponent
.CurrentController.setActiveSheet(.Sheets.GetByName(list())
end with
set oSheet = ThisComponent.Sheets.GetByName(list)

Druhá časť tohto makra sa venuje bunke, ktorá ak nie je zadaná, tak sa nič neudeje a ak zadaná je...

else
set oCell=oSheet.getCellRangeByName(bunka)
octl =ThisComponent.getCurrentController()
octl.Select(oCell)

...tak označí volanú bunku.

O príkazoch v StarOffice Basic-u (if, else, endif) a vetvení sa dozviete viac napríklad v seriáli pána Pastierika. Takže tento malý príklad ukazuje ako použiť makrá z modulu ovladanie aj v iných dokumentoch.

Test

Chcete otvoriť iný dokument (zošit) napríklad s názvom test? Cesta pre Windows C:\firma\test.ods, alebo pre Linux ~/firma/test.ods. Na malý pokus si vytvorte (v knižnici firma, v hocijakom module, okrem ovladanie) makro pre Windows:

sub test
ovladanie.otvor("C:\firma\test.ods")
end sub

Alebo pre Linux:

sub test
ovladanie.otvor("~/firma/test.ods")
end sub

A teraz ho spustite (Nástroje | Makrá | Spustiť makro...) a pozrite sa na výsledok. Dúfam, že test dopadol úspešne, a po tomto malom príklade budem pokračovať v popise funkcie makier pre objednávku.

Makro tlacit_objednavku

Makro prejde na list pdf, potom dá tento list vytlačiť a prejde späť na list objednávka.

Pri tomto makre musí byť Calc nastavený defaultne na tlačiť len vybrané listy (ako samozrejme nastavený máte).

Makro prezriet_list_vyroby

Makro najskôr aktualizuje obe tabuľky sprievodcu dátami na liste výroby a potom zobrazí tento list. Kto nemá tabuľku spievodcu dátami v D49 tak si vymaže v makre riadok .aktualizovat_tabulky("list výroby","D50"). Makrá tlacit_list_vyroby a tlacit_aj_list_vyroby sú podobné ako tlacit_objednavku.

Makro ob_export_pdf

Toto makro najskôr zistí z listu, či je to objednávka, alebo ponuka. Ak je to objednávka, tak zavolá makro SheetToPDF z modulu ovladanie, ktoré ho uloží do priečinku pdf v objednávkach ako názov odberateľa + ob + číslo.pdf. Pokiaľ je to ponuka, udeje sa podobné, len priečinok je pdf v ponukách a názov súboru bude názov odberateľa + ponuka + číslo.pdf.

Makro ulozit_objednavku

Makro najskôr skopíruje dáta pre export do schránky, následne zistí o aký dokument sa jedná (objednávka/ponuka), ak je to objednávka, tak sa spýta, či chcete uložiť záznam do databázy.

Dialóg pri uložení objednávkyDialóg pri uložení objednávky

Ak áno, tak zistí, či už bol záznam uložený, alebo nie, alebo či to bola predtým cenová ponuka, a podľa toho uloží, alebo aktualizuje záznam, potom ho exportuje do faktúry.ots a objednavky.ods a uloží dokument do objednávok pod názvom odberateľa+ob+číslo.ods. Pokiaľ nie, tak sa spýta, či chcete aspoň uložiť dokument, ak áno, tak opäť uloží ako v predošlom prípade len bez exportu dát.

Dialóg pri odmietnutí uloženia záznamuDialóg pri odmietnutí uloženia záznamu

Ak nie, tak zavrie dokument bez uloženia. Pokiaľ je to ponuka, tak zistí či bola uložená, ak áno, tak aktualizuje záznam, ak nie, tak exportuje záznam do objednavky.ods a uloží dokument do ponúk pod názvom odberateľa+ponuka+číslo.ods.

Záver

Vo všetkých makrách si samozrejme prepíšte cesty uloženia a otvorenia dokumentov podľa vlastných priečinkov. Na koniec si otvorte dokument objednávka a otestujte jeho funkčnosť ako ste to robili pri faktúre (Faktúra popis a kontrola funkčnosti).

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

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