Βρείτε ένα στοιχείο στη λίστα τιμών 1c. Universal συλλεκτική δομή

Τι αφορά αυτό το άρθρο;

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

  • Τι είναι οι καθολικές συλλογές και πότε και σε ποιες περιπτώσεις πρέπει να χρησιμοποιούνται;
  • Τι κοινό έχουν όλες οι καθολικές συλλογές; Ποιες τεχνικές μπορείτε να χρησιμοποιήσετε για να δουλέψετε με όλες;
  • Τι είναι ένας πίνακας, πώς και πότε να τον χρησιμοποιήσετε; Τι μεθόδους έχει;
  • Γιατί να χρησιμοποιήσετε μια δομή; Σε τι διαφέρει από έναν πίνακα;
  • Πότε πρέπει να χρησιμοποιήσετε μια λίστα τιμών; Πώς να το εμφανίσετε στη φόρμα;
  • Συμμόρφωση – τι είναι και πότε να το χρησιμοποιήσετε; Ποια είναι τα πλεονεκτήματα όσον αφορά τη δομή;
  • Σε τι χρησιμεύει ο πίνακας τιμών; Πώς να περιγράψετε τη δομή του; Πώς να προσθέσετε/αφαιρέσετε γραμμές; Πώς να το εμφανίσετε στη φόρμα;
  • Δέντρο των αξιών - σε τι χρησιμοποιείται; Πώς να συμπληρώσετε και να εμφανίσετε τη φόρμα; Πώς να εργαστείτε με αυτό;

Εφαρμογή

Το άρθρο εξετάζει την πλατφόρμα 1C:Enterprise 8.3 της τρέχουσας έκδοσης.

Πώς να εργαστείτε με καθολικές συλλογές σε 1C

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

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

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

Υπάρχει διαφορετικά είδηκαθολικές συλλογές: Array, Structure, Matching, Fixed Array, Value Table, Πινακοποιημένο μέροςκαι τα λοιπά. Όμως όλες οι συλλογές έχουν παρόμοια συμπεριφορά.

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

Μπορείτε να αποκτήσετε μια νέα συλλογή με μη αυτόματο τρόπο καλώντας τον κατασκευαστή και δημιουργώντας μια παρουσία της κλάσης.

Για παράδειγμα: OurArray = Νέος Πίνακας;

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

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

Η αντίστοιχη περιγραφή του κατασκευαστή βρίσκεται στον βοηθό σύνταξης.

Έτσι, χρησιμοποιώντας τις παραμέτρους του κατασκευαστή, μπορείτε να ορίσετε αμέσως την επιθυμητή συμπεριφορά αυτού του αντικειμένου.

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

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

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

Για πρόσβαση σε ένα στοιχείο OurArray, μπορείτε να χρησιμοποιήσετε την πρόσβαση ευρετηρίου· για αυτό, το ευρετήριο υποδεικνύεται σε αγκύλες.

Για παράδειγμα, OurArray. Λάβετε υπόψη ότι σε αυτήν την περίπτωση το σύστημα επιστρέφει το στοιχείο Array με δείκτη 3, και κατά σειρά αυτό είναι το τέταρτο στοιχείο του Array.

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

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

Όλες οι συλλογές χρησιμοποιούν διάσχιση στοιχείων συλλογής. Η παράκαμψη είναι δυνατή με δύο τρόπους: κύκλος ΓιαΚαι κύκλος Για κάθε ένα από.

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

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

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

Πίνακας Αξιών– αυτή είναι μια συγκεκριμένη συλλογή σειρών· οι σειρές μπορούν να περιέχουν διαφορετικές στήλες με διαφορετικούς τύπους τιμών.

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

Η μέθοδος Index σάς επιτρέπει να προσδιορίσετε ποιος δείκτης αντιστοιχεί σε μια δεδομένη σειρά (δηλαδή, την τρέχουσα θέση της σειράς στον πίνακα). Οι τιμές του δείκτη ξεκινούν από το μηδέν.

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

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

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

Σύνταξη: Εισάγετε (,)

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

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

Σύνταξη: Διαγράφω()
Παράδειγμα χρήσης: OurArray.Delete(5);

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

Σχεδόν όλες οι συλλογές έχουν μια μέθοδο για την αναζήτηση μιας τιμής - Εύρημα. Η τιμή που θέλουμε να βρούμε μεταβιβάζεται στη μέθοδο. Ορισμένες συλλογές σάς επιτρέπουν να ορίσετε ορισμένους περιορισμούς.

