Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Kasregister  (gelezen 10779 keer)

0 leden en 1 gast bekijken dit topic.

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Kasregister
« Gepost op: 11 november 2013, 04:38:47 »
Hoi Accesleden,

Ik heb een kasregister gemaakt in Acces. Zijn er Acces Goeroe's die samen met mij het kasregister willen verder uitwerken?

Vraagje:

Bij knop betaald zou er een actie in vba kunnen gebeuren om het bonNr als betaald mee te geven. Na de actie mag het bonNr en bijhorende info niet meer te zien zijn in formulier. Graag feedback over de gebruiksvriendelijkheid van het programma.

Groetjes Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #1 Gepost op: 11 november 2013, 08:39:28 »
Private Sub btnBetaald_Click()
    'We zetten het veld Betaald in de tabel tblVerkopen op True
   
    Dim strSQL As String
    'Schrijf de query
    strSQL = "Update tblVerkopen SET Betaald= true Where BonNr=" & Me.BonNr
   
    'Voer de query uit
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
   
End Sub
Als ik frmVerkoop  start, komt er steeds verkoopnummer 24 open te staan. (zelfs als deze al betaald is)
Hoe had jij dat gezien?
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Kasregister
« Reactie #2 Gepost op: 11 november 2013, 11:47:05 »
Hoi Dizzl,

Standaard staat het op "Ga naar laatste record" bij openen van het formulier. Hoe had jij het dan best gezien? Het kan best mogelijk zijn als het progje geen records bevat, (gestript) dat er bij het opstarten problemen ontstaan omdat er geen records in de database zijn. Als ik met onafhankelijke velden zou werken dan kon ik de recordsource in het formulier en subformulier wissen. Dan was het probleem opgelost waarmee na betaald nog steeds het huidig record ziet. Een requery uitvoeren lukt ook niet. Mss. op te lossen met DAO of ADO.

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #3 Gepost op: 11 november 2013, 15:19:12 »
Ik vind je programmaatje super. Na het aanklikken 'Betaald' zou ik de lijst van 'openstaande bonnen' laten zien.
Als er geen records zijn, is dat een lege lijst.
Ik zou er dan ook de knoppen onderaan aan toevoegen net zoals je bij je frmVerkoop hebt staan.

Uiteraard zou 'Betaald' niet mogen werken het ingevoerde bedrag kleiner is dan het verschuldigde bedrag ;-)
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Kasregister
« Reactie #4 Gepost op: 11 november 2013, 15:48:09 »
Hoy Dizzl,

Het is een progje dat ik nog eens van onder het stof hebt gehaald toen ik begon in Acces. De basis vind ik best ok. Zijn de berekeningen juist mbt tot de btw enz? Ik zal proberen met DAO wat aanpassingen te doen. Voor alle zekerheid copij's nemen vooraleer ik begin her- op te bouwen met de vba code. Vragen zullen nog zeker komen. Het is ook zelfs mogelijk in ADO te controleren hoeveel er in kas is. Dat zijn natuurlijk de toeters en bellen voor het laatste. Leuk om hier weer op Acces aanwezig te zijn waar ik mijn trouwe accesvrienden kan begroeten van vroeger. Waarvoor dank voor uw snelle reactie en feedback.

Vaststelling:

Als je in formulier orderlijst in de leuzelijst klikt dan keer je terug naar het bonNr op formulier verkopen. Indien er betaald moet worden kan dit nog geregeld worden in formulier verkopen. Het loopt blijkbaar fout wanneer ik vanuit formulier order met een button een nieuw BonNr wil toevoegen in formulier verkopen. Welke knoppen zou je dan mee overnemen in formulier orders?

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #5 Gepost op: 11 november 2013, 19:33:07 »
Citaat
Welke knoppen zou je dan mee overnemen in formulier orders?
Nieuwe Bon en  Verlaten

Een andere optie zou zijn dat je een tabblad begint voor elke openstaande bon?
Das natuurlijk een pak meer werk en is dat wel de moeite? Nu lijkt het me prima te werken.

