Βρείτε μια στήλη στον πίνακα τιμών 1s. Είναι σημαντικό να μην συγχέετε ποτέ μια ιδιότητα αντικειμένου με μια μέθοδο αντικειμένου.

Εδώ είναι ένα μικρό γεγονός για να ξεκινήσετε - απλά παραδείγματα εργασίας με έναν πίνακα τιμών:

1. Δημιουργήστε έναν πίνακα τιμών

ValueTable = New ValueTable;


2. Δημιουργήστε στήλες του πίνακα τιμών:

ValueTable.Columns.Add("Όνομα");
ValueTable.Columns.Add("Επώνυμο");


3. Προσθέστε νέες σειρές χρησιμοποιώντας ονόματα στηλών:


NewString.Name = "Βασίλι";
NewRow.LastName = "Pupkin";


4. Πώς να αναζητήσετε μια τιμή στον πίνακα τιμών:
Είναι απαραίτητο να βρείτε μια σειρά πίνακα που περιέχει την επιθυμητή τιμή.

FoundString = ValueTable.Find(LookupValue);


5. Βρείτε την πρώτη εμφάνιση σε ορισμένες στήλες ενός πίνακα τιμών

FoundString = ValueTable.Find(LookupValue, "Supplier, Buyer");


6. Εάν πρέπει να βρείτε όλες τις εμφανίσεις στον πίνακα τιμών:
Χρησιμοποιούμε τη δομή αναζήτησης.

SearchStructure = Structure("Employee", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Ας δημιουργήσουμε μια δομή αναζήτησης, κάθε στοιχείο της οποίας θα περιέχει το όνομα της στήλης ως κλειδί και την τιμή που αναζητήθηκε σε αυτήν τη στήλη ως τιμή. Περνάμε τη Δομή Αναζήτησης ως παράμετρο στη μέθοδο FindStrings(). Ως αποτέλεσμα, παίρνουμε τις σειρές του πίνακα.
Εάν προσθέσουμε την αναζήτηση για την επιθυμητή τιμή στη δομή αναζήτησης, για παράδειγμα, επίσης στη στήλη Responsible, τότε ως αποτέλεσμα της εφαρμογής της μεθόδου FindRows(), θα λάβουμε όλες τις σειρές όπου τόσο ο Υπάλληλος όσο και ο Υπεύθυνος είναι ίσες με το επιθυμητό αξία.

7. Πώς να κάνετε βρόχο μέσω ενός πίνακα τιμών με τυχαία σειρά

Για κάθε CurrentRow από ValueTable Loop
Αναφορά(CurrentLine.Name);
EndCycle;

Κάντε το ίδιο χρησιμοποιώντας ευρετήρια:

SeniorIndex = ValueTable.Count() - 1;
Για MF = 0 κατά κύκλο SeniorIndex
Report(ValueTable[Count].Name);
EndCycle;


8. Διαγραφή μιας υπάρχουσας γραμμής πίνακα τιμών

ValueTable.Delete(RemoveRow);

κατά ευρετήριο

ValueTable.Delete(0);


9. Διαγραφή υπάρχουσας στήλης του πίνακα τιμών

ValueTable.Columns.Delete(RemoveColumn);


κατά ευρετήριο

ValueTable.Columns.Delete(0);

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

10. Πώς να συμπληρώσετε τον πίνακα τιμών εάν τα ονόματα των στηλών περιέχονται σε μεταβλητές;

NewRow = ValueTable.Add();
NewRow[ColumnName] = Τιμή;


11. Πώς να συμπληρώσετε ολόκληρη τη στήλη του πίνακα τιμών με την επιθυμητή τιμή;
Η στήλη FiscalAccounting Flag στον πίνακα τιμών του πίνακα τιμών πρέπει να συμπληρωθεί με την τιμή False

ValueTable.FillValue(False, "Σημαία φορολογικής λογιστικής");


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

12. Πώς να συμπληρώσετε τον πίνακα τιμών "TableRecipient" με τα δεδομένα του πίνακα τιμών "SourceTable";

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

TableReceiver = TableOriginal.Copy();


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

Μερική μεταφορά δεδομένων για στήλες με αντίστοιχα ονόματα:

Για κάθε σειρά του SourceTable από το SourceTable Loop
FillPropertyValues(NewString, SourceTableString);
Τελικός Κύκλος


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

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

Πλήρες αντίγραφο δεδομένων για στήλες με αντίστοιχα ονόματα

SimilarColumns = New Array();

Για κάθε στήλη από το SourceTable.Columns Loop
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Αν MatchedColumn<>Απροσδιόριστο Τότε

// Λήψη ιδιοτήτων στήλης.
Όνομα = Στήλη.Όνομα;
ValueType = Column.ValueType;
Title = Column.Title;
Width = Column.Width;

// Αντικατάσταση στηλών στον πίνακα προορισμού.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Index, Name, ValueType, Title, Width);

// Προσθέστε το επόμενο όνομα των στηλών που ταιριάζουν στον πίνακα.
Same-nameColumns.Add(Column.Name);

Τέλος εαν;

EndCycle;

// Κάντε βρόχο στις σειρές του πίνακα προέλευσης.
Για κάθε σειρά του SourceTable Από τον βρόχο SourceTable

// Προσθήκη νέας σειράς στον πίνακα προορισμού.
NewString = TableReceiver.Add();

// Συμπληρώστε τιμές σε αντίστοιχα κελιά.
Για κάθε NameColumns Of Same NameColumns Loop
NewString[ColumnName] = SourceTableString[ColumnName];

EndCycle;

EndCycle;


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

13. Πώς να προσθέσετε στήλες στον πίνακα τιμών "Πίνακας τιμών" με περιορισμούς τύπου;

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

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

// Προσθήκη στήλης χωρίς περιορισμούς τύπου.
ValueTable.Columns.Add("Αντικείμενο");


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

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

// Περιορισμοί στους τύπους δεδομένων στηλών:
// Μόνο στοιχεία του καταλόγου "Εργολάβοι".
ValueTable.Columns.Add("Λογαριασμός",NewTypeDescription("ReferenceReference.Accounts"));


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

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

// Προετοιμασία και ορισμός ορίων για δεδομένα τύπου συμβολοσειράς.
String Qualifiers = New String Qualifiers(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Μπορείτε να κάνετε το ίδιο για τα προκριματικά αριθμού και ημερομηνίας.
Σημείωση: η περιγραφή τύπου μπορεί να κατασκευαστεί από τον κατασκευαστή και "από την αρχή" και μπορείτε να χρησιμοποιήσετε μια υπάρχουσα περιγραφή τύπου ως βάση

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

// Επέκταση της περιγραφής τύπων που χρησιμοποιήθηκε στο παρελθόν.
Number Qualifiers = New Number Qualifiers(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("Σημείωση", ExtendedAllowedTypes);

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

Χαρακτηριστικά εργασιών.

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

FormElements.TableField.CreateColumns();

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

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

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

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

Η δημιουργία πίνακα στη φόρμα γίνεται μέσω της περιγραφής του πίνακα τιμών ως χαρακτηριστικό:
ArrayChoiceType = Νέος πίνακας; ArrayChoiceType.Add(Type("ValueTable")); ChoiceTypeDescription = New ChoiceTypeDescription(ChoiceTypeArray); ArrayAttributes = Νέος πίνακας; ArrayAttributes.Add(New FormAttribute("ScheduleTable", ChoiceTypeDescription, "", "TRN")); Τώρα πρέπει να δημιουργήσουμε έναν πίνακα τιμών προγραμματισμού που περιέχει τα δεδομένα. Εάν ο πίνακας τιμών λαμβάνεται από ένα ερώτημα, τότε όλα είναι λίγο πολύ εντάξει. Εάν ο πίνακας δημιουργείται χειροκίνητα, τότε η τιμή των στηλών που θα περιέχουν αριθμούς ή ημερομηνίες μπορεί να δημιουργηθεί μέσω της «Περιγραφής τύπων». Η ουσία είναι ότι οι στήλες στον πίνακα τιμών πρέπει να έχουν κάποιο τύπο. Εάν, για παράδειγμα, υποτεθεί ότι ο χρήστης θα συμπληρώσει τα δεδομένα σε αυτές τις στήλες διαδραστικά, τότε δεν μπορείτε να προσθέσετε μια στήλη πίνακα τιμών με ένα απλό όνομα, πρέπει να έχει έναν τύπο. Λάβετε υπόψη σας - αυτό είναι πολύ σημαντικό. θα μεταφέρουμε αυτούς τους τύπους στον πίνακα της φόρμας.
Δημιουργήστε έναν πίνακα που περιέχει πολλές στήλες:
CD = New DateQualifiers (DateParts.Time); ArrayCD = Νέος Πίνακας; ArrayKD.Add(Τύπος("Ημερομηνία")); TypeDescriptionTime = New TypeDescription(ArrayKD,KD); TK = New ValueTable;
TK.Columns.Add("From", TypeDescriptionTime);
TK.Columns.Add("Before", TypeDescriptionTime);
TK.Columns.Add("Όνομα");
TK.Columns.Add("Note");//Name and Note - strings Στη συνέχεια, θα συμπληρώσουμε τον πίνακα του προγράμματος TK με τα απαραίτητα δεδομένα. Λαμβάνουμε έναν πίνακα TK που περιέχει τις απαραίτητες τιμές και είναι έτοιμος να μεταφερθεί στο χαρακτηριστικό που δημιουργήθηκε. Για κάθε στήλη από TK.Column Loop

ArrayAttributes.Add(New FormAttribute(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeAttributes(ArrayAttributes);
SelectionFieldTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = DisplayTable.List;

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

Για κάθε στήλη από TK.Column Loop

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

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

ChoiceFieldTable.SetAction("Choice","TCChoice");

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

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

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

&AtClient

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

ValueVFormAttribute(TK, "Πίνακας χρονοδιαγράμματος");

Εδώ είναι τι έχουμε ως αποτέλεσμα:


Και εδώ είναι ο χειρισμός του συμβάντος "Επιλογή":



Επίλογος.

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

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

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

1. Βρείτε

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//μπορούμε επίσης να καθορίσουμε ποιες στήλες θα αναζητήσουμε για να επιταχύνουμε την αναζήτηση
FoundString = TKNomenclature.Find(TVHorizon, "Nomenclature");

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

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

2. FindStrings


Δομή επιλογής.Εισαγωγή("Ονοματολογία", TVHorizon); // Πρώτα καθορίζουμε τη στήλη πού θα γίνει αναζήτηση και μετά τι θα γίνει.

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

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


SelectionStructure = Νέα δομή;
Δομή επιλογής.Εισαγωγή("Ονοματολογία", TVHorizon);
Selection Structure.Insert("Quantity", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εξαγωγή πίνακα στο Excel

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

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

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

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

Πίνακας τιμών 1C - μέρος 3. μεταδεδομένα. Επανάληψη πάνω από τις στήλες του πίνακα τιμών

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

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

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

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

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

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

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

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

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

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

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

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

// εκτυπώστε τα ονόματα όλων των στηλών του TK For Every MyCurrentColumn From MyTK.Columns Notify Loop("Column name: " + MyCurrentColumn.Name); EndCycle;

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

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

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

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

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

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

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

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

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

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

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

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

Για SC = 0 By MyTM.Columns.Quantity() - 1 Loop CurrentColumn = MyTM.Columns[SC]; Notify(CurrentColumn.Name); EndCycle;

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

Πλήρες όνομα

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

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

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

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

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

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

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

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

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

FirstLine = MyTR; // πάρτε την πρώτη σειρά (αριθμώντας από το μηδέν) ColumnFirstValue = RowFirst; // λάβετε την τιμή της πρώτης στήλης (η αρίθμηση στηλών είναι επίσης από το μηδέν) Report(FirstColumnValue); // εμφανίζει την τιμή της πρώτης στήλης στην πρώτη σειρά του πίνακα

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

Τσαπάεφ

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

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

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

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

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

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

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

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

Η οθόνη θα είναι ίδια.

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

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

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

Για RowCount = 0 By MyTM.Quantity() - 1 Loop // Loop through rows For ColumnCount = 0 By MyTM.Columns.Quantity() - 1 Loop // ένθετος βρόχος μέσω στηλών // λάβετε την τιμή του κελιού (από την τρέχουσα σειρά και τις τρέχουσες στήλες) CellValue = MyTR[RowCount][ColumnCount]; // εμφάνιση του αριθμού σειράς, του αριθμού στήλης και της τιμής του κελιού Report("Line #" + RowCount + "column #" + ColumnCount + " = " + CellValue); EndCycle; EndCycle;

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

Γραμμή #0 στήλη #0 = Chapaev Γραμμή #0 στήλη #1 = Γραμμή Vasily #0 στήλη #2 = Γραμμή Ivanovich #1 στήλη #0 = Γραμμή Dzerzhinsky #1 στήλη #1 = Γραμμή Felix #1 στήλη #2 = Γραμμή Edmundovich # 2 στήλη No. 0 = Kotovsky Line No. 2 στήλη No. 1 = Grigory Line No. 2 στήλη No. 2 = Ivanovich

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

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

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

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

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

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

Για RowCount = 0 By MyTR.Quantity() - 1 Loop // loop through rows Report(" ======= Σειρά # " + RowCount + " ======="); Να αναφέρουν(" "); // τροφοδοσία γραμμής (εισαγωγή κενής γραμμής) Για ColumnCount = 0 By MyTR.Columns.Quantity() - 1 βρόχος // ένθετος βρόχος μέσω στηλών ColumnName = MyTR.Columns[ColumnCount].Name; // λάβετε τη στήλη nameCellValue = MyTR[RowCount][ColumnName]; //

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

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

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

Για κάθε CurrentRow From MyTR Loop // κύκλος μέσω της συλλογής συμβολοσειρών Αναφορά(" ======= Γραμμή # " + MyTR.Index(CurrentRow) + " ======="); Να αναφέρουν(" "); Για κάθε CurrentColumn From MyTR.Columns Loop // ένθετο βρόχο μέσω της συλλογής στηλών ColumnName = CurrentColumn.Name; // λάβετε τη στήλη nameCellValue = CurrentRow[ColumnName]; // λήψη τιμής κελιού ΑΝΑ στήλη NAME Αναφορά(ColumnName + ": " + CellValue); // εμφάνιση του ονόματος της στήλης και της τιμής του κελιού EndCycle. Να αναφέρουν(" "); EndCycle;

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

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

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

Για κάθε CurrentRow From MyTR Loop // loop μέσω των γραμμών Report(" ======= Γραμμή # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); Για κάθε CurrentColumn From MyTr.Columns Loop // iterate over στήλες Αναφορά(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 ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; background-color: #f4394c;color: #ffffff;width: 100%;font-weight: 700; στυλ γραμματοσειράς: κανονικό γραμματοσειρά-οικογένεια: Arial, "Helvetica Neue", sans-serif; κουτί-σκιά: κανένα -moz-box-shadow: κανένας; -webkit-box-shadow: κανένας; φόντο: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container (στοίχιση κειμένου: κέντρο; πλάτος: αυτόματη;)