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

Δημοσιεύθηκε στις 21 Σεπτεμβρίου 2011

Πίνακας τιμών 1C – μέρος 3. Μεταδεδομένα. Γίνεται βρόχος στις στήλες του πίνακα τιμών

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

Για να εξηγήσουμε το υλικό και για να μπορέσουμε να εκτελέσουμε τα παραδείγματα κώδικα μας «ζωντανά», χρειαζόμαστε μερικά πίνακας δοκιμών τιμών 1C. Μερικά από τα παραδείγματά μας θα εξαγάγουν δεδομένα από έναν πίνακα τιμών, επομένως θα φτιάξουμε έναν πίνακα με τρεις στήλες "Επώνυμο", "Όνομα", "Μεσαίο όνομα" και θα εισαγάγουμε μια μικρή ποσότητα δεδομένων σε αυτόν - έως και 3 σειρές :)

Λοιπόν, ας δημιουργήσουμε έναν πίνακα δοκιμών με τιμές 1C και ας τον συμπληρώσουμε:

MyTZ = New ValueTable; // δημιουργήστε έναν νέο πίνακα τιμών που είναι αποθηκευμένος στη μεταβλητή "MyTZ" MyTZ.Columns.Add("Επώνυμο"); // δημιουργήστε τη στήλη "Επώνυμο" MyTZ.Columns.Add("Όνομα"); // δημιουργήστε τη στήλη "Όνομα" MyTZ.Columns.Add("Πατρώνυμο"); // δημιουργήστε τη στήλη "Μεσαίο όνομα" // προσθέστε την πρώτη σειρά στον πίνακα τιμών μας NewLine = MyTZ.Add(); NewString.LastName = "Chapaev"; NewLine.Name = "Βασίλι"; NewString.Μεσαίο όνομα = "Ivanovich"; // προσθέστε τη δεύτερη γραμμή NewLine = MyTZ.Add(); NewString.LastName = "Dzerzhinsky"; NewRow.Name = "Felix"; NewString.Μεσαίο όνομα = "Edmundovich"; // προσθέστε την τρίτη γραμμή NewLine = MyTZ.Add(); NewLine.LastName = "Kotovsky"; NewLine.Name = "Γρηγόριος"; NewString.Μεσαίο όνομα = "Ivanovich";

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

Το πρώτο δείγμα κώδικα απαριθμεί τις στήλες ενός πίνακα τιμών 1C ως συλλογή.

// εμφάνιση των ονομάτων όλων των στηλών του TK For Every Column From MyTZ.Columns Cycle Report("Column name: " + Column.Name); EndCycle;

Ο κύκλος μας θα εμφανίσει όλα τα ονόματα στηλών στο παράθυρο μηνύματος 1C:

Όνομα στήλης: Επώνυμο Όνομα στήλης: Όνομα Όνομα στήλης: Μέσο όνομα

Βλέπουμε ότι για την επανάληψη μέσω στηλών, χρησιμοποιείται ένας ειδικός κύκλος επανάληψης συλλογής, παρόμοιος με τον κύκλο επανάληψης σειράς (στο προηγούμενο άρθρο). MyTZ.Στήλες- αυτή είναι μια συλλογή στηλών του πίνακα τιμών 1C "MyTZ". Η συλλογή περιέχει αντικείμενα του τύπου "Στήλη πίνακα τιμών"Κάθε αντικείμενο αυτού του τύπου είναι μια στήλη του πίνακα τιμών και περιέχει ιδιότητες και μεθόδους. Με την πρόσβαση σε αυτές τις ιδιότητες και μεθόδους, λαμβάνουμε τις απαραίτητες πληροφορίες για μια στήλη ή εκτελούμε κάποιες άλλες ενέργειες με αυτήν.

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

Θα ήθελα να επιστήσω την προσοχή σας στον τίτλο της σειράς: «Για όλους ΣτήληΑπό MyTZ.Column Cycle" Μεταβλητή με όνομα "Στήλη"εφευρέθηκε από εμάς. Δεν είναι απαραίτητο να χρησιμοποιήσετε το ίδιο όνομα. Μπορείτε να ονομάσετε αυτήν τη μεταβλητή ό,τι θέλετε, για παράδειγμα "MyCurrentColumn"Τότε το παραπάνω παράδειγμα θα μοιάζει με αυτό:

// εμφάνιση των ονομάτων όλων των στηλών του TK For Every MyCurrentColumn From MyTK.Columns Cycle Report("Column name: " + MyCurrentColumn.Name); EndCycle;

Όταν το υποσύστημα εκτέλεσης 1C συναντά έναν κύκλο αυτού του τύπου, με κάθε πέρασμα του κύκλου εκχωρεί σε μια μεταβλητή με το καθορισμένο όνομα ένα στοιχείο από τη συλλογή μας, σε αυτήν την περίπτωση - ένα στοιχείο συλλογήςστήλες πίνακα τιμών MyTZ.ΣτήλεςΣτη συνέχεια, έχουμε πρόσβαση στη μεταβλητή που περιέχει την τρέχουσα στήλη και χρησιμοποιούμε την ιδιότητα "Ονομα".

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