Ik snap niet zo wat je met ADO en DAO bedoelt btw. Ik herinner me vaag dat ik DAO onthield als 'DA's 'O'ud  (dus moet ADO de betere nieuwere data-access zijn ?)
mdb ondersteunt ze beiden.
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Kasregister
« Reactie #6 Gepost op: 11 november 2013, 19:54:20 »
Hoy Dizzl,

In bijlage een voorbeeld om een record toe te voegen in tabel verkopen.

Wat heb ik in het voorbeeld in vba vergeten te schrijven?

Heb het ondertussen kunnen fixen:

Private Sub Knop10_Click()

Dim sVeld As String, sTabel As String, sWaarde As String, strSQL As String

Dim rst As ADODB.Recordset
Dim cnConn As ADODB.Connection

   
    Set cnConn = CurrentProject.Connection
    Set rst = New ADODB.Recordset
 
    sVeld = "[BonNr]"             'Hier het veld dat je gebruikt voor het volgnummer.
    sTabel = "[tblVerkopen]"      'Hier de tabelnaam waar het volgnummer in staat.
     
   
  'Volgnummer ophogen
  sWaarde = Nz(DLast("BonNr", sTabel), 0) + 1
 
   'we maken een sqlString die de insert doet
        strSQL = "insert into tblVerkopen (BonNr)" _
      & " values ('" & sWaarde & "')"

  rst.Open strSQL, cnConn, adOpenKeyset, adLockOptimistic, adCmdTekst
   
End Sub

Opmerking: 11/11/2013 21:41u

bij terugkeren naar formulier verkopen gaat hij niet naar het nieuwe ingevoegde record in het eerste gepost database voorbeeld. Hoe kan ik dat verhelpen? requery, refresh, repaint lukte mij niet

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #7 Gepost op: 12 november 2013, 07:19:33 »
Kan je stap voor stap zeggen wat wil je de knop laten doen?
Ik ga er van uit dat je wilt
  • Een nieuw record toevoegen
  • Het laatste record selecteren

Je formulier is gekoppeld aan tblVerkopen. Ik zie niet in waarom je een recordset nodig hebt?
Dit is wat ik op Knop_Click heb
    'We zoeken de de hoogste nummer in de tabel verkopen
    Dim hoogsteNummer As Integer
    hoogsteNummer = DMax("BonNR", "tblVerkopen")
    'We tellen er eentje bij op
    hoogsteNummer = hoogsteNummer + 1
   
   
    'Record toevoegen
    Dim strSQL As String
    'We maken een toevoegquery
    Dim sVeldnaam As String
    sVeldnaam = "BonNR"
    Dim sTabelnaam As String
    sTabelnaam = "tblVerkopen"
   
    strSQL = "INSERT INTO " & sTabelnaam & " (" & sVeldnaam & " ) VALUES (" & hoogsteNummer & ")"
   
    'We voeren de query uit
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
   
    'Doe een requery van je frmulier
    Forms!frmtest.Form.Requery
    'En ga naar het laatste record
    DoCmd.GoToRecord acDataForm, "frmTest", acLast
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Kasregister
« Reactie #8 Gepost op: 12 november 2013, 11:24:52 »
Hoi Dizzl,

Ik heb wat kunnen doorwerken en heb het een en het ander kunnen verbeteren.

Bij knop betaald; eens zien naar de formule DMAX. Volgens mij klopt dit niet.

Een volgende vraagje. Ik heb een knop in kas geplaatst bij formulier verkopen. De bedoeling is er van om de subtotalen op te tellen in query verkooplijnen en een filter gebruiken voor Betaald. Zo zou je kunnen optellen hoeveel er in kas is.

Wat het recordset betreft: had in gedachte om later met onafhankelijke formulieren te werken. Een kwestie om het brain bezig te houden. Ik had ook interesse als de basis af is om met tabbladen te gaan werken. Hoe zag je dit? Zou je dan in de tabbladen kunnen aanvinken dat een bestelling op betaald kan zetten?

Heb er ook kunnen voor zorgen als het hoofdformulier gesloten is dat ik met formulier orders terug het formulier kan openen en naar het gelinkte BonNr kan gaan(filter).

Zie in bijlage.


