Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Εκθέσεις ] Σύνολα στο Υποσέλιδο Σελίδας (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1030-sinola-sto-yposelido-selidas.html)

mdragon 23-03-11 13:38

Σύνολα στο Υποσέλιδο Σελίδας
 
Καλημέρα σε όλους,
Επανέρχομαι με ένα "κουλό" πρόβλημα.....
Έχω μια έκθεση η οποία δέχεται 15 εγγραφές ανά σελίδα maximum.
Το ζητούμενο είναι πως θέλω να παίρνω στο υποσέλιδο σελίδας τα αθροίσματα των πεδίων μου. Δίνοντάς του όμως =Sum([Πεδίο]) μου δίνει #Σφάλμα#.
Είναι δυνατόν να σου επιτρέπει σύνολα ανά έκθεση και όχι ανά σελίδα :wall:

Αν έχει κάποιος καμιά ιδέα.....




Ευχαριστώ,
Μάρω

Dimitris Ch 23-03-11 15:17

Καλησπερα
για κανε μια επισυναψη την βαση βρε Μαρω


Δημητρης

Tasos 23-03-11 18:11

Καλησπέρα σε όλους!

Αγαπητή Μαρία, αν δε βλέπουμε ένα επισυναπτόμενο παράδειγμα (όπως επισημαίνει και ο
Δημήτρης) μας είναι δύσκολο να απαντήσουμε με σαφήνεια.

Η συνάρτηση Sum([Πεδίο1]) σε μια φόρμα αθροίζει τις ΟΛΕΣ τις εγγραφές από Πεδίο1
Το ίδιο ισχύει και στις εκθέσεις που ανάλογα την προβολή το πεδίο θα εμφανίσει είτε#Σφάλμα# είτε το συνολικό άθροισμα.

Γενικά, για να εμφανίσουμε το άθροισμα ενός πεδίου σε επίπεδο σελίδας θα χρειαστούμε:

Στο υποσέλιδο σελίδας ένα πεδίο με το όνομα "PageTotals" (παραδειγματικό όνομα).

και στη λειτουργική μονάδα της Έκθεσης τον παρακάτω κώδικα:

Κώδικας:

Option Compare Database
Option Explicit

Dim PageTotal As Currency  ' Double?

Private Sub FormDetail_Print(Cancel As Integer, PrintCount As Integer)
    PageTotal = PageTotal + Nz(Me.PageTotals)
End Sub

Private Sub PageFooter_Print(Cancel As Integer, PrintCount As Integer)
    Me.PageTotals = PageTotal
    PageTotal = 0
End Sub

Αν θέλεις κάτι άλλο δώσε μας περισσότερες λεπτομέρειες.

Καλή συνέχεια!

Φιλικά
Τάσος

mdragon 23-03-11 20:19

Καλησπέρα,
συνήθως επισυννάπτω αρχεία αλλά θεώρησα ότι ήταν κατανοητό το ερωτήμά μου :oooops:
Τάσο για άλλη μια φορά με κάλυψες.
Δημήτρη το ζητούμενο είναι σε μία έκθεση να έχουμε σύνολα ανά σελίδα. Αν χρειάζεσαι ακόμα την επισύνναψη πες μου να φτιάξω ένα αρχείο και να το ανεβάσω.




Φιλικά,
Μάρω

Dimitris Ch 23-03-11 22:35

Αν σε καλυψε ο Τασος Οκ
Εμενα μου φανηκε περιεργο να μην σου βγαζει συνολα γι αυτο σου ειπα να επισυναψεις την βαση
Πιθανος γιατι γω σχεδιαζω με τον οδηγο και οχι ελευθερα
Θα ηθελα και την γνωμη του τασου σ αυτο...Υπαρχει καποια διαφορά
Ετσι οπως το κανεις φαινεται σωστο

Φιλικα Δημητρης

ΠΑΝΟΣ 24-03-11 13:07

Καλησπέρα , έχω και εγώ το ίδιο ακριβώς πρόβλημα.
Συγκεκριμένα έχω ένα πεδίο [NET] , και θέλω στο τέλος κάθε σελίδας να μου βγάζει μερικό σύνολο.
Γενικό σύνολο στο τέλος της έκθεσης βγάζει κανονικά , με το μερικό σύνολο ανά σελίδα έχω πρόβλημα. Μπορεί κάποιος να με βοηθήσει??
Ευχαριστώ:wall:

Tasos 24-03-11 14:32

Καλησπέρα σε όλους!

Πάνο καλωσόρισες στο φόρουμ!

