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:

Op het moment is er alleen de registratie functie. De rest komt nog. Het eerste zal een BTW module uitkomen zodat BTW administratie een kwestie van een knopdruk is. De jaarrekening zal op zich moeten laten wachten. Dat is toch meer iets voor een menselijke boekhouder. Die kan dat veel beter dan welke software dan ook.

Kasboek is makkelijk in te vullen: Kasboek is een simpel programma. Er is maar 1 ding waar je op moet letten: alle bedragen zijn in centen! Dis is nodig om de BTW bedragen nauwkeuriger te kunnen berekenen. Floating point numbers (kommagetallen) leveren best grote afwijkingen op en dat kan je voor de belasting niet goed gebruiken. Maar dat is het eerste uur even wennen. Vaak is het zelfs makkelijker omdat je geen punt of comma hoeft te gebruiken voor je bedragen.


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.

Je kan de records (regels) invoeren in iedere willekeurige volgorde. Met de sorteerfunctie worden later alle regels in 1 keer op volgorde van datum gezet. De BTW module leest dit bestand in, selecteert op basis van het kwartaal welke regels meedoen en telt dan alle BTW bedragen op of af. BTW betaald en BTW ontvangen zijn dus aparte uitkomsten.


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.

De BTW tarieven zijn momenteel 0, 6 en 19% maar er is geen enkele garantie dat die zo blijven. Dus was het ook best opportuun om die in een bestand te zetten. Hier is het bestand 'btwtarieven':
    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.

Ik ben chemical engineer. Ik snap niks van debet en credit. Dus heb ik andere namen daarvoor gemaakt die ik wel kan onthouden: betaald en ontvangen. Maar het was niet handig om die namen vast in te bouwen in de software. Daarom leest Kasboek een bestand in en plaatst de namen die hierin staan in de keuzevelden. Dit bestand heet 'debetcredit' en dit is wat erin staat:
    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.tcl
   
Je 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'.

En meer dan dit is er eigenlijk niet.

Ik neem aan dat je de software zelf kunt installeren. Desnoods kan ik dat doen of je ermee helpen maar dan niet gratis. Ik laat iedere dag de zon al gratis opkomen.


Haal hier je gratis Kasboek pakket op!

Kasboek.zip


En denk erom: dit is GNU GPL software!


Pagina gemaakt op Valentijnsdag 2010

Deze pagina is voorzien van FroogleBuster technologie