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/1423-epilogi-pedion-kata-tin-ektiposi-ekthesis.html)

ΤΖΙΜΗΣ 08-10-11 23:47

Επιλογή Πεδίων κατά την Εκτύπωση Έκθεσης
 
Καλημέρα σε όλους τους φίλους.
Θα ήθελα να θέσω ένα ερώτημα που κατά την ταπεινή μου γνώμη θα πρέπει να απασχολεί αρκετούς φίλους.
Πως μπορούμε κατά την εκτύπωση ή την προεπισκόπηση εκτύπωσης μιας έκθεσης να μπορούμε να επιλέγουμε ποια πεδία θα εκτυπώνονται.
Πιο συγκεκριμένα: Στο πρδ που επισυνάπτω η έκθεση (data) μου εμφανίζει κάποια πεδία βασισμένα στο ερώτημα epilogi ή από την φόρμα data.
Όταν θέλουμε να μας εκτυπώσει η έκθεση ορισμένα πεδία και όχι όλα τα πεδία αναγκαστικά πηγαίνουμε σε προβολή σχεδίασης στο ερώτημα και ανάλογα με τη θέλουμε να εκτυπώσουμε επιλέγουμε ή αποεπιλέγουμε τα πεδία, δηλαδή μεταβάλλουμε το ερώτημα. Πως λοιπόν μπορούμε να αποφύγουμε αυτή τη διαδικασία ώστε κατά την προεπισκόπηση της έκθεσης να μπορούμε να «μπαίνουμε» σε μια άλλη φόρμα να υποθέσω, ώστε να επιλέγουμε ή να αποεπιλέγουμε τα πεδία με χρήσης ενός πλαισίου ελέγχου.
Πιστεύω να έγινα κατανοητός και όχι το αντίθετο με το μακροσκελή ερώτημά μου.
Με φιλικούς χαιρετισμούς σε όλη την κοινότητα
Τζίμης

ΤΖΙΜΗΣ 08-10-11 23:51

1 Συνημμένο(α)
Συγχώμη ξέχασα να κάνω upload το αρχείο

Chris 09-10-11 15:15

Τζίμη καλησπέρα

Ο αυτοματισμός που ζητάς, ακόμα και αν υπάρχει δεν θα σου δώσει τα αναμενόμενα αποτελέσματα επειδή:

Πως θα φαίνεται μια έκθεση με οριζόντιο προσανατολισμό όταν περιέχει μόνο τρία πεδία;
Ακόμα και αν προγραμματιστικά μπορέσεις να αλλάξεις τον προσανατολισμό ή να "κεντράρεις"
τα πεδία, πόσο, πότε, και κάτω από ποιες συνθήκες θα γίνεται αυτό;

Μήπως είναι προτιμότερο να φτιάξεις περισσότερες εκθέσεις με τους πιθανούς
συνδυασμούς πεδίων (έτσι θα έχεις τον πλήρη έλεγχο) και να επιλέγεις με
Listbox ή ComboBox την επιθυμητή έκθεση προς προεπισκόπηση / εκτύπωση;

ΤΖΙΜΗΣ 09-10-11 18:10

Χρήστο ευχαριστώ για την απάντησή σου.Το πρόβλημα το αντιμετωπίζω όπως ακριβώς το λες.Με λίστα από εκθέσεις.Πάντως αν με χρήση κώδικα ξεπερνιέται , θα ήταν πέρα για πέρα πολύ χρήσιμο και εξυπηρετικό.
Με εκτίμηση

kapetang 09-10-11 22:01

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

Με τη VBA μπορούμε να σχεδιάσουμε μία έκθεση και να τη διαμορφώσουμε σύμφωνα με τις ανάγκες μας.
Ο απαιτούμενος κώδικας, όμως, θα είναι αρκετά μακροσκελής και περίπλοκος.
Επιπλέον θα είναι προσαρμοσμένος στη συγκεκριμένη περίπτωση με αποτέλεσμα να μη μπορεί να εφαρμοστεί σε άλλη χωρίς σημαντικές αλλαγές.
Κατά τη γνώμη μου, η λύση που πρότεινε ο Χρήστος είναι η καλύτερη.

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

Στη φόρμα «Data» έχω προσθέσει, για κάθε πεδίο, ένα πλαίσιο ελέγχου, ώστε στην έκθεση να εμφανίζονται μόνο τα πεδία με τσεκαρισμένο πλαίσιο ελέγχου.
Στην έκθεση έβαλα τον παρακάτω κώδικα:
Κώδικας:

Private Sub Λεπτομέρεια_Format(Cancel As Integer, FormatCount As Integer)
    Dim c As Access.Control, iLeft As Long, iPer As Long
    Dim iALL As Long, sum As Long, iNoV As Long

    'Απόκρυψη πεδίων και των αντίστοιχων ετικετών
    For Each c In Forms("data").Controls
        If TypeOf c Is CheckBox Then
            If Not c.Value Then
                Me.Controls(c.Tag).Visible = False
                Me.Controls(c.Tag & "_Ετικέτα").Visible = False
                sum = sum + Me.Controls(c.Tag).Width
                iNoV = iNoV + 1
            End If
            iALL = iALL + 1
        End If
    Next

    'Αρχικές τιμές προσδιορισμού της θέσης των ορατών πεδίων
    iLeft = 57
    Select Case iALL - iNoV
    Case 1
        iPer = 0
    Case 2
        iPer = sum / 2
    Case Else
        iPer = sum / (iALL - iNoV - 1) + 10
    End Select

    For Each c In Me.Section(0).Controls
        If TypeOf c Is TextBox Then
            If c.Visible Then
                c.Move iLeft
                Me.Controls(c.Name & "_Ετικέτα").Move iLeft
                iLeft = iLeft + c.Width + iPer
            End If
        End If
    Next

End Sub

Για να λειτουργήσει ο κώδικας:
1. Στα πλαίσια ελέγχου η ιδιότητα «Ετικέτα» (Tag) θα πρέπει να έχει τιμή το όνομα του πεδίου στην έκθεση (πχ afm).
2. Το όνομα των ετικετών της έκθεσης θα είναι ίσο με το όνομα του αντίστοιχου πεδίου ακολουθούμενο από τη συμβολοσειρά «_Ετικέτα» (πχ afm_Ετικέτα).

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

ΤΖΙΜΗΣ 10-10-11 11:33

Γιώργο υπέροχη δουλειά.Ακριβώς αυτό ήθελα.Βέβαια όπως αναφέρεις σε διαφορετικές περιπτώσεις θα υπάρχουν σημαντικές αλλαγές στον κώδικα και θα είναι δύσκολο για μας τους αρχάριους σε VBA να τον αλλάξουμε.Όμως μέσα από τα εύστοχα πρδ που μας δίνετε κάθε φορά και εμεις οι υπόλοιποι κάνουμε ένα βήμα προς τα εμπρος.
Να είσαι καλά
Τζίμης.


Η ώρα είναι 20:27.

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


Search Engine Optimization by vBSEO 3.3.2