13/11/2013 4:19u

Om de dagopbrengsten te berekenen die reeds betaald zijn steek je achter een knop "In kas. Het tegenovergestelde voor niet betaald achter de knop nog ontv.

Dim strSQL As String
Dim rs As ADODB.Recordset
Dim cnn As New ADODB.Connection
Dim vDagontvangsten As Double

vDagontvangsten = 0

Set rs = New ADODB.Recordset
Set cnn = CurrentProject.Connection
 
rs.Open "qryVerkooplijnen", cnn, adOpenStatic, adLockReadOnly, adCmdTable

Do While Not rs.EOF

If rs.Fields("Betaald") = True Then
 
 vDagontvangsten = rs.Fields("Subtotaal") + vDagontvangsten
 
End If
 
  rs.MoveNext

    Loop
   
 MsgBox Format(vDagontvangsten, "€ #.00"), 0 + 64, "In kas"

    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #9 Gepost op: 15 november 2013, 06:29:18 »
Dag Diezel

Graag één vraag per keer ,-)
Ik heb bij je Query aangepast Betaling = false zodat er enkel de niet betaalde in voorkomen.

De code heb ik als volhgt aangepast:
Private Sub btnBetaald_Click()

'Bron: Oplossing.be --> Acces --> Kasregister --> DIZZL 11/11/2013

 'We zetten het veld Betaald in de tabel tblVerkopen op True
   
    Dim strSQL As String
    'Schrijf de query
    strSQL = "Update tblVerkopen SET Betaald= true Where BonNr=" & Me.txtBonNr
   
    'Voer de query uit
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
   
 

    'Kijk Eerst of er nog onbetaalde bonnen zijn
    Dim AantalOnbetaaldeBonnen As Integer
    AantalOnbetaaldeBonnen = DCount("Bonnr", "tblVerkopen", "Betaald=False")
    If AantalOnbetaaldeBonnen < 1 Then
        MsgBox "Er zijn geen onbetaalde bonnen meer"
        Exit Sub
    End If
   
    'Haal de hoogste onbetaalde Bonnumer op
    Dim HoogsteOnbetaaldeBonnummer As Integer
    HoogsteOnbetaaldeBonnummer = DMax("Bonnr", "tblVerkopen", "Betaald=False")
    Me.Filter = "Bonnr=" & HoogsteOnbetaaldeBonnummer
    Me.FilterOn = True


End Sub
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #10 Gepost op: 15 november 2013, 07:27:34 »
Je tweede vraag heb ik ook wat vereenvoudigd.
Ik maakte een query qryKas waar ik met een sommatiequery de sommen maak van de betaalde en niet betaalde lijnen.

Op de knop  komt dan volgende code
    '***********************************
    'Knop In Kas
    '***********************************
    Dim InKas As Double
    Dim NogTeOntvangen As Double
   
    On Error Resume Next
    InKas = Round(DLookup("subtot", "qryKas", "Betaald=true"), 2)
    NogTeOntvangen = Round(DLookup("subtot", "qryKas", "Betaald=false"), 2)
    MsgBox "Er zou " & InKas & " moeten zitten." & vbCrLf & "Nog te ontvangen " & NogTeOntvangen
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Kasregister
« Reactie #11 Gepost op: 15 november 2013, 10:40:07 »
Hoi Dizzl,

Ik heb de vereenvoudiging in het hoofdformulier nagekeken en de frond- end ziet er goed uit. Naar mijn gevoel is de basis gebruiksklaar. In de rechterbovenhoek van het formulier kan er nog een fotooke bij ahoewel de database sterk toeneemt in mb's. Dizzl, is het dan nodig om te werken met een back- end database om op het einde van de dag de data over te pompen om achteraf de boekhouding te doen? Had gedacht om bij dit laatste een record over te houden als deze actie wordt uitgevoerd. Anders is het weer bij de volgende werkdag van bonnr 1 beginnen. Wat ik in de loop van de dagen zal proberen is het hoofdformulier onafhankelijk te maken en gebruik maken van ADO.

