1c παράκαμψη πίνακα δυναμικής λίστας.

Εκτός από τους πρωτόγονους τύπους δεδομένων που μπορούν να βρεθούν σε οποιαδήποτε γλώσσα προγραμματισμού, υπάρχουν μοναδικοί τύποι στο 1C. Καθένα από αυτά έχει τις δικές του ιδιότητες, μεθόδους, λειτουργίες, σκοπό και αποχρώσεις χρήσης στο σύστημα. Ένας από αυτούς τους τύπους είναι μια δυναμική λίστα, η οποία απλοποιεί σημαντικά πολλές εφαρμοζόμενες εργασίες. Γι' αυτό οι προγραμματιστές θα πρέπει να γνωρίζουν και να μπορούν να χειρίζονται αυτό το ευέλικτο εργαλείο.

Χαρακτηριστικά δυναμικών λιστών σε 1C

σκοπός αυτού του τύπουείναι η εμφάνιση πληροφοριών από οποιουσδήποτε πίνακες βάσης δεδομένων, ανεξάρτητα από τον τύπο τους. Ο μηχανισμός δημιουργήθηκε με βάση το SKD και έχει παρόμοιες δυνατότητες. Αλλά αυτό δεν σημαίνει ότι θα πρέπει οπωσδήποτε να γράψετε ένα ερώτημα στη γλώσσα 1C, αν και αυτή η δυνατότητα υπάρχει και πρέπει να τη χρησιμοποιήσετε. Μπορείτε απλά να καθορίσετε τον πίνακα, τις πληροφορίες από τις οποίες σας ενδιαφέρουν και το 1C θα δημιουργήσει ανεξάρτητα ένα απλό ερώτημα.

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

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

Ένα άλλο χρήσιμο χαρακτηριστικό δυναμική λίσταανοίγει όταν κάνετε κλικ στην επιγραφή "Ρυθμίσεις λίστας". Αυτό το μενού επιτρέπει, ακόμη και όταν χρησιμοποιείτε ένα τυπικό σύνολο πεδίων, να κάνετε τις πληροφορίες πιο προσιτές και κατανοητές στους τελικούς χρήστες. Είτε πρόκειται για αυθαίρετο αίτημα είτε όχι, θα δείτε μια καρτέλα "Ρυθμίσεις" όπου μπορείτε να καθορίσετε:

  • Επιλογή δυναμικής λίστας.
  • ομαδοποιήσεις?
  • ταξινόμηση?
  • Ντεκόρ.

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

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

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



Επιλέξτε μια ονοματολογία. Όνομα. Όνομα ως όνομα, αγαθά και κοστολογητές πωλήσεων. Sklad ως αποθήκη, εμπορεύματα και κοστολάρια πωλήσεων. Κοινωνικά -σχεδιασμοί ως αριθμός εγκαταστάσεων από έναν κατάλογο. Ονοματολογία ως ονοματολογία της αριστερής σύνδεσης του μητρώου. Συνέχεια. Έξοδος (iv auhitsaydata,)

Δεδομένου ότι η παράμετρος CurrentDate χρησιμοποιήθηκε στο αίτημά μας, πρέπει να ορίσουμε την τιμή της πριν χρησιμοποιήσουμε την επεξεργασία. Για να το κάνετε αυτό, στη μονάδα φόρμας στη διαδικασία "On CreationOnServer" με μια τυπική εντολή, εκχωρήστε τη συνάρτηση "CurrentSessionDate" σε αυτήν με μια τυπική εντολή. Πρέπει επίσης να εμφανίσουμε μια δυναμική λίστα στη φόρμα ελέγχου και να αλλάξουμε τη σειρά των πεδίων για λόγους σαφήνειας. Σύρετε τα στηρίγματα "Nomenclature Remains" στα στοιχεία της φόρμας (επάνω αριστερά) και χρησιμοποιήστε τα μπλε βέλη για να αλλάξετε τη σειρά των πεδίων στον πίνακα στη φόρμα.

