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

Αναζήτηση στον πίνακα των τιμών 1C

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

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

1. Βρείτε

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

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

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

2. FindStrings


Selection Structure.Insert("Nomenclature", TVHorizon); // υποδείξτε πρώτα τη στήλη πού να αναζητήσετε και μετά τι να αναζητήσετε.

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

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


SelectionStructure = Νέα δομή;
Selection Structure.Insert("Nomenclature", TVHorizon);
Selection Structure.Insert("Quantity", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

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

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

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

Επομένως, στο 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");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ValueTable = New ValueTable;


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

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


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


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


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

FoundRow = ValueTable.Find(SearchValue);


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

FoundRow = ValueTable.Find(SearchValue, "Supplier, Buyer");


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

SearchStructure = Structure("Employee", SearchValue);
Array of FoundRows = ValueTable.FindRows(SearchStructure);


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

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

Για κάθε τρέχουσα σειρά από τον βρόχο πίνακα τιμών
Αναφορά(CurrentRow.Name);
EndCycle;

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

SeniorIndex = ValueTable.Quantity() - 1;
Για λογαριασμό = 0 έως κύκλος SeniorIndex
Αναφορά(TableValues[Account].Name);
EndCycle;


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

ValueTable.Delete(Σειρά προς διαγραφή);

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

ValueTable.Delete(0);


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

ValueTable.Columns.Delete(ColumnToDelete);


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

ValueTable.Columns.Delete(0);

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

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

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


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

Πίνακας τιμών Συμπλήρωση τιμών (Λάθος, "Σημαία φορολογικής λογιστικής").


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

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

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

Recipient table = Source table.Copy();


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

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

Για κάθε γραμμή του SourceTable Από τον κύκλο SourceTable
FillPropertyValues(NewRow, SourceTableRow);
Τέλος του Κύκλου


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

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

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

Ίδιες στήλες = New Array();

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

Αν ταιριάζουν στήλη<>Απροσδιόριστο Τότε

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

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

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

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

τέλος εαν;

EndCycle;

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

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

// Συμπληρώστε τις τιμές στα αντίστοιχα κελιά.
Για κάθε Όνομα Στήλες Από Στήλες με το ίδιο όνομα Κύκλος
NewRow[ColumnName] = SourceTableRow[ColumnName];

EndCycle;

EndCycle;


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

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

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

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

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


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

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

// Περιορισμοί στους τύπους δεδομένων στηλών:
// Μόνο στοιχεία του καταλόγου "Counterparties".
Table of Values.Columns.Add("Account", New Description of Types("DirectoryLink.Accounts"));


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

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

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


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

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

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

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



 

Ίσως είναι χρήσιμο να διαβάσετε: