Λήψη των δεδομένων που εμφανίζονται από μια δυναμική λίστα

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

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

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

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

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

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

  • Δυναμική επιλογή λίστας.
  • Ομάδες;
  • Ταξινόμηση;
  • Ντεκόρ.

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

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

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



SELECT NomenclatureList.Name AS Name, GoodsIn WarehousesRemainings.Warehouse AS Warehouse, GoodsIn WarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList. ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗΣΥΝΔΕΣΗΣΤΙΣ ΚΑΤΑΣΤΑΣΕΙΣ GoodsOnUS treasuresΥπόλοιπο λογισμικό NomenclatureList.Link = ProductsInWarehousesRemainings.Ονοματολογία WHERE

Εφόσον το αίτημά μας χρησιμοποιούσε την παράμετρο "Τρέχουσα ημερομηνία", πρέπει να ορίσουμε την τιμή της πριν χρησιμοποιήσουμε την επεξεργασία. Για να το κάνετε αυτό, στη μονάδα φόρμας στη διαδικασία "When CreatedOnServer", χρησιμοποιώντας μια τυπική εντολή, αντιστοιχίστε της τη συνάρτηση "CurrentSessionDate". Πρέπει επίσης να εμφανίσουμε τη δυναμική λίστα στη φόρμα ελέγχου και να αλλάξουμε τη σειρά των πεδίων για λόγους σαφήνειας. Σύρετε το χαρακτηριστικό "Ονοματολογία που απομένει" στα στοιχεία της φόρμας (επάνω αριστερό μέρος) και χρησιμοποιήστε τα μπλε βέλη για να αλλάξετε τη σειρά των πεδίων στον πίνακα στη φόρμα.

&Στον διακομιστή Διαδικασία κατά τη δημιουργία στον διακομιστή (Αποτυχία, τυπική επεξεργασία) Η ονοματολογία παραμένει. Παράμετροι. Ορισμός ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


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

Προσθέστε το χαρακτηριστικό "DateRemaining" του τύπου "Date" και μεταφέρετέ το στα στοιχεία της φόρμας. Στα συμβάντα πεδίου, δημιουργούμε το συμβάν «OnChange» και γράφουμε τον κωδικό για τη ρύθμιση της παραμέτρου «Τρέχουσα ημερομηνία» που χρησιμοποιείται στο δυναμικό αίτημα. Για να καταλάβει αμέσως ο χρήστης κατά το άνοιγμα της φόρμας σε ποια ημερομηνία βλέπει τα υπόλοιπα, θα κάνουμε μικρές αλλαγές στη διαδικασία «When CreatedOnServer».



&OnServerProcedureWhenCreatingOnServer(Αποτυχία, StandardProcessing)RemainingDate = CurrentSessionDate(); Στοιχείο Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Τέλος διαδικασίας &Στη διαδικασία πελάτη Υπολειπόμενη ημερομηνία κατά την αλλαγή(στοιχείο)Ονοματολογία Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Τέλος Διαδικασίας

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

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

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

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

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

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

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

Εκτέλεση

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

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

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

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

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

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

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

Αλγόριθμος

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

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

Τα στάδια σχηματισμού αιτήματος για την απόκτηση αποτελεσμάτων είναι τα εξής:

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

Όπως μπορούμε να δούμε, το αίτημα επιλέγει όλες τις λεπτομέρειες του εγγράφου. Για να προσθέσω λίγο περισσότερη πολυπλοκότητα, πρόσθεσα το δικό μου πεδίο "Επίπεδο αξιολόγησης", που δημιουργήθηκε από την κατασκευή "ΕΠΙΛΟΓΗ".

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

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

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

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

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

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

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

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

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

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

Βελτιστοποίηση της λύσης

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

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

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

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

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

συμπέρασμα

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

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

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

Αρχεία για λήψη:

Εκτύπωση (Ctrl+P)

Δυναμική λίστα

1. Γενικές πληροφορίες

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

Ρύζι. 1. Επιλογές για τη δημιουργία μιας δυναμικής λίστας

Κατά τη δημιουργία χαρακτηριστικών φόρμας του τύπου DynamicListένας προγραμματιστής μπορεί να επιλέξει δύο τρόπους για να σχηματίσει ένα ερώτημα δεδομένων:
● Καθορίζοντας τον κύριο πίνακα - σε αυτήν την περίπτωση, πρέπει απλώς να καθορίσετε τον πίνακα (ιδιότητα Main table) από τον οποίο θέλετε να λαμβάνετε δεδομένα και το σύστημα θα δημιουργήσει αυτόματα ένα ερώτημα για τα δεδομένα (δείτε το δεξιό μέρος στο Σχ. 1).
● Μη αυτόματη δημιουργία αιτήματος - για αυτό πρέπει να ορίσετε την ιδιότητα Προσαρμοσμένο αίτημα (δείτε την αριστερή πλευρά της Εικ. 1). Μετά από αυτό, θα είναι διαθέσιμη η μη αυτόματη δημιουργία ενός αιτήματος για τη λήψη δεδομένων από τη βάση πληροφοριών.
Ένα ερώτημα μπορεί να ανακτήσει δεδομένα από πολλούς πίνακες, ώστε να μπορείτε να καθορίσετε έναν πρωτεύοντα πίνακα. Αυτό γίνεται ώστε η δυναμική λίστα να μπορεί να προσδιορίσει ποια δεδομένα είναι κύρια και ποια δευτερεύοντα, και να μπορεί να επιλέξει και να εμφανίσει σωστά πληροφορίες, καθώς και να παρέχει τυπικές εντολές. Ωστόσο, εάν είναι αδύνατο να προσδιοριστεί ο κύριος πίνακας στο ερώτημα, τότε δεν μπορεί να καθοριστεί, αλλά στη συνέχεια
η δυναμική λίστα δεν θα παρέχει εντολές που σχετίζονται με τον κύριο πίνακα. Επιπλέον, σε αυτή την περίπτωση (χωρίς να προσδιορίζεται ο κύριος πίνακας) η αποτελεσματικότητα της λήψης δεδομένων από μια δυναμική λίστα θα μειωθεί σημαντικά.
Για τη βελτίωση της απόδοσης, συνιστάται οι συνδέσεις που χρησιμοποιούνται σε ένα προσαρμοσμένο ερώτημα μόνο για τη λήψη πρόσθετων δεδομένων να γίνονται προαιρετικές χρησιμοποιώντας μια επέκταση γλώσσας ερωτήματος συστήματος σύνθεσης δεδομένων.
Για μια δυναμική λίστα, η οποία είναι το κύριο χαρακτηριστικό φόρμας, είναι δυνατό να ορίσετε τιμές επιλογής χρησιμοποιώντας μια παράμετρο φόρμας Επιλογή. Για να γίνει αυτό, είναι απαραίτητο το όνομα της ιδιότητας δομής που βρίσκεται στην παράμετρο Επιλογή,
συνέπεσε με το όνομα του πεδίου επιλογής δυναμικής λίστας. Σε αυτήν την περίπτωση, η τιμή της ιδιότητας δομής θα οριστεί ως η σωστή τιμή του στοιχείου επιλογής. Εάν ένας πίνακας, ένας σταθερός πίνακας ή μια λίστα τιμών μεταβιβαστεί ως τιμή ενός στοιχείου της παραμέτρου Επιλογή μιας φόρμας δυναμικής λίστας, τότε μια συνθήκη με την επιλογή In List προστίθεται στην επιλογή, στη σωστή τιμή εκ των οποίων τοποθετείται μια λίστα τιμών (στην οποία μετατρέπεται ο πίνακας και ο σταθερός πίνακας).
Ένα αυθαίρετο ερώτημα σε μια δυναμική λίστα μπορεί να είναι ένα ερώτημα στο οποίο μια παράμετρος χρησιμοποιείται για τη δημιουργία της τιμής ενός πεδίου, για παράδειγμα:

ΕΠΙΛΕΓΩ
ΕΠΙΛΟΓΗ
ΠΟΤΕ Παράδοση.Συντελεστής = 1 ΤΟΤΕ &Παρουσίαση
ΑΛΛΙΩΣ Παράδοση. Συντελεστής
ΤΕΛΟΣ ΩΣ Αναλογία
ΑΠΟ

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

ΕΠΙΛΕΓΩ
ΕΠΙΛΟΓΗ
WHEN Delivery.Coefficient = 1 THE EXPRESS(&Representation AS String(100)) ALSE Παράδοση. Συντελεστής
ΤΕΛΟΣ ΩΣ Αναλογία
ΑΠΟ
Document.Delivery of Products ΠΩΣ να παραδοθεί

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

● Εάν η λειτουργία προβολής έχει οριστεί σε ιεραρχική λίστα, θα διαβαστούν μόνο τα δεδομένα της τρέχουσας ομάδας και τα δεδομένα όλων των γονικών στοιχείων (χωρίς παιδιά).
● Εάν έχει οριστεί η λειτουργία προβολής δέντρου, θα διαβάζονται μόνο δεδομένα από ανοιχτούς κόμβους δέντρου.
● Η εφάπαξ φόρτωση δεδομένων δυναμικής λίστας δεν υποστηρίζεται εάν έχει οριστεί η ιεραρχική περιήγηση (η ιδιότητα εμφάνισης έχει οριστεί σε Δέντρο) και η αρχική προβολή δέντρου έχει οριστεί σε Ανάπτυξη όλων των επιπέδων. Για τη λήψη δεδομένων, θα υποβληθούν τόσες αιτήσεις στον διακομιστή όσες και οι κόμβοι στην εμφανιζόμενη λίστα.
Σε μια ενιαία ανάκτηση δεδομένων, μια δυναμική λίστα επαναχρησιμοποιεί προσωρινούς πίνακες που δημιουργήθηκαν προηγουμένως, εάν πληρούνται οι ακόλουθες προϋποθέσεις:
● Το ερώτημα δέσμης λίστας δεν έχει ερωτήματα μετά το ερώτημα κύριας δέσμης.
● Η σύνθεση των προσωρινών πινάκων και των πεδίων σε αυτούς παραμένει αμετάβλητη από την προηγούμενη εκτέλεση του αιτήματος δέσμης.

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

2. Περιορισμοί και χαρακτηριστικά

Όταν ορίζετε την επιλογή σε μια δυναμική λίστα, να θυμάστε ότι η επιλογή δεν επηρεάζει τις ομάδες εάν η λειτουργία εμφάνισης για τη δυναμική λίστα είναι Ιεραρχική λίστα ή Δέντρο. Με τον όρο "ομάδες" εννοούμε ένα στοιχείο ενός καταλόγου ή σχεδίου χαρακτηριστικών τύπων του οποίου η ιδιότητα ThisGroup έχει οριστεί σε True.
Τα προσόντα που εφαρμόζονται αυτόματα από μια δυναμική λίστα στα τυπικά στοιχεία Ιδιοκτήτης, Γονέας, Ημερομηνία, Περίοδος και ThisGroup εφαρμόζονται
χρησιμοποιώντας τυπικά εργαλεία συστήματος σύνθεσης δεδομένων. Η επιλογή, που εφαρμόζεται αυτόματα από μια δυναμική λίστα σε βασικά πεδία, μπορεί να εφαρμοστεί τόσο με τυπικά μέσα του συστήματος σύνθεσης δεδομένων όσο και με απευθείας προσθήκη συνθηκών στο κείμενο αιτήματος ΣΕστα πεδία του κύριου πίνακα. Ως αποτέλεσμα της εφαρμογής επιλογών με χρήση εργαλείων διάταξης, μπορούν να εφαρμοστούν τόσο σε ένθετα ερωτήματα όσο και σε παραμέτρους εικονικών πινάκων.

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

  • Σύμφωνα με τις λεπτομέρειες των τμημάτων του πίνακα.
  • Προβολή πεδίων.
  • Πεδίο DataVersion.
  • Πεδίο PredefinedDataName.
  • Πεδίο τύπου πίνακα λογιστικού σχεδίου.
  • Πεδίο Τύπος κίνησης του πίνακα μητρώου συσσώρευσης.
  • Πεδίο Τύπος Τιμές του πίνακα κάτοψης χαρακτηριστικού τύπου.
  • Πεδίο τύπου Τύπος;
  • Πεδίο τύπου String (απεριόριστο μήκος).
  • Πεδίο τύπου BinaryData.

● Η ταξινόμηση και η ομαδοποίηση κατά πεδία Subconto δεν υποστηρίζονται<НомерСубконто>και ViewSubconto<НомерСубконто>Πίνακες MovementsSubconto του λογιστικού μητρώου.
● Η ομαδοποίηση κατά πεδία που είναι εκφράσεις γλώσσας ερωτήματος που περιέχουν συγκεντρωτικές συναρτήσεις δεν υποστηρίζεται.
● Όταν επιλέγεται ο κύριος πίνακας, το ερώτημα δυναμικής λίστας έχει τους ακόλουθους περιορισμούς:

  • Οι ενώσεις δεν υποστηρίζονται.
  • Η ενότητα ORDER BY δεν υποστηρίζεται. Θα πρέπει να χρησιμοποιήσετε ένα ερώτημα χωρίς κύριο πίνακα ή να ορίσετε την απαραίτητη σειρά μέσω των ρυθμίσεων της δυναμικής λίστας.

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

Η χρήση των παρακάτω πινάκων ως κύριου πίνακα μιας δυναμικής λίστας δεν υποστηρίζεται:

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

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

  • επανάσταση πίνακα?
  • πίνακας ισορροπίας?
  • πίνακας τζίρου και υπολοίπων.

● πίνακες μητρώου υπολογισμού:

  • πίνακας πραγματικής περιόδου ισχύος·
  • χρονοδιάγραμμα δεδομένα?
  • βασικά δεδομένα.

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

Με άλλα λόγια, μια δυναμική λίστα με τον καθορισμένο κύριο πίνακα θα λειτουργήσει σωστά εάν, ως αποτέλεσμα της εκτέλεσης του ερωτήματος,
που καθορίζεται ως πηγή δεδομένων, ο αριθμός των σειρών που λαμβάνονται από τον κύριο πίνακα δεν αυξάνεται (λαμβάνοντας υπόψη την επιβαλλόμενη επιλογή). Εάν, ως αποτέλεσμα της εκτέλεσης ενός ερωτήματος, αυξηθεί ο αριθμός των σειρών που λαμβάνονται από το ερώτημα από τον κύριο πίνακα, αυτό θα οδηγήσει σε παραβίαση της μοναδικότητας του κλειδιού των εγγραφών του πίνακα που εμφανίζεται στη λίστα. Σε αυτήν την περίπτωση, πρέπει να απενεργοποιήσετε τη χρήση του κύριου πίνακα δυναμικής λίστας.
Όταν εργάζεστε με μια δυναμική λίστα, πρέπει να λαμβάνετε υπόψη τα δικαιώματα πρόσβασης στις λεπτομέρειες που εμφανίζονται στη λίστα:
● Δεδομένα από στήλες δυναμικής λίστας που επισημαίνονται με την ιδιότητα Να χρησιμοποιείται πάντα, αλλά για τα οποία ο τρέχων χρήστης δεν έχει δικαίωμα προβολής, δεν μεταδίδονται στην πλευρά του πελάτη. Πρόσβαση σε δεδομένα τέτοιων στηλών (χρησιμοποιώντας την ιδιότητα CurrentData και τη μέθοδο RowData())
δεν είναι δυνατό από την πλευρά του πελάτη.
● Εάν ο τρέχων χρήστης δεν έχει την Προβολή δεξιά σε ένα βασικό πεδίο μιας δυναμικής λίστας, η ανάκτηση δεδομένων από αυτήν τη δυναμική λίστα οδηγεί σε σφάλμα παραβίασης πρόσβασης.
Για μια δυναμική λίστα που εμφανίζει μια λίστα απαρίθμησης, δεν υπάρχει επιλογή διαδραστικής προσαρμογής της λίστας.
Η σύνθεση των στηλών και οι ρυθμίσεις της δυναμικής λίστας συσχετίζονται με τα πεδία ερωτήματος χρησιμοποιώντας ψευδώνυμα των πεδίων επιλογής. Εάν ένα ψευδώνυμο δεν καθορίζεται ρητά σε ένα ερώτημα για ένα πεδίο επιλογής και το πεδίο είναι σύστημα, τότε το όνομα πεδίου για την αγγλική έκδοση της ενσωματωμένης γλώσσας χρησιμοποιείται ως ψευδώνυμο.
Η καθορισμένη σχέση σημαίνει ότι όταν αλλάζετε (ή προσδιορίζετε ρητά ένα ψευδώνυμο για ένα πεδίο για το οποίο χρησιμοποιήθηκε αυτόματο ψευδώνυμο)
ψευδώνυμο του πεδίου ερωτήματος που δημιουργεί τα δεδομένα της δυναμικής λίστας, οι ρυθμίσεις χαρακτηριστικών δυναμικής λίστας θα χαθούν, τα στοιχεία της φόρμας θα «χάσουν» τις εμφανιζόμενες λεπτομέρειες, οι ρυθμίσεις της δυναμικής λίστας θα γίνουν λανθασμένες κ.λπ.
Εάν η πηγή δεδομένων μιας δυναμικής λίστας είναι ένας πίνακας (κανονικός ή εικονικός), ο οποίος σας επιτρέπει να ορίσετε μια επιλογή ανά περίοδο, τότε εάν ο χρήστης ορίσει την περίοδο εμφάνισης σε μια τέτοια δυναμική λίστα (εντολή Ορισμός διαστήματος ημερομηνίας...),
τα καθορισμένα όρια περιόδου θα οριστούν ως τιμές επιλογής ή παράμετροι εικονικού πίνακα. Αν μέσω γλωσσικής επέκτασης
ερωτήματα για το σύστημα σύνθεσης δεδομένων, τα ονόματα των παραμέτρων εικονικού πίνακα καθορίστηκαν ρητά - οι παράμετροι με τα καθορισμένα
ονόματα. Πίνακες για τους οποίους είναι δυνατός ο έλεγχος της περιόδου εμφάνισης ή επεξεργασίας δεδομένων:
● πίνακες καταχώρισης (κύριοι ή εικονικοί), για τους οποίους είναι δυνατή η επιλογή ανά περίοδο (για το μητρώο υπολογισμού - κατά περίοδο εγγραφής).
● κύριοι πίνακες εγγράφων, επιχειρηματικές διαδικασίες και εργασίες.
● κύριοι πίνακες περιοδικών εγγράφων.
● πίνακες κύριας ακολουθίας, πίνακες ορίων ακολουθίας.
Η παράμετρος ερωτήματος δυναμικής λίστας μπορεί να είναι ένας πίνακας ή μια λίστα τιμών. Ωστόσο, εάν η παράμετρος είναι μια λίστα τιμών, τότε μόνο η πρώτη τιμή στη λίστα θα χρησιμοποιηθεί ως τιμή επιλογής. Εάν μια δυναμική λίστα χρησιμοποιεί ένα ερώτημα με παραμέτρους, η αρχική ρύθμιση των τιμών των παραμέτρων πρέπει να εκτελεστεί στον χειριστή OnCreateOnServer.
Κατά την εμφάνιση δεδομένων δυναμικής λίστας, λάβετε υπόψη τα ακόλουθα σημεία:
● Όταν αλλάζετε μέσω προγραμματισμού τις ιδιότητες μιας δυναμικής λίστας, οι πίνακες εντολών που σχετίζονται με τη λίστα δεν συμπληρώνονται αυτόματα.
με αυτή τη δυναμική λίστα.
● Εάν πολλά πεδία ομαδοποιηθούν σε μια ομάδα με τη λειτουργία ομαδοποίησης σε ένα κελί και στα ομαδοποιημένα πεδία υπάρχει ένα πεδίο που εμφανίζεται ως πλαίσιο ελέγχου, τότε αυτό το πλαίσιο ελέγχου θα εμφανίζεται πάντα πρώτο στο κελί που προκύπτει (στα αριστερά του κείμενο).
Σε μια δυναμική λίστα, κατά τον προσδιορισμό του τύπου δεδομένων για πεδία των οποίων οι εκφράσεις περιλαμβάνουν παραμέτρους, πεδία ή κυριολεκτικά, ο τύπος που προκύπτει καθορίζεται από τους τύπους των πεδίων και των κυριολεκτικών. Εάν ο τύπος τιμής παραμέτρου δεν περιλαμβάνεται στον προκύπτον τύπο δεδομένων, η τιμή του θα περικοπεί.
Για παράδειγμα, στο παρακάτω παράδειγμα το πεδίο θα είναι τύπου Number.

ΕΠΙΛΟΓΗ
ΟΤΑΝ ΕΙΝΑΙ ΨΕΜΑ
ΜΕΤΑ 5
ΣΕ ΔΙΑΦΟΡΕΤΙΚΗ ΠΕΡΙΠΤΩΣΗ
&Παράμετρος
ΤΕΛΟΣ

Εάν ορίσετε την παράμετρο Παράμετρος σε μια τιμή άλλου τύπου, η δυναμική λίστα για αυτό το πεδίο θα λάβει την τιμή 0 (η προεπιλεγμένη τιμή για τον τύπο Αριθμού).
Εάν σε μια τέτοια περίπτωση πρέπει να επιλέξετε μια παράμετρο διαφορετικού τύπου, συνιστάται να χρησιμοποιήσετε τη δομή της γλώσσας ερωτήματος ΕΞΠΡΕΣ. Για παράδειγμα,
εάν στο παραπάνω παράδειγμα χρειάζεται να περάσετε μια συμβολοσειρά που δεν υπερβαίνει τους 100 χαρακτήρες στην παράμετρο, τότε θα πρέπει να αντικαταστήσετε την απλή ένδειξη της παραμέτρου με μια έκφραση με cast ρητού τύπου:

ΕΠΙΛΟΓΗ
ΟΤΑΝ ΕΙΝΑΙ ΨΕΜΑ
ΜΕΤΑ 5
ΣΕ ΔΙΑΦΟΡΕΤΙΚΗ ΠΕΡΙΠΤΩΣΗ
EXPRESS(&Parameter AS String(100))
ΤΕΛΟΣ

Εάν το αυθαίρετο κείμενο ενός αιτήματος δυναμικής λίστας χρησιμοποιεί παραμέτρους στις εκφράσεις των πεδίων επιλογής, θα πρέπει να υποδείξετε ρητά τον τύπο των παραμέτρων χρησιμοποιώντας την κατασκευή ΕΞΠΡΕΣ. Για παράδειγμα, αντί για &Ονοματολογία AS Ονοματολογίαχρήση
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nomenclature. Διαφορετικά, η αναζήτηση μέσω της γραμμής αναζήτησης μπορεί να λειτουργήσει
λανθασμένα ή παράγουν σφάλματα.

3. Μέθοδοι ανάκτησης και αποθήκευσης δεδομένων με δυναμική λίστα

Κατά τη λήψη δεδομένων για εμφάνιση, μια δυναμική λίστα χρησιμοποιεί μία από τις τρεις μεθόδους:
1. Η ανάγνωση από τη βάση δεδομένων εκτελείται σε κομμάτια με έναν αριθμό στοιχείων δεδομένων ελαφρώς μεγαλύτερο από τον αριθμό των σειρών που εμφανίζονται ταυτόχρονα στη λίστα (αλλά όχι λιγότερο από 20). Τα δεδομένα δεν αποθηκεύονται προσωρινά στον διακομιστή.
2. Η ανάγνωση από τη βάση δεδομένων γίνεται σε σελίδες 1.000 στοιχείων δεδομένων. Τα δεδομένα αποθηκεύονται προσωρινά στον διακομιστή. Τα ιεραρχικά δεδομένα αποθηκεύονται στην κρυφή μνήμη: δεν αποθηκεύονται κρυφά περισσότερες από 2 σελίδες στοιχείων για κάθε γονέα. Δεν αποθηκεύονται στην κρυφή μνήμη περισσότερες από 20 σελίδες στοιχείων ανά δυναμική λίστα. Η προσωρινή αποθήκευση θα ενεργοποιηθεί από μια δυναμική λίστα για τους ακόλουθους πίνακες:
● Κριτήρια επιλογής.
● Όλοι οι πίνακες του λογιστικού μητρώου, εκτός από τον κύριο πίνακα και τον πίνακα MovementsSubconto.
● Όλοι οι πίνακες καταχωρητών συσσώρευσης, εκτός από τον κύριο πίνακα.
● Όλοι οι πίνακες του μητρώου πληροφοριών, εκτός από τον κύριο πίνακα.
● Όλοι οι πίνακες του μητρώου υπολογισμού, εκτός από τον κύριο πίνακα.
● Εικονικός πίνακας εργασιών ανά εκτελεστή.
● Πίνακες εξωτερικών πηγών χωρίς κλειδιά.
● Κύβοι από εξωτερικές πηγές.

3. Η ανάγνωση από τη βάση δεδομένων πραγματοποιείται σε σελίδες 1.000 στοιχείων. Το πρώτο τμήμα είναι ίσο με 1 σελίδα. Κάθε επόμενο τμήμα αυξάνεται κατά 1 σελίδα (όταν φτάσει στο τέλος του προηγούμενου δείγματος). Όσο πιο κοντά κινείται το «σημείο θέασης» στο τέλος των εμφανιζόμενων δεδομένων, τόσο μεγαλύτερο είναι το δείγμα ανάγνωσης από τη βάση δεδομένων, και τελικά γίνεται ίσο με όλα τα εμφανιζόμενα δεδομένα. Τα δεδομένα αποθηκεύονται προσωρινά στον διακομιστή. Ο μέγιστος αριθμός καταχωρήσεων στην προσωρινή μνήμη και τη δυναμική λίστα είναι 1.000.000.
Ανάλογα με το τι επιλέγεται από τον κύριο πίνακα της δυναμικής λίστας και την τιμή που παίρνει η ιδιότητα Dynamic reading, χρησιμοποιείται μία ή άλλη μέθοδος ανάγνωσης δεδομένων:

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



● Ένας από τους παρακάτω πίνακες καθορίζεται ως η τιμή της ιδιότητας Κύριος πίνακας: ο κύριος πίνακας του μητρώου πληροφοριών, το μητρώο συσσώρευσης, το λογιστικό μητρώο, το μητρώο υπολογισμού, ο εικονικός πίνακας του λογιστικού μητρώου MovementsSubconto:

● Ιδιότητα δυναμικής ανάγνωσης:
● Εγκατεστημένο: χρησιμοποιείται η μέθοδος 1 (η περιγραφή των μεθόδων δίνεται παραπάνω).
● Επαναφορά: Χρησιμοποιείται η μέθοδος 2 (η περιγραφή των μεθόδων δίνεται παραπάνω).

● Η ιδιότητα Main table περιέχει τον πίνακα κριτηρίων επιλογής ή τον πίνακα εργασιών ανά εκτελεστή (Tasks By Performer):
● Κλειδί που προσδιορίζει μια σειρά πίνακα: Σύνδεσμος.

● Η ιδιότητα Main table καθορίζει τον εικονικό πίνακα του καταχωρητή πληροφοριών SliceFirst ή SliceLast:
● Κλειδί που προσδιορίζει μια σειρά πίνακα: RecordKey.
● Η ιδιότητα Δυναμική ανάγνωση δεν ισχύει.
● Χρησιμοποιείται η μέθοδος 2 (η περιγραφή των μεθόδων δίνεται παραπάνω).

● Η ιδιότητα Main table έχει οριστεί σε έναν από τους πίνακες εικονικών καταχωρητών, εκτός από αυτούς που αναφέρονται παραπάνω:

● Η ιδιότητα Δυναμική ανάγνωση δεν ισχύει.

● Η ιδιότητα Main table δεν έχει καθοριστεί, χρησιμοποιείται ένα αυθαίρετο ερώτημα:
● Κλειδί που προσδιορίζει μια σειρά πίνακα: Αριθμός.
● Η ιδιότητα Δυναμική ανάγνωση δεν ισχύει.
● Χρησιμοποιείται η μέθοδος 3 (η περιγραφή των μεθόδων δίνεται παραπάνω).

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

4. Ρυθμίσεις δυναμικής λίστας

Ρυθμίσεις λίστας ιδιοτήτων - κάνοντας κλικ στον υπερσύνδεσμο Άνοιγμα ανοίγει μια φόρμα για τη ρύθμιση της εμφάνισης μιας δυναμικής λίστας. Η ρύθμιση μιας λίστας γίνεται με τον ίδιο τρόπο όπως παρόμοιες λειτουργίες σε ένα σύστημα σύνθεσης δεδομένων.


Ρύζι. 2. Σχεδιασμός υπό όρους μιας δυναμικής λίστας

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

ΣΥΜΒΟΥΛΗ.Θα πρέπει να θυμόμαστε ότι η κακή επιλογή πεδίων ταξινόμησης (καθώς και η επιλογή και η ομαδοποίηση δεδομένων) επηρεάζει αρνητικά την αποτελεσματικότητα της δυναμικής δειγματοληψίας.
Από τη σκοπιά ενός προγραμματιστή εφαρμογών, οι ρυθμίσεις δυναμικής λίστας αποτελούνται από πολλά μέρη που συνδέονται μεταξύ τους. Η κύρια ιδιότητα μέσω της οποίας μπορείτε να διαχειριστείτε τις ρυθμίσεις μιας δυναμικής λίστας είναι Ρυθμίσεις Linker. Αυτό το αντικείμενο περιέχει τρία σύνολα ρυθμίσεων που, όταν εκτελείται το σύστημα, καθορίζουν τις τελικές ρυθμίσεις που εφαρμόζονται στη δυναμική λίστα:
● Ρυθμίσεις – ρυθμίσεις που δημιουργήθηκαν στη λειτουργία Διαμόρφωσης. Η ιδιότητα Order της δυναμικής λίστας παρέχει γρήγορη πρόσβαση στην ιδιότητα Settings.Order του εργαλείου δημιουργίας ρυθμίσεων της δυναμικής λίστας, επομένως οι ακόλουθες δομές είναι ισοδύναμες:
List.Order και List.SettingsLinker.Settings.Order;
● User Settings – πρόκειται για ρυθμίσεις που αλλάζουν ο χρήστης στη λειτουργία 1C:Enterprise.
● Fixed Settings – αυτές οι ρυθμίσεις ορίζονται από την ενσωματωμένη γλώσσα. Αυτή η ιδιότητα περιέχει επίσης τιμές επιλογής που μεταφέρονται στη φόρμα χρησιμοποιώντας τις παραμέτρους της. Οι ιδιότητες δυναμικής λίστας Selection, Options, Conditional Appearance παρέχουν γρήγορη πρόσβαση στις σταθερές ρυθμίσεις του εργαλείου δημιουργίας ρυθμίσεων δυναμικής λίστας. Με άλλα λόγια, αυτές οι κλήσεις είναι ισοδύναμες:
List.Settings Composer.FixedSettings.Selection και List.Selection.
Κατά τη δημιουργία των τελικών ρυθμίσεων για μια δυναμική λίστα, διάφορες επιλογές ρυθμίσεων συνδυάζονται ως εξής:
● Εάν οποιοσδήποτε τύπος ρυθμίσεων έχει επισημανθεί εξ ολοκλήρου ως προσαρμοσμένος, τότε οι ρυθμίσεις που προκύπτουν περιλαμβάνουν τις προσαρμοσμένες ρυθμίσεις
(List.ComposerSettings.UserSettings). Επιπλέον, εάν κάποια στοιχεία ρυθμίσεων επισημανθούν ως μη διαθέσιμα, τότε αυτές οι ρυθμίσεις θα τοποθετηθούν στις ρυθμίσεις που προκύπτουν από την ιδιότητα List.Settings Composer. Ρυθμίσεις.
● Εάν οποιοσδήποτε τύπος ρυθμίσεων επισημαίνεται ως προσαρμοσμένος όχι εξ ολοκλήρου, αλλά στοιχείο προς στοιχείο, τότε:
● Τα στοιχεία που έχουν επισημανθεί ως προσαρμοσμένα θα συμπεριληφθούν στις ρυθμίσεις που προκύπτουν από την ιδιότητα List.SettingsComposer.CustomSettings.
● Τα στοιχεία που έχουν επισημανθεί ως μη διαθέσιμα θα συμπεριληφθούν στις ρυθμίσεις που προκύπτουν από την ιδιότητα List.SettingsComposer.Settings.
● Οι σταθερές ρυθμίσεις (List.SettingsComposer.FixedSettings) προστίθενται στις ρυθμίσεις που προκύπτουν «ως έχουν». Ταυτόχρονα, είναι απαράδεκτο οι σταθερές ρυθμίσεις και οι ρυθμίσεις χρήστη να περιέχουν ρυθμίσεις με το ίδιο όνομα, για παράδειγμα, επιλογή με την ίδια αριστερή τιμή στη συνθήκη.

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


Ρύζι. 3. Ελέγξτε τη συμπερίληψη στις ρυθμίσεις χρήστη

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

Εάν χρειάζεστε ειδικές ρυθμίσεις για φόρτωση κατά το άνοιγμα μιας δυναμικής λίστας, αυτό μπορεί να γίνει με δύο τρόπους:
● Χρήση της παραμέτρου φόρμας δυναμικής λίστας Ρυθμίσεις χρήστη. Τα δεδομένα που περιέχονται σε αυτήν την παράμετρο θα τοποθετηθούν στις ρυθμίσεις δυναμικής λίστας του χρήστη.
● Χρήση της παραμέτρου φόρμας δυναμικής λίσταςUserSettingsKey. Εάν καθορίσετε αυτήν την παράμετρο κατά το άνοιγμα μιας φόρμας, τότε οι ρυθμίσεις χρήστη που βρίσκονται στην αποθήκευση ρυθμίσεων με το καθορισμένο κλειδί θα φορτωθούν στη δυναμική λίστα, η οποία είναι το κύριο χαρακτηριστικό της φόρμας.

5. Αναζήτηση σε μια δυναμική λίστα

Μια δυναμική λίστα που βρίσκεται στη φόρμα παρέχει τη δυνατότητα διαδραστικής αναζήτησης στα εμφανιζόμενα δεδομένα. Η αναζήτηση μπορεί να πραγματοποιηθεί χρησιμοποιώντας τα ακόλουθα εργαλεία: γραμμή αναζήτησης, παράθυρο διαλόγου αναζήτησης, αναζήτηση για την τρέχουσα τιμή, χρήση του ιστορικού αναζήτησης και ρύθμιση της περιόδου (για δυναμικές λίστες που εμφανίζουν έγγραφα). Το αποτέλεσμα αναζήτησης είναι ένα περιορισμένο σύνολο εγγραφών
μια δυναμική λίστα (από αυτές που είναι διαθέσιμες σε έναν συγκεκριμένο χρήστη) που ταιριάζουν με τα κριτήρια αναζήτησης.
Για να ελέγξετε τις δυνατότητες αναζήτησης μιας δυναμικής λίστας, υπάρχουν τρεις ιδιότητες πίνακα στη διαχειριζόμενη φόρμα που εμφανίζει τη δυναμική λίστα:
● Αναζήτηση θέσης συμβολοσειράς – καθορίζει τη θέση της συμβολοσειράς αναζήτησης. Μπορεί να λάβει τις ακόλουθες τιμές: Auto, Command Bar, None, Top, Bottom.


Ρύζι. 4. Αναζήτηση συμβολοσειράς σε μια δυναμική λίστα

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


● Εάν η ιδιότητα Λειτουργία συμβατότητας έχει οριστεί σε Να μην χρησιμοποιείται ή παλαιότερη από την έκδοση 8.3.4 – η τιμή είναι Πίνακας εντολών.
Μεταβείτε στη γραμμή αναζήτησης ως εξής:
● Πατώντας το συνδυασμό πλήκτρων Ctrl+F.
● Ποντίκι.
● Όταν ξεκινάτε να πληκτρολογείτε σε μια δυναμική λίστα (λαμβάνοντας υπόψη την τιμή της ιδιότητας SearchOnTyping της δυναμικής λίστας).
● Θέση κατάστασης προβολής – περιγράφει πού θα εμφανίζεται η κατάσταση προβολής: ποια πεδία αναζητήθηκαν και ποιες τιμές
αναζήτηση σε κάθε τομέα. Μπορεί να λάβει τις ακόλουθες τιμές: Auto, None, Top, Bottom


Ρύζι. 5. Αναζήτηση κατάστασης στη δυναμική λίστα

Εάν η ιδιότητα έχει οριστεί σε Όχι, τότε η κατάσταση προβολής δεν θα υπάρχει στη φόρμα. Ως αποτέλεσμα, θα είναι δυνατό να προσδιοριστεί εάν η αναζήτηση έχει ολοκληρωθεί ή όχι μόνο από τη διαθεσιμότητα του κουμπιού Ακύρωση αναζήτησης.
Εάν η ιδιότητα έχει οριστεί στην κορυφή, η κατάσταση προβολής θα βρίσκεται μεταξύ της γραμμής εντολών λίστας και του πίνακα που εμφανίζει τη δυναμική λίστα. Εάν η ιδιότητα έχει οριστεί σε Κάτω, η κατάσταση προβολής θα τοποθετηθεί αμέσως μετά τον πίνακα που εμφανίζει τη δυναμική λίστα.
Εάν η φόρμα δημιουργήθηκε στην έκδοση 1C:Enterprise 8.3.4 και παλαιότερη, η ιδιότητα ορίζεται σε No. Εάν η φόρμα δημιουργήθηκε στην έκδοση 1C:Enterprise 8.3.5 και παλαιότερη, η ιδιότητα ορίζεται σε Αυτόματο. Η πραγματική αξία του ακινήτου σε αυτή την περίπτωση θα καθοριστεί ως εξής:
● Εάν η ιδιότητα Λειτουργία συμβατότητας έχει οριστεί σε Έκδοση 8.3.4 (και χαμηλότερη) – τιμή No.
● Εάν η ιδιότητα Λειτουργία συμβατότητας έχει οριστεί σε Να μην χρησιμοποιείται ή παλαιότερη από την έκδοση 8.3.4 – τιμή Κορυφή.
● Search Control Position – Καθορίζει πού θα εμφανίζεται το κουμπί ελέγχου αναζήτησης. Το κουμπί ανοίγει ένα μενού που περιέχει τις ακόλουθες πληροφορίες: εντολές Εύρεση κατά τρέχουσα τιμή, Σύνθετη αναζήτηση, Ακύρωση αναζήτησης, Ορισμός περιόδου (για λίστες εγγράφων και περιοδικών) και ιστορικό ερωτημάτων αναζήτησης (τελευταία 5 ερωτήματα). Η ιδιότητα μπορεί να λάβει τις ακόλουθες τιμές: Auto, None, Command panel.


Ρύζι. 6. Διαχείριση αναζήτησης σε μια δυναμική λίστα

Εάν η ιδιότητα έχει οριστεί σε Όχι, τότε το κουμπί ελέγχου αναζήτησης δεν θα βρίσκεται στη φόρμα (αλλά οι εντολές θα είναι διαθέσιμες χρησιμοποιώντας το μενού Περισσότερα). Η τιμή της ιδιότητας Γραμμή εντολών τοποθετεί ένα κουμπί στη γραμμή εντολών που σχετίζεται με έναν πίνακα που εμφανίζει μια δυναμική λίστα.
Εάν η φόρμα δημιουργήθηκε στην έκδοση 1C:Enterprise 8.3.4 και παλαιότερη, η ιδιότητα ορίζεται σε No. Εάν η φόρμα δημιουργήθηκε στην έκδοση 1C:Enterprise 8.3.5 και παλαιότερη, η ιδιότητα ορίζεται σε Αυτόματο. Η πραγματική αξία του ακινήτου σε αυτή την περίπτωση θα καθοριστεί ως εξής:
● Εάν η ιδιότητα Λειτουργία συμβατότητας έχει οριστεί σε Έκδοση 8.3.4 (και χαμηλότερη) – τιμή No.
● Εάν η ιδιότητα Λειτουργία συμβατότητας έχει οριστεί σε Να μην χρησιμοποιείται ή παλαιότερη από την έκδοση 8.3.4 – η τιμή είναι Πίνακας εντολών.
Εάν υπάρχουν πολλοί πίνακες εντολών σε μια φόρμα, η πηγή των εντολών της οποίας είναι ένας πίνακας της διαχειριζόμενης φόρμας (εμφάνιση δεδομένων δυναμικής λίστας), τότε η γραμμή αναζήτησης και το κουμπί ελέγχου αναζήτησης θα βρίσκονται σε έναν μόνο πίνακα εντολών:
● Ή στη γραμμή εντολών της ίδιας της δυναμικής λίστας (αν έχει ενεργοποιημένη την αυτόματη συμπλήρωση)
● Ή σε οποιονδήποτε από τους υπόλοιπους πίνακες εντολών.

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

● Η αναζήτηση δεν εκτελείται σε όλες τις στήλες της δυναμικής λίστας (και του αντικειμένου διαμόρφωσης), αλλά μόνο μέσω αυτών των στηλών που εμφανίζονται στον πίνακα.
● Η αναζήτηση σε μια δυναμική λίστα κατά πεδία τύπων αναφοράς με αυθαίρετη αναπαράσταση πραγματοποιείται από πεδία που χρησιμοποιούνται για
σχηματισμός αναπαράστασης (δείτε εδώ). Τα πεδία που περιλαμβάνονται στην προβολή λαμβάνονται λαμβάνοντας υπόψη τον χειριστή ViewFieldGettingProcessing() του αντίστοιχου αντικειμένου.
● Για δυναμικές λίστες με καθορισμένο βασικό πίνακα, η αναζήτηση πλήρους κειμένου χρησιμοποιείται στον κύριο πίνακα. Όλοι οι σύνδεσμοι χωρίς ευρετήριο από τον κύριο πίνακα θα προστεθούν στα αποτελέσματα αναζήτησης πλήρους κειμένου. Το αποτέλεσμα μιας αναζήτησης πλήρους κειμένου για τον κύριο πίνακα χρησιμοποιείται ως επιλογή με βάση τα βασικά πεδία. Εκτελείται επίσης αναζήτηση πλήρους κειμένου σε πεδία που εμφανίζονται στη λίστα από άλλους πίνακες (εάν το πεδίο και το αντικείμενο διαμόρφωσης χρησιμοποιούν αναζήτηση πλήρους κειμένου). Χωρίς να είναι ενεργοποιημένη η αναζήτηση πλήρους κειμένου, ενδέχεται να υπάρχουν δεδομένα
βρέθηκε, αλλά η ίδια η αναζήτηση θα είναι πολύ αργή.
Εάν παρουσιαστεί σφάλμα κατά την προσπάθεια εκτέλεσης αναζήτησης πλήρους κειμένου, η αναζήτηση θα πραγματοποιηθεί χωρίς να εφαρμοστεί η αναζήτηση πλήρους κειμένου.
Για παράδειγμα, αυτό μπορεί να συμβεί κατά την αναζήτηση ενός γράμματος και ενός μεγάλου αριθμού γραμμών στη βάση πληροφοριών που ξεκινούν με αυτό το γράμμα.
● Εάν μια επιλογή με τον τύπο σύγκρισης Equals χρησιμοποιείται για ένα πεδίο στον κύριο πίνακα μιας δυναμικής λίστας, τότε κατά την εκτέλεση μιας αναζήτησης πλήρους κειμένου, μια τιμή επιλογής θα προστεθεί στο ερώτημα αναζήτησης για αυτόν τον πίνακα.
● Η συμβολοσειρά αναζήτησης χωρίζεται σε λέξεις. Αυτό το διαμέρισμα εκτελείται σύμφωνα με τους ακόλουθους κανόνες:
● Η γραμμή είναι σπασμένη χρησιμοποιώντας κενό διάστημα και χαρακτήρες καρτέλας ως οριοθέτες.
● Στη συνέχεια, κάθε τμήμα που προκύπτει υποβάλλεται σε επεξεργασία:
● Εάν το τμήμα είναι μια αναπαράσταση ημερομηνίας (με ή χωρίς ώρα) με βάση την τρέχουσα τοπική ρύθμιση της περιόδου λειτουργίας, τότε η λέξη είναι το τμήμα.
● Διαφορετικά, το τμήμα χωρίζεται περαιτέρω χρησιμοποιώντας τους χαρακτήρες ",.-/\" ως οριοθέτες. Σε αυτήν την περίπτωση, κάθε θραύσμα συμβολοσειράς που προκύπτει λαμβάνεται ως λέξη.

● Για κάθε λέξη, σχηματίζεται το δικό της σύνολο συνθηκών, οι οποίες συνδυάζονται «από OR». Αυτό το σύνολο συνθηκών δημιουργείται εάν μια αναζήτηση πλήρους κειμένου για μια δεδομένη λέξη στον πίνακα από τον οποίο ελήφθη αυτό το πεδίο επέστρεψε τουλάχιστον ένα αντικείμενο ή δεν χρησιμοποιήθηκε αναζήτηση πλήρους κειμένου για αυτό το πεδίο. Οι προϋποθέσεις διαμορφώνονται ως εξής:
● Για ένα πεδίο τύπου String, η συνθήκη είναι FieldName LIKE %Word%.
● Για ένα πεδίο του τύπου Αριθμός, η συνθήκη έχει τη μορφή FieldName=Τιμή, όπου Τιμή είναι μια λέξη που μετατρέπεται στον τύπο Αριθμού. Εάν δεν είναι δυνατή η εκτέλεση του cast, η αναζήτηση πεδίου δεν θα πραγματοποιηθεί.
● Η λέξη αναζητείται ως δευτερεύουσα συμβολοσειρά στην προεπιλεγμένη Boolean αναπαράσταση που έχει οριστεί για την τρέχουσα περίοδο λειτουργίας. Εάν η λέξη αναζήτησης βρεθεί σε μια προβολή, τότε αναζητά την τιμή που αντιστοιχεί στην προβολή στην οποία βρέθηκε η λέξη. Σε αυτήν την περίπτωση, η αναζήτηση δεν χρησιμοποιεί προβολές που καθορίζονται χρησιμοποιώντας την ιδιότητα στοιχείου φόρμας Μορφοποίηση.
● Για ένα πεδίο τύπου Date, η συνθήκη μοιάζει με FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
υποδεικνύεται με ένα ή δύο ψηφία, το έτος θα μειωθεί στον τρέχοντα αιώνα και αυτή η τιμή θα προστεθεί στη συνθήκη αναζήτησης.
● Για πεδία αναφοράς, πραγματοποιείται αναζήτηση στα πεδία που χρησιμοποιούνται για τη διαμόρφωση της προβολής αναφοράς. Αναζήτηση σε καθένα από αυτά τα πεδία
εκτελούνται σύμφωνα με τους κανόνες που περιγράφονται παραπάνω. Η αναζήτηση δεν χρησιμοποιεί πεδία που χρησιμοποιούνται για τη διαμόρφωση προσαρμοσμένης αναπαράστασης δεδομένων.
Το σύνολο των συνθηκών για κάθε λέξη συνδυάζεται "ΚΑΙ".
● Για τιμές με μηδενικά στην αρχή, μπορείτε να αναζητήσετε είτε τη συμβολοσειρά με μηδενικά στην αρχή είτε τη συμβολοσειρά που έχει καθοριστεί χωρίς μηδενικά στην αρχή.
● Εάν μια δυναμική λίστα εμφανίζει μια λίστα εγγράφων ή ένα ιστορικό εγγράφου, το διάστημα προβολής λίστας που καθορίζετε εμφανίζεται επίσης στην περιοχή της φόρμας που έχει δεσμευτεί για την εμφάνιση της κατάστασης προβολής για την επιθυμητή δυναμική λίστα.
● Η εντολή αναζήτησης βάσει τρέχουσας τιμής δεν είναι διαθέσιμη εάν ο κύριος πίνακας της δυναμικής λίστας είναι το κριτήριο επιλογής.
● Τα ευρεθέντα θραύσματα συμβολοσειράς επισημαίνονται όταν εμφανίζονται στον πίνακα.
● Μόνο μία συμβολοσειρά αναζήτησης υποστηρίζεται για μία στήλη. Όταν προσθέτετε ένα νέο ερώτημα αναζήτησης για μια στήλη που βρίσκεται ήδη σε αναζήτηση, η έκφραση αναζήτησης θα αντικατασταθεί αντί να προστεθούν τα δύο ερωτήματα αναζήτησης μαζί.
● Εάν η φόρμα δεν έχει προσθήκη στοιχείου φόρμας της φόρμας Εμφάνιση συμβολοσειράς αναζήτησης που σχετίζεται με τον πίνακα (ιδιότητα προσθήκης στοιχείου φόρμας Πηγή) που εμφανίζει μια δυναμική λίστα, τότε πατώντας το συνδυασμό πλήκτρων Ctrl+F ανοίγει το παράθυρο διαλόγου αναζήτησης.


Ρύζι. 7. Διάλογος αναζήτησης

Εάν η φόρμα περιέχει μια προσθήκη στοιχείου φόρμας της φόρμας Εμφάνιση συμβολοσειράς αναζήτησης που σχετίζεται με έναν πίνακα (ιδιότητα προσθήκης στοιχείου φόρμας Πηγή) που εμφανίζει μια δυναμική λίστα, τότε για να ανοίξετε το παράθυρο διαλόγου αναζήτησης θα πρέπει να χρησιμοποιήσετε την εντολή Σύνθετη αναζήτηση.
● Όταν χρησιμοποιείτε το παράθυρο διαλόγου αναζήτησης, έχετε υπόψη σας τα ακόλουθα σημεία:
● Ανοίγοντας το παράθυρο διαλόγου αναζήτησης χρησιμοποιώντας μια συντόμευση πληκτρολογίου, η τιμή του τρέχοντος κελιού εμφανίζεται στη γραμμή Τι να αναζητήσετε και η τιμή του διακόπτη Τρόπος αναζήτησης ορίζεται σε Κατά ακριβή αντιστοίχιση.

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

6. Λήψη των δεδομένων που εμφανίζονται από μια δυναμική λίστα

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

Schema = Elements.List.GetExecutableDataCompositionSchema();
Ρυθμίσεις = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Scheme, Settings);
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Νέο OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Η λήψη δεδομένων σε μια συλλογή τιμών (πίνακας ή λίστα τιμών) γίνεται με τον ίδιο τρόπο.
Η λήψη δεδομένων δυναμικής λίστας με αυτόν τον τρόπο έχει μια σειρά από χαρακτηριστικά που πρέπει να λαμβάνονται υπόψη κατά την ανάπτυξη λύσεων εφαρμογών:
● Η ακόλουθη σχεδίαση πίνακα δεν υποστηρίζεται:
● Εναλλασσόμενα χρώματα γραμμής.
● Εικόνα κεφαλίδας.
● Εικόνα του υπογείου.
● Χρώμα φόντου υποσέλιδου.
● Χρώμα κειμένου υποσέλιδου.
● Γραμματοσειρά υποσέλιδου.
● Οριζόντια θέση στο υπόγειο.
● Λειτουργία κωδικού πρόσβασης.
● Η εμφάνιση υπό όρους που καθορίζεται για μια διαχειριζόμενη φόρμα δεν υποστηρίζεται.
● Όταν ταξινομείτε έναν ιεραρχικό πίνακα σε αύξουσα σειρά κατά ένα πεδίο τύπου Link, οι εγγραφές που περιέχουν έναν κενό σύνδεσμο τοποθετούνται πάντα πρώτα.

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

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

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


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

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


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

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


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


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


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




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


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


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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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