Kasboek

Hierboven zie je de user interface van Kasboek. Kasboek is de electronische variant van het bekende rode
schriftje dat door Atlanta en kornuiten verkocht werd. Kasboek is geschreven in Tcl/Tk en zou daarmee cross
platform moeten zijn, dus geschikt voor Linux, Mac en zelfs voor Windows. Kasboek is ook Open Source software
en wordt uitgebracht onder de regels van de GPL. Je gebruikt de software dus op eigen risico, net zoals je
iedere dag op eigen risico aan het verkeer deelneemt en de trap afgaat. De software is goed en betrouwbaar
want ik gebruik hem zelf voor VEDT.
Dat wil niet zeggen dat de software foutloos is. Er is altijd een kleine kans dat er nog iets niet helemaal in
orde is. Tcl (tickel) is een onlogische taal. Je moet dus soms een beetje proberen tot het werkt. Daarentegen
is het wel een taal die op alle moderne besturings systemen werkt en die een hele mooie user interface
mogelijk maakt.
Eigenschappen
Kasboek is open source en valt onder de GPL. Elders op deze pagina vind je een copie van de GPL. Lees hem maar
eens door en vergeet hem daarna direct. Het idee is dat deze software gemaakt is om een doel te vervullen,
maar dat er geen garantie op gegeven wordt als er toevallig een keer iets mis ging. Gratis software en dan nog
een garantie op alles geven is tegenstrijdig.
Toch is dit geen slecht programma. Het is een simpel programma dat ik voor een aantal doeleinden gebruik
binnen mijn eigen bedrijfje:
| Stop | Hiermee wordt het programma afgesloten. Er wordt niets weggeschreven. |
| Bereken | Hiermee worden de twee ontbrekende BTW bedragen uitgerekend als de prijs inclusief of exclusief BTW opgegeven is. Als je alleen de BTW invoert krijg je een foutmelding want uit alleen het BTW bedrag kan je niet nauwkeurig de andere twee afleiden. |
| Nieuw | De reset functie. Alle invoervelden worden leeggemaakt en de keuzevelden gaan naar hun nultoestand. |
| Bewaar | Schrijf dit record naar disk in een bepaald formaat in ASCII tekst en wis daarna alle invoer |
Kasboek : bestandsformaat
Kasboek schrijft alle data naar een bestand, genaamd 'Kasboek' in de 'data' directory. Kasboek schrijft alleen leesbare ASCII tekst. Je kan dus met een tekstverwerker of editor het bestand aanpassen, mocht dat nodig zijn. Hierdoor is een edit-module ook overbodig. En je kan het bestand gewoon uitprinten en aan je boekhouder geven als extra controle. Hieronder zie je een voorbeeld van een Kasboek bestand:
jaar mnd dag post btw in/uit ex BTW inc BTW BTW nummer toelichting
---- --- --- ---------- --- --------- ------- ------- ----- ------- -----------
2010 :: 03 :: 01 :: Diversen :: 0 :: Betaald :: 3899 :: 3899 :: 0 :: Kvk2010 :: 2000 01725200 5000
2010 :: 01 :: 13 :: Verkoop :: 19 :: Ontvangen :: 7725 :: 9193 :: 1468 :: 100108a ::
2010 :: 01 :: 11 :: Verzending :: 0 :: Betaald :: 675 :: 675 :: 0 :: 100108a :: 3spa0456098
2010 :: 01 :: 13 :: Verkoop :: 19 :: Ontvangen :: 3697 :: 4399 :: 702 :: 100111a ::
Zoals je ziet is dit een makkelijk bestandsformaat. Ieder veld van deze database wordt afgesloten door een
' :: ' scheidingsteken. De rest spreekt voor zich lijkt me.
Kasboek : instelbare keuzevelden
Ik heb een klein bedrijf met weinig verschillende kostenposten. Maar vor Frits Philips zal dat echt wel heel anders (geweest) zijn. Daarom moeten de kostenposten dynamisch kunnen worden ingegeven op een doodsimpele manier. Daarom staan de kostenposten in een tekstbestand. Dit bestand heet 'kostenposten' en dit is wat er in staat:
Verkoop...
Inkoop....
Verzending
Diversen..
Waar nu puntjes staan staan eigenlijk spaties. Hierdoor lijnt de Kasboek file beter uit. De term die bovenin
staat, staat standaard in het keuzevenster bij een leeg vel.
19
6
0
Ook hier geldt weer: het percentage dat bovenin staat komt standaard in beeld na een reset (Nieuw). De
software is ontwikkeld om met HELE getallen te werken. Op het moment dfat de regering het onzalige besluit
neemt om (weer eens) met een niet rond getal te gaan werken (zoals 17,5%) zijn de resultaten niet
gegarandeerd. Mogelijk wel in toekomstige versies van Kasboek. Maar niet in de evrsies 3 en 4.
Ontvangen
Betaald..
Ook hier weer: puntjes die normaal bestaan uit spaties. Werk jij zelf liever met debet en credit, dan kan je
dat makkelijk zelf aanpassen door het bestand te wijzigen. Werk je liever met je eigen woorden (bijvoorbeeld
'Verdiend' en 'Verloren') dan kan dat ook. Je kan zelfs meer dan twee categoriën maken... Voor Kasboek
maakt dat niet uit. Dan kun je gewoon meer op de pijltjes klikken.
Kasboek : de source
OK, ik heb het al vermeld: Kasboek is Open Source software. Dus, hold on to your horses! Hier komt de broncode. Veel plezier ermee. 1 Waarschuwing van mijn kant: Tcl/Tk is een krachtige taal voor hele mooie dingen, maar 1 leesteken verzetten of toevoegen is voldoende om het programma totaal te verzieken. Let dus op voordat je gaat verbeteren. Je MAG wel aan de slag, want er zit toch geen garantie op het programma, of je de boel nou verbetert of niet. Oh ja, als je dit programma verbouwt dan blijft het verplicht uit te brengen onder de GPL.
#! /usr/bin/wish
# Kasboek programma; entry form
#
# Versie Doet Klaar
# ------ ------------------------------------- -----------
# 001 User interface opmaken 30 Apr 2009
# 002 Stroomlijnen en naamgeving
# Procedures toevoegen
# Send formaat vastleggen
# Recalc koppelen aan 'bind'
# Functies Nieuw, Bewaar 02 May 2009
# 003 Bewaar gegevens in bestand
# Implementatie recalc en init
# Kostenposten uit bestand
# BTW tarieven uit bestand
# Betaald/Ontvangen uit bestand
# 004 fillup procedure toegevoegd
set fontf20 {times 18 bold}
set fontf12 {times 12 bold}
set dedag [clock format [clock seconds] -format %e]
set demnd [clock format [clock seconds] -format %m]
set hetjr [clock format [clock seconds] -format %Y]
proc init { } {
global kostenpost credeb tarieven
set fileID [open kostenposten r]
while { [ gets $fileID line] > 0 } {
lappend kostenpost $line
}
close $fileID
set fileID [open debetcredit r]
while { [ gets $fileID line] > 0 } {
lappend credeb $line
}
close $fileID
set fileID [open btwtarieven r]
while { [ gets $fileID line] > 0 } {
lappend tarieven $line
}
close $fileID
}
proc recalc { } {
global btwsom exbtw incbtw debtw
if { $exbtw < 1 } then {
if { $incbtw != 0 } then {
set btwsom [ expr (10 * $incbtw * $debtw / (100 + $debtw) + 5) / 10 ]
set exbtw [ expr $incbtw - $btwsom ]
}
} else {
set btwsom [ expr (10 * $exbtw * $debtw / 100 + 5) / 10 ]
set incbtw [ expr $exbtw + $btwsom ]
}
}
proc new { } {
global kpost factnr dex debtw credeb tarieven inuit exbtw incbtw btwsom kostenpost
set kpost [lindex $kostenpost 0]
set factnr {}
set dex {}
set debtw [lindex $tarieven 0]
set inuit [lindex $credeb 0]
set exbtw {}
set incbtw {}
set btwsom {}
}
proc fillup { getal fileNR} {
global fileID exbtw btwsom incbtw
incr getal 1
set digs [expr 8 - int ( log10 ( $getal ))]
while { $digs > 1 } {
puts -nonewline $fileNR " "
incr digs -1
}
}
proc send { } {
global hetjr demnd dedag kpost factnr dex debtw inuit exbtw incbtw btwsom
recalc
set fileID [open data/Kasboek a 0600]
puts -nonewline $fileID $hetjr ; puts -nonewline $fileID " :: "
if { $demnd < 10 } then { puts -nonewline $fileID "0" }
puts -nonewline $fileID $demnd ; puts -nonewline $fileID " :: "
if { $dedag < 10 } then { puts -nonewline $fileID "0" }
puts -nonewline $fileID $dedag ; puts -nonewline $fileID " :: "
puts -nonewline $fileID $kpost ; puts -nonewline $fileID " :: "
if { $debtw < 10 } then { puts -nonewline $fileID " " }
puts -nonewline $fileID $debtw ; puts -nonewline $fileID " :: "
puts -nonewline $fileID $inuit ; puts -nonewline $fileID " :: "
fillup $exbtw $fileID
puts -nonewline $fileID $exbtw ; puts -nonewline $fileID " :: "
fillup $incbtw $fileID
puts -nonewline $fileID $incbtw ; puts -nonewline $fileID " :: "
fillup $btwsom $fileID
puts -nonewline $fileID $btwsom ; puts -nonewline $fileID " :: "
puts -nonewline $fileID $factnr ; puts -nonewline $fileID " :: "
puts $fileID $dex
close $fileID
new
}
proc run { } {
wm title . "Kasboek gegevens invoeren"
global fontf20 fontf12 dedag demnd hetjr tarieven credeb kostenpost
frame .top
frame .datum
frame .kosten
frame .fact
frame .stat
frame .geld
frame .geld.box1
frame .geld.box2
frame .geld.box3
frame .ctrl
bind . <Return> recalc
# Reclame
label .top.label -text "Kasboek 3.1" -font $fontf20
label .top.brand -text "http://www.vedt.nl" -font $fontf20
# Datum sectie
label .datum.label -text "Datum : " -font $fontf12
spinbox .datum.date -from 1 -to 31 -width 4 -textvariable dedag -wrap 1 -state readonly \
-width 8 -font $fontf12
spinbox .datum.month -from 1 -to 12 -width 4 -textvariable demnd -wrap 1 -state readonly \
-width 8 -font $fontf12
spinbox .datum.year -from 2003 -to 2020 -width 6 -textvariable hetjr -state readonly \
-width 8 -font $fontf12
# Kostensoorten
label .kosten.lbl0 -text "Kostenpost" -font $fontf12
spinbox .kosten.post -width 20 -bd 2 -values $kostenpost -state readonly -textvariable kpost \
-font $fontf12 -wrap 1
# Facturerings gegevens
label .fact.bnr -text "Factuur" -font $fontf12
entry .fact.fact -textvariable factnr -width 16 -relief sunken
label .fact.det -text "Details" -font $fontf12
entry .fact.dets -textvariable dex -width 64 -relief sunken
# Debet/credit en BTW
label .stat.l1 -text BTW -font $fontf12
label .stat.l2 -text Soort -font $fontf12
spinbox .stat.knd -values $credeb -textvariable inuit -state readonly -wrap 1 -width 10 \
-font $fontf12 -relief sunken
spinbox .stat.btw -values $tarieven -textvariable debtw -state readonly -wrap 1 -width 6 \
-font $fontf12 -relief sunken
label .stat.l3 -text "Alle bedragen in centen!" -font $fontf12
# De bedragen
label .geld.box1.label -text "Ex BTW" -font $fontf12
entry .geld.box1.exbtw -textvariable exbtw -width 10 -relief sunken
label .geld.box2.label -text "BTW" -font $fontf12
entry .geld.box2.btwsom -textvariable btwsom -width 10 -relief sunken
label .geld.box3.label -text "Incl BTW" -font $fontf12
entry .geld.box3.inbtw -textvariable incbtw -width 10 -relief sunken
pack .geld.box1.label .geld.box1.exbtw -side left -padx 2m
pack .geld.box3.label .geld.box3.inbtw -side left -padx 2m
pack .geld.box2.label .geld.box2.btwsom -side left -padx 2m
# Besturing (abort, calculate, enter)
button .ctrl.quit -text "Stop" -font $fontf12 -background pink -borderwidth 4 -command exit
button .ctrl.calc -text "Bereken" -font $fontf12 -background yellow -borderwidth 4 -command recalc
button .ctrl.new -text "Nieuw" -font $fontf12 -background cyan -borderwidth 4 -command new
button .ctrl.send -text "Bewaar" -font $fontf12 -background green -borderwidth 4 -command send
# Stapel de widgets in de frames
pack .top.label -side left -padx 2m
pack .top.brand -side right -padx 2m
pack .datum.label .datum.date .datum.month .datum.year -side left -fill x -pady 3m -padx 2m
pack .kosten.lbl0 .kosten.post -side left -padx 2m -pady 2m
pack .fact.bnr .fact.fact .fact.det .fact.dets -side left -padx 2m -pady 3m
pack .stat.l2 .stat.knd .stat.l1 .stat.btw -side left -padx 2m -pady 3m
pack .stat.l3 -side right -padx 25m
pack .geld.box1 -side left -padx 2m -pady 2m
pack .geld.box3 -side right -padx 2m -pady 2m
pack .geld.box2 -padx 2m -pady 2m
pack .ctrl.quit -side left -padx 10m -pady 2m
pack .ctrl.send -side right -padx 10m -pady 2m
pack .ctrl.calc .ctrl.new -padx 10m -pady 2m -side left
# Stapel de frames in het venster
pack .top .datum .kosten .fact .stat .geld .ctrl -side top -fill x
}
init
new
run
Kasboek : installeren
Je kan de sofware installeren in de directory die je zelf wilt. In mijn geval was dat '/home/jan/develop/kasboek/enter004.tcl'. Wel zorgen dat ie executable is. En dat is afhankelijk van je besturingssysteem. In Linux doe je dat zo:
jan@Beryllium:~/develop/kasboek$ chmod 755 enter004.tclJe databestanden kan je ook neerzetten waar je wilt. Je zal alleen in je snelkoppeling aan moeten geven waar dat het geval is. Zie het plaatje hiernaast. Bij 'Command' heb ik opgegeven waar de executable staat en bij 'Work path' heb ik opgegeven waar alle bestanden staan. In (in mijn geval) '/home/jan/Data/VEDT/Kasboek' staan de drie definitie files voor kostenposten, BTW en debetcredit. En in de subfolder 'data' daarvan staat het bestand 'Kasboek'.
Pagina gemaakt op Valentijnsdag 2010
Deze pagina is voorzien van FroogleBuster technologie