Αναζήτηση στον πίνακα τιμών 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);

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

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

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);

Αν ΑντιστοιχισμένηΣτήλη<>Απροσδιόριστο Τότε

// Λήψη ιδιοτήτων στήλης.
Όνομα = Στήλη.Όνομα;
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("Λογαριασμός", New TypeDescription("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);

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

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

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

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

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