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/1010-filtro-se-ekthesi.html)

Χρήστος 10-03-11 00:46

Φίλτρο σε Έκθεση
 
Γεια σας...
Θα ήθελα την βοήθειά σας, για άλλη μια φορά, σε κάτι που με ζορίζει.
Σε μια έκθεση, στην οποία έχω κάνει ομαδοποίηση, έχω εισαγάγει ένα υπολογιζόμενο πεδίο

=Άθροισμα([ΠΕΔΙΟ1])

με το ΠΕΔΙΟ1 να προέρχεται από ένα ερώτημα
(Γενικά την έκθεση την στηρίζω σ' αυτό το ερώτημα)

Αυτό που θέλω είναι, η έκθεση, να φιλτράρει την τιμή του υπολογιζόμενου πεδίου (που υπάρχει στην έκθεση-όχι στο ερώτημα) και να εμφανίζει τις εγγραφές για τις οποίες:

πχ Άθροισμα([ΠΕΔΙΟ1])>=5

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

Meteora 10-03-11 11:53

Καλημέρα

Χρήστο, αν κάνεις χρήση της πρότασης (στο συμβάν click ενός κουμπιού):
Κώδικας:


DoCmd.OpenReport "ΟνομαReport", acViewPreview, , "ΟνομαΠεδίου > = 5"

Θά έχεις μια αναφορά στην οποία τα εμφανιζόμενα -στην οθόνη- Records, θα έχουν τιμές στο [ΟνομαΠεδίου] μεγαλυτερες ή ίσες του 5.

Επιβάλλεται η έκθεση να "βλέπει" το πεδίο αυτό !

Με εκτίμηση

Νίκος Δ.

Χρήστος 10-03-11 11:58

Ευχαριστώ...
 
Ανυπομονώ να το δω να δουλεύει!
Θα σε ενημερώσω.
Ευχαριστώ

Χρήστος 10-03-11 12:03

Η έκθεση χρησιμοποιεί ένα υπολογιζόμενο πεδίο:
=Άθροισμα([ΠΕΔΙΟ]).

Το ΠΕΔΙΟ υπάρχει στο ερώτημα που τροφοδοτεί την έκθεση.
Αυτή η έκφραση δεν θα δουλέψει?

Meteora 10-03-11 12:57

1 Συνημμένο(α)
....Και βέβαια θα δουλέψει! Όμως να προσέξεις το όνομα που έχεις δώσει στο πεδίο. Εσύ -αν θυμάμαι καλά, δίνεις λεζάντες στα πεδία...

τα ξαναλέμε λοιπόν !

Χρήστος 10-03-11 17:33

Νίκο θέλω λίγη βοήθεια.
Στο κουμπί (με το κλικ)έχω βάλει μια μακροεντολή που ανοίγει μια έκθεση εφαρμόζοντας το φίλτρο
="[SECTIONID]=" & [SECTIONID]
Εμείς λοιπόν θέλουμε επιπλέον, να ενσωματώσουμε και τον κώδικα που πρότεινες.
Πως θα το κάνω;
Μπορείς μέσα στον κώδικά σου να ενσωματώσεις ΚΑΙ το φίλτρο μου;

Χρήστος 10-03-11 17:58

Νίκο δεν δουλεύει. Πρόσεξέ με...
Κάθε εγγραφή του ερωτήματος έχει ένα πεδίο.
Στην έκθεση που είναι βασισμένη πάνω του ομαδοποιώ τις εγγραφές και βγάζω το άθροισμα του πεδίου.
Το άθροισμα του πεδίου δεν υπάρχει λοιπόν στο ερώτημα.
Είναι σαν να διαγράφω δηλαδή το πεδίο Teliko απ' το ερώτημά σου και να βάζω μόνο στην έκθεση το υπολογιζόμενο πεδίο =[timi]*[posotita]
Τότε ο κώδικας δεν δουλεύει.
Θα την βρούμε την λύση... :))

Meteora 10-03-11 19:23

Χρήστο,
Την μακροεντολή με την οποία ανοίγεις την φόρμα φυσικά και πρέπει να την διώξεις, ως εξής:

Έλα σε περιβάλλον σχεδίασης της φόρμας. Επέλεξε το κουμπί που ανοίγει το report. Με επιλεγμένο το κουμπί, πήγαινε ιδιότητες -καρτέλα Συμβάν - επέλεξε το συμβάν με το κλικ - πάτα στις τρεις (...) τελείες ή στο βελάκι για να βρεις την επιλογή [Διαδικασία Συμβάντος].
Θα μεταφερθείς πλέον σε περιβάλλον όπου γράφεται η VBA !

Ο κέρσορας θα αναβοσβήνει ανάμεσα σε :
Κώδικας:


Private Sub Command1_Click()
|
End Sub

Εκεί ανάμεσα γράψε (καλύτερα copyPaste) την γραμμή :
Κώδικας:


DoCmd.OpenReport "Reportena", acViewPreview, , "[timi]*[posotita] >= 10 and [SECTIONID]=" & [SECTIONID]

Κάνε την προσαρμογή που επιβάλλεται, ώστε να εμφανίσεις τα πεδία που θες.

kapetang 10-03-11 21:00

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

Η ΒΔ που επισυνάπτω δίνει απάντηση στο ερώτημα:
Πώς θα φιλτράρουμε τις εγγραφές μιας ομαδοποιημένης έκθεσης, έτσι ώστε να εμφανίζονται μόνο οι ομάδες εγγραφών στις οποίες το άθροισμα των τιμών ενός πεδίου (για τις εγγραφές τις ομάδας) υπερβαίνει μία επιλεγμένη τιμή;
1) Η ΒΔ περιέχει τον πίνακα «tblValues», πεδία «fGroup» και «fValues». Οι τιμές του πεδίου «fGroup» χρησιμοποιούνται για την ομαδοποίηση των εγγραφών, και οι τιμές του «fValues» χρησιμοποιούνται για τη δημιουργία των αθροισμάτων.
2) Η έκθεση «rptTable» βασίζεται στον πίνακα «tblValues». Το φιλτράρισμα γίνεται με κατάλληλη αλλαγή της προέλευσης εγγραφών της έκθεσης, όπως φαίνεται στον παρακάτω κώδικα:
Κώδικας:

Private Sub Report_Open(Cancel As Integer)
    Dim strSQL As String
    Dim m As Double
    m = 20                          'μεταβλητή που καθορίζει το όριο του αθροίσματος
    strSQL = "SELECT tblValues.* FROM tblValues" & _
    " WHERE DSum(""fValue"",""tblValues"",""fGroup='"" & [fGroup] & ""'"")>" & m & ";"
    Me.RecordSource = strSQL
End Sub

3) Η Η έκθεση «rptQuery» βασίζεται στον ερώτημα «qryValues». Το φιλτράρισμα γίνεται με την εφαρμογή φίλτρου σε ένα βοηθητικό πεδίο «fSum» που έχει προστεθεί στο ερώτημα, όπως φαίνεται στον παρακάτω κώδικα:
Κώδικας:

Private Sub Report_Open(Cancel As Integer)
    Dim m As Double
    m = 20
    Me.Filter = "[fSum]>" & m
    Me.FilterOn = True
End Sub

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

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

Tasos 10-03-11 22:04

Καλησπέρα!

Έστω ότι το υπολογιζόμενο πεδίο έχει το όνομα SumOf_fValue

Δείτε μια ακόμα πρόταση παρακάτω:

Κώδικας:

Option Explicit

Private f As Double 'Currency??
Const Minimum As Double = 5

Private Sub GroupHeader_Format(Cancel As Integer, FormatCount As Integer)
    f = Nz(Me.SumOf_fValue)
    If f <= Minimum Then Cancel = True
End Sub

Private Sub GroupDetail_Format(Cancel As Integer, FormatCount As Integer)
    If f <= Minimum Then Cancel = True
End Sub

Private Sub GroupFooter_Format(Cancel As Integer, FormatCount As Integer)
    If f <= Minimum Then Cancel = True
End Sub

Φιλικά

Τάσος


Η ώρα είναι 00:21.

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


Search Engine Optimization by vBSEO 3.3.2