|
Îåêßíçóå áðü ôï ìÝëïò spiliot. Τελευταία δημοσίευση από το μέλος kxag στις 14-05-2006, 13:59. Υπάρχουν 17 απαντήσεις.
-
11-05-2006, 22:12
|
-
spiliot
-
-
-
Μέλος από τις 03-06-2005
-
-
Δημοσιεύσεις 15
-
-
|
Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Καλησπέρα σε όλους... Έχω ένα πρόβλημα που δεν ξέρω πως να το λύσω...
Θέλω με ένα ερώτημα να πάρω το παρακάτω πρότυπο:
<--Αναλυτικά--> <-Προοδευτικά-> Ημερομηνία Αριθμός Χρέωση Πίστωση Χρέωση Πίστωση Υπόλοιπο 05/04/2006 23 200€ 200€ 0€ 200€ 10/04/2006 56 100€ 200€ 100€ 100€ 18/04/2006 78 450€ 200€ 550€ -350€ 25/04/2006 112 150€ 350€ 550€ -200€ 10/05/2006 244 500€ 850€ 550€ 300€
Οι εγγραφές είναι αποθηκευμένες σε έναν πίνακα monetary με πεδία date, number, value (έχει και άλλα αλλά δεν παίζει ρόλο)
Τι πρέπει να γίνεται. Αν το Value είναι θετικό τότε πρόκειται για χρέωση, οπότε στο ερώτημα το εμφανίζει στην θέση χρέωση, αν είναι αρνητικό τότε το εμφανίζει στη θέση Πίστωση. Αυτό το έχω κάνει στο ερώτημα με την χρήση της iif εύκολα...
Τώρα αυτό που δεν έχω ιδέα πως να το κάνω είναι το πεδίο προοδευτικής χρέωσης να προσθέτει αυτόματα όλες τις χρεώσεις (και το ίδιο αυτό της πίστωσης) και τέλος στο υπόλοιπο να φαίνεται η διαφορά τους.
Αν δεν μπορεί να γίνει σε query και μπορεί σε έκθεση, δεν με πειράζει, αλλά ούτε και εκεί το κατάφερα. Ουσιαστικά πρόκειται για άθροισμα των απο πάνω πεδίων για κάθε γραμμή...
Η μόνη λύση που μπορώ να σκεφτώ είναι με κώδικα να πάρω το ερώτημα που ήδη έχω καταφέρει να φτιάξω (χωρίς τις προοδευτικές εγγραφές δηλαδή) και να φτιάξω ένα δεύτερο σαν το πρότυπο που θέλω, όπου για κάθε γραμμή θα κάνω το άθροισμα στον κώδικα και μετά θα προσθέτω τα αποτελέσματα στο καινούριο ερώτημα. Θα δουλέψει, αλλά μου φαίνεται τελείως βλακεία, σίγουρα θα υπάρχει κάποιος καλύτερος τρόπος που αγνοώ...
|
|
-
12-05-2006, 09:35
|
-
evliatsas
-
-

-
Μέλος από τις 13-02-2006
-
Αθήνα
-
Δημοσιεύσεις 123
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Άν κατάλαβα καλά, θέλεις να έχεις ένα Report της μορφής:
<--Αναλυτικά-->
Ημερομηνία Αριθμός Χρέωση Πίστωση Υπόλοιπο 05/04/2006 23 200€ 200€ 10/04/2006 56 100€ 100€ 18/04/2006 78 450€ -350€ 25/04/2006 112 150€ -200€ 10/05/2006 244 500€ 300€
-------------------------------------------
<-Προοδευτικά-> Χρέωση Πίστωση Υπόλοιπο 850€ 550€ 300
Άν ναι, τότε δημιούργησε ένα Report, το οποίο παίρνει τα πεδία του ερωτήματος.
Έπειτα πρόσθεσε στην γραμμή της Λεπτομέρειας ένα TextBox(π.χ. TextBox1) και στα Property αυτού
-Ορατό Όχι
-Προέλευση Στοιχείου Ελέγχου =[ΧΡΕΩΣΗ] ' Ή όπως αλλιώς ονομάζεις το αντίστοιχο πεδίο στο ερώτημα
-Τρέχον Άθροισμα Για Όλα
Τέλος στο Υποσέλιδο του Report πρόσθεσε ένα TextBox στο οποίο θα δώσεις
-Προέλευση Στοιχείου Ελέγχου =[TextBox1] 'Ή όπως αλλιώς ονομάζεις το αντίστοιχο TextBox στη Λεπτομέρεια.
και Voila!!! το TextBox αυτό θα σου δίχνει το Συνολικό Άθροισμα.
Αντίστοιχα θα κάνεις και για την Πίστωση και για το Υπόλοιπο.
|
|
-
12-05-2006, 09:38
|
-
KoYkoY
-
-

-
Μέλος από τις 15-03-2006
-
-
Δημοσιεύσεις 34
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Αν κατάλαβα καλά την ερώτησή σου.. θα μπορούσες στο υποσέλιδο της έκθεσης να δημιουργήσεις 3 πλαίσια κειμένου [SumΧρέωση], [SumΠίστωση], [SumΥπόλοιπο] με προέλευση εγγραφών αντίστοιχα, =Άθροισμα([Χρέωση]), =Άθροισμα([Πίστωση]), =[SumΧρέωση]-[SumΠίστωση] .
|
|
-
12-05-2006, 10:23
|
-
spiliot
-
-
-
Μέλος από τις 03-06-2005
-
-
Δημοσιεύσεις 15
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Κατ' αρχήν ευχαριστώ για τις απαντήσεις, όμως καμία από τις δύο δεν φαίνεται να είναι αυτό που θέλω...
Αν προσέξετε, δεν θέλω στο τέλος (υποσέλιδο σελίδας) να έχω σύνολα, οπότε θα δούλευε με την sum ή με το αυτόματο άθροισμα στο textbox, αλλά μέσα στη λεπτομέρεια!
Για κάθε γραμμή λοιπόν, μαζί με την τιμή θα πρέπει να γίνεται και το άθροισμα των -μέχρι της εκάστοτε γραμμής- τιμών. Σε κάθε περίπτωση λοιπόν το συνολικό άθροισμα (το οποίο έτσι και αλλιώς μπορούσα να κάνω) δεν με βοηθάει...
Η ενεργοποίηση της επιλογής Τρέχον Άθροισμα: Για Όλα μέσα στη λεπτομέρεια δεν έχει καμία αλλαγή στην τιμή του, καθώς τα αθροίσματα γίνονται πάντα στο τέλος ομαδοποιήσεων ή στο τέλος της φόρμας.
|
|
-
12-05-2006, 11:07
|
-
pero
-
-

-
Μέλος από τις 03-06-2005
-
Αθήνα
-
Δημοσιεύσεις 25
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Πιθανόν να υπάρχει και καλύτερος τρόπος.
Η πιο κάτω sql δήλωση προυποθέτει πως
ο πίνακας ονομάζεται pin
H Ημερομηνία hmnia
O Αριθμός ΑΑ
το ποσό Poso
Το παρακάτω κάνει ότι θέλεις, μόνο που χρειάζεται να εξασφαλίσεις πως θα σου φέρει 0 όπου υπάρχει null για να γίνει σωστά η πράξη, διότι 200 - null κάνει null.
Αυτό στην aceess γίνεται με την συνδυασμένη χρήση των iif και isnull.
Αν έχεις κάποιο πρόβλημα ενημέρωσέ με.
SELECT a.hmnia,a.aa,iif(a.poso>=0,a.poso,0) as ΧΡΕΩΣΗ ,iif(a.poso< 0,-a.poso,0) as ΠΙΣΤΩΣΗ , (select sum(b.poso) from pin as b where b.hmnia <= a.hmnia and b.poso >= 0) as ΠρΧρ , (select sum(c.poso) from pin as c where c.hmnia <= a.hmnia and c.poso < 0) as ΠΡπ , ((select sum(b.poso) from pin as b where b.hmnia <= a.hmnia and b.poso >= 0) + (select sum(c.poso) from pin as c where c.hmnia <= a.hmnia and c.poso < 0)) as ΥΠΟΛΟΙΠΟ from pin as a;
|
|
-
12-05-2006, 13:05
|
-
KoYkoY
-
-