// εμφάνιση του αριθμού και των ονομάτων όλων των στηλών του πίνακα τιμών For Every Column From MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // λάβετε τον αριθμό της στήλης ColumnName = Column.Name; // λάβετε το όνομα της στήλης Report("Αριθμός στήλης:" + Αριθμός στήλης + " Όνομα στήλης: " + Όνομα στήλης); EndCycle;

Το ακόλουθο κείμενο θα εμφανιστεί στο παράθυρο μηνύματος 1C:

Αριθμός στήλης:0 Όνομα στήλης: Επώνυμο Αριθμός στήλης: 1 Όνομα στήλης: Όνομα Αριθμός στήλης: 2 Όνομα στήλης: Μέσο όνομα

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

Αριθμός στηλών στον πίνακα τιμών 1C

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

Αριθμός στηλών = MyTZ.Columns.Quantity(); Αναφορά (Αριθμός στηλών);

Ο αριθμός "3" θα εμφανιστεί στην οθόνη. Πράγματι, ο πίνακας μας έχει τρεις στήλες: "Επώνυμο", "Όνομα", "Πατρώνυμο"

Λήψη αντικειμένου στήλης με τον αριθμό του (ευρετήριο) και απαρίθμηση στηλών χρησιμοποιώντας το ευρετήριο στήλης

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

Για λογαριασμό = 0 By MyTZ.Columns.Quantity() - 1 Cycle CurrentColumn = MyTZ.Columns[Act]; Αναφορά(ΤρέχουσαΣτήλη.Όνομα); EndCycle;

Στην οθόνη θα λάβουμε τα εξής

Πλήρες όνομα

Νομίζω ότι αυτό το παράδειγμα ήταν ξεκάθαρο. Στραφήκαμε στη μέθοδο Ποσότητα()συλλογές στηλών" MyTZ.Columns.Quantity()", πήρε τον αριθμό των στηλών και ξεκίνησε έναν βρόχο με έναν μετρητή από μηδένπριν αριθμός στηλών μείον μία. Μέσα στον βρόχο παίρνουμε κάθε στήλη από τη συλλογή στηλών και εκχωρούμε το τρέχον αντικείμενο στήλης σε μια μεταβλητή Τρέχουσα ΣτήληΣτη συνέχεια, η μεταβλητή Τρέχουσα Στήληέχουμε πρόσβαση στο ακίνητο Ονομακαι εμφανίστε την τιμή αυτής της ιδιότητας στην οθόνη: Αναφορά(ΤρέχουσαΣτήλη.Όνομα);

Είναι σημαντικό να μην συγχέετε ποτέ την ιδιότητα ενός αντικειμένου και τη μέθοδο ενός αντικειμένου.

Μια ιδιότητα είναι μια συγκεκριμένη στατική τιμή και η πρόσβαση σε αυτήν γράφεται χωρίς παρενθέσεις, για παράδειγμα ΤρέχουσαΣτήλη.Όνομα. Μια μέθοδος είναι ουσιαστικά μια διαδικασία ή συνάρτηση ενός αντικειμένου και οι κλήσεις σε διαδικασίες και συναρτήσεις γράφονται πάντα με παρενθέσεις (ακόμα και αν δεν υπάρχουν παράμετροι εισόδου). Για παράδειγμα: MyTZ.Columns.Quantity()

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

Αυτό θα γράψει ο διερμηνέας αν ξεχάσω να βάλω παρενθέσεις σε μια κλήση μεθόδου με τόσο λανθασμένο τρόπο MyTZ.Στήλες.Ποσότητα(χωρίς παρένθεση μετά το "Quantity()"):

Το πεδίο αντικειμένου δεν βρέθηκε (Ποσότητα)

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

Λήψη δεδομένων από έναν πίνακα τιμών 1C χρησιμοποιώντας αριθμούς στηλών

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

FirstLine = MyTK; // πάρτε την πρώτη σειρά (αριθμημένη από το μηδέν) FirstColumnValue = FirstRow; // λάβετε την τιμή της πρώτης στήλης (η αρίθμηση στηλών είναι επίσης από την αρχή) Report(Value of the FirstColumn); // εμφανίζει την τιμή της πρώτης στήλης στην πρώτη σειρά του πίνακα

Η οθόνη θα εμφανίσει:

Τσαπάεφ

Πρώτον, αποκτήσαμε ένα αντικείμενο γραμμής πίνακα τιμών με πρόσβαση στον πίνακα τιμών χρησιμοποιώντας τον τελεστή [...]. (αν ξεχάσατε πώς να το κάνετε αυτό, μπορείτε να δείτε προηγούμενα άρθρα) Περάσαμε το όρισμα "0" μέσα στον τελεστή. Αυτός είναι ο δείκτης της πρώτης σειράς του πίνακα τιμών. FirstLine = MyTK;

Επιπλέον, έχουμε επίσης το δικαίωμα πρόσβασης σε ένα αντικείμενο συμβολοσειράς χρησιμοποιώντας τον τελεστή [...]. Μέσα σε αυτόν τον τελεστή περάσαμε τον αριθμό στήλης του πίνακα τιμών, σε αυτήν την περίπτωση και το "0". Και έτσι, λάβαμε την τιμή της στήλης με αριθμό "0" για την τρέχουσα σειρά πίνακα με αριθμό "0". Εμφανίσαμε αυτήν την τιμή στην οθόνη και αντιπροσωπεύει τη συμβολοσειρά "Chapaev".