Για παράδειγμα, σε Πίνακας Αξίαςμπορείτε να καθορίσετε τις γραμμές και τις στήλες στις οποίες θέλετε να κάνετε αναζήτηση.

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

Παράδειγμα χρήσης: OurVariable = OurArray.Find(8);

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

Πρόσθετες μέθοδοι για Array

Μέθοδος BBorder()επιστρέφει τον αριθμό των στοιχείων μείον ένα. Εκείνοι. αν χρησιμοποιήσουμε βρόχο Για, τότε αντί για τη μέθοδο Quantity μπορούμε να χρησιμοποιήσουμε αμέσως τη μέθοδο Σύνορο().

Συγκεκριμένα, η μεταβλητή QuantityInArray θα μπορούσε να οριστεί διαφορετικά:

QuantityInArray = OurArray.InBorder();
Στη συνέχεια, όταν περιγράφεται ο ίδιος ο κύκλος, δεν πρέπει να αφαιρείται κανείς από αυτή τη μεταβλητή.

Η μέθοδος Set σας επιτρέπει να εκχωρήσετε μια τιμή σε ένα στοιχείο Array ανά ευρετήριο.

Σύνταξη: Εγκαθιστώ(,)

Παράδειγμα: OurArray.Set(2,8);

Εναλλακτική επιλογη: OurArray = 8;

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

Σύνταξη: Παίρνω()

Παράδειγμα: OurVariable = OurArray.Get(2);

Εναλλακτική επιλογη: OurVariable = OurArray;

Universal συλλεκτική δομή

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

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

Κλειδίείναι ένας αυστηρά τύπος δεδομένων συμβολοσειράς που περιγράφει μια τιμή. Για παράδειγμα, Στο κλειδίΟ "Κωδικός" μπορεί να αντιστοιχεί στην τιμή 113. Στο κλειδί«Όνομα» που σημαίνει «Βάσια». Η ίδια η Τιμή δεν υπόκειται σε περιορισμό τύπου δεδομένων.

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

Αυτό το είδος πρόσβασης είναι πολύ πιο βολικό από ό,τι αν ορίζαμε όλες τις παραμέτρους σε έναν Πίνακα και αποκτούσαμε πρόσβαση σε αυτές με ευρετήριο.

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

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

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

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

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

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

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

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

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

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

Τα στοιχεία δομής είναι προσβάσιμα μόνο με το όνομα κλειδιού. Ωστόσο, ο βρόχος For Every λειτουργεί επίσης για τη Δομή, αλλά δεν πρέπει να βασίζεστε στη σειρά των στοιχείων της Δομής.

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

Όπως ένας πίνακας, ο κατασκευαστής μιας δομής μπορεί να έχει παραμέτρους. Εκείνοι. είναι δυνατό να περιγραφεί το ίδιο το περιεχόμενο μιας Δομής χρησιμοποιώντας έναν κατασκευαστή.

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

Για παράδειγμα: OurStructure = New Structure (“Code, Name”, 133, “Vasya”);

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

Υπάρχει μια μέθοδος για να προσθέσετε μια νέα τιμή στη Δομή Εισάγετε, το οποίο εισάγει ένα νέο ζεύγος (Κλειδί και Τιμή).

Για παράδειγμα: OurStructure.Insert(“FamilyMembers”,3);

Η Δομή χαρακτηρίζεται από μια άλλη μέθοδο που χρησιμοποιείται αρκετά συχνά. Αυτή είναι η μέθοδος Ιδιοκτησία.

Χρησιμοποιώντας αυτήν τη μέθοδο, μπορείτε να καταλάβετε εάν υπάρχει ένα στοιχείο σε αυτήν τη Δομή του οποίου το κλειδί έχει αυτό και αυτό το όνομα.

Εάν υπάρχει τέτοιο στοιχείο, το σύστημα θα επιστρέψει την τιμή True, διαφορετικά – False.

Για παράδειγμα, η έκφραση OurStructure.Property ("Μέλη της οικογένειας")θα είναι ίση με την τιμή True. Αυτή η μέθοδος χρησιμοποιείται αρκετά συχνά κατά την ανάλυση της Δομής.

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

Για παράδειγμα: Αναφορά (Η δομή μας["Μέλη της οικογένειας"]);

Ωστόσο, δεν πρέπει να ξεχνάμε ότι μια Δομή είναι ένα μη ταξινομημένο σύνολο αντικειμένων, γι' αυτό η πρόσβαση με ευρετήρια 0, 1, 2 είναι απαράδεκτη.

Γενική συλλογή Λίστα τιμών

ListValuesείναι μια γραμμική λίστα στοιχείων οποιουδήποτε τύπου δεδομένων.

Κάθε στοιχείο αποτελείται από πολλές τιμές. Σχηματικά, μια λίστα τιμών μπορεί να αναπαρασταθεί ως λίστα με τέσσερις στήλες.

Πρώτη στήλη - Σημάδι. Έχει τύπο δεδομένων Boolean και επιτρέπει στον χρήστη να επιλέξει ή να αποεπιλέξει τα πλαίσια.

Η άλλη στήλη είναι μια εικόνα που μπορεί με κάποιο τρόπο να αναπαριστά οπτικά αυτό το στοιχείο, δηλ. αντιστοιχίστε αυτή τη συμβολοσειρά με μια εικόνα.

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

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

ListValues– αυτό είναι το αντικείμενο με το οποίο ο χρήστης μπορεί να εργαστεί οπτικά. Εκείνοι. ListValuesμπορεί να εμφανιστεί στη φόρμα.

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

Θα βρούμε ListValuesστον βοηθό sitax. Κατασκευαστής ListValuesδεν έχει παραμετροποιηθεί (δεν μπορείτε να ορίσετε καμία προεπιλεγμένη τιμή).

Υπάρχουν μέθοδοι όπως:

  • Εισάγετε(,) ;
  • Προσθήκη(,);
  • Ποσότητα();
  • Δείκτης().

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

Array of Elements = List of PriceTypes.OutloadValues();

Υπάρχει επίσης μια αντίστροφη μέθοδος:
ListPriceTypes.LoadValues(ArrayItems);

Υπάρχουν μέθοδοι αναζήτησης:
FindByValue(); FindByIdentifier().

Υπάρχει μια μέθοδος αντιγραφής:
ListCopy = PriceTypeList.Copy();
Αυτή η μέθοδοςπροορίζεται να κάνει κάποιου είδους τροποποίηση στο αντίγραφο.

Υπάρχουν μέθοδοι:
SortByValue();
SortByView().

Μέθοδοι Επιλέξτε αντικείμενο(,)Και MarkItems()καλέστε ένα παράθυρο διαλόγου modal που σταματά την εκτέλεση του αλγορίθμου έως ότου ο χρήστης κλείσει το παράθυρο.

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

Παράδειγμα κώδικα που καλείται από μια λειτουργική μονάδα διαχειριζόμενης εφαρμογής:

Εμφάνιση αυτού του κώδικα σε λειτουργία χρήστη (modal dialog).

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

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

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

Εάν είναι επιθυμητό, ​​η λίστα μπορεί να επεξεργαστεί: ορισμένα στοιχεία μπορούν να προστεθούν, μερικά μπορούν να αφαιρεθούν.

Συμμόρφωση πολλαπλών χρήσεων συλλογής

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

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

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

Το Compliance Constructor, σε αντίθεση με το Structure, δεν περιέχει τη δυνατότητα καθορισμού παραμέτρων.

Παράδειγμα χρήσης:

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

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

Για παράδειγμα: OurMatch = NewMatch;
Ταίριασμα = 999;

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

Αυτό έρχεται σε αντίθεση με τη Δομή.

Πίνακας αξιών καθολικής συλλογής

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

Μπορείτε να αφήσετε τις στήλες χωρίς πληκτρολόγηση και, στη συνέχεια, οι τιμές μπορούν να αποθηκευτούν σε μία στήλη σε διαφορετικές σειρές ΔΙΑΦΟΡΕΤΙΚΟΙ ΤΥΠΟΙ.

Διαφορές Πίνακες αξιώναπό έναν δισδιάστατο πίνακα:

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

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

Ετσι, Πίνακας Αξιώναποτελείται από ένα σύνολο σειρών και ένα σύνολο στηλών. Τόσο οι γραμμές όσο και οι στήλες είναι συλλογές.

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

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

Σημαντικό σημείο! Η διαδικασία που δημιουργεί Πίνακας Αξιών, πρέπει να μεταγλωττίσει το &OnServer.

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

Προσθήκη(,)
(προαιρετικός)
Τύπος: String.
(προαιρετικός)
Τύπος: Περιγραφή Τύποι
(προαιρετικός)
Τύπος: String.
(προαιρετικός)
Τύπος: Αριθμός.

Για παράδειγμα:

Για να καλέσουμε αυτή τη διαδικασία θα χρησιμοποιήσουμε την εντολή.

Στην περιγραφή Πίνακες αξιώντα στοιχεία της συλλογής είναι ακριβώς RowsTableValues.

Σε αντίθεση με τις στήλες, οι οποίες αποτελούνται μόνο από ιδιότητες (Όνομα, Τύπος, Επικεφαλίδα, Πλάτος), στο RowTableValuesΥπάρχουν και ιδιότητες (πρόσβαση με όνομα στήλης) και μέθοδοι (μπορείτε να λάβετε και να ορίσετε μια τιμή, να εργαστείτε με τους κατόχους).

Για να προσθέσετε μια νέα σειρά στον πίνακα, πρέπει να χρησιμοποιήσετε είτε τη μέθοδο Προσθήκη(), ή Εισάγετε(). Στη δεύτερη περίπτωση, θα πρέπει να υποδείξετε σε ποια θέση πρέπει να τοποθετηθεί η απαιτούμενη γραμμή.

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

Για γέμιση Πίνακες αξιώνΜπορούν να χρησιμοποιηθούν οι ακόλουθες μέθοδοι:

Σαφή()– για να αφαιρέσετε όλες τις σειρές από Πίνακες αξιών.

FillValues(,)– σας επιτρέπει να γεμίσετε όλες τις στήλες ή τις επιλεγμένες στήλες με μία τιμή.
LoadColumn(,)– φορτώνει μια στήλη από τον πίνακα.
UnloadColumn()– ξεφορτώνει τη στήλη σε έναν πίνακα.

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

Αντίγραφο(,)– σας επιτρέπει να δημιουργήσετε έναν νέο με βάση έναν υπάρχοντα πίνακα Πίνακας Αξιών, και όχι όλες οι σειρές και όλες οι στήλες, αλλά μόνο μερικές από αυτές. Επιστρεφόμενη αξία - Πίνακας Αξιών.

Μπορείτε να αντιγράψετε τη δομή Πίνακες αξιών. Υπάρχει αντίστοιχη μέθοδος για αυτό CopyColumns(). Θα πάρουμε ένα άδειο Πίνακας Αξιώνμε την απαιτούμενη δομή.

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

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

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

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

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

Μετά από αυτό, ο πίνακας που προκύπτει θα πρέπει να εμφανίζεται στη φόρμα.

Στη μονάδα φόρμας στο τέλος του προηγουμένως μεταγλωττισμένου αλγορίθμου (στη Διαδικασία για τη δημιουργία πίνακα τιμών), θα πρέπει να προσθέσετε:
ValueInFormData(TK, Πίνακας);

Καθολική συλλογή Δέντρο αξιών

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

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

Δεδομένου ότι οι σειρές μπορούν να είναι δευτερεύουσες μεταξύ τους, κάθε σειρά μπορεί να έχει έναν Γονέα, καθώς και τις δευτερεύουσες σειρές της.

Ας δημιουργήσουμε την αντίστοιχη εντολή Tree και τη διαδικασία επεξεργασίας της.

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

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

Για αυτό το χαρακτηριστικό, θα δημιουργήσουμε τις στήλες Έτος και Μήνας.

Μετακινήστε το αντίστοιχο στοιχείο DerZnστη φόρμα.

Στο τέλος Διαδικασίες TreeOnServer()ας προσθέσουμε:

ValueInFormData(TreeZn, DerZn);

Ας ελέγξουμε τι συνέβη στη λειτουργία χρήστη.

Χρησιμοποιώντας ένα κουμπί Προσθήκημπορείτε να προσθέσετε νέες γραμμές. Μπορούν επίσης να σχηματίσουν μια ιεραρχία.

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

Αυτό ολοκληρώνει την πρώτη μας γνωριμία με τις καθολικές συλλογές.

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

Πλήρης σύνταξη (κάντε κλικ για ανάπτυξη)

ListValues

Περιγραφή:

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

Είδη συλλογής: ValueListElement

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

Είναι δυνατή η πρόσβαση σε ένα στοιχείο συλλογής χρησιμοποιώντας τον τελεστή [...]. Το ευρετήριο του στοιχείου μεταβιβάζεται ως όρισμα ( αρίθμηση από το 0).

Ιδιότητες:

Μέθοδοι:

Εισαγωγή (Ευρετήριο, Τιμή, Αναπαράσταση, Ετικέτα, Εικόνα) Εισάγει ένα νέο στοιχείο στη λίστα τιμών στη θέση στο καθορισμένο ευρετήριο.SelectElement (Τίτλος, Στοιχείο) Εμφανίζει ένα παράθυρο για διαδραστική επιλογή ενός από τα στοιχεία που περιλαμβάνονται στη λίστα τιμών. Στοιχείο- το στοιχείο στο οποίο θα πρέπει αρχικά να τοποθετηθεί η λίστα τιμών κατά τη διαδραστική επιλογή. Εάν η τιμή της παραμέτρου δεν είναι στοιχείο λίστας τιμών που περιλαμβάνεται σε αυτή τη λίστα, η τοποθέτηση δεν θα πραγματοποιηθεί.UnloadValues()Δημιουργεί έναν πίνακα και αντιγράφει τις τιμές της λίστας των στοιχείων τιμών σε αυτόν.Προσθήκη (Τιμή, Αναπαράσταση, Ετικέτα, Εικόνα) Προσθέτει ένα νέο στοιχείο στο τέλος της λίστας τιμών.LoadValues(ArrayValues) Φορτώνει μια λίστα τιμών με τις τιμές από τον πίνακα που πέρασε. Σε αυτήν την περίπτωση, όλα τα προηγούμενα στοιχεία της λίστας διαγράφονται.Συμπληρώστε Σημειώσεις(Mark) Ορίζει ένα σημάδι για όλα τα στοιχεία της λίστας τιμών.Index(Element)Παίρνει το ευρετήριο ενός στοιχείου σε μια λίστα τιμών. Εάν δεν βρεθεί, τότε επιστρέφεται -1.Count() Λαμβάνει τον αριθμό των στοιχείων στη λίστα τιμών.FindByValue(SearchValue) Αναζητά την τιμή ενός στοιχείου σε μια λίστα τιμών. Εάν κανένα στοιχείο δεν αποθηκεύει μια τιμή ίση με την τιμή αναζήτησης, τότε η τιμή επιστρέφεται Απροσδιόριστος. Εύρεση κατά ταυτότητα(Identifier)Ανακτά τη λίστα τιμών στοιχείο ανά αναγνωριστικό. Εάν το στοιχείο δεν βρεθεί, τότε επιστρέφεται Απροσδιόριστος. MarkItems(Κεφαλίδα) Ορίζει ή αποεπιλέγει (διαδραστικά) τα στοιχεία στη λίστα τιμών. Επιστροφές Αληθής, εάν πατηθεί το κουμπί "OK" στο παράθυρο διαλόγου, Ψέμα- σε διαφορετική περίπτωση.Clear() Διαγράφει τη λίστα τιμών, αφαιρώντας όλα τα στοιχεία από αυτήν.ShowElementSelection(DescriptionNotificationsOnClosing, Title, Element) Εμφανίζει ένα παράθυρο για διαδραστική επιλογή ενός από τα στοιχεία που περιλαμβάνονται στη λίστα τιμών.ShowMark Items(Περιγραφή ειδοποιήσεων κλεισίματος, κεφαλίδα) Σχεδιασμένο για διαδραστική ρύθμιση καταστάσεων σήμανσης για στοιχεία της λίστας τιμών.Get(Index)Ανακτά την τιμή ανά ευρετήριο. Λειτουργεί παρόμοια με τον χειριστή.Shift (Στοιχείο, Μετατόπιση) Μετατοπίζει ένα στοιχείο της λίστας τιμών προς τα εμπρός ή προς τα πίσω κατά έναν καθορισμένο αριθμό θέσεων.Copy() Δημιουργεί ένα αντίγραφο μιας λίστας τιμών.SortByValue(Κατεύθυνση) Ταξινομεί μια λίστα τιμών σε αύξουσα ή φθίνουσα σειρά των τιμών που αποθηκεύονται από τα στοιχεία. Δείτε παράδειγμα παρακάτω.SortByView(Κατεύθυνση) Ταξινομεί τη λίστα τιμών σε αύξουσα ή φθίνουσα σειρά με αλφαβητική σειρά των αναπαραστάσεων των στοιχείων που περιλαμβάνονται στη λίστα τιμών. Δείτε παράδειγμα παρακάτω.Remove (Element) Αφαιρεί ένα στοιχείο από μια λίστα τιμών, όπου Στοιχείο- ευρετήριο του στοιχείου που πρόκειται να διαγραφεί ή του ίδιου του στοιχείου.

Σχεδιαστές:

Νέα λίστα αξιών
Διαδικασία &OnClient ExecuteCode(Command) /// Πώς να δημιουργήσετε μια λίστα τιμών σε 1s 8.3, 8.2 List = New ValueList; /// Πώς να προσθέσετε ένα στοιχείο στη λίστα τιμών σε 1s 8.3, 8.2 // προσθήκη παραμέτρων μεθόδου:// - έννοια // - απόδοση // - σημάδι (απαιτείται) // - εικόνα (απαιτείται)Λίστα. Προσθήκη (1980, // τιμή στοιχείου "Το έτος γέννησης της Βάσια"// απόδοση ) ; Λίστα. Προσθήκη(1985, "Το έτος γέννησης της Γιούλια") ; // οι τιμές μπορεί να είναι διαφορετικών τύπωνΛίστα. Add("Polina" , "Child's name" ); /// Πώς να εισαγάγετε ένα στοιχείο σε μια λίστα τιμών σε 1s 8.3, 8.2 // εισαγωγή στη θέση Νο. 2 (τα στοιχεία αριθμούνται ξεκινώντας από το 0) // στοιχείο με τιμή 2010 και αναπαράσταση // "Η χρονιά που γεννήθηκε η κοινή τους κόρη"Λίστα. Insert(2, 2010, «Η χρονιά που γεννήθηκε η κοινή τους κόρη») ; /// Πώς να παρακάμψετε στοιχεία της λίστας τιμών σε 1s 8.3, 8.2Για κάθε στοιχείο από αναφορά βρόχου λίστας( Στοιχείο. Αναπαράσταση + ": " + Συμβολοσειρά(Στοιχείο. Τιμή) ) ; EndCycle ; /// Πώς να διαγράψετε τη λίστα τιμών σε 1s 8.3, 8.2Λίστα. Σαφή() ; Λίστα. Προσθήκη ("Δευτέρα"); Λίστα. Add("Τρίτη"); Λίστα. Add("Τετάρτη" ​​); /// Πώς να μάθετε τον αριθμό των στοιχείων μιας λίστας τιμών, καθώς και /// λάβετε ένα στοιχείο λίστας με βάση το ευρετήριό του σε 1s 8.3, 8.2 // αρίθμηση από την αρχήΓια Ευρετήριο = 0 Κατά Λίστα. Quantity() - 1 Cycle Report(List[Index]) ; EndCycle ; /// Πώς να βρείτε ένα στοιχείο λίστας με βάση την τιμή του σε 1s 8.3, 8.2 ValueTuesday = Λίστα. FindByValue("Τρίτη"); /// Πώς να μάθετε το ευρετήριο ενός στοιχείου σε μια λίστα σε 1s 8.3, 8.2Αναφορά(List.Index(ValueTuesday)) ; // 1, αφού η αρίθμηση ξεκινά από το μηδέν /// Πώς να ταξινομήσετε μια λίστα με τις τιμές της σε 1s 8.3, 8.2 // ήταν: Δευτέρα, Τρίτη, ΤετάρτηΛίστα. SortByValue(SortDirection.Descending) ; // έγινε: Τετάρτη, Δευτέρα, Τρίτη /// Πώς να αφαιρέσετε ένα στοιχείο από μια λίστα τιμών σε 1s 8.3, 8.2 // αφαιρέστε το πρώτο στοιχείο // παράμετρος: στοιχείο λίστας // ή ευρετήριο στοιχείου// μπορείτε να κάνετε αυτήν τη λίστα. Διαγραφή(Λίστα[ 0 ]) ; // ή έτσι // List.Delete(0); /// Πώς να μετατοπίσετε ένα στοιχείο μιας λίστας τιμών σε 1s 8.3, 8.2 // μετακινήστε το μηδενικό στοιχείο προς τα εμπρός μία θέση // ήταν: Δευτέρα ΤρίτηΛίστα. Μετακίνηση (0, 1); // έγινε: Τρίτη Δευτέρα /// Πώς να δημιουργήσετε ένα αντίγραφο μιας λίστας σε 1s 8 ListCopy = Λίστα. Αντίγραφο() ; Χρώματα = NewValueList; Χρωματιστά. Add("Κόκκινο" ); Χρωματιστά. Προσθήκη("Πράσινο") ; Χρωματιστά. Add("Μπλε" ); /// Πώς να ανεβάσετε τιμές λίστας σε έναν πίνακα σε 1s 8.3, 8.2 ArrayColors = Χρώματα. UnloadValues() ; /// Πώς να φορτώσετε τιμές λίστας από έναν πίνακα σε 1s 8.3, 8.2Χρωματιστά. LoadValues(ArrayColors) ; Τέλος Διαδικασίας /// Πώς να κάνετε μια επιλογή χωρίς τρόπο λειτουργίας μιας τιμής από μια λίστα /// τιμές σε 1s 8.3, 8.2&Στη διαδικασία πελάτη Τρόπος δημιουργίας ενός Non-ModalValueSelection(Command) Colors = New ValueList; Χρωματιστά. Add("Κόκκινο" ); Χρωματιστά. Προσθήκη("Πράσινο") ; Χρωματιστά. Add("Μπλε" ); // διαδικασία AfterSelectingElement ορίζεται ακριβώς παρακάτω AlertAfterElementSelection = New DescriptionAlerts( "AfterElementSelection", ThisObject ) ; Χρωματιστά. ShowElementSelection( NotificationAfterElementSelection, "Διαλέξτε το αγαπημένο σας χρώμα") ; Τέλος διαδικασίας &Σε διαδικασία πελάτη μετά την επιλογή στοιχείου (στοιχείο, παράμετροι) Εξαγωγή εάν στοιχείο<>Undefined then Report(Element.Value) ; Τέλος εαν ; Τέλος Διαδικασίας /// Πώς να κάνετε μια σήμανση τιμών χωρίς τρόπο από μια λίστα /// τιμές σε 1s 8.3, 8.2&Στη διαδικασία πελάτη Τρόπος δημιουργίας μη τροπικής σήμανσης τιμών (εντολή) Χρώματα = Νέα λίστα τιμών. Χρωματιστά. Add("Κόκκινο" ); Χρωματιστά. Προσθήκη("Πράσινο") ; Χρωματιστά. Add("Μπλε" ); // διαδικασία AfterMarkingElements ορίζεται ακριβώς παρακάτω AlertAfterMarkingItems = New DescriptionAlerts( "AfterMarking Items", ThisObject ) ; Χρωματιστά. ShowTagItems( AlertAfterTagItems, "Επιλέξτε τα αγαπημένα σας χρώματα") ; Χρωματιστά. FillNotes(True) ; Τέλος διαδικασίας &Σε διαδικασία πελάτη μετά τη σήμανση στοιχείων (στοιχεία, παράμετροι) Εξαγωγή εάν στοιχεία<>Undefined then For Every Color From Elements Cycle If Color. Σημειώστε στη συνέχεια αναφορά (Color.Value) ; Τέλος εαν ; EndCycle ; Τέλος εαν ; Τέλος Διαδικασίας /// Πώς να κάνετε μια τροπική επιλογή μιας τιμής από μια λίστα σε 1s 8.3, 8.2&Στη διαδικασία πελάτη Τρόπος δημιουργίας ModalValueSelection(Command) Colors = New ValueList; Χρωματιστά. Add("Κόκκινο" ); Χρωματιστά. Προσθήκη("Πράσινο") ; Χρωματιστά. Add("Μπλε" ); Επιλέξτε Χρώμα = Χρώματα. Επιλέξτε αντικείμενο( "Διαλέξτε το αγαπημένο σας χρώμα") ; Εάν Επιλέξτε Χρώμα<>Undefined then Report(SelectColor.Value) ; Τέλος εαν ; Τέλος Διαδικασίας /// Τρόπος επισήμανσης τιμών από μια λίστα /// τιμές σε 1s 8.3, 8.2&Στη διαδικασία πελάτη Τρόπος δημιουργίας ενός τροπικού σήματος τιμών (εντολή) Χρώματα = Νέα λίστα τιμών. Χρωματιστά. Add("Κόκκινο" ); Χρωματιστά. Προσθήκη("Πράσινο") ; Χρωματιστά. Add("Μπλε" ); Αν Χρώματα. MarkItems( "Επιλέξτε τα αγαπημένα σας χρώματα") Στη συνέχεια για κάθε χρώμα από τον κύκλο χρωμάτων εάν χρώμα. Σημειώστε στη συνέχεια αναφορά (Color.Value) ; Τέλος εαν ; EndCycle ; Τέλος εαν ; // Έτσι μπορείτε να ορίσετε όλα τα σημάδια ταυτόχρονα // λίστα σε μια συγκεκριμένη τιμήΧρωματιστά. FillNotes(True) ; Τέλος Διαδικασίας /// Κάντε λήψη και εκτέλεση αυτών των παραδειγμάτων στον υπολογιστή σας

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

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

// δημιούργησε μια λίστα τιμών

List.Add(23);

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

// βρόχος σε κάθε στοιχείο της λίστας For Every Element From List Loop Report(Element.Value);

// εμφάνιση της τιμής του στοιχείου EndCycle.

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

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

Μπορεί να ταξινομήσει

Για παράδειγμα, μπορούμε εύκολα να ταξινομήσουμε μια λίστα τιμών. Η λίστα μπορεί να το κάνει από μόνη της:

List.SortByValue(SortDirection.Age); Στην περίπτωση ενός κανονικού πίνακα, θα έπρεπε να εφαρμόσουμε έναν από τους αλγόριθμους ταξινόμησης (για παράδειγμα, "φούσκα").

Μπορεί να αναζητήσει

Η λίστα των τιμών μπορεί να αναζητήσει τα στοιχεία της από μόνη της. Ας υποθέσουμε ότι θέλουμε να μάθουμε εάν ένας αριθμός που έχει εισαχθεί από τον χρήστη υπάρχει στη λίστα μας:

EnterNumber(Number); // εισήγαγε έναν αριθμό από τον χρήστη FoundElement = List. FindByValue(Αριθμός);

If FoundItem = Undefined Τότε OpenValue("Number" + Number + "δεν βρέθηκε στη λίστα!"); Σε διαφορετική περίπτωση

OpenValue("Number " + Number + " βρίσκεται στη λίστα. Εδώ είναι:" + FoundElement.Value);

τέλος εαν; ListValues

Υποστηρίζει εισαγωγή και διαγραφή

Μια λίστα τιμών, όπως ένας πίνακας, υποστηρίζει την εισαγωγή και αφαίρεση στοιχείων:

Λίστα. Insert(0, 1000);

// εισάγετε χίλια στην αρχή της λίστας List.Delete(O); // και αφαιρέστε το αμέσως από τη λίστα Λίστα. Insert(List.Quantity(), 13);

// εισαγάγετε το 13 στο τέλος της λίστας Report(List[List.Quantity() - 1]);

// εμφάνιση του τελευταίου στοιχείου της λίστας (13)

Υποστηρίζει αγκύλες

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

Αναφορά(List.Value); // εμφάνιση του δεύτερου στοιχείου της λίστας Έτσι, μπορούμε να εξετάσουμε όλα τα στοιχεία της λίστας ως εξής:

Για A = 0 Κατά List.Quantity() - 1 Αναφορά βρόχου(List[A].Value);

EndCycle;

Μπορεί να δημιουργήσει ένα αντίγραφο του εαυτού του

Η λίστα των τιμών έχει απλώς ένα εξαιρετικό χαρακτηριστικό - μπορεί να δημιουργήσει ένα αντίγραφο του εαυτού της:

ListCopy = List.Copy();

// έκανε ένα αντίγραφο της λίστας // τώρα μπορούμε να αλλάξουμε με ασφάλεια το αντίγραφο της λίστας // ενώ η αρχική λίστα δεν θα αλλάξει το αντίγραφο της λίστας. Τιμή = 123456;

Μπορεί να μετατραπεί σε πίνακα

Και τέλος, μπορείτε εύκολα να αποθέσετε όλα τα στοιχεία της λίστας σε έναν πίνακα ανά πάσα στιγμή:

ArrayNumbers = Λίστα. UnloadValues();

// απορρίφθηκε σε έναν πίνακα

Για A = 0 By ArrayNumber.Quantity() - 1 Cycle

Αναφορά(ArrayNumbers[A]); // δεν χρειάζεται να ορίσετε την επιλογή // Τιμή

EndCycle;

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

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

Λύση

List = New ValueList;

// δημιούργησε μια λίστα τιμών Για A = 1 Μέσα από 5 Αριθμός Κύκλου = 0;

EnterNumber(Number); // εισάγετε έναν αριθμό από τη Λίστα χρηστών. Προσθήκη(Αριθμός); // και προσθέστε το στη λίστα EndCycle. // και ούτω καθεξής 5 φορές

// ταξινόμηση της λίστας αριθμών

Λίστα. Ταξινόμηση κατά τιμή (SortDirection.Age);

// μετά την ταξινόμηση, το πρώτο στοιχείο της λίστας είναι // το μικρότερο στοιχείο και το τελευταίο είναι το μεγαλύτερο OpenValue("Smallest element" + List +

", και το μεγαλύτερο " + List[List.Quantity() - 1]);




Μπλουζα