Na ukážku a ako pomoc si môžete stiahnuť súbor kontakty.ods so súborom kontakty.bas.
Popis
Dokument sa skladá z troch listov: vklad, odberatelia a dodavatelia. List vklad slúži, ako už názov listu napovedá,
na vloženie alebo editáciu údajov o odberateľoch a dodávateľoch. Tento list obsahuje aj jedno
tlačidlo, jedno zaškrtávacie pole a dve tlačidlá možností v
zoskupení. Tlačidlo slúži na spustenie makra pre uloženie a export, zaškrtávacie pole je prepojené s bunkou, v ktorej
mení hodnotu podľa toho, či chceme nový záznam, alebo zmeniť pôvodný. Tlačidlá možností slúžia na určenie vzťahu
kontaktu k vám - či je to odberateľ alebo dodávateľ (do ktorého listu sa dáta nakoniec uložia). Listy odberatelia a
dodavatelia slúžia ako databáza. Dáta do faktúry a objednávky sú exportované z listu odberatelia.
Tlačový výstup dokument nemá, nakoľko slúži len ako databáza. Kto chce, môže si ho však vytvoriť v
novom liste - napríklad, ak by chcel tlačiť adresy na obálky ap. Export dát zabezpečuje makro v
module Kontakty.
Vytvorenie dokumentu
Začnite, ako zvyčajne, otvorením čistého dokumentu v OpenOffice.org Calc a uložte si ho ako kontakty.ods do priečinku databázy. Následne si vytvorte (premenujte) tri listy s názvami vklad, odberatelia a dodavatelia. V listoch dodavatelia a odberatelia si vyplňte hlavičky stĺpcov podľa vzorového dokumentu. Prejdete k tvorbe srdca tohto dokumentu - listu vklad.
List vklad
Najskôr si tento list naformátujte podľa obrázku. Teraz si vyplňte hlavičky stĺpcov v riadku 1 podľa vzorového súboru.
Vzorce
A2=IF(AND(B27="1";ISBLANK(B10));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;1;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;1;0);B10));B10)
Vloží názov firmy z bunkyB10, pokiaľ je bunka B10 vyplnená, pokiaľ je zaškrtnuté ič.pôvodné, nájde podľa názvu v B8, alebo B9 názov odberateľa.
B2=IF(AND(B27="1";ISBLANK(B11));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;2;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;2;0);B11));B11)
Vloží adresu.
Podmienky sú vo všetkých vzorcoch v tomto riadku totožné (a to pokiaľ je bunka B10 vyplnená, alebo pokiaľ je zaškrtnuté ič. pôvodné).
C2=IF(AND(B27="1";ISBLANK(B12));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;3;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;3;0);B12));B12)
Mesto.
D2=IF(AND(B27="1";ISBLANK(B13));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;4;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;4;0);B13));B13)
PSČ
E2=IF(AND(B27="1";ISBLANK(B14));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;5;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;5;0);B14));B14)
IČO
F2=IF(AND(B27="1";ISBLANK(B15));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;6;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;6;0);B15));B15)
IČ DPH
G2=IF(AND(B27="1";ISBLANK(B16));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;7;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;7;0);B16));B16)
Splatnosť
H2=IF(AND(B27="1";ISBLANK(B17));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;8;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;8;0);B17));B17)
Telefón
I2=IF(AND(B27="1";ISBLANK(B18));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;9;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;9;0);B18));B18)
Fax
J2=IF(AND(B27="1";ISBLANK(B19));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;10;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;10;0);B19));B19)
Mobil
K2=IF(AND(B27="1";ISBLANK(B20));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;11;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;11;0);B20));B20)
Kontaktná osoba
L2=IF(AND(B27="1";ISBLANK(B21));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;12;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;12;0);B21));B21)
M2=IF(AND(B27="1";ISBLANK(B22));IF($O$2="1";VLOOKUP($B$8;odberatelia.$A$1:$N$495;13;0);IF($O$2="2";VLOOKUP($B$9;dodavatelia.$A$1:$N$500;13;0);B22));B22)
Komodita
N2=B23 - ič (jedinečné identifikačné číslo záznamu)
Toto sú vzorce v druhom riadku, ktorý je zároveň aj exportovaný do listov odberatelia, alebo dodavatelia v tomto zošite. Ďalšie vzorce si vložte do nasledovných buniek tabuľky:
C8=VLOOKUP(B8;odberatelia.A1:N495;14;0) - pôvodné číslo odberateľa.
C9=VLOOKUP(B9;dodavatelia.A1:N500;14;0) - pôvodné číslo dodávateľa.
B23=IF(B27="1";D23;C23) - ič je unikátne číslo pre každý záznam, tu je zistené, či má byť použité pôvodné pre zmenu záznamu, alebo nové pre nový záznam.
C23=IF(A24=1;VLOOKUP(B8;odberatelia.A2:N495;14;0);IF(A24=3;VLOOKUP(B9;dodavatelia.A1:N500;14;0);IF(A24=2;B25+1;IF(B26>1;B26+1;B26))))
Číslo ič nové je nájdené podľa toho, či sa jedná o odberateľa, alebo dodávateľa.
D23=IF(O2="1";C8;C9) - ič nové podľa toho, či sa jedná o odberateľa, alebo dodávateľa.
A24=IF(O2="1";IF(B27="1";1;IF(ISNUMBER(VLOOKUP(A2;odberatelia.A1:N495;14;0));1;2))F(B27="1";3;IF(ISNUMBER(VLOOKUP(A2;dodavatelia.A1:N500;14;0));3;4)))
Záznam
Hodnoty v predchádzajúcom vzorci znamenajú:
- odberateľ evidovaný
- odberateľ nový
- dodávateľ evidovaný
- dodávateľ nový
B25=IF(ISNUMBER(MAX(odberatelia.N2:N495));MAX(odberatelia.N2:N495);1)
Zistenie čísla nového záznamu odberateľa.
B26=IF(ISNUMBER(MAX(dodavatelia.N2:N500));MAX(dodavatelia.N2:N500);1)
Zistenie čísla nového záznamu dodávateľa.
O2 - táto bunka je prepojená s tlačidlami možností, ktoré určujú vzťah kontaktu k vám - či je to odberateľ, alebo dodávateľ. Vzorce ste dokončili, teraz si vytvorte ovládacie prvky, ako ste ich robili v predchádzajúcich dieloch.
- Tlačidlo Vložiť
- Zaškrtávacie políčko cca v bunke D23, ktoré je prepojené s bunkou B27
- Zoskupenie, ktorého tlačidlá možností sú prepojené s bunkou O2
Tlačidlo a zaškrtávacie políčko si vložte podľa obrázku, nezabudnite zaškrtávacie políčko prepojiť s bunkou B27 a určiť referenčnú hodnotu zapnuté na číslo1 (tieto prvky ste už vkladali aj pri tvorbe dokumentov v minulých dieloch).
Zoskupenie s Tlačidlami možností si vložte nasledovne. Na paneli ovládacie prvky formulára si zapnite Viac ovládacích prvkov a vyberte ovládací prvok Zoskupenie. Umiestnite ho na miesto v bunkách A7-A9 a následne sa vám otvorí Sprievodca prvkom zoskupenia. Tu si zadajte názvy polí voľby (šípkou, alebo Enterom ich dostanete medzi možné polia).
Teraz zvoľte ďalej (východzí výber poľa je odberateľ) a znova ďalej, hodnota polí 1 - odberateľ, 2 - dodávateľ. V ďalšom kroku doplňte názov zoskupenia, v tomto prípade vzťah a stlačte Dokončiť. Teraz si na tomto zoskupení pravým tlačidlom myši vyvolajte kontextové menu a vyberte Zoskupiť | Upraviť zoskupenie. Vyberte tlačidlo možností odberateľ, vyvolajte kontextové menu a vyberte Ovládací prvok... V tabuľke Dáta určite prepojenú bunku O2. Tak isto prepojte aj pole výberu dodávateľ s tou istou bunkou O2.
Tlačidlo možností prepojenie s
bunkou
Ďalej najskôr opäť na zoskupení vyvolajte kontextové menu a vyberte Zoskupiť | Opustiť skupinu,
potom na paneli Ovládacie prvky formulára vypnite Návrh formulára a vyskúšajte si
funkciu vami vytvoreného zoskupenia.
Pri prepínaní medzi oboma poliami sa vám hodnota bunky O2 mení na 1, alebo 2 a tým aj určujete hodnotu pre vzorce a
makro, podľa ktorej zisťuje, či je to záznam odberateľa, alebo dodávateľa. Teraz si označte bunku B8, vyberte
Dáta | Platnosť | Povoliť oblasť buniek a do rozsahu zadajte
odberatelia.$A$2:$A$500. V bunke B9 to urobte isté, len rozsah buniek je dodavatelia.$A$1:$A$500. V
bunke B22 vyberte namiesto Povoliť oblasť buniek Zoznam a zadajte si zoznam
komodít, ktoré vyhovujú vám.
Uložte si dokument a ďalej bude nasledovať vloženie makra, ktoré následne priradíte k tlačidlu Vložiť. Editor makier si viete otvoriť, tak si ho otvorte v module kontakty. Vložte si doň nasledovné dve makrá.
Makro export slúži na exportovanie záznamov o odberateľoch do dokumentov faktúra a objednávka na skopírovanie dát do listov odberatelia a dodávatelia, ktoré slúžia zároveň aj ako databáza. Samozrejme toto makro opäť využíva makrá z modulu ovladanie.
sub export dim document, dokument, list, dispatcher, bunka_zaznam,databaza ,bunka_cislo as object 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 dim vlavo(1) as new com.sun.star.beans.PropertyValue vlavo(0).Name = "By" vlavo(0).Value = 13 vlavo(1).Name = "Sel" vlavo(1).Value = false dim cislo,zaznam as string dokument =stardesktop.currentcomponent document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") list=dokument.sheets(0) bunka_zaznam=list.GetCellByPosition(0,23) zaznam =trim(bunka_zaznam.string) bunka_cislo=list.GetCellByPosition(1,22) cislo =trim(bunka_cislo.string) gosub kopiruj if zaznam="1" then 'starý odberateľ ovladanie.najdi_2(cislo,"odberatelia") gosub najdi gosub exportuj_odberatela elseif zaznam="2" then 'nový odberateľ ovladanie.vyberlb("odberatelia","A10000") gosub vloz gosub exportuj_odberatela elseif zaznam="3" then 'starý dodávateľ ovladanie.najdi_2(cislo,"dodavatelia") gosub najdi elseif zaznam="4" then 'nový dodávateľ ovladanie.vyberlb("dodavatelia","A10000") gosub vloz endif dokument.Store("",Array()) 'ulozit(dokument) dokument.Close(true) 'zavrieť(dokument) exit sub kopiruj: with ovladanie .vyberlb("vklad","A2:N2") .zkopiruj .vymaz("vklad","B10:B22") .vyberlb("","A2") end with return najdi: dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, vlavo())'skok vľavo o 1 bunku ovladanie.vloz ovladanie.vyberlb("vklad") return vloz: dispatcher.executeDispatch(document, ".uno:GoUpToStartOfData", "", 0, hore()) dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array() ovladanie.vloz 'ovladanie.vyberlb("","A2") ovladanie.zorad return exportuj_odberatela: with ovladanie .vyberlb("odberatelia","A2:G500") .zkopiruj .vyberlb("vklad") 'faktúra .otvor("C:\firma\šablony\faktúra.ots") .vyberlb("odberatel","A2") .vloz '.vyberlb("","A2") .zorad .vyberlb("faktúra") .uloz_zosit("C:\firma\šablony\faktúra.ots") 'objednávka .otvor("C:\firma\šablony\objednávka.ots") .vyberlb("odberatel","A2") .vloz '.vyberlb("","A2") .zorad .vyberlb("objednávka") .uloz_zosit("C:\firma\šablony\objednávka.ots") end with 'msgbox("Všetky údaje boli uložené do databázy",0,"Databáza")'hláška return end sub
Toto makro je to, ktoré som spomínal pri dieloch o faktúre a objednávke, a je volané makrami z oboch dokumentov pre vloženie nového odberateľa práve s týchto dokumentov. Pomocou inputbox-u sú vložené údaje a potom sú dáta exportované.
sub novy_odberatel dim dokument,list,bunka_nazov,bunka_vklad,oDoc as object dim nazov,zaznam,vklad as string dim cislo,tlacidlo as integer ovladanie.otvor("C:\firma\databázy\kontakty.ods") oDoc=stardesktop.currentcomponent oDoc.close(true) ovladanie.vymaz("vklad","B27") dokument=thiscomponent list=dokument.sheets(0) cislo=9 do while cislo<22 bunka_nazov=list.GetCellByPosition(0,cislo)'prvý stĺpec +riadok nazov=trim(bunka_nazov.string) bunka_vklad=list.GetCellByPosition(1,cislo)'druhý stĺpec +riadok skok: vklad= inputbox("Zadajte údaj "+nazov+" :","Vloženie kontaktu","") if vklad="" then tlacidlo=msgbox("Nevložili ste žiadny údaj vrátiť sa?",35,"vklad")'hláška if tlacidlo=6 then goto skok elseif tlacidlo=7 then goto skok1 else msgbox("zastaví",0,"vklad")'hláška stop endif else endif msgbox("vložený údaj je "+vklad+"",0,"vklad")'hláška skok1: select case cislo case 9 to 12,14,16 to 21 bunka_vklad.string=vklad case 13,15 bunka_vklad.value=vklad end select cislo=cislo+1 'msgbox("Ďalšie číslo riadku bude "+cislo+"",0,"slučka")'hláška pre kontrolu loop export end sub
Teraz, pokiaľ by ste chceli vkladať odberateľa z dokumentov faktúra alebo objednávka, si môžete vložiť do modulu faktura nasledovné makro, ktoré potom prepojte s tlačidlom Nový v dokumente faktúra.ots.
sub novy dim dokument as object kontakty.novy_odberatel 'vloží údaje o novom odberatelovi dokument=ThisComponent dokument.Close(true) 'zavrieť(dokument) dim sURL as string sURL = ConvertToURL("C:\firma\šablony\faktúra.ots") dim Args(0) as new com.sun.star.beans.PropertyValue Args(0).Name = "AsTemplate" Args(0).Value = true dim oDoc as object set oDoc = StarDesktop.loadComponentFromURL(sURL, " ", 0, Args()) end sub
A do modulu objednavka si vložte zasa nasledovné makro, ktoré potom prepojte s tlačidlom Nový v dokumente objednávka.ods.
sub novy dim dokument as object kontakty.novy_odberatel dokument=ThisComponent 'dokument.Close(true) 'zavrieť(dokument) dim sURL as string sURL = ConvertToURL("C:\firma\šablony\objednávka.ots") dim Args(0) as new com.sun.star.beans.PropertyValue Args(0).Name = "AsTemplate" Args(0).Value = true dim oDoc as object set oDoc = StarDesktop.loadComponentFromURL(sURL, " ", 0, Args()) end sub
Tieto makrá zabezpečia, že po doplnení a exportovaní údajov o novom odberateľovi sa znovu otvorí dokument, z ktorého bolo makro spustené, podľa šablóny už s aktualizovanými údajmi. Nakoniec si samozrejme skontrolujte funkčnosť dokumentu a makier.