Φίλοι μου ούτε ο οδηγός ούτε μια κενή έκθεση μπορεί να βοηθήσει στο πρόβλημα.
Το Άθροισμα εγγραφών μιας σελίδας δεν υποστηρίζεται άμεσα από καμία έκδοση Access μέχρι τώρα εκτός και αν:
  • Υπάρχουν ομαδοποιημένες εγγραφές όπου το τέλος της ομάδας συμπίπτει με το τέλος της σελίδας.
    Εδώ μπορούμε στο υποσέλιδο της σελίδας να εμφανίσουμε το άθροισμα της ομάδας που είναι και το άθροισμα της σελίδας
  • Προγραμματιστικά με χρήση VBA.
    Έστω ότι η λεπτομέρεια της Σελίδας έχει το όνομα FormDetail
    και το υποσέλιδο το όνομα FormPageFooter
Στο υποσέλιδο σελίδας δημιουργούμε ένα πεδίο με το όνομα "PageTotals" (παραδειγματικό όνομα).
και στη λειτουργική μονάδα της Έκθεσης τον παρακάτω κώδικα:

Κώδικας:

Option Compare Database
Option Explicit

Dim PageTotal As Currency  ' Double?

Private Sub FormDetail_Print(Cancel As Integer, PrintCount As Integer)
    PageTotal = PageTotal + Nz(Me.PageTotals)
End Sub

Private Sub FormPageFooter_Print(Cancel As Integer, PrintCount As Integer)
    Me.PageTotals = PageTotal
    PageTotal = 0
End Sub

Καλή συνέχεια!

Τάσος

Meteora 24-03-11 14:35

Τάσο μου,
μήμως πρέπει ο κώδικας στο υποσέλιδο_σελίδας να μπεί :

Private Sub PageFooter_Print(Cancel As Integer, PrintCount As Integer)
Me.[Text box onoma] = PageTotal
PageTotal = 0
End Sub

Και στη ρουτίνα που αφορά την ενότητα 'Λεπτομέρεια' να γραφεί :

PageTotal = PageTotal + Nz(Me.πεδίοτάδε) Για την περίπτωση του Πάνου το πεδίοτάδε είναι το ΝΕΤ

Φιλικά

Νίκος

kapetang 24-03-11 15:48

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Στη ΒΔ, που επισυνάπτω, υπάρχει μία έκθεση που εμφανίζει:
1) Στις λεπτομέρειες το τρέχον άθροισμα του πεδίου «Poso».
2) Στο υποσέλιδο σελίδας:
2α) Το άθροισμα του πεδίου «Poso» για τις εγγραφές κάθε σελίδας και
2β) Το άθροισμα του πεδίου «Poso» για όλες τις προηγούμενες εγγραφές μέχρι την τελευταία της τρέχουσας σελίδας.
Η περίπτωση 2α παρουσιάζεται μόνο στην εκτύπωση και σε προεπισκόπηση εκτύπωσης.
Για την υλοποίηση χρησιμοποίησα, τον κώδικα του Τάσου και τη διόρθωση που πρότεινε ο Νίκος.
Κώδικας:

Option Compare Database
Option Explicit

Dim PageTotal As Currency  ' Double?

Private Sub FormDetail_Print(Cancel As Integer, PrintCount As Integer)
    PageTotal = PageTotal + Nz(Me.[Poso])
End Sub

Private Sub FormPageFooter_Print(Cancel As Integer, PrintCount As Integer)
    Me.PageTotals = PageTotal
    PageTotal = 0
End Sub

Για την υλοποίηση των περιπτώσεων 1 και 2β:
Στις λεπτομέρειες πρόσθεσα το αδέσμευτο πλαίσιο κειμένου «txtPoso» και όρισα τις ιδιότητες, προέλευση στοιχείου ελέγχου:=[Poso] και τρέχον άθροισμα: Για την ομάδα.
Στο υποσέλιδο πρόσθεσα το αδέσμευτο πλαίσιο κειμένου «FooterTotalFromStatr» και όρισα την ιδιότητα, προέλευση στοιχείου ελέγχου:=[txtPoso]

Φιλικά/Γιώργος

Tasos 24-03-11 16:09

Καλησπέρα Γιώργο και Νίκο!

Νίκο, σ ευχαριστώ για τη διόρθωση!

Τα κατάφερα πάλι να τα ανεβάσω ανάποδα :biggrin:

Θα έπρεπε να είμαι πιο προσεκτικός με τις επικολλήσεις μου...

Μάλλον χρειάζομαι διακοπές:what:

Τα λέμε

Τάσος

