Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Προγραμματισμός και μαθηματικά ακριβείας!

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 17-09-17, 11:51
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-07-2014
Περιοχή: Πάτρα
Μηνύματα: 385
Προεπιλογή Προγραμματισμός και μαθηματικά ακριβείας!

Γεια σας,

Η συνημμένη βάση (http://www.ms-office.gr/forum/access...io-pinaka.html)
δημιουργήθηκε χάρις στην εξαιρετική βοήθεια του φίλου του Forum
Γιώργου(Kapetang).

Στη βάση αυτή, αφού συμπληρώσουμε τα απαιτούμενα πεδία της φορμας,
μπορούμε να υπολογίσουμε και να έχουμε στον πίνακα τις δόσεις μας
ανά μήνα ή 2μηνο κλπ.

Εργαζόμενος πάνω σε αυτή , διαπίστωσα ότι, σε ορισμένες περιπτώσεις,
δεν υπάρχει ακρίβεια δεκαδικών μονάδων. Για παράδειγμα:

Παράθεση:
Θέτω στη φόρμα
1. Σύνολο οφειλής = 641,01€
2. Περίοδος δόσεων = ΜΗΝΙΑΙΑ
3. Σύνολο δόσεων = 5

και στον πίνακα καταχωρίζονται 5 ισόποσες δόσεις * 128,20 € = 641,00€.
Δηλαδή μας λείπει 1 λεπτό.

Ομοίως, όταν θέτω στη φόρμα

1. Σύνολο οφειλής = 76,36€
2. Περίοδος δόσεων = ΜΗΝΙΑΙΑ
3. Σύνολο δόσεων = 5
πάλι έχουμε απώλεια του ενός λεπτού (5*15,27€=76,35€)
Επειδή οι υπολογισμοί μου στη διαμόρφωση των δόσεων θα πρέπει
να είναι απολύτως ακριβείς και να μην υπολείπονται ούτε στο ένα λεπτό,
θα παρακαλούσα για τη τη βοήθειά σας:

Είναι δυνατόν κατά τον υπολογισμό των εκάστοτε δόσεων το υπολειπόμενο
λεπτό (ή λεπτά) να τίθεται(-νται) στο ποσό της τελευταίας δόσης?

(Έτσι, όλες οι δόσεις μας θα είναι ισόποσες πλην της τελευταίας)
Συνημμένα Αρχεία
Τύπος Αρχείου: zip MultipleCopy7.zip (35,9 KB, 20 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 17-09-17, 18:47
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

Φίλε Δημήτρη άλλαξε τον παλιό κώδικα του κουμπιού με τον:

Κώδικας:
Private Sub cmdAdd_Click()
    Dim rs As DAO.Recordset, dt As Date, i As Long, sum As Double
    Dim vPeriodos As Variant, strC As String, k As Long

    On Error GoTo errHandler
    'Ελέγχος καταχώρησης αναγκαίων στοιχείων
    If Not ((IsDate(Me.DAYEX) And _
             Nz(Me.KATIGORIAEX, "") <> "") And _
             (Nz(Me.KATASTASIEX, "") <> "") And _
             IsNumeric(Me.ARXEXODA) And _
             IsNumeric(Me.SYNDOSEON) And _
             (Nz(Me.PERIODOS, "") <> "") And _
             IsNumeric(Me.Prokatavoli)) Then
        MsgBox "Σε κάποια πεδία δε δόθηκαν κατάλληλες τιμές"
        Exit Sub
    End If

    'Αποτροπή πολλαπλών καταχωρήσεων
    strC = "DAYEX=#" & Format(Me.DAYEX, "m/d/yyyy") & "# And " & _
           "KATIGORIAEX='" & Me.KATIGORIAEX & "' And " & _
           "KATASTASIEX='" & Me.KATASTASIEX & "' AND ARXEXODA=" & _
           Replace(Me.ARXEXODA, ",", ".") & " And " & _
           "SYNDOSEON=" & Me.SYNDOSEON & " AND PERIODOS='" & Me.PERIODOS & "' And " & _
           "TREXDOSI=1 AND Prokatavoli=" & Replace(Me.Prokatavoli, ",", ".")
    If DCount("*", "tblExoda", strC) Then
        MsgBox "Τα στοιχεία είναι ήδη καταχωρημένα"
        Exit Sub
    End If

    'Καταχώρηση δεδομένων
    vPeriodos = Array(1, 2, 3, 6, 12)
    k = Me.PERIODOS.ListIndex
    Set rs = CurrentDb.OpenRecordset("tblExoda")
    dt = CDate(Me.DAYEX)
    sum = Me.Prokatavoli
    For i = 1 To Me.SYNDOSEON
        rs.AddNew
        rs!DAYEX = DateAdd("m", vPeriodos(k) * (i - 1), dt)
        If i = Me.SYNDOSEON Then
            rs!POSOEX = Me.ARXEXODA - sum
        Else
            rs!POSOEX = Round((Me.ARXEXODA - Me.Prokatavoli) / Me.SYNDOSEON, 2)
            sum = sum + Round((Me.ARXEXODA - Me.Prokatavoli) / Me.SYNDOSEON, 2)
        End If
        rs!KATIGORIAEX = Me.KATIGORIAEX
        rs!KATASTASIEX = Me.KATASTASIEX
        rs!ARXEXODA = Me.ARXEXODA
        rs!SYNDOSEON = Me.SYNDOSEON
        rs!PERIODOS = Me.PERIODOS
        rs!TREXDOSI = i
        rs!Prokatavoli = Me.Prokatavoli
        rs!PERIGRAFIEX = Me.PERIGRAFIEX
        rs.Update
    Next
    MsgBox "Η προσθήκη των εγγραφών ολοκληρώθηκε"
    Exit Sub
errHandler:
    MsgBox Err.Description, vbCritical, "Error #" & Err.Number
End Sub
Απάντηση με παράθεση
  #3  
Παλιά 17-09-17, 19:40
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-07-2014
Περιοχή: Πάτρα
Μηνύματα: 385
Προεπιλογή

Καλησπέρα.

Γιώργο, καταπληκτικά!!!
Ο κώδικας μού δίνει ακριβώς αυτό που ήθελα.

Αν μπορείς, ήθελα κάτι ακόμη:

Στον πίνακα έχω προσθέσει και ένα υπολογιζόμενο πεδίο "SYNYPOLOIPO",
το οποίο μού δίνει σε κάθε δόση το υπολειπόμενο ποσό. Αλλά με την παράσταση
που έχω βάλει (Στρογγυλεμένη(([PosoDoseon])-(([TREXDOSI])*[POSOEX]);2)),
δεν βγάζω υπόλοιπο μηδέν(0) στην τελευταία δόση!

Έχεις καμιά ιδέα για το ποιά παράσταση θα βάλω στο υπολογιζόμενο πεδίο για να μού βγάζει στην τελευταία δόση
ως υπόλοιπο μηδέν (0), που έιναι και το σωστό?


Σε υπερευχαριστώ για τη βοήθειά σου...
Συνημμένα Αρχεία
Τύπος Αρχείου: zip MultipleCopy9.zip (36,4 KB, 25 εμφανίσεις)
Απάντηση με παράθεση
  #4  
Παλιά 17-09-17, 22:59
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

Για τη διαμόρφωση του τύπου θα πρέπει να λάβουμε υπόψη μας.

1) Οι δόσεις, εκτός από την τελευταία, είναι ίσες με:

Round(([ARXEXODA]-[Prokatavoli])/[SYNDOSEON];2)
.
2) Η τελευταία δόση προκύπτει από την αφαίρεση του αθροίσματος των προηγούμενων δόσεων από το ποσό: [ARXEXODA]-[Prokatavoli] και κατά κανόνα διαφέρει από τις προηγούμενες.

