OpenOffice.org vo výrobnej firme 10 – Kontakty

calc.png Dôležitou súčasťou sú samozrejme údaje o odberateľoch a dodávateľoch. Toto vo vašom systéme zastrešuje dokument Kontakty, ktorý si dnes vytvoríte.  

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.

List vkladList vklad

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)

Email

 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ú:

  1. odberateľ evidovaný
  2. odberateľ nový
  3. dodávateľ evidovaný
  4. 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.

  1. Tlačidlo Vložiť
  2. Zaškrtávacie políčko cca v bunke D23, ktoré je prepojené s bunkou B27
  3. Zoskupenie, ktorého tlačidlá možností sú prepojené s bunkou O2

Ovládacie prvky v liste vkladOvládacie prvky v liste vklad

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).

Sprievodca zoskupenímSprievodca zoskupením

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 bunkouTlač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.

Dáta platnosť ZoznamDáta platnosť Zoznam

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.

 

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

Komentáře

user avatar Io Lowenstein
Odpovědět
OpenOffice.org vo výrobnej firme 10 – Kontakty
26. 11. 2011, 10:43:46
Dobrý den. Vše mi šlo jako na drátkách až do okamžiku, kdy jsem chtěl vyzkoušet z Objednávky vkládání nového odběratele. Po kliknutí na „NOVÝ“ se načetl soubor kontakty.ods a objevil se dialog „Chyba—uloz_novy_zosit“. Dialog jsem zavřel, vyplnil údaje nového klienta a dal „VLOŽIT“. Načetl se dokument faktura.ots a opět „Chyba—uloz_novy_zosit“…
user avatar Io Lowenstein
Odpovědět
OpenOffice.org vo výrobnej firme 10 – Kontakty
26. 11. 2011, 11:09:06
Chyba u faktury byla v adrese pro uložení faktura.ods v makru. Opraveno.
Ještě jsem nezjistil chybu u vložení kontaktu. Ale objevila se mi pro změnu hláška o chybě v makru: .vymaz("vklad","B10:B22") - vlastnost nebo metoda nenalezena: vymaz. Jdu dál bádat…
user avatar Miroslav Gešvantner
Odpovědět
OpenOffice.org vo výrobnej firme 10 – Kontakty
9. 05. 2012, 23:35:00
Makrá som postupom času už upravil, no nakoľko som nemal moc času sa tomu venovať ešte som to nedokončil.

Je tam dosť veľa zmien napríklad vkladanie nového odberateľa už prebieha automaticky z nového dokumentu buď faktúry, alebo objednávky. Makro si samo zistí že daný odberateľ nie je v databáze a opýta sa či ho vložiť, ostatné už prebehne automaticky.

Aj všetky cesty z makier sú už na jednom mieste v globálnych premenných takže ich nebude potrebné pracne prepisovať v každom makre.

Makrá už nebude potrebné prekopírovávať, ale sú už v jednom balíku, ako rozšírenie.

Pracujem ešte na evidencii DPH aj s výkazmi pre DÚ a dokumentoch pre jednoduché účtovníctvo čo ešte chvíľku potrvá no ak to budem mať dokončené tak to uvoľním pre verejnosť.

Všetko záleží od toho ako budem mať voľný čas nakoľko som stále dosť vyťažený.
user avatar Bartoš
Odpovědět
Re:OpenOffice.org vo výrobnej firme 10 – Kontakty
14. 06. 2012, 13:33:29
Chcel by som sa opýtať p. Gešvantnera, kedy budú k dispozícii tie spomínané zmeny.
Tiež som zaseknutý v ukladaní kontaktov a vytváraní nového z objednávky alebo faktúry.
Za odpoveď ďakujem.

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