&Στο διακομιστή Διαδικασία On CreationAt Server (Αποτυχία, ΤυπικήΠροσαρμογή) Ονοματολογία Remains.Parameters.SetParameterValue("CurrentDate",CurrentSessionDate()) EndProcedure


Ήδη σε αυτό το στάδιο, μπορούμε να ανοίξουμε την εξωτερική μας επεξεργασία σε 1C και να δούμε ότι η δυναμική λίστα λειτουργεί. Μπορούμε να δούμε τις ισορροπίες, να δημιουργήσουμε ονοματολογία και ομάδες και να ψάξουμε. Συχνά οι πελάτες ζητούν να προσθέσουν τη δυνατότητα να επιλέξουν την ημερομηνία για την οποία θα δουν το υπόλοιπο. Στην περίπτωση μιας φόρμας με δυναμική λίστα, αυτό παρέχεται από πρόσθετο πεδίοκαι ορίζοντας παραμέτρους με αυτό.

Προσθέτουμε το χαρακτηριστικό “Remains Date” τύπου “Date” και το μεταφέρουμε στα στοιχεία της φόρμας. Στα συμβάντα πεδίου, δημιουργούμε ένα συμβάν "OnChange" και γράφουμε τον κώδικα για τη ρύθμιση της παραμέτρου "Τρέχουσα ημερομηνία" που χρησιμοποιείται στο δυναμικό ερώτημα. Για να καταλάβει αμέσως ο χρήστης κατά το άνοιγμα της φόρμας σε ποια ημερομηνία βλέπει τα υπόλοιπα, θα κάνουμε μικρές αλλαγές στη διαδικασία OnCreateOnServer.



&OnServerProcedureOnCreateOnServer(Αποτυχία, StandardProcessing)RemainsDate = CurrentSessionDate(); Στοιχείο Remains.Parameters.SetParameterValue("CurrentDate", RemainsDate); Τέλος διαδικασίας &Στη διαδικασία πελάτη RemainsDateOnChange(Element) Item Remains.Parameters.SetParameterValue("CurrentDate",RemainsDate); Διαδικασία λήξης

Ως αποτέλεσμα, η φόρμα Δυναμικής λίστας μπορεί να εμφανίζει υπόλοιπα για οποιαδήποτε ημερομηνία.

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

  1. επιλογή;
  2. Κονίστρα.

Για να λάβετε μια δυναμική λίστα και το αίτημά της σε τυπικές διαχειριζόμενες φόρμες, ο προγραμματιστής πρέπει να ανοίξει την απαιτούμενη φόρμα στο πρόγραμμα διαμόρφωσης. Στην ενότητα χαρακτηριστικά, βρείτε το χαρακτηριστικό με τον τύπο δεδομένων "DynamicList" (τις περισσότερες φορές είναι με έντονη γραφή). Οι ιδιότητές του περιέχουν το κείμενο του αιτήματος, τις επιλογές και άλλες ρυθμίσεις.

Η πλατφόρμα 1C:Enterprise 8.2 μπορεί να λειτουργήσει με πολλαπλές εγγραφές σε έναν πίνακα βάσης δεδομένων με δυναμικό τρόπο, δηλαδή μπορεί να διαβάζει δεδομένα σε κομμάτια. Νωρίτερα στα άρθρα, εξετάσαμε τον μηχανισμό των δυναμικών λιστών και τις μεθόδους για τη βελτιστοποίηση της εργασίας με αυτές.

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

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

Εκτέλεση

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

Μορφή και διεπαφή

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

Αυτά τα στοιχεία θα περιέχουν τις συνολικές τιμές για τα έγγραφα.

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