Με βάση τα παραπάνω θα πρότεινα να δοκιμάσεις τον τύπο:

[ARXEXODA]-[Prokatavoli]-Round(([ARXEXODA]-[Prokatavoli])/[SYNDOSEON];2)*([TREXDOSI]-1)-[POSOEX]
Απάντηση με παράθεση
  #5  
Παλιά 18-09-17, 19:41
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-07-2014
Περιοχή: Πάτρα
Μηνύματα: 385
Προεπιλογή

Καλησπέρα

Φίλε Γιώργο, σε υπερευχαριστώ και πάλι για τη βοήθειά σου.
Η πρόταση σου δοκιμάστηκε στη βάση μου και λειτουργεί άψογα!


Καλή συνέχεια...
Απάντηση με παράθεση
  #6  
Παλιά 18-09-17, 20:24
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Φίλε Δημήτρη να είσαι καλά!
Απάντηση με παράθεση
  #7  
Παλιά 17-02-20, 23:35
Όνομα: Γιάννης
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 04-12-2010
Περιοχή: ΑΘΗΝΑ
Μηνύματα: 35
Προεπιλογή

Καλησπέρα σε όλους.
Παρακαλώ για την πολυτιμη βοηθεια σας.
Θα μπορούσατε να με βοηθήσετε να προσθέσω α) την επιλογη εβδομαδιαία στην περίοδο δόσεων και β) να επιλέγω σταθερα την ημέρα της εβδομάδας π.χ κάθε Σάββατο

Ευχαριστώ πολύ
Απάντηση με παράθεση
  #8  
Παλιά 18-02-20, 10:12
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα

Γιάννη, κάνε δοκιμές στο συνημμένο.

Η μέρα καταβολής των δόσεων συμπίπτει με τη μέρα της ημερομηνίας που καταχωρούμε στο πεδίο [Ημερομηνία].

Συνεπώς, αν θέλουμε οι δόσεις να καταβάλλονται κάθε «Σάββατο», θα πρέπει η ημερομηνία που καταχωρούμε στο πεδίο [Ημερομηνία] να είναι «Σάββατο».
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb MultipleCopy10.accdb (768,0 KB, 15 εμφανίσεις)
Απάντηση με παράθεση
  #9  
Παλιά 18-02-20, 21:49
Όνομα: Γιάννης
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 04-12-2010
Περιοχή: ΑΘΗΝΑ
Μηνύματα: 35
Προεπιλογή

Γιώργο σε ευχαριστώ πολύ για όλα!!
Ειναι αυτο που ζητούσα.
Απάντηση με παράθεση
  #10  
Παλιά 18-02-20, 23:15
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Να είσαι καλά Γιάννη και καλή συνέχεια.
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας



Η ώρα είναι 14:49.