Dimitris Ch 24-03-11 17:10

Ναι παιδια εχετε δικαιο.
Μαρω συγνωμη ειχα λαθος
Ειχα την εντυπωση οτι οπως στα αθροισματα ομαδων λειτουργουσε και το αθροισμα σελιδας.
Τελικά ο Τασος εχει δικαιο. Χρειαζεται κωδικας.
Παρ ολα αυτα νομιζω οτι οι ρουτινες δουλευουν μονο σε προεπισκοπιση.....Στο ανοιγμα οχι.....
Εχετε καμια ιδεα...?....Αν και εκει δεν εχουμε σελιδοποιηση νομιζω

Φιλικα Δημητρης

kapetang 24-03-11 23:04

καλό βράδυ

Δημήτρη, σωστά μάντεψες. Ο κώδικας που υπολογίζει το άθροισμα στο υποσέλιδο ανήκει σε ρουτίνες συμβάντων, τα οποία δε μπορεί να λάβουν χώρα (πυροδοτηθούν) σε προβολή έκθεσης.
Μόνο στην εκτύπωση της έκθεσης και την προβολή εκτύπωσης πυροδοτούνται τα συμβάντα, οπότε εκτελείται ο κώδικας, υπολογίζεται το άθροισμα και εκτυπώνεται ή εμφανίζεται στο υποσέλιδο.

Φιλικά/Γιώργος

gnikol 27-03-11 11:13

Καλημέρα σε όλους!!!!!!!!
Σχετικά με το κώδικα του Τάσο θα ήθελα να επισημάνω κάτι.
Στο συμβάν detail section:Retreat
Αυτο ενεργοποιείται οταν μορφοποιείται η έκθεση και είναι πιθανόν να τρέξει ο κώδικας του print
2 φορές οποτε θα βγει λάθος αποτέλεσμα. Καλό είναι να προσθέσουμε κάποιο κώδικα εκεί όπως π.χ.
PageTotal = PageTotal + (Nz(Me.[Poso])*-1)
Το συμβάν αυτο πυροδοτείται όταν στη μορφοποίηση του report δεν χωρούν οι εγγραφές και πάνε σε επόμενη σελίδα.

kapetang 27-03-11 14:28

Καλημέρα

Γιώργο (συνονόματε), βλέπω ότι το κατέχεις το «άθλημα».
Μήπως θα μπορούσες να επισυνάψεις μία ΒΔ που θα προσομοιώνει το πρόβλημα, ώστε να γίνει πλήρως κατανοητό;
Αν στο συμβάν Retreat μηδενίζαμε το άθροισμα, θα λύνονταν το πρόβλημα;.

Φιλικά/Γιώργος

gnikol 27-03-11 19:17

Καλησπέρα σε όλους-Retreat Event
 
Δεν έχω δηστυχώς κάποια βάση να δείτε.
Πριν χρόνια ειχα χρησιμοποιήσει κάτι τέτοια σε ένα πρόγραμμα μισθοδοσίας του
δημοσίου που είχε πολλές σελίδες.
Για να δειτε πως λειτουργεί σε μια πολυσέλιδη φόρμα στα συμβάντα Print + Retreat
γράψε κάνε debug.print "Print" και debug.print "Retreat" για να δειτε τη σειρά που αυτά
πυροδοτούνται. Γενικά χρειάζεται προσοχή οταν δίνουμε τιμή σε μια μεταβλητή με τέτοιο
τρόπο γιατί οταν έχουμε να κάνουμε με χρήμα ισως έχουμε πρόβλημα.Επίσης θα πρέπει να λάβουμε υπόψη μας:
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
If PrintCount =1 then
vba code......
end if
Κι εδώ με την ίδια λογική, αν τρέξει 2 φορές τοτε γίνεται PrintCount >1.
Δινουμε στο retreat τιμή -1 για να αφαιρέσουμε το επιπλέον άθροισμα απο τη μεταβλητή.
Αν δώσουμε τιμή 0 στη μεταβλητή τοτε θα χάσουμε ολο τον προηγούμενο υπολογισμό.
Για να καταλάβετε πως γίνεται αυτο ας υποθέσουμε οτι εχουμε μια έκθεση με 26 εγγραφές και η σελίδα μας βάζει 25. Οταν τρέξει το report το συμβάν print θα γίνει σε κάθε μια εγγραφή.
Είναι πιθανόν, το έχω δει αυτο, να βάλει και τις 26 εγγραφές στη πρώτη σελίδα και μετά να δει οτι δεν χωρούν και να κάνει αυτο που λέμε οπισθοχώρηση κατά μια και να τη βάλει στην επομενη
σελίδα. Σε αυτη τη περίπτωση τη τελευταία εγγραφή θα τη περάσει 2 φορές και θα τρέξει το συμβάν print επίσης 2 φορές οποτε θα έχουμε λάθος άθροισμα. Επισης πρέπει να ληφθεί υπόψη
οτι οταν ανοίγει η έκθεση τρέχουν ολα τα συμβάντα και οταν εκτυπώνεται επίσης τρέχουν κάποια.
Καλό θα είναι να βάλετε ένα debug.print σε κάθε section για να δείτε τη συμπεριφορά του
και μετά να αρχίσετε τους υπολογισμούς. Σε κάθε περίπτωση χρειάζεται μεγάλη προσοχή κατά τη γνώμη μου.
Συγνώμη για το μεγάλο κείμενο, ελπίζω να σας διαφώτισα.

kapetang 28-03-11 10:30

Καλημέρα
Γιώργο, σ’ ευχαριστώ πολύ για την αναλυτική ενημέρωση.
Φιλικά/Γιώργος

ΠΑΝΟΣ 30-03-11 11:35

Ευχαριστώ πολύ όλους , θα το δοκιμάσω και θα επανέλθω ...:011:

ΠΑΝΟΣ 01-04-11 10:14

Καλημέρα , όλα καλά με τον κώδικα αλλά συμβαίνει το εξής πρόβλημα ,
στην πρόσθεση συνόλου ανα σελίδα μου προσθέτει και μία εγγραφή παραπάνω η οποία βρίσκεται στην δεύτερη σελίδα ενώ το μερικό σύνολο της δεύτερη σελίδας είναι σωστό.
Μάλλον έχει να κάνει με αυτό που αναφέρει ο "gnikol" Γιώργος ποιο πάνω. Δεν κατάλαβα όμως πως θα το εφαρμόσω ......:what:

kapetang 01-04-11 15:54

1 Συνημμένο(α)
Καλησπέρα

Πάνο, πολύ πιθανόν να έπεσες στην περίπτωση που επισήμανε ο Γιώργος (gnikol).
Στην έκθεση της ΒΔ, που επισυνάπτω ,έχω προσθέσει και τον κώδικα που πρότεινε ο gnikol.
Πιστεύω ότι εύκολα θα τον προσαρμόσεις στην περίπτωσή σου.
Αν αντιμετωπίσεις δυσκολίες θα πρέπει να ανεβάσεις τη ΒΔ με την προβληματική έκθεση.

Φιλικά/Γιώργος

ΠΑΝΟΣ 05-04-11 11:28

:oeo:
Δεν μπορώ να καταλάβω τι φταίει .
Στην συγκεκριμένη βάση που θέλω δεν δουλεύει , σε άλλες το δοκίμασα μιά χαρά , δεν μπορώ να ανεβάσω και τη βάση είναι 40 MB .
Στη δική μου τη βάση παίρνει στοιχεία από ερώτημα με στοιχεία από πολλούς πίνακες.
Εξακολουθεί και μου προσθέτει 1 εγγραφή από την επόμενη σελίδα :035:

Dimitris Ch 05-04-11 23:33

Option Compare Database
Option Explicit
Dim lastcount As Integer
Dim PageTotal As Currency ' Double?

Private Sub FormDetail_Print(Cancel As Integer, PrintCount As Integer)
If lastcount = 0 Then lastcount = PrintCount
If PrintCount = lastcount Then
PageTotal = PageTotal + Nz(Me.[Poso])
Else
lastcount = PrintCount
PageTotal = Nz(Me.[Poso])
End If
End Sub

Private Sub FormDetail_Retreat()
PageTotal = PageTotal + Nz(Me.[Poso]) * (-1)
End Sub

Private Sub FormPageFooter_Print(Cancel As Integer, PrintCount As Integer)
Me.PageTotals = PageTotal
PageTotal = 0
End Sub

Για δοκίμασε το ετσι να δουμε αποτελεσμα

Φιλικα Δημητρης

ΠΑΝΟΣ 08-04-11 11:34

Δεν το έχω δοκιμάσει ακόμα Δημήτρη λόγω πολλών υποχρεώσεων και πολλή δουλειά , θα το δοκιμάσω αύριο Σάββατο και θα σου πω , ευχαριστώ

ΠΑΝΟΣ 09-04-11 13:34

:yahoo:
Επιτέλους δουλεύει , Ευχαριστώ πολύ όλους για την βοήθεια:friends:


Η ώρα είναι 15:26.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2