Τώρα πρέπει να αποφασίσετε σε ποιο συμβάν θα ενημερωθούν τα αποτελέσματα στο υποσέλιδο της λίστας. Για τη διευκόλυνση της ανάπτυξης, ας προσθέσουμε την εντολή "Ενημέρωση" και το αντίστοιχο στοιχείο φόρμας στον πίνακα εντολών. Όταν εκτελεστεί αυτή η εντολή, τα σύνολα θα ενημερωθούν.

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

Αλγόριθμος

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

Σημείωση: Οι ρυθμίσεις δυναμικής λίστας (δείτε παραπάνω στιγμιότυπο οθόνης) βασίζονται στους μηχανισμούς του συστήματος σύνθεσης δεδομένων (ACS). Αντίστοιχα, μπορείτε να εργαστείτε μαζί τους με παρόμοιο τρόπο (προγραμματική προσθήκη, αλλαγή, ανάγνωση κ.λπ.).

Τα βήματα για τη δημιουργία ενός ερωτήματος για τη λήψη των αποτελεσμάτων είναι τα εξής:

1. Λάβετε το αρχικό αίτημα για μια δυναμική λίστα.

Όπως μπορούμε να δούμε, το αίτημα επιλέγει όλες τις λεπτομέρειες του εγγράφου. Για λίγη περιπλοκή, πρόσθεσα το δικό μου πεδίο "LevelRating", που σχηματίστηκε από την κατασκευή "CHOICE".

2. Σχηματίζουμε το κείμενο των συνθηκών αιτήματος (ενότητα "ΠΟΥ") και το αντικαθιστούμε στο αρχικό αίτημα.

Πρέπει να προσθέσουμε συνθήκες στο ληφθέν κείμενο πηγής του αιτήματος σύμφωνα με τη ρυθμισμένη επιλογή της δυναμικής λίστας.

Η διαδικασία, ανάλογα με τον τύπο του στοιχείου φίλτρου που έχει περάσει (ομάδα ή στοιχείο φίλτρου), δημιουργεί το κατάλληλο κείμενο της συνθήκης. Όλες οι συνθήκες στην ομάδα πλαισιώνονται με αγκύλες, τα μέλη της ομάδας πλαισιώνονται επίσης με παρενθέσεις. Οι συνθήκες μεταξύ των εκφράσεων εξαρτώνται από τη γονική ομάδα (η συνθήκη "AND" τοποθετείται μεταξύ των κορυφαίων στοιχείων της ιεραρχίας).

Εάν το στοιχείο έχει σημαία χρήσης (ιδιότητα "Χρήση"), τότε το στοιχείο υποβάλλεται σε επεξεργασία. Το κείμενο που δημιουργείται εξαρτάται επίσης από τη συνθήκη σύγκρισης (Ίσο, όχι ίσο, στη λίστα κ.λπ.). Η εξάρτηση του παραγόμενου κειμένου της συνθήκης από τον τύπο σύγκρισης φαίνεται στην παρακάτω συνάρτηση.

Μια άλλη ενδιαφέρουσα, κατά τη γνώμη μου, λειτουργία είναι το "GetFieldTextOnView". Απαιτείται για να αντικατασταθούν πεδία στις συνθήκες ερωτήματος που σχηματίζονται από εκφράσεις της γλώσσας ερωτήματος. Παραπάνω, πρόσθεσα το πεδίο "LevelRating" στο αρχικό αίτημα. Εάν ο χρήστης θα το χρησιμοποιήσει στην επιλογή, τότε ολόκληρη η έκφραση πρέπει να αντικατασταθεί στη συνθήκη ερωτήματος. Αυτή η λειτουργίαπαίρνει το κείμενο του πεδίου από το αίτημα με την αναπαράστασή του. Για τέτοια σύνθετα πεδία, θα επιστρέψει ολόκληρο το κείμενο της έκφρασης.

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

Το κείμενο συνθήκης που δημιουργήθηκε επισυνάπτεται στο αρχικό αίτημα δυναμικής λίστας. Το αποτέλεσμα του ερωτήματος τοποθετείται σε έναν προσωρινό πίνακα.