Ας περιπλέκουμε λίγο το παράδειγμά μας:

FirstLine = MyTK; // λάβετε την πρώτη γραμμή (αριθμημένη από το μηδέν) Αναφορά (FirstLine); // εμφανίζει την τιμή της πρώτης στήλης στην πρώτη σειρά του πίνακα Report(FirstRow); // εμφάνιση της τιμής της δεύτερης στήλης στην πρώτη σειρά του πίνακα Report(FirstRow); // εμφανίζει την τιμή της τρίτης στήλης στην πρώτη σειρά του πίνακα

Εμφανίσαμε τώρα τις τιμές και από τις τρεις στήλες της πρώτης γραμμής του πίνακα τιμών μας:

Τσαπάεφ Βασίλι Ιβάνοβιτς

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

Αναφορά (MyTZ); // εμφανίζει την τιμή της πρώτης στήλης στην πρώτη σειρά του πίνακα Report(MyTZ); // εμφανίζει την τιμή της δεύτερης στήλης στην πρώτη σειρά του πίνακα Report(MyTZ); // εμφανίζει την τιμή της τρίτης στήλης στην πρώτη σειρά του πίνακα

Το ίδιο θα είναι και στην οθόνη

Τσαπάεφ Βασίλι Ιβάνοβιτς

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

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

Για RowCounter = 0 By MyTZ.Quantity() - 1 Loop // κύκλος μέσω σειρών Για ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 βρόχος // ένθετος βρόχος μέσω στηλών // λάβετε την τιμή του κελιού (από την τρέχουσα σειρά και οι τρέχουσες στήλες) CellValue = MyTK[RowCounter][ColumnCounter]; // εμφάνιση του αριθμού σειράς, του αριθμού στήλης και της τιμής του κελιού Αναφορά ("Αριθμός γραμμής" + Αρίθμηση γραμμών + "Αριθμός στήλης" + Πλήθος στηλών + " = " + Τιμή κελιού); EndCycle; EndCycle;

Στην οθόνη θα εμφανιστούν τα ακόλουθα:

Γραμμή Αρ. 0 στήλη Νο. 0 = Chapaev Γραμμή Αρ. 0 στήλη Νο. 1 = Βασίλι Γραμμή Αρ. 0 στήλη Νο. 2 = Γραμμή Νο. 1 στήλη Ιβάνοβιτς Νο. 0 στήλη Νο. Γραμμή Ντζερζίνσκι Νο. 1 στήλη = Φέλιξ Γραμμή Νο. 1 στήλη Νο. 2 = Edmundovich Γραμμή Νο. 2 στήλη Νο. 0 = Kotovsky Γραμμή Νο. 2 στήλη Νο. 1 = Γκριγκόρι Γραμμή Νο. 2 στήλη Νο. 2 = Ιβάνοβιτς

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

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

Για LineCounter = 0 By MyTZ.Quantity() - 1 Loop // Loop through rows Report(" ======= Αριθμός γραμμής " + LineCounter + " ======="); Να αναφέρουν(" "); // τροφοδοσία γραμμής (εισαγωγή κενής γραμμής) Για ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 βρόχος // ένθετος βρόχος μέσω στηλών // λάβετε την τιμή του κελιού (από την τρέχουσα σειρά και την τρέχουσα στήλη) CellValue = MyTZ [RowCounter][ ColumnCounter]; // πάρτε το όνομα της στήλης ColumnName = MyTZ.Columns[ColumnCounter].Name; // εμφάνιση του ονόματος της στήλης και της τιμής του κελιού Report(ColumnName + ": " + CellValue); EndCycle; Να αναφέρουν(" "); // τροφοδοσία γραμμής (εισαγωγή κενής γραμμής) EndCycle;

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

Γραμμή Αρ. 0 ======= Επώνυμο: Chapaev Όνομα: Vasily Πατρώνυμο: Ivanovich ======= Γραμμή Αρ. 1 ======= Επώνυμο: Dzerzhinsky Όνομα: Felix Πατρώνυμο: Edmundovich ===== == Γραμμή αρ. 2 ======= Επώνυμο: Kotovsky Όνομα: Grigory Πατρώνυμο: Ivanovich

Ναι, παραλίγο να το ξεχάσω. Όταν χρησιμοποιούμε δύο [...][...] τελεστές στη σειρά, μπορούμε να περάσουμε το όνομα αυτής της στήλης αντί για ένα ευρετήριο στήλης: ValueTable[RowIndex][ColumnName]

Για LineCounter = 0 By MyTZ.Quantity() - 1 Loop // Loop through rows Report(" ======= Αριθμός γραμμής " + LineCounter + " ======="); Να αναφέρουν(" "); // τροφοδοσία γραμμής (εισαγωγή κενής γραμμής) Για ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 βρόχος // ένθετος βρόχος μέσω στηλών ColumnName = MyTZ.Columns[ColumnCounter].Name; // λάβετε τη στήλη nameCell Value = MyTZ[RowCounter][ColumnName]; //

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

Και τώρα, το τελευταίο πράγμα σε αυτό το άρθρο.

ΣΩΣΤΗ λήψη όλων των δεδομένων από τον πίνακα τιμών 1C χρησιμοποιώντας βρόχους μέσω μιας συλλογής σειρών και μιας συλλογής στηλών