Vriendelijke groet,

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #12 Gepost op: 16 november 2013, 18:27:29 »
Bonnr is nu een sleutelveld.
Je zal dan een samengestelde sleutel moeten maken (twee velden vormen samen het sleutelveld)
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline Diezel

  • Oplosser
  • ****
  • Berichten: 508
  • Geslacht: Man
  • Meedenker - Initiatief nemen - Helpen oplossen...
Re: Kasregister
« Reactie #13 Gepost op: 18 november 2013, 00:48:36 »
Beste Dizzl,

In formulier verkopen heb ik het volgende gedaan:

Private Sub Form_Open(Cancel As Integer)

Dim rst As ADODB.Recordset
Dim cnConn As ADODB.Connection

DoCmd.Maximize
 
Set cnConn = CurrentProject.Connection
Set rst = New ADODB.Recordset
 
rst.Open "tblVerkopen", cnConn, adOpenStatic, adLockReadOnly, adCmdTable
rst.MoveLast
txtBonNr = rst.Fields("BonNr")
VerkoopOpm = rst.Fields("VerkoopOpm")

rst.Close
cnConn.Close

End Sub

Bij formulier orderlijst terug naar formulier verkopen loopt het mis om bonNr gefilterd te krijgen. Ik loop vast in ADO om in formulier orderlijst dit naar behoren uit te werken. Kan je mij hierbij op weg helpen? Moet hiervoor een lus gebruiken of DBLOOKUP?

Vriendelijke groet,

Diezel
OS: Windows 10 Home - 64 bit
Processor:  Intel(R) Core(TM) I7 - 4770 CPU 3,40 GHZ
SSD - RAM: 500 GB, 16 GB
SOFTWAREPAKKET: Office 2007

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: Kasregister
« Reactie #14 Gepost op: 18 november 2013, 07:42:41 »
Wat je bereiken met deze code? Diezel

Dit formulier heeft een recordbron nl "qryVerkopen". Waarom zou nu een recordset openen om het laatste bonnummer te gaan?
Met deze recordset kan je idd naar het laatste record gaan "rst.Movelast"
Op dat moment zit je in de recordset op het laatste record maar dat heeft niets met je query te maken.

Op formload had je staan
Private Sub form_Load()

DoCmd.Maximize
DoCmd.GoToRecord , , acLast

End Sub
Dat is perfect om naar het laatste record te gaan

Ik zou bij qryVerkopen Nog bij "Betaald" het criteria op "Neen" zetten zodat je formulier frmVerkopen steeds naar het laatste onbetaalde ticket gaat.


Maar goed ik denk dat jij om één of andere reden een recordset wil gebruiken.
Daarvoor start je het best van een leeg formulier. Als je dat niet doet (dat is wat handiger om het formulier automatisch te laten genereren) moet je de recordbron van het formulier en de gekoppelde velden van het formulier leeg maken. Zodat je daar overal 'Niet afhankelijk' in krijgt.

Je code op het laden van het formulier zou er dan zoiets als dit moeten uitzien:
Private Sub Form_Open(Cancel As Integer)
   Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset
         
   'Gebruik een ADO connectie met DAO werkt dit niet
   Set cn = CurrentProject.AccessConnection

   'Maak een nieuwe instantie van de  ADO Recordset class
   'en stel de eigenschappen in
   Set rs = New ADODB.Recordset
   With rs
      Set .ActiveConnection = cn
      .Source = "SELECT * FROM tblVerkopen"
      .LockType = adLockOptimistic
      .CursorType = adOpenKeyset
      .Open
   End With
   
   'Stel de recordset in als bron voor het formulier
   Set Me.Recordset = rs
   
   'Stel elke textbox in op een veld uit de recordset
   Me.BonNr = rs("Bonnr")
   Me.Datum = rs("Datum")
   Me.Tijd = rs("tijd")
   Me.VerkoopOpm = rs("VerkoopOpm")
   Me.Betaald = rs("Betaald")

   'Geheugen Opkuisen
   Set rs = Nothing
   Set cn = Nothing

End Sub
Ik maakte een ander formulier aan op dit te illustreren.
frmVerkopenADO_Recordset
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

 


www.combell.com