3. Τοποθετούμε το πρώτο ερώτημα σε έναν προσωρινό πίνακα και εκτελούμε ομαδοποίηση κατά πεδία σύνοψης με τις απαραίτητες συγκεντρωτικές συναρτήσεις.

Να σας υπενθυμίσω ότι πρέπει να λάβουμε τη μέση τιμή για το πεδίο "Βαθμολογία" και το συνολικό ποσό για το πεδίο "Ποσό". Έχουμε ήδη σχηματίσει ένα ερώτημα λαμβάνοντας υπόψη τις επιλογές, μένει να υπολογίσουμε τις συνολικές τιμές. Αυτό γίνεται με το ακόλουθο ερώτημα:

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

Βελτιστότητα λύσης

Γενικά, αυτή η προσέγγιση μπορεί να επηρεάσει αρνητικά την απόδοση. Για παράδειγμα, εάν το πρόγραμμα υπολογίσει το σύνολο χωρίς την καθορισμένη επιλογή στη δυναμική λίστα, τότε ο αριθμός των επιλεγμένων εγγραφών μπορεί να είναι τεράστιος (για παράδειγμα, για αρκετά χρόνια). Ως αποτέλεσμα, κάθε ενημέρωση των αποτελεσμάτων μπορεί να διαρκεί δέκα (!!!) δευτερόλεπτα. Επομένως, είναι λογικό να υπολογίζονται τα σύνολα μόνο εάν έχει καθοριστεί μια επιλογή. Αυτή η συνθήκηβάλτε σε μια δοκιμαστική διαμόρφωση.

Επιπλέον, για τον υπολογισμό των αποτελεσμάτων, μπορούμε να υποβάλουμε αίτημα μόνο από την πλευρά του διακομιστή. Επομένως, πρέπει να προσεγγίσετε σοβαρά το αίτημα στον διακομιστή, καθώς η διαδικασία ενημέρωσης των συνόλων μπορεί να εκτελεστεί πολύ συχνά. Φανταστείτε ένα μητρώο επιταγών KKM σε έναν εμπορικό οργανισμό, όπου μπορούν να καταχωρηθούν έως και 5 επιταγές ανά λεπτό και έως και 300 επιταγές ανά ώρα. Κάθε φορά μετά τη σύνταξη του εγγράφου, θα καλείται η ενημέρωση συνόλων. Επομένως, θα ήταν λογικό να μειωθεί η μεταδιδόμενη κίνηση χρησιμοποιώντας διαδικασίες εκτός πλαισίου.

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

Η πρώτη παράμετρος είναι η επιλογή μιας δυναμικής λίστας, η δεύτερη είναι η δομή του τύπου "FilterFieldNameFilterFieldValueType". Σημειώστε ότι η πρώτη παράμετρος στη συνάρτηση λαμβάνεται ως αυτόνομη τιμή. Δεν μπορώ να πω ακριβώς γιατί, αλλά αν περάσετε την επιλογή ως σύνδεσμο, η πλατφόρμα δίνει ένα σφάλμα ότι η επιλογή δεν μπορεί να αλλάξει. Το σφάλμα θα μπορούσε να παρακαμφθεί μόνο με αυτόν τον τρόπο.->

Σημείωση: η χρήση διαδικασιών εκτός πλαισίου σάς επιτρέπει να μειώσετε τον όγκο της μεταδιδόμενης κίνησης κατά πολλές φορές, καθώς τα δεδομένα φόρμας δεν μεταδίδονται στον διακομιστή, σε αντίθεση με τις διαδικασίες διακομιστή περιβάλλοντος (η οδηγία "&AtServer").

συμπέρασμα