Για κάθε CurrentLine From MyTZ Loop // loop through a collection of strings Report(" ======= Αριθμός γραμμής. " + MyTZ.Index(CurrentLine) + " ======="); Να αναφέρουν(" "); Για κάθε CurrentColumn From MyTZ.Columns Loop // ένθετος βρόχος που επαναλαμβάνεται μέσω μιας συλλογής στηλών ColumnName = CurrentColumn.Name; // λάβετε τη στήλη nameCellValue = CurrentRow[ColumnName]; // λάβετε την τιμή του κελιού BY στήλη NAME Report(ColumnName + ": " + CellValue); // εμφανίζει το όνομα της στήλης και την τιμή του κελιού Τέλος κύκλου. Να αναφέρουν(" "); EndCycle;

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

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

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

Για κάθε CurrentLine From MyTZ Cycle // iterate over rows Report(" ======= Αριθμός γραμμής. " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS); Για κάθε CurrentColumn From MyTZ.Columns Βρόχος // επανάληψη σε στήλες Αναφορά(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); EndCycle; Να αναφέρουν(" "); EndCycle;

Η έξοδος στην οθόνη δεν έχει αλλάξει, παραμένει η ίδια όπως στο προηγούμενο παράδειγμα:

ΜΑΘΗΜΑ 2 ΕΒΔΟΜΑΔΩΝ

"ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ 1C ΓΙΑ ΑΡΧΑΡΙΟΥΣ"

Το μάθημα θα σταλεί με email. Γίνετε προγραμματιστής ολοκληρώνοντας εργασίες βήμα προς βήμα.

Για να συμμετάσχετε χρειάζεστε μόνο υπολογιστή και Internet

Δωρεάν πρόσβαση στο μάθημα:

Sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; padding: 5px; πλάτος: 270px; max-width: 100%; border-radius: 0px; -moz-border -ακτίνα: 0 px; -webkit-border-radius: 0px; γραμματοσειρά-οικογένεια: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;) Είσοδος .sp-form ( οθόνη: inline-block; αδιαφάνεια: 1; ορατότητα: ορατή;).sp-form .sp-form-fields-wrapper ( περιθώριο: 0 αυτόματο; πλάτος: 260 px;).sp-form .sp -form-control ( φόντο: #ffffff; χρώμα περιγράμματος: #cccccc; στυλ περιγράμματος: συμπαγές; πλάτος περιγράμματος: 1 px; μέγεθος γραμματοσειράς: 15 px; padding-left: 8,75 px; padding-right: 8,75 px; περίγραμμα -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; height: 35px;πλάτος: 100%;).sp-form .sp-field label ( χρώμα: #444444; γραμματοσειρά- μέγεθος: 13 px, στυλ γραμματοσειράς: κανονικό, βάρος γραμματοσειράς: έντονη γραφή;).sp-form .sp-button ( περίγραμμα-ακτίνα: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; χρώμα φόντου: #f4394c; χρώμα: #ffffff; πλάτος: 100%, βάρος γραμματοσειράς: 700; στυλ γραμματοσειράς: κανονικό; γραμματοσειρά-οικογένεια: Arial, "Helvetica Neue", sans-serif; κουτί-σκιά: κανένας; -moz-box-shadow: κανένας; -webkit-box-shadow: κανένας; φόντο: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container (στοίχιση κειμένου: κέντρο; πλάτος: αυτόματη;)

(Αυτό το άρθρο ανήκει στη σειρά άρθρων 1C από την αρχή, προγραμματισμός 1C από την αρχή, πίνακας τιμών 1C)

Μια εικονική δομή αποθήκευσης δεδομένων σε μορφή πίνακα - αυτό είναι

Ο πίνακας τιμών δεν είναι μόνιμο αντικείμενο της βάσης δεδομένων 1C και δεν αποθηκεύεται μεταξύ των περιόδων εκκίνησης.

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

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

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

NewValueTable;

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

Επιτρέψτε μου να σας δώσω ένα απλό παράδειγμα αμέσως.

// MyTZ = New ValueTable; // δημιουργήστε έναν νέο πίνακα τιμών που είναι αποθηκευμένος στη μεταβλητή "MyTZ" MyTK. Στήλες. Add("LastName" ); // δημιουργήστε τη στήλη "Επώνυμο" MyTK. Στήλες. Add("Όνομα"); // δημιουργήστε τη στήλη "Όνομα".Αναφορά (MyTZ); // εμφανίζει την τιμή της μεταβλητής MyTZ //

Δημιούργησα έναν πίνακα με τιμές 1C, με δύο στήλες: "Επώνυμο", "Όνομα". Διαδικασία Αναφορά (MyTK)θα εμφανίσει τον τύπο μεταβλητής στο παράθυρο μηνύματος MyTZ: Πίνακας Αξιών

Ο πίνακας τιμών μας είναι κενός προς το παρόν. Ας προσθέσουμε δύο γραμμές σε αυτό, με όνομα και επίθετο.

// συμπληρώστε τον πίνακα τιμών // προσθέστε την πρώτη γραμμή στον πίνακα τιμών μας NewLine = MyTZ. Προσθήκη() ; Νέα γραμμή. Επώνυμο = "Sidorov" ; Νέα γραμμή. Όνομα = "Vasya" ; // προσθέστε μια δεύτερη σειρά στον πίνακα τιμών μας NewLine = MyTZ. Προσθήκη() ; Νέα γραμμή. Επώνυμο = "Ivanov" ; Νέα γραμμή. Όνομα = "Πέτρος" ;

Λάβαμε έναν πίνακα σαν αυτό:

Πρέπει να θυμάστε: Οι αριθμοί σειρών στον πίνακα τιμών ξεκινούν από το μηδέν

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

// *** εμφανίζει τις τιμές της μηδενικής γραμμής στην οθόνη *** (στην καθημερινή ζωή συνήθως αριθμούμε τα πράγματα ξεκινώντας από το ένα, αλλά εδώ - από το μηδέν) // πάρτε τη μηδενική γραμμή του πίνακα μας χρησιμοποιώντας το δείκτη γραμμής σε αγκύλες OurNullString = MyTZ[ 0] ; // τώρα ολόκληρη η συμβολοσειρά μηδέν περιέχεται στη μεταβλητή "OurFirstLine"Αναφορά(OurNullString.LastName) ; // εμφανίζει την τιμή της στήλης "Επώνυμο" που είναι αποθηκευμένη στη γραμμή μηδένΑναφορά (OurNullString.Name) ; // εμφανίζει την τιμή της στήλης "Όνομα" από την ίδια γραμμή

Ως αποτέλεσμα, η οθόνη θα εμφανίσει:

Σιντόροφ Βάσια

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

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

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

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

// // πραγματοποιήστε βρόχο και εμφανίστε όλες τις σειρές του πίνακα τιμών μας// Για LineNumber = 0 Σύμφωνα με το MyTZ. Quantity() - Αναφορά 1 κύκλου (MyTZ[LineNumber] . LastName) ; // εμφανίζει την τιμή της στήλης "Επώνυμο".Αναφορά (MyTK[LineNumber] . Όνομα) ; // εμφανίζει την τιμή της στήλης "Όνομα". EndCycle ;

Ως αποτέλεσμα της εκτέλεσης αυτού του βρόχου, θα εμφανιστούν τα ακόλουθα στην οθόνη:

Sidorov Vasya Ivanov Petya

Εδώ σας είπα τα πολύ βασικά της εργασίας με τον πίνακα τιμών 1C. Αυτές οι πληροφορίες ισχύουν για τα 1C 8.0, 8.1, 8.2. Οι ενδιαφέρουσες λεπτομέρειες σχετικά με το αντικείμενο "πίνακας τιμών 1C" δεν τελειώνουν εκεί. Αυτό το αντικείμενο έχει τεράστιες δυνατότητες για εύκολη εργασία με δεδομένα. Θα μιλήσω για αυτό στα επόμενα άρθρα.

Degtyarev Roman.

Πώς να μάθετε να προγραμματίζετε σε 1C από την αρχή;

Πώς να εργαστείτε ως προγραμματιστής 1C και να κερδίσετε έως και 150.000 ρούβλια το μήνα;

ΕΓΓΡΑΦΕΙΤΕ ΔΩΡΕΑΝ

ΜΑΘΗΜΑ 2 ΕΒΔΟΜΑΔΩΝ

"ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ 1C ΓΙΑ ΑΡΧΑΡΙΟΥΣ"

Το μάθημα θα σταλεί με email. Γίνετε προγραμματιστής ολοκληρώνοντας εργασίες βήμα προς βήμα.

Για να συμμετάσχετε χρειάζεστε μόνο υπολογιστή και Internet

Δωρεάν πρόσβαση στο μάθημα:

Sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; padding: 5px; πλάτος: 270px; max-width: 100%; border-radius: 0px; -moz-border -ακτίνα: 0 px; -webkit-border-radius: 0px; γραμματοσειρά-οικογένεια: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;) Είσοδος .sp-form ( οθόνη: inline-block; αδιαφάνεια: 1; ορατότητα: ορατή;).sp-form .sp-form-fields-wrapper ( περιθώριο: 0 αυτόματο; πλάτος: 260 px;).sp-form .sp -form-control ( φόντο: #ffffff; χρώμα περιγράμματος: #cccccc; στυλ περιγράμματος: συμπαγές; πλάτος περιγράμματος: 1 px; μέγεθος γραμματοσειράς: 15 px; padding-left: 8,75 px; padding-right: 8,75 px; περίγραμμα -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; height: 35px;πλάτος: 100%;).sp-form .sp-field label ( χρώμα: #444444; γραμματοσειρά- μέγεθος: 13 px, στυλ γραμματοσειράς: κανονικό, βάρος γραμματοσειράς: έντονη γραφή;).sp-form .sp-button ( περίγραμμα-ακτίνα: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; χρώμα φόντου: #f4394c; χρώμα: #ffffff; πλάτος: 100%, βάρος γραμματοσειράς: 700; στυλ γραμματοσειράς: κανονικό; γραμματοσειρά-οικογένεια: Arial, "Helvetica Neue", sans-serif; κουτί-σκιά: κανένας; -moz-box-shadow: κανένας; -webkit-box-shadow: κανένας; φόντο: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container (στοίχιση κειμένου: κέντρο; πλάτος: αυτόματη;)

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

Χαρακτηριστικά της εργασίας.

Όποιος έχει προγραμματίσει σε μια κανονική εφαρμογή έχει συχνά αντιμετωπιστεί με το καθήκον να αποκτήσει έναν αυθαίρετο πίνακα τιμών σε μια φόρμα. Ένας αυθαίρετος πίνακας τιμών είναι ένας πίνακας του οποίου ο αριθμός και ο τύπος στηλών δεν είναι γνωστοί εκ των προτέρων. Δηλαδή, θα μπορούσαν να υπάρχουν 3 στήλες ή ίσως 6 ή ίσως 8. Σε μια κανονική εφαρμογή, όλα είναι απλά: θα μπορούσατε να τοποθετήσετε το στοιχείο "Πίνακας τιμών" στη φόρμα επεξεργασίας και στη συνέχεια να μεταφέρετε τον δημιουργημένο πίνακα τιμών ​σε αυτό το στοιχείο μέσω προγραμματισμού. Στη συνέχεια με μια απλή εντολή:

Form Elements.TableField.CreateColumns();

λάβετε έναν έτοιμο πίνακα τιμών στη φόρμα. Φαίνεται ότι θα μπορούσε να είναι πιο απλό.

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

Η λύση του προβλήματος.

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

Η δημιουργία ενός πίνακα στη φόρμα πραγματοποιείται μέσω της περιγραφής του πίνακα τιμών ως χαρακτηριστικό:
SelectionTypeArray = Νέος πίνακας; Πίνακας SelectionType.Add(Type("Πίνακας τιμών")); ChoiceTypeDescription = New TypeDescription(ChoiceTypeArray); Πίνακας λεπτομερειών = Νέος πίνακας. Array of Attributes.Add(New Form Attributes("Schedule Table", Description of SelectionType, "", "TZN")); Τώρα πρέπει να δημιουργήσουμε έναν προγραμματικό πίνακα τιμών που περιέχει τα δεδομένα. Εάν ο πίνακας τιμών λαμβάνεται από ένα ερώτημα, τότε όλα είναι λίγο πολύ εντάξει. Εάν ο πίνακας δημιουργείται χειροκίνητα, τότε η έννοια των στηλών που θα περιέχουν αριθμούς ή ημερομηνίες μπορεί να δημιουργηθεί μέσω της «Περιγραφής τύπων». Το θέμα είναι ότι οι στήλες στον πίνακα τιμών πρέπει να έχουν κάποιο τύπο. Εάν, για παράδειγμα, αναμένεται ότι ο χρήστης θα συμπληρώσει δεδομένα σε αυτές τις στήλες διαδραστικά, τότε δεν μπορείτε να προσθέσετε μια στήλη του πίνακα τιμών απλώς με ένα όνομα· πρέπει να έχει έναν τύπο. Λάβετε υπόψη - αυτό είναι πολύ σημαντικό γιατί... Θα μεταφέρουμε αυτούς τους τύπους στον πίνακα της φόρμας.
Δημιουργούμε έναν πίνακα που περιέχει πολλές στήλες:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Νέος πίνακας; ArrayCD.Add(Type("Date")); DescriptionTypesTime = New DescriptionTypes(ArrayCD,CD); TZ = New ValueTable;
TK.Columns.Add("With", DescriptionTypesTime);
TK.Columns.Add("Before", DescriptionTypesTime);
TK.Columns.Add("Όνομα");
TK.Columns.Add("Σημείωση"); // Πλήρες όνομα και Σημείωση - σειρές Στη συνέχεια, θα συμπληρώσουμε τον πίνακα προγράμματος TK με τα απαραίτητα δεδομένα. Λαμβάνουμε έναν πίνακα TK που περιέχει τις απαραίτητες τιμές και είναι έτοιμος να μεταφερθεί στο χαρακτηριστικό φόρμας που δημιουργήθηκε. Για κάθε στήλη από TK. Κύκλος στηλών

Array of Attributes.Add(New Form Attributes(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Αυτός είναι ένας απλός συνδυασμός και το τραπέζι μας είναι έτοιμο.

Για κάθε στήλη από TK. Κύκλος στηλών

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Πίνακας χρονοδιαγράμματος." + Column.Name;
NewElement.Width = 10;
EndCycle;

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

Πίνακας SelectionFields.SetAction("Selection","TZNSelection");

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

&OnClient
Διαδικασία TKNSelection(TK, SelectedRow, Field, StandardProcessing)
//εντολές χειριστή EndProcedure

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

&OnClient

Λοιπόν, το τελευταίο πράγμα που ήθελα να προσθέσω είναι ότι μετά από όλα αυτά τα βήματα, φροντίστε να θυμάστε να περάσετε τον τελικό πίνακα στο χαρακτηριστικό form:

ValueВFormAttributes(ToR, "ScheduleTable");

Αυτό έχουμε ως αποτέλεσμα:


Και ιδού ο χειρισμός της εκδήλωσης «Επιλογή»:



Επίλογος.

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

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

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

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

Επομένως, στο 1C, η εργασία με πίνακες κατέχει εξέχουσα θέση.

Οι πίνακες στο 1C ονομάζονται επίσης "πινακοειδή μέρη". Κατάλογοι, έγγραφα και άλλα τα έχουν.

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

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

//Επιλογή 1 – διαδοχική πρόσβαση στα αποτελέσματα ερωτημάτων

//πάρτε το τραπέζι
Select = Query.Run().Select();
// περνάμε από όλες τις γραμμές του αποτελέσματος του ερωτήματος με τη σειρά
Ενώ Βρόχος Select.Next().
Αναφορά(Επιλογή.Όνομα);
EndCycle;

//Επιλογή 2 – μεταφόρτωση σε πίνακα τιμών
Request = New Request("SELECT Name FROM Directory.Nomenclature");
//πάρτε το τραπέζι
Πίνακας = Query.Run().Unload().
// περαιτέρω μπορούμε επίσης να κάνουμε επανάληψη σε όλες τις γραμμές
Για κάθε σειρά από τον κύκλο του πίνακα
Αναφορά(String.Name);
EndCycle;
//ή αυθαίρετη πρόσβαση σε συμβολοσειρές
Row = Table.Find("Shovel", "Name");

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

Πίνακας στη φόρμα (χοντρό πελάτη)

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

Συζητήσαμε τις βασικές αρχές της εργασίας με φόρμες στο μάθημα και στο μάθημα

Λοιπόν, ας τοποθετήσουμε τον πίνακα στη φόρμα. Για να το κάνετε αυτό, μπορείτε να σύρετε τον πίνακα από τον πίνακα ελέγχου. Ομοίως, μπορείτε να επιλέξετε Form/Insert Control από το μενού.

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

Κάντε κλικ στο κουμπί "..." στην ιδιότητα Δεδομένα. Για να δείτε τη λίστα των τμημάτων σε πίνακα, πρέπει να αναπτύξετε τον κλάδο Αντικείμενο.

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

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

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

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

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

Για να διαχειριστείτε τον πίνακα, πρέπει να εμφανίσετε έναν πίνακα εντολών στη φόρμα. Επιλέξτε το στοιχείο μενού Form/Insert Control/Command Bar.

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

Πίνακας φόρμας (λεπτός/διαχειριζόμενος πελάτης)

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

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

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

Στη συνέχεια, σύρετε επίσης τον πίνακα προς τα αριστερά.

Προκειμένου ένας πίνακας να έχει γραμμή εντολών, στις ιδιότητες πίνακα, επιλέξτε τις τιμές στην ενότητα Θέση της γραμμής χρήσης – εντολών.

Μεταφόρτωση πίνακα στο Excel

Οποιοσδήποτε πίνακας 1C που βρίσκεται στη φόρμα μπορεί να εκτυπωθεί ή να μεταφορτωθεί στο Excel.

Για να το κάνετε αυτό, κάντε δεξί κλικ σε ένα κενό χώρο στον πίνακα και επιλέξτε Λίστα.

Σε έναν διαχειριζόμενο (λεπτό) πελάτη, παρόμοιες ενέργειες μπορούν να εκτελεστούν χρησιμοποιώντας το στοιχείο μενού Όλες οι ενέργειες/Λίστα εμφάνισης.

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

Χρησιμοποιείται για την ένδειξη τύπων "γενικό αντικείμενο" - "Περιγραφή τύπων". Επομένως, πρώτα θα εξηγήσουμε τι είναι η "Περιγραφή τύπων" ("Περιγραφή τύπων τιμών").

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

Σύνταξη της μεθόδου «Περιγραφή τύπου».

Νέοι τύποι περιγραφής(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Επιλογές:
<Исходное описание типов> (προαιρετικός)
Τύπος: Περιγραφή Τύποι. Η αρχική περιγραφή τύπων, βάσει των οποίων θα κατασκευαστεί νέο.
<Добавляемые типы> (προαιρετικός)
Τύπος: Πίνακας, Συμβολοσειρά. Ένας πίνακας τιμών τύπου Ένας τύπος που αποτελείται από τους τύπους που θα χρησιμοποιηθούν στο αντικείμενο ή μια συμβολοσειρά που περιέχει τα ονόματα των τύπων που χωρίζονται με κόμματα.
<Вычитаемые типы> (προαιρετικός)
Τύπος: Πίνακας, Συμβολοσειρά. Ένας πίνακας τιμών Τύπου (ή μια συμβολοσειρά που περιέχει ονόματα τύπων διαχωρισμένα με κόμματα) που αποτελείται από τους τύπους που θα εξαιρεθούν από την αρχική δήλωση που καθορίζεται στην πρώτη παράμετρο.
<Квалификаторы числа> (προαιρετικός)
Τύπος: QualifiersNumbers. Προσόντα αριθμών που περιγράφουν έγκυρες τιμές ενός αριθμητικού τύπου.
<Квалификаторы строки> (προαιρετικός)
Τύπος: QualifiersStrings. Προκριματικά συμβολοσειράς που περιγράφουν έγκυρες τιμές ενός τύπου συμβολοσειράς.
<Квалификаторы даты> (προαιρετικός)
Τύπος: QualifiersDates. Προκριματικά Date που περιγράφουν έγκυρες τιμές του τύπου Date.
Περιγραφή:
Δημιουργεί μια περιγραφή τύπου με βάση μια άλλη περιγραφή τύπου, προσθέτοντας ορισμένους τύπους και εξαιρώντας άλλους. Εάν δεν καθοριστεί νέος προσδιοριστής, θα διατηρηθούν τα κριτήρια της αρχικής δήλωσης τύπου.
Ένα παράδειγμα χρήσης του αντικειμένου "Type Description":

// αναπτύξτε την περιγραφή των έγκυρων τύπων με νέους τύπους Array = New Array; Πίνακας. Προσθήκη(Τύπος( "Σύνδεσμος αναφοράς. Μέθοδοι")); Πίνακας. Add(Type("Αριθμός" )); Sign = ValidSign. Μη αρνητικό? QuNumbers = New QualifiersNumbers(10, 2, Sign); ValidTypes = NewTypeDescription(ValidTypes, Array, KvNumbers);
Τώρα, στην πραγματικότητα, παραδείγματα σωστής δημιουργίας τιμών στηλών διαφόρων τύπων σε έναν πίνακα.

Σε γενικές γραμμές, αρκεί να ορίσουμε τους τύπους στηλών ως εξής:

TK. Στήλες. Προσθήκη( "Ταξινόμηση ευρετηρίου", New DescriptionTypes ( "Αριθμός" ) ; TK. Στήλες. Add("SectionName", New TypeDescription("String") ); TK. Στήλες. Add("DataCorr" , New TypeDescription("Date") ); TK. Στήλες. Προσθήκη( "Διαγραφή άνευ όρων", New TypeDescription("Boolean")); TK. Στήλες. Add("Nomenclature" , New TypeDescription() ) ; TK. Στήλες. Add("SectionData" , New TypeDescription("Structure")) ; // παράδειγμα δημιουργίας στηλών "number" και "string" με διευκρίνιση των παραμέτρων: TK. Στήλες. Προσθήκη( "Ποσοστό ολοκλήρωσης", New DescriptionTypes ( "Αριθμός" , Νέοι ΠροκριματικοίΑριθμοί ( 18 , 2 ) ) ; TK. Στήλες. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200, AllowedLength. Variable) ) ; TK. Στήλες. Add("DecommissionedDate" , NewTypeDescription("Date" , , , NewDateQualifiers(DateParts.DateTime) ) ;

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

////// διαμόρφωση της δομής των τεχνικών προδιαγραφών (δημιουργία στηλών) //// ορισμός προκριματικών για αντικατάσταση στα πεδία προκριματικών της τεχνικής προδιαγραφής CN = New QualifiersNumbers(18, 9); KS = NewStringQualifiers(200); CD = NewDateQualifiers(DataParts.DateTime) ; //// ορίστε περιγραφές τύπων για μελλοντικές στήλες TK // Ένας πίνακας είναι η αρχική περιγραφή των τύπων, βάσει των οποίων θα κατασκευαστεί ένας νέος // Σημειώστε ότι για τις στήλες TK η αρχική περιγραφή τύπου σε αυτό το παράδειγμα είναι ένας πίνακας Array = New Array; Πίνακας. Add(Type("String") ); TypeDescriptionString = New TypeDescription(Array, , KS) ; Πίνακας. Σαφή() ; Πίνακας. Add(Type("Αριθμός") ); TypeDescriptionNumber = New TypeDescription(Array, , , CN) ; Πίνακας. Σαφή() ; Πίνακας. Προσθήκη(Τύπος("Ημερομηνία") ); DescriptionTypesDate = New DescriptionTypes(Array, , , , CD) ; Πίνακας. Σαφή() ; Πίνακας. Προσθήκη(Τύπος( "DirectoryLink.Nomenclature") ) ; Τύπος ΠεριγραφήΟνοματολογία = Νέος Τύπος Περιγραφή (Πίνακας) ; Πίνακας. Σαφή() ; Πίνακας. Προσθήκη(Τύπος( "DirectoryLink.SeriesNomenclature") ) ; TypeDescriptionSeries = New TypeDescription(Array) ; Πίνακας. Σαφή() ; Πίνακας. Προσθήκη(Τύπος( "DirectoryLink.Quality") ) ; TypeDescriptionQuality = New TypeDescription(Array) ; Πίνακας. Σαφή() ; Πίνακας. Add(Type("Boolean") ); TypeDescriptionBoolean = New TypeDescription(Array) ; // στην πραγματικότητα προσθέτοντας στήλες στο TK (δημιουργώντας τη δομή του μελλοντικού TK) TK. Στήλες. Προσθήκη("Ονοματολογία", Περιγραφή ΤύποιΟνοματολογία) ; TK. Στήλες. Add("Code" , TypeDescriptionString) ; TK. Στήλες. Προσθήκη( "Ονοματολογία σειράς", DescriptionTypesSeries); TK. Στήλες. Add("AccountCode" , Type DescriptionString) ; TK. Στήλες. Add("ActionDate" , TypeDescriptionDate) ; TK. Στήλες. Add("Quality" , TypeDescriptionQuality) ; TK. Στήλες. Add("NumberUS", DescriptionTypesNumber) ; TK. Στήλες. Add("Write off" , TypeDescriptionBoolean) ; . . . //////// διαμόρφωση της δομής των τεχνικών προδιαγραφών (δημιουργία στηλών) ////////////////////////////////////////////////////////

Για να προσθέσετε μια γραμμή σε έναν πίνακα τιμών, βλ