-
Μέλος από τις 15-03-2006
-
-
Δημοσιεύσεις 34
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Συμπληρωματικά αν θέλεις τη σούμα στη λεπτομέρεια μπορείς να δημιουργήσεις επιπλέον πλαίσια κειμένου ως =DSum("[Χρέωση]";"ΌνομαΠίνακα";"Number<=" & Εκθέσεις!ΌνομαΕκθεσης!Number). Παρόμοια και στα άλλα.
|
|
-
12-05-2006, 18:12
|
-
spiliot
-
-
-
Μέλος από τις 03-06-2005
-
-
Δημοσιεύσεις 15
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Pero μου άρεσε σαν ιδέα η λύση που έδωσες (προτιμώ να εξασκούμαι στη λύση των προβλημάτων μέσα στην sql ή στον κώδικα απ' ότι με μπακαλίστικες ή έτοιμες μεθόδους της access). Όμως υπάρχει μια λεπτομέρεια που δημιουργεί πρόβλημα...
Ο έλεγχος που κάνεις για την πρόσθεση γίνεται στο πεδίο της ημερομηνίας, πράγμα που σημαίνει ότι αν σε μια μέρα υπάρχουν περισσότερες της μίας εγγραφής (πράγμα που συμβαίνει) τότε προστίθενται όλες. Αυτό που δεν είχα γράψει νωρίτερα γιατί δεν θεωρούσα ότι έπαιζε ρόλο είναι ότι ο πίνακας έχει και ένα πεδίο με μοναδικό κλειδί (ID) και θα το παλέψω με αυτό και πιστεύω το άθροισμα να βγει σωστό.
Η λύση του koykoy (δεν την δοκίμασα ακόμα) φαίνεται πιο εύκολη παρόλα αυτά και μάλλον αυτό θα κάνω αν δουλέψει.
Σας ευχαριστώ όλους και θα επανέλθω αν χρειαστεί...
ΠΡΟΣΘΗΚΗ: Παρατήρησα ότι συμβαίνει το εξής "κουφό". Αν βάλω τα δεδομένα χωρίς την δημιουργία της στήλης Χρέωσης-Πίστωσης με την iif (χρησιμοποιήσω δηλαδή μόνο το value), τότε οι προσθέσεις δουλεύουν σωστά χρησιμοποιώντας το "Τρέχον Άθροισμα" στις ιδιότητες του textbox!!!
Δοκίμασα να μην αφήσω την τιμή σε null στην iif, αλλά να την αλλάξω σε 0, να καλέσω την format και να το κάνω currency, αλλά και πάλι, όταν μπει η iif τα αθροίσματα δεν δουλεύουν! Έχει κανείς κάποια ιδέα ή να χτυπήσω το κεφάλι μου στον τοίχο;
Περιλαμβάνω το ερώτημα μήπως δείτε κάτι που δεν βλέπω: SELECT Custs.CustID, Custs.CustName, MonetaryEntries.ChargeDate, MonetaryEntries.Number, Type.TypeName & IIf(IsNull(MonetaryEntries.Comment),IIf(IsNull(MonetaryEntries.ForJourney),""," (" & queryJourneyNames.JourneyName & ")")," (" & MonetaryEntries.Comment & ")") AS Description, Format(IIf(MonetaryEntries.Value<0,0,MonetaryEntries.Value),"Currency") AS Charge, Format(IIf(MonetaryEntries.Value>0,0,-MonetaryEntries.Value),"Currency") AS Credit
FROM Type INNER JOIN (Custs INNER JOIN (MonetaryEntries LEFT JOIN queryJourneyNames ON MonetaryEntries.ForJourney=queryJourneyNames.JourneyID) ON Custs.CustID=MonetaryEntries.FromCust) ON Type.TypeID=MonetaryEntries.Type ORDER BY Custs.CustName;
Με έντονο χρώμα τα πεδία που μας ενδιαφέρουν...
|
|
-
12-05-2006, 18:51
|
-
spiliot
-
-
-
Μέλος από τις 03-06-2005
-
-
Δημοσιεύσεις 15
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Το πρόβλημα (ή μάλλον τα συμπτώματα) το έλυσα τελικά ως εξής:
Στέλνω απλά το Value από το ερώτημα, το οποίο βάζω σε ένα κρυφό txtbox στην έκθεση (με όνομα txtbValue). Στην συνέχεια έχω τo txtbox στη θέση Χρέωση να δείχνει ή όχι τα δεδομένα με βάση την iif([Value]>0;[txtbValue]) και παρόμοια για το αντίστοιχο της πίστωσης. Τέλος ένα ακόμα txtbox κάνει την πρόσθεση αυτόματα με την χρήση της "Τρέχον Άθροισμα" και σαν Προέλευση Δεδομένων το txtbCharge...
Δηλαδή χρησιμοποίησα κάτι από όλες τις απαντήσεις :-)
Παραμένει όμως το πρόβλημα γιατί δεν δουλεύει το τρέχον άθροισμα στην περίπτωση που τα δεδομένα έρχονται από το ερώτημα σε δύο πεδία... :-(
|
|
-
12-05-2006, 20:22
|
-
imanos
-
-

-
Μέλος από τις 24-01-2006
-
Ναυπλιο
-
Δημοσιεύσεις 221
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Αυτό που ζητάς σέ SQL για να το πάρεις ακολούθα το παρακάτω statment
SELECT monetary.idate, monetary.inumber, IIf(monetary.ivalue>0,monetary.ivalue,0) AS debit, abs(IIf(monetary.ivalue<0,monetary.ivalue,0)) AS credit, (select sum(c.ivalue) from monetary c where c.idate<=monetary.idate and c.ID<=monetary.ID and c.ivalue>0) AS runningdebit, abs( (select sum(f.ivalue) from monetary f where f.idate<=monetary.idate and f.ID<=monetary.ID and f.ivalue<0)) AS runningcredit, (select sum(l.ivalue) from monetary l where l.idate<=monetary.idate and l.ID<=monetary.ID ) AS remaining FROM monetary ORDER by idate,ID;
και θα δείς ότι θα πάρεις τον πίνακα που ζητάς
Ουσιαστικά είναι αυτό που σου πρότεινε ο Perro αλλά λαμβάνει υπόψή και το ID που αναφέρεις για να δημιουργηθούν σωστά τα αθροίσματα.
Παρεπιπτόντως δέν νομίζω ότι η SQLSyntax στην ACCESS είναι μπακαλίστικος τρόπος.
Ιωάννης Μανουσάκης
|
|
-
12-05-2006, 21:11
|
-
spiliot
-
-
-
Μέλος από τις 03-06-2005
-
-
Δημοσιεύσεις 15
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
προτιμώ να εξασκούμαι στη λύση των προβλημάτων μέσα στην sql ή στον κώδικα απ' ότι με μπακαλίστικες ή έτοιμες μεθόδους της access |
|
Παρεπιπτόντως δέν νομίζω ότι η SQLSyntax στην ACCESS είναι μπακαλίστικος τρόπος |
|
Ούτε και εγώ όπως λέω! Μακάρι να είχες απαντήσει 2 ώρες νωρίτερα να μην το είχα ήδη φτιάξει "μπακαλίστικα" μέσα στην έκθεση από το απλό ερώτημα (όπως λέω παραπάνω).
Έτρεξα το ερώτημα και είναι ακριβώς ότι ήθελα (λείπει το AS μέσα στα select των προσθέσεων)... Μάθαμε πάλι κάτι σήμερα :-)
Πάντως το κουφό ακόμα παραμένει, γιατί δεν δουλεύει το Τρέχον Άθροισμα στα textbox στις εκθέσεις όταν το ερώτημα περιείχε την iif για να δώσει την τιμή...
|
|
-
12-05-2006, 21:21
|
-
imanos
-
-

-
Μέλος από τις 24-01-2006
-
Ναυπλιο
-
Δημοσιεύσεις 221
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Σίγουρα σέ κάποιο σημείο της iif άν χρησιμοποιείς αυτό iif(value>0,value,"") γι΄αυτό το λόγο δέν σου δουλεύουν οι αθροίσεις γιατί μετά πάει να προσθέσει μία string μέ μία value θα έπρεπε να χρησιμοποιείς iif(value>0,value,0) .
Μόνο αυτό μπορώ να φανταστώ ότι γίνεται.
Ιωάννης Μανουσάκης
|
|
-
12-05-2006, 21:31
|
-
spiliot
-
-
-
Μέλος από τις 03-06-2005
-
-
Δημοσιεύσεις 15
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Μπα τελικά έφτασα να χρησιμοποιήσω αυτό:
Format(IIf(MonetaryEntries.Value<0,0,MonetaryEntries.Value),"Currency")
χωρίς επιτυχία, όπως και το ίδιο χωρίς την format.
|
|
-
12-05-2006, 21:34
|
-
imanos
-
-

-
Μέλος από τις 24-01-2006
-
Ναυπλιο
-
Δημοσιεύσεις 221
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Θα πρέπει να δώ την Access που έχεις για να μπορέσω να σου απαντήσω.
Δηλ. μιά Access που να εμπεριέχει τους πίνακες που λές καί την έκθεση για να δώ τις συναρτήσεις που έχεις.
Ιωάννης Μανουσάκης
|
|
-
12-05-2006, 21:46
|
-
imanos
-
-

-
Μέλος από τις 24-01-2006
-
Ναυπλιο
-
Δημοσιεύσεις 221
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
προτιμώ να εξασκούμαι στη λύση των προβλημάτων μέσα στην sql ή στον κώδικα απ' ότι με μπακαλίστικες ή έτοιμες μεθόδους της access |
|
Παρεπιπτόντως δέν νομίζω ότι η SQLSyntax στην ACCESS είναι μπακαλίστικος τρόπος |
|
|
|
Μάλλον παρεξήγησα το πώς εννοούσες το μπακαλίστικα ταπεινά συγνώμη
Ιωάννης Μανουσάκης
|
|
-
12-05-2006, 21:58
|
-
kxag
-
-
-
Μέλος από τις 03-04-2006
-
Αθήνα
-
Δημοσιεύσεις 8
-
-
|
Απ: Πεδίο και άθροισμά του στην ίδια γραμμή (Access)
Επίσης να προσθέσω ότι προσοχή γιατι η Format συνήθως επιστρέφει string και οχι αριθμο. οποτε αν πας αν αθροισεις αυτο:
Format(IIf(MonetaryEntries.Value < 0 , 0,MonetaryEntries.Value),"Currency") AS Charge
μαλλον δεν θα έχεις τα λογικα αποτελεσματα
Επίσης οταν αθροιζεις το null παλι δεν έχεις καλα αποτελεσματα άρα πιστευω ότι η λυση είναι κάπου στη μέση δηλαδή αυτό
IIf(MonetaryEntries.Value < 0 , 0 ,MonetaryEntries.Value). Ελπίζω να βοήθησα να λυθεί και η τελευταία σου αποροία.
Επίσης αν δε δούλευες σε access θα σου έλεγα μη φτιάξεις αυτό το πράμα με query
Διότί απλά σε κάθε γραμμή κάνεις και από ένα sum To αποτέλεσμα είναι η ταχύτητα του query σου να μειώνεται με αριμιτική πρόοδο με κάθε εγγραφή που προσθέτεις στη βάση δίοτι κάθε φόρα προσθέτεις και ένα άθροισμα το οποίο επιπλέον έχει και μια πράξη παραπάνω να κάνει.Φαντάσου ότι αυτό το κάνεις επι 2 (μια για τη χρέωση και μια γιατη πίστωση). Το αποτέλεσμα είναι αν μεγαλώσει πολύ να τη γονατίσεις από θέμα ταχύτητας πραγμα που πιστεύω ότι θα γίνει πάρα πολύ σύντομα. Φαντάσου ότι για μια βάση με 6 εγγραφές μόνο για την πίστωση θα κάνεις αυτές τις πράξεις
Στη γραμμή Νο 1 :0 πράξεις
Στη γραμμή Νο 2 : 1 πράξη
Στη γραμμή Νο 3 :2 πράξεις
Στη γραμμή Νο 4 :3 πράξεις
Στη γραμμή Νο 5 :4 πράξεις
Στη γραμμή Νο 6 :5 πράξεις
Σύνολο 15 πράξεις
και ουτω καθεξης
Έχεις δηλαδη με απλά μαθηματικά μια αριθμιτική πρόοδο .
....
Μήπως να χρησιμοποιπούσες λίγο VBA για αυτό που θες να κάνεις??
|
|
Σελίδα 1 από 2 (18 εγγραφές)
1
|
|
|