Εν κατακλείδι, θα πω ότι μια τέτοια προσέγγιση για τον υπολογισμό των συνόλων σε μια δυναμική λίστα είναι εσφαλμένη από την άποψη της μεθοδολογίας ανάπτυξης. Θα ήταν σωστό να λάβετε ένα σύνολο στα μητρώα. Για παράδειγμα, στο ημερολόγιο επιταγών, πάλι, μπορούμε να πάρουμε το χρηματικό ποσό στην τρέχουσα ταμειακή μηχανή είτε σύμφωνα με έγγραφα είτε σύμφωνα με το αντίστοιχο μητρώο συσσώρευσης.

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

Ωστόσο, η μέθοδος που περιγράφεται στο άρθρο λαμβάνει χώρα κατά την επίλυση προβλημάτων.

Λήψεις:

Home Notes from the Looking Glass

21/04/2014 Λήψη δεδομένων δυναμικής λίστας

Υλοποιήθηκε στην έκδοση 8.3.6.1977.

Έχουμε εφαρμόσει τη δυνατότητα εύκολης και εύκολης λήψης δεδομένων που εμφανίζονται χρησιμοποιώντας μια δυναμική λίστα.

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

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

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

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

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

Τώρα αυτό το έργο λύνεται εύκολα. Ο πίνακας δυναμικής λίστας έχει δύο νέες μεθόδους:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Έτσι, λαμβάνετε το ίδιο το σχήμα σύνθεσης δεδομένων και, το πιο σημαντικό, όλες τις ρυθμίσεις του, χάρη στις οποίες ο χρήστης βλέπει τη λίστα ακριβώς όπως είναι. Το μόνο που έχετε να κάνετε είναι να σχεδιάσετε μέσω προγραμματισμού τη διάταξη και να την εξάγετε σε μια συλλογή τιμών (για επεξεργασία λογισμικού) ή μέσα έγγραφο υπολογιστικού φύλλου(για εμφάνιση):

Ως αποτέλεσμα, θα λάβετε μια δομή (ή αναφορά) που περιέχει στήλες και σειρές που εμφανίζονται σε έναν πίνακα δυναμικής λίστας.

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

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

Κατά τη διαδικασία οριστικοποίησης των διαμορφώσεων, κάθε προγραμματιστής 1C συναντά δυναμικές λίστες.
Μια δυναμική λίστα είναι ένα αντικείμενο διεπαφής που χρησιμοποιείται για την εμφάνιση διαφόρων λιστών αντικειμένων βάσης δεδομένων ή καταχωρήσεων μη αντικειμένων δεδομένων - καταχωρήσεων.
Για παράδειγμα, μια δυναμική λίστα χρησιμοποιείται για την εμφάνιση μιας λίστας στοιχείων:

Για να δείξουμε τις δυνατότητες μιας δυναμικής λίστας, ας δημιουργήσουμε μια εξωτερική επεξεργασία, προσθέστε την κύρια φόρμα. Ας προσθέσουμε ένα νέο χαρακτηριστικό με τον τύπο "Δυναμική λίστα" στη φόρμα. Ας πάμε στα ακίνητά του και ας δούμε τι υπάρχει εκεί.
Μας ενδιαφέρει η ιδιότητα "Προσαρμοσμένο αίτημα". Η ενεργοποίησή του θα μας δείξει όλες τις δυνατότητες μιας δυναμικής λίστας. Θα είμαστε σε θέση να γράψουμε ένα ερώτημα χρησιμοποιώντας σχεδόν όλες τις δυνατότητες της γλώσσας ερωτημάτων του συστήματος 1C: Enterprise. Επιλέξτε το πλαίσιο και κάντε κλικ στον σύνδεσμο "Άνοιγμα":

Από προεπιλογή, η λίστα μας θα εμφανίζει μια λίστα ειδών με συνολικό υπόλοιπο για όλες τις αποθήκες. Για να εφαρμόσετε μια τέτοια λίστα, προσθέστε το ακόλουθο ερώτημα:


Ως κύριος πίνακας, θα επιλέξουμε "Κατάλογος. Ονοματολογία", αυτό θα μας επιτρέψει να εργαστούμε με τη δυναμική λίστα, όπως με τη λίστα ονοματολογίας - προσθήκη, αλλαγή, επισήμανση για διαγραφή στοιχείων του καταλόγου. Επίσης, η ρύθμιση του κύριου πίνακα καθιστά διαθέσιμη τη δυνατότητα δυναμικής ανάγνωσης δεδομένων - αυτό σημαίνει ότι η επιλογή θα γίνει τμηματικά, ανάλογα με τις ανάγκες.
Στη συνέχεια, πρέπει να δημιουργήσουμε στοιχεία φόρμας για τη λίστα μας:

Εάν προσπαθήσουμε να εκτελέσουμε την επεξεργασία μας σε αυτήν τη φόρμα, θα λάβουμε ένα σφάλμα:


Για να το εξαλείψετε, πρέπει να ορίσετε την τιμή της παραμέτρου "Περίοδος". Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε τη μέθοδο "SetParameterValue" της συλλογής "Parameters" της δυναμικής λίστας. Η μέθοδος παίρνει δύο παραμέτρους:
. "Parameter" - Τύπος: String; DataCompositionParameter. Το όνομα της παραμέτρου ή της παραμέτρου σύνθεσης δεδομένων της οποίας η τιμή πρέπει να οριστεί.
. "Αξία" - Τύπος: Αυθαίρετο. Η τιμή που θα οριστεί.
Μπορεί να κληθεί στον χειριστή "OnCreateOnServer" της φόρμας:

Έχετε κάποια ερώτηση, χρειάζεστε τη βοήθεια ενός συμβούλου;


Ας δώσουμε στον χρήστη τη δυνατότητα να αλλάξει την περίοδο λήψης υπολοίπων. Για να γίνει αυτό, ας προσθέσουμε το χαρακτηριστικό και το στοιχείο φόρμας "Ημερομηνία" που σχετίζεται με αυτό:


Στο πρόγραμμα χειρισμού "OnChange" του στοιχείου φόρμας "Date", καλέστε τη μέθοδο "SetParameterValue", μεταβιβάζοντας την τιμή του συσχετισμένου χαρακτηριστικού ως τιμή. Ομοίως, θα αλλάξουμε τη διαδικασία "On CreationAtServer" της φόρμας. Δεδομένου ότι η μέθοδος είναι διαθέσιμη στον πελάτη, δεν χρειάζεται να καλέσετε τον διακομιστή:


Τώρα, όταν αλλάξει η ημερομηνία, τα υπόλοιπα θα ενημερωθούν αυτόματα:




Ας υποθέσουμε ότι οι χρήστες θέλουν να δουν είτε τρέχοντα υπόλοιπα είτε προβλεπόμενες εισπράξεις. Ας εξετάσουμε μία από τις επιλογές υλοποίησης. Ας προσθέσουμε ένα χαρακτηριστικό Boolean form και ένα σχετικό κουμπί επιλογής:


Κατά την αλλαγή της τιμής του διακόπτη, θα αλλάξουμε το κείμενο του αιτήματος. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε το πρόγραμμα χειρισμού συμβάντων "OnChange" του στοιχείου φόρμας "DisplayQuantityToReceipt". Πρέπει να αλλάξουμε την ιδιότητα "QueryText" της δυναμικής λίστας ανάλογα με την τιμή του χαρακτηριστικού. Εφόσον αυτή η ιδιότητα δεν είναι διαθέσιμη στον υπολογιστή-πελάτη, απαιτείται μια κλήση προς τη διαδικασία διακομιστή:


Το αποτέλεσμα των αλλαγών που έγιναν:



Επιτέλους, το όνειρο οποιουδήποτε «επταπαίκτη» έγινε πραγματικότητα. Πόσο συχνά ζητούσαν οι χρήστες του προγράμματος 7.7 να κάνουν μια κανονική επιλογή στοιχείων. Για να μπορείτε να δείτε τα υπόλοιπα, τις τιμές και να ορίσετε φίλτρα. Έπρεπε να καταλήξω σε διάφορα κόλπα, μέχρι να γράψω εξωτερικά στοιχεία. Στο 1C 8.2, εμφανίστηκαν δυναμικές λίστες. Προτείνω να εξετάσουμε τι είναι και τι μπορούν να μας δώσουν στο 1C 8.3.

Ας πάρουμε ως βάση μερικά διαμόρφωση δοκιμής 1C: "Enterprise accounting 3.0". Δεν θα κάνουμε επιλογή τώρα, απλώς προσθέστε μια άλλη φόρμα επιλογής στο βιβλίο αναφοράς "Ονοματολογία" και κάντε την προσωρινά την κύρια:

Όταν δημιουργηθεί, το σύστημα θα προσθέσει από προεπιλογή ένα πεδίο πίνακα με τον τύπο "Δυναμική λίστα" στη φόρμα.

Ας πάμε στα ακίνητά του και ας δούμε τι υπάρχει εκεί.

Πρώτα απ 'όλα, μας ενδιαφέρει το πλαίσιο ελέγχου "Αυθαίρετο αίτημα". Είναι αυτός που θα μας αποκαλύψει όλα τα πλεονεκτήματα μιας δυναμικής λίστας. Θα έχουμε την ευκαιρία να γράψουμε το δικό μας ερώτημα, και με παραμέτρους. Επιλέξτε το πλαίσιο και κάντε κλικ στον σύνδεσμο "Άνοιγμα":

Θα ανοίξει ένα παράθυρο με έναν έτοιμο κωδικό για το . Μέχρι στιγμής, όλα τα πεδία του καταλόγου "Ονοματολογία" παρατίθενται απλώς εκεί.

Λάβετε δωρεάν μαθήματα βίντεο 267 1C:

Όπως μπορείτε να δείτε, υπάρχει ένα κουμπί κλήσης "" και ένα πλαίσιο ελέγχου που σας επιτρέπει να αλλάξετε δυναμικά τα περιεχόμενα της λίστας. Δηλαδή, όταν κάποιος άλλος χρήστης αλλάξει κάτι στον κατάλογο, θα αλλάξει και στη λίστα μας. Επιπλέον, υπάρχει μια καρτέλα Ρυθμίσεις, αλλά θα την αγγίξουμε αργότερα.

Προσαρμοσμένο ερώτημα σε δυναμική λίστα

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

καρτέλα Ρυθμίσεις

Και τώρα το πιο νόστιμο! Μεταβείτε στην καρτέλα "Ρυθμίσεις". Και αμέσως βλέπουμε ότι στην πρώτη καρτέλα μπορούμε να κάνουμε οποιεσδήποτε επιλογές για οποιοδήποτε πεδίο στο αίτημα:

Ρύθμιση παραμέτρων ερωτήματος μέσω προγραμματισμού σε μια δυναμική λίστα 1C 8.3

Μην ξεχνάτε ότι έχουμε δύο παραμέτρους στο αίτημα: "Περίοδος" και "Τύπος τιμής". Πρέπει να τα μεταβιβάσουμε στο αίτημα, διαφορετικά θα υπάρξει σφάλμα.

Ας γράψουμε αυτές τις παραμέτρους στις παραμέτρους της φόρμας και ας προσθέσουμε τις ακόλουθες γραμμές στη μονάδα φόρμας:

Λίστα &OnServerProcedure OnCreateOnServer(Αποτυχία, StandardProcessing). Επιλογές. SetParameterValue("Period", Parameters. Date) ; Λίστα. Επιλογές. SetParameterValue("PriceType" , Parameters.PriceType) ; Διαδικασία λήξης

Φόρτωση...
Μπλουζα