![]() |
OpenOffice.org -> factuurnummers
Kan mij iemand met een paar (basis?) SQL-dingen helpen?
Ik ben een factuur-template aan het maken. Het onding werkt in OpenOffice.org , dat ik aan een adressenbestandje heb gekoppeld. Maar die moet nog een paar dingetjes automatisch kunnen doen. 1) Wanneer ik een nieuwe factuur open (dus, via de template) wil ik dat er automatisch (of door op een knopje te duwen) ook een factuurnummer aan wordt toegewezen. Logischerwijze is dit een ophoging van de vorige factuurnummer. -> prima idee lijkt me om een database bij te houden die een aantal dingen registreert: factuurnummer, factuurdatum, totaalbedrag. 2) Ahv dat factuurnummer wordt ook automatisch de bestandsnaam voor de factuur aangemaakt. Bijvoorbeeld: factuur<huidig_factuurnummer>.odt 3) Hoe kan ik dat zodanig automatiseren, dat wanneer ik mijn factuur opsla, dat hij dan het totaalbedrag uit mijn 'table' kan halen, en dat bedrag in de database erbij schrijft? Alvast bedankt voor de info. |
Het is makkelijker om alle factuurgegevens alvast in de database te zetten, zodat je in OpenOffice alleen maar een factuurnummer hoeft in te vullen en dat je dan alle informatie bij dat nummer ziet.
|
@eddie: ik bedoelde het eigenlijk net andersom. Als er een klant voor je neus staat, is het niet zo interessant om even in een facturenmap te moeten gaan opzoeken wat het volgende factuurnummer zou moeten zijn.
Verder heb je wel gelijk, dat het gemakkelijker werkt om in één klap volledig database-gestuurd te gaan werken, maar tegen dat ik zoiets met mijn gebrekkige kennis aan het werk heb gekregen... ik denk dat ik het beter stap voor stap doe, en in de loop van de tijd dingen die nu nog handmatig ingegeven worden uiteindelijk een beetje automatiseer en optimaliseer. 1) Maar ik heb het dmv een macro (bij openen van een nieuwe factuur) opgelost. sDateiName = ConvertToURL("C:\...\FACTURATIE\re-nummer.txt") Dim iDateiNr as Integer iDateiNr = FreeFile Open sDateiName for Input Lock Read Write As #iDateiNr Line Input #iDateiNr, sNr Close #iDateiNr iDateiNr = FreeFile Open sDateiName for Output as #iDateiNr iNr = CInt(sNr) + 1 Write #iDateiNr, iNr Close #iDateiNr oDok = ThisComponent oBM = oDok.getBookmarks().getByName("Re_Nr") oBM.getAnchor().String = sNr Waarschijnlijk volgt hier nog snel een kleine aanpassing, zodat ook de datum mee in het factuurnummer wordt opgeslagen. Maar nog geen idee hoe ik dat precies zou kunnen doen. Iemand? 2) Ahv die eerste macro kan hij dan ook de factuur opslaan. Kan dit ook als pdf opgeslagen worden? Sub Main sDateiName = ConvertToURL("C:\Documents and Settings\...\FACTURATIE\re-nummer.txt") Dim iDateiNr as Integer iDateiNr = FreeFile Open sDateiName for Input Lock Read Write As #iDateiNr Line Input #iDateiNr, sNr Close #iDateiNr Msgbox "Gelezen:" & sNr sPath = "C:\Documents and Settings\...\FACTURATIE\archief\" sFileName = sNr if Len( sFileName ) > 0 then sFileName = sPath & sFileName & ".odt" if FileExists( sFileName ) then msgbox "Bestand met als naam" & CHR(13) & _ sFileName & _ CHR(13) & "bestaat al, en kon niet automatisch opgeslagen worden", _ 48, _ "bestaat al, en kon niet automatisch opgeslagen worden" else ThisComponent.StoreToURL( ConvertToURL( sFileName ) , Array() ) msgbox "OK" end if else Msgbox _ "Handmatig opslaan" end if End Sub 3) Hiervoor heb ik nog niet echt een oplossing kunnen bedenken. Ten eerste omdat ik niet weet hoe je twee macro's aan één event kan koppelen. En anderzijds weet ik niet hoe je info uit een Writer-bestand kan goochelen. |
Gebruik dan Base. Als het goed is kun je hiermee ook formulieren maken.
Wat jij wilt komt er in de richting van een 'applicatie', en dit maak je niet even via macro's. |
Citaat:
De reden dat ik nu nog hoofdzakelijk via een tekstverwerker en wat spreadsheets werk, is dat mijn applicatie niet helemaal functioneel moet zijn voordat ik hem kan gebruiken. Adresgegevens haalt hij al uit mijn nooby database, maar veel dingen lopen nog manueel, omdat ik niet alles in een keer kan maken. En in Base loop ik nu al anderhalve dag mijn hoofd te breken hoe hij mijn mooie postcode-tabel aan mijn adressen-tabel kan koppelen. Waarschijnlijk heb ik dan queries nodig in de aard van SELECT plaats FROM postcodetable WHERE postcode IS adressentable.postcode; en dat moet hij dan bij adressentable.plaats invullen Een simpele form maken lukt me in principe ook wel, maar dan wordt het weer lachen, omdat ik wil dat als (IF) de (pseudo-)sleutelgegevens (naam, voornaam, postcode) al in de tabel staan, dat hij dan automatisch de juiste gegevens uit die adressen-tabel haalt (UPDATE?), en als dit nieuw blijkt te zijn (ELSE) dat hij dan 'gewoon' een nieuw (INSERT INTO adressenbestand VALUES ...) record aanmaakt. Zoiets? Maar in de praktijk weet ik niet of dit de juiste werkwijze is, en twijfel ik nog of ik dit wel klaar ga krijgen. Maar om even op hetgeen ik eerst vroeg terug te komen: Om met een factuurnummer in Base te werken. Moet ik dan in eerste instantie een simpele table maken (factuurnummer, factuurdatum, totaalbedrag, klantID, bestandsnaamfactuur) en dan en query ORDER factuurnummertable BY factuurnummer SELECT factuurnummer FROM factuurnummertable WHERE factuurnummer > ?'alle andere factuurnummers' INSERT INTO factuurnummertable VALUES (factuurnummer + 1, ?'datum van vandaag', ?'totaalbedrag, dat voorlopig nog steeds niet in een database staat, dus geen idee hoe ik daaraan kom', adressentable.klantID, ?'bestandsnaamfactuur') Ik weet het even ook niet meer allemaal... |
Citaat:
fact_datum klant_id (evt. bestandsnaam) Totaalbedrag is niet nodig, aangezien je ook een tabel hebt waar de factuur regels in staat: regel_nr fact_nr product_id aantal prijs ligt vast in de producten tabel: product_id prodcut_code product_omschrijving product_prijs Om een nieuwe factuurnummer te 'genereren', doe je gewoon het volgende: select max( fact_nr ) + 1 as nieuw_nr from factuur bouw een simpel schermpje voor de invoer en je bent klaar. ofzoiets. |
maak een nieuwe database en tabel met de Wizard van Base. Kies hierin voor 'Business' en je kan simpelweg voorgedefinieerde tabellen selecteren, zoals 'invoices' en 'invoicedetails'.
simpeler kan haast niet. |
Alle tijden zijn GMT +1. Het is nu 07:03. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.