1c Βρείτε μια θέση στη συμβολοσειρά. Οι επιλογές βελτιστοποίησης είναι ατελείωτες

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

Relus (αριθμός, λιοντάρι (αριθμός, 3), "");

Όταν κοίταξα στον βοηθό σύνταξης, έτσι μου άρεσε ότι ήθελα να γράψω Εργασία με σειρές στο "1C: Enterprise".

Η γραμμή στο 1C αναφέρεται σε έναν πρωτόγονο τύπο δεδομένων.

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

Συμβολοσειράς
Προσφυγή \u003d "Γεια επιβάτη".

Γραμμές πολλαπλών γραμμών Β. Τυπικές διαμορφώσεις Πιο συχνά δημιουργήθηκε χρησιμοποιώντας τον κατακόρυφο διαχωριστή "|":
Line \u003d "πολλαπλών γραμμών
| String
| Γράψτε
| Κείμενο ";

Η προσφορά εντός της συμβολοσειράς ρυθμίζεται με διπλά εισαγωγικά.
Row \u003d "" κείμενο σε εισαγωγικά "";

Υπάρχουν πολλές λειτουργίες στις σειρές (αναζήτηση στη συμβολοσειρά φορτηγών, ορισμός του πρώτου κ.λπ.), είναι προτιμότερο να βλέπετε τη βοηθητική σύνταξη.
Βοηθός σύνταξης - γενική περιγραφή Ενσωματωμένη γλώσσα-\u003e Ενσωματωμένες λειτουργίες-\u003e Λειτουργίες για την εργασία με σειρές.

Λειτουργίες για την εργασία με σειρές

Εδώ σε μια σύντομη μορφή, θα δώσω λειτουργίες για την εργασία με τις σειρές:

Vrega (<Строка>) - Όλοι οι χαρακτήρες των συμβολοσειρών λειτουργιών μετατρέπονται στο κορυφαίο μητρώο.

Codeimvol (<Строка>, <НомерСимвола>) - Η λειτουργία λαμβάνει έναν κωδικό συμβόλου που βρίσκεται στη μεταδιδόμενη σειρά στη θέση με τον καθορισμένο αριθμό.

Ενα λιοντάρι(<Строка>, <ЧислоСимволов>) - Η λειτουργία επιλέγει τα πρώτα σύμβολα αριστεράς συμβολοσειράς.

Να βρω(<Строка>, <ПодстрокаПоиска>) - Η λειτουργία βρίσκει την είσοδο της επιθυμητής συμβολοσειράς ως υποσύνολο στην αρχική γραμμή.

Nrega (<Строка>) - Η λειτουργία μετατρέπει όλους τους χαρακτήρες των συμβολοσειρών στη μικρή περίπτωση.

Δικαιώματα (<Строка>, <ЧислоСимволов>) Αυτό το χαρακτηριστικό Διαφέρει από τις λειτουργίες του λιονταριού (αριστερά) στο γεγονός ότι επιλέγει τα τελευταία σύμβολα σειράς.

Κενή γραμμή (<Строка>) - Η λειτουργία ελέγχει τη συμβολοσειρά για την παρουσία σημαντικών χαρακτήρων.

Σύμβολο(<КодСимвола>) - Η λειτουργία μετατρέπει τον κώδικα συμβόλου σε μια συμβολοσειρά που περιέχει τον χαρακτήρα.

Sokrel (<Строка>) - Η λειτουργία κόβει ασήμαντες χαρακτήρες στα αριστερά του πρώτου χαρακτήρα που σημαίνει στη σειρά.

Sokrlp (<Строка>) - Η λειτουργία κόβει ασήμαντους χαρακτήρες που αφήνονται από τον πρώτο χαρακτηριστικό χαρακτήρα στη συμβολοσειρά και τους χώρους που έχουν δίκιο από τον τελευταίο σημαντικό χαρακτήρα στη σειρά.

Copp (<Строка>) - Η λειτουργία περικοπεί τους ασήμαντους χαρακτήρες στα δεξιά του τελευταίου σημαντικού συμβόλου στη σειρά.

Περιβάλλοντα (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - Η λειτουργία επιλέγει τη συμβολοσειρά χαρακτήρων, ξεκινώντας από το σύμβολο<НачальныйНомер>Κοινή ποσότητα<ЧислоСимволов>.

Strdlin (<Строка>) - Η λειτουργία λαμβάνει τον αριθμό των χαρακτήρων στη συμβολοσειρά.

Relust (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - Η λειτουργία βρίσκει στη γραμμή πηγής όλες τις καταχωρήσεις της αναζήτησης και την αντικαθιστά στην υποκατάσταση υποκατάστασης.

Plootchikstka (<Строка>, <НомерСтроки>) - Η λειτουργία λαμβάνει μια σειρά από μια σειρά πολλαπλών γραμμών με αριθμό.

Στροβιλίζεται (<Строка>, <ПодстрокаПоиска>) - Η λειτουργία υπολογίζει τον αριθμό των καταχωρήσεων της αναζήτησης στη γραμμή προέλευσης.

Strokelost (<Строка>) - Η λειτουργία θεωρεί τον αριθμό των γραμμών σε μια σειρά πολλαπλών γραμμών. Σε μια σειρά πολλαπλών γραμμών, οι χορδές χωρίζονται σε σύμβολα μετάφρασης συμβολοσειρών.

Trega (<Строка>) - Η λειτουργία μετατρέπει μια συμβολοσειρά στον καταχωρητή του τίτλου. Αυτό σημαίνει ότι κάθε λέξη έχει τον πρώτο χαρακτήρα να μετατραπεί στο μητρώο τίτλου ή στο κορυφαίο μητρώο εάν δεν ορίζεται ο τίτλος τίτλου για το σύμβολο. Οι υπόλοιποι χαρακτήρες μετατρέπονται στο κατώτερο μητρώο.

Μετατροπή τύπου
Για να μετατρέψετε ρητά τους τύπους δεδομένων, τις λειτουργίες του ίδιου ονόματος με τον τύπο δεδομένων σε ποια μετατροπή συμβαίνει: συμβολοσειρά (<Значение>)

Διαδρομή συμβολοσειράς \u003d σειρά (αριθμός);

Όλα αυτά τα χαρακτηριστικά περιγράφονται λεπτομερώς στη Βοηθητική Σύνταξη, καθώς ένας προγραμματιστής αρχάριος μπορεί να βοηθήσει τη Σύνταξη Βοηθού, που περιέγραψα στο άρθρο.

Παραδείγματα για την εργασία με σειρές

Μετατροπή του αριθμού στη συμβολοσειρά και την πλάτη.

Για να πάρετε μια αναπαράσταση συμβολοσειράς του έτους, χρησιμοποιήστε τη λειτουργία μορφής.

Έτος \u003d Μορφή (CurrentData (), "DF \u003d YYYY") // Έτος \u003d 2012 "

Για να μετατρέψετε έναν αριθμό σε μια συμβολοσειρά χωρίς να εισάγετε ένα σύμβολο διαχωριστή ομάδας (αδιάσπαστο χώρο), πρέπει να εφαρμόσετε τη λειτουργία μορφής με την παράμετρο NG \u003d 0:

Αριθμός \u003d 2012 Row \u003d Μορφή (αριθμός, "чhg \u003d 0"); // Row \u003d "2012"

Σειρά χωρίς κενά.

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

Άρθρο θέμα - Μη τρακτές προσεγγίσεις στη βελτιστοποίηση. Θα ληφθεί υπόψη Δύο πτυχές:

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

Αναζήτηση πίεσης

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

Αναζήτηση αρχικών χαρακτήρων

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

Η αναζήτηση αρχικών χαρακτήρων υλοποιείται στο 1C χρησιμοποιώντας την ομάδα όπως (ή σε μια αγγλική έκδοση, όπως), υποδεικνύοντας την αξία με το "%" στο τέλος ("%" δηλώνει μια ακολουθία άλλων χαρακτήρων). Για παράδειγμα, ψάχνουμε:

Όνομα όπως το "ivano%"

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

Η κατάσταση "όπως η γραμμή αναζήτησης" είναι ισοδύναμη με την αναζήτηση στο εύρος των τιμών. Σε μια συγκεκριμένη περίπτωση, όταν ψάχνουμε για "ivano%" - αυτό ισοδυναμεί με την αναζήτηση στην περιοχή των επώνυμα, τα οποία αρχίζουν να "Ivano", και, που τελειώνουν με το "Ivanp" (επειδή το σύμβολο "P" πηγαίνει μετά το σύμβολο "o").

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

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

Αναζήτηση για εισαγωγή

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

Κατά τη μετατροπή ενός τέτοιου ερωτήματος στο SQL, βλέπουμε ότι μόνο οι αλλαγές εντολών (στην τιμή υπάρχουν ήδη δύο "%").

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

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

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

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

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

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

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

Ας εξετάσουμε τώρα nontrivial προσέγγιση για την επίλυση αυτής της εργασίας.

Δηλώνει με διάφορες ανοχές:

  • Πρώτον - δεδομένου ότι το σύγχρονο Οι δίσκοι έχουν απεριόριστο μέγεθος, Ας υποθέσουμε ότι ο χώρος στο δίσκο που μπορείτε να χρησιμοποιήσετε, έχετε αρκετά μεγάλο.
  • Δευτερόλεπτο - Ο χρήστης ψάχνει χωρίς δύο σύμβολα, αλλά για κάποιο κομμάτι. Για παράδειγμα, κανένας από μας δεν ψάχνει για "al" - είναι πολύ μικρή επιλεκτικότητα. Αναζητώντας μια σημαντική ακολουθία χαρακτήρων. Εδώ έχουμε επιλέξει την αναζήτηση για έξι σύμβολα.

Ένα παράδειγμα της επιθυμητής γραμμής "Alexe" καταγράφηκε στη φόρμα και θα δοκιμάστηκε με αυτό.

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

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

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

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

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

Στην πράξη, αποδεικνύεται πολύ Ενδιαφέρουσα ιστορία - επιτάχυνση σε δεκάδες, εκατοντάδες φορές. Επιπλέον, όλα αυτά μπορούν να γίνουν με τα μέσα 1C, η οποία είναι πολύ ωραία. Δεν θα χρειαστεί να ξαναγράψετε τη λογική, ο χρήστης θα χαρέσει ότι το ερώτημα αναζήτησης επιταχύνεται. Στο παράδειγμα, επιτάχυνση από 4 δευτερόλεπτα έως 0,05 δευτερόλεπτα και αν είχαμε αρχικά ένα αίτημα για δύο λεπτά, θα είχε εκτελεστεί για λιγότερο από ένα δευτερόλεπτο.

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

Προπαρασκευαστικές δραστηριότητες

Τώρα θα σας πω για τις προπαρασκευαστικές δραστηριότητες.

  • Πρώτα Είναι απαραίτητο να συμπληρώσετε τις αρχικές τιμές του μητρώου.. Για να το κάνετε αυτό, πρέπει να προγραμματίσουμε το ρυθμιστικό παράθυρο.
  • Στη συνέχεια, πρέπει να συμμορφωθούμε με τη συνέπεια των δεδομένων - αυτό σημαίνει Πρέπει να υπάρχει συνδρομή για να αλλάξετε την τιμήΈτσι ώστε αυτά τα θραύσματα να ξαναχτιστούν αυτόματα.
  • Και ΤΕΛΕΥΤΑΙΟ - Προσθέστε μια τυπική φόρμα αναζήτησης.

Η πλήρωση του μητρώου μπορεί να γίνει τόσο με τη βοήθεια 1C όσο και με SQL.

Μπορώ να πω ότι η γέμιση μιας τέτοιας δομής για 17 εκατομμύρια τιμές καταλαμβάνει κάπου 20-25 λεπτά. Φυσικά, οι χρήστες σε αυτό το σημείο δεν πρέπει να αλλάξουν τις τιμές του καταλόγου.

Αν υπολογίσουμε για ένα εκατομμύριο τιμές κάπου 100 χαρακτήρων 6 στο θραύσμα, θα αποδειχθεί κάπου 4,7 GB. Πρέπει να σχεδιάσετε έτσι ώστε αυτός ο τόπος που έχετε. Εάν έχετε στον κατάλογό σας, για παράδειγμα, 100 εκατομμύρια αξίες, τότε πρέπει να προγραμματίσετε ένα μέρος που θα είναι διαθέσιμο στο δίσκο.

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

Αυτή η μέθοδος λειτουργεί πάντα γρήγορα;

Αυτό επηρεάζεται Στατιστικά στοιχεία των θραυσμάτων δημοτικότητας.

  • Για παράδειγμα, έχετε ένα κομμάτι "Alex", το οποίο μπορεί να εισέλθει στο όνομα του Alexey, στο μεσαίο όνομα Alekseevich, στο όνομα του Alekseenko κλπ. Αυτό το κομμάτι μπορεί να είναι 50-100 χιλιάδες καταχωρήσεις.
  • Και υπάρχουν σπάνια χρησιμοποιούμενα θραύσματα.

Έτσι, εμφανίζονται τα στατιστικά στοιχεία της δημοτικότητας σε θραύσματα.

Σημειώστε ότι Εάν η δημοτικότητα των θραυσμάτων είναι χαμηλή (100 στοιχεία), τότε λαμβάνουμε επιτάχυνση - 0,1 δευτερόλεπτο.

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

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

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

Και τώρα ας εξετάσουμε πώς εκτελείται το αίτημα SQL στον SQL Server.

Η ολίσθηση παρουσιάζει ένα απλοποιημένο σχήμα:

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

Ποιο είναι το σύστημα που υλοποιείται από εμάς;

  • Κάναμε τη δική σας δείκτης. Δεν είναι ένας πρότυπος δείκτης SQL, ο δείκτης 1C, αλλά ο δείκτης του που απαιτείται για την επίλυση αυτού του προβλήματος.
  • Επιπλέον, συγκρούστηκε με αυτό που χρειάζεται το δικό τους στατιστική;
  • Και χρειάζεστε το δικό σας Βελτιστοποιητήςη οποία σύμφωνα με αυτές τις στατιστικές αποφασίζει ποιο νήμα για να επιλέξει.

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

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

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

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

Επιτάχυνση των "μεγάλων" εγγράφων

Θα πάω στο δεύτερο θέμα - η επιτάχυνση των μεγάλων εγγράφων.

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

Προτείνω να επιστρέψω στην ιστορία και να εξετάσω πώς έγινε στο 1C, Ξεκινώντας από 8,0 έως 8,3 - αυτό έγινε με γραμμή. Ο διακομιστής SQL ανέλυσε την αίτηση κάθε φορά, το επεξεργάστηκε, δημιούργησε το σχέδιο εκτέλεσης, που προστέθηκε, έστειλε την εντολή στο 1C της επιτυχίας και έλαβε το ακόλουθο αίτημα. Και ένα τέτοιο βήμα προς βήμα περπάτησε από το διακομιστή εφαρμογών 1C στο MS SQL.

Είναι σαφές ότι εάν έχετε 40 εγγραφές στο έγγραφο, δεν πρέπει να υπάρχουν προβλήματα. Εάν έχετε 10 χιλιάδες αρχεία (υπάρχουν οργανισμοί όπου στα κανονιστικά έγγραφα, ένα εκατομμύριο εγγραφές), τότε αυτή η διαδικασία διαρκεί πολύ καιρό. Μια καταχώρηση επεξεργάζεται πολύ γρήγορα, αλλά στο έγγραφο είναι πάρα πολύ. Τι είναι τα έξοδα; Στο δίκτυο, στην εκτέλεση του ερωτήματος, στο σήμα επιστροφής, στην επεξεργασία αυτού του σήματος στο σύστημα 1C, το άθροισμα των τεσσάρων βημάτων. Όλα τα στάδια συνοψίζονται, πολλαπλασιάζονται κατά ένα εκατομμύριο γραμμές και λαμβάνονται οι μακροχρόνιες προσδοκίες μας. Είναι σαφές ότι δεν είναι τρομερό.

Στο 1C, ξεκινώντας από 8,3, γίνονται βελτιώσεις. Τώρα το αίτημα εισαγωγής σε προσωρινούς πίνακες και στα μητρώα πληροφοριών προετοιμάζεται στον SQL Server και η περαιτέρω εκτέλεση του συμβαίνει με τη βοήθεια των κλασικών κλήσεων RPC, όπου 1C πάροχος πρόσβασης (Native ή OLE DB) ομάδες εγγραφών και τα εισάγει από τις n χορδές (συνήθως 100 γραμμές).

Έτσι, επιτυγχάνεται επιτάχυνση από 30% έως 300%. Αλλά δεν είναι ακόμα αρκετό, γιατί σήμερα έχετε 10 χιλιάδες γραμμές, αύριο είναι 20 χιλιάδες γραμμές. Αυτό δεν είναι μια θεμελιώδης λύση στο πρόβλημα, εξακολουθείτε να το συναντήσετε, αλλά μόνο έξι μήνες / έτος.

Τι πλέον Γρήγορο ένθετο σε SQL Server, και μάλιστα σε οποιοδήποτε DBMS;

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

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

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

Σε κάθε περίπτωση, αυτή η μέθοδος επιτρέπει την επίτευξη 5-10 φορές αποτέλεσμα.

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

Οι επιλογές βελτιστοποίησης είναι ατελείωτες

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

****************

Το άρθρο αυτό είναι γραμμένο σύμφωνα με την έκθεση της έκθεσης () που διαβάζεται στην κοινοτική διάσκεψη του Infostart 2017.

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

Παράδειγμα 1. Δημιουργήστε μια μεταβλητή συμβολοσειράς με κείμενο.

Row-free \u003d "Hello World!";

Λειτουργίες εργασίας με γραμμές στο 1C 8.3

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

Στρατίνη

Strdlin (<Строка>) . Επιστρέφει τον αριθμό των χαρακτήρων που περιέχονται στη συμβολοσειρά που μεταδίδονται στην παράμετρο.

Παράδειγμα 2. Υπολογίστε τον αριθμό των χαρακτήρων στην συμβολοσειρά "Hello World!".

Row \u003d "Γεια σου τον κόσμο!"; Martensumless \u003d stondin (string); Έκθεση (κλήση);

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

Σκόκας

Sokrel (<Строка>) . Κόβει τους ασήμαντους χαρακτήρες στα αριστερά του πρώτου σημείου σύμβολο στη σειρά.
Μη ανεπιθύμητα σύμβολα:

  • χώρος;
  • μη απαλλαγμένο χώρο.
  • κατάταξη εις πίνακα;
  • Επιστροφή μεταφοράς;
  • γραμμή μετάφρασης;
  • Μετάφραση φόρμας (σελίδες).

Παράδειγμα 3. Αφαιρέστε όλους τους χώρους στην αριστερή πλευρά της γραμμής "World!" Και να επισυνάψετε σε αυτό τη γραμμή "Hello".

Line \u003d sokrel ("Ειρήνη!"); Row \u003d "Hello" + γραμμή. Αναφορά (συμβολοσειρά);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα ισχύει στην οθόνη "Hi Mir!".

Σοκ

Copp (<Строка>) . Κόβει τους ασήμαντους χαρακτήρες στα δεξιά του πρώτου σημείου συμβόλου στη σειρά.

Παράδειγμα 4. Για να σχηματίσουν από τη σειρά "Γεια" και "Ειρήνη!" φράση "Hello World!"

Row \u003d Cropp ("Γεια") + "+ Sokrel (" Ειρήνη! "); Αναφορά (συμβολοσειρά);

Sokrlp

Sokrlp (<Строка>) . Κόβει από ασήμαντους χαρακτήρες στα δεξιά του πρώτου σημείου συμβόλου στη σειρά, κόβει επίσης ασήμαντους χαρακτήρες στα αριστερά του πρώτου σημαντικού χαρακτήρα στη σειρά. Αυτή η λειτουργία χρησιμοποιείται συχνότερα από τις δύο προηγούμενες, καθώς είναι πιο ευπροσάρμοστο.

Παράδειγμα 5. Αφαιρέστε τους ασήμαντους χαρακτήρες που στέκονται στα αριστερά και δεξιά στο όνομα του αντισυμβαλλομένου.

Αντισυμβαλλόμενο \u003d αναφορές. Πρωτάθλημα. Enti-Moving ("Inn", "0777121211"). Αντισυμβαλλόμενο \u003d αντισυμβαλλόμενο. Προθεσμιακό αντικείμενο (); Αντισυμβαλλόμενο. Όνομα \u003d coolp (αντισυμβαλλόμενο. Όνομα); Αντισυμβαλλόμενο. Για να προσλάβετε ();

ένα λιοντάρι

Ενα λιοντάρι(<Строка>, <ЧислоСимволов>) . Λαμβάνει τους πρώτους χαρακτήρες συμβολοσειρών, ο αριθμός των χαρακτήρων υποδεικνύεται στην παράμετρο Σλοβατάκια.

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

Αρχικά δεδομένα \u003d λιοντάρι (υπάλληλος. Εννοώ, 1); Αρχικότητα \u003d Λιοντάρι (υπάλληλος. Διαγραφή, 1); FULFILL \u003d ΕΡΓΑΣΙΑ.FAMILIA + "" + Αρχική και "." ". + Αρχικότητα + ".";

σωστά

Δικαιώματα (<Строка>, <ЧислоСимволов>) . Λαμβάνει τα πιο πρόσφατα σύμβολα συμβολοσειρά, ο αριθμός των χαρακτήρων υποδεικνύεται στην παράμετρο Σλοβατάκια. Εάν ο καθορισμένος αριθμός χαρακτήρων υπερβεί το μήκος της γραμμής, τότε ολόκληρη η συμβολοσειρά επιστρέφεται.

Παράδειγμα 7. Αφήστε την ημερομηνία στη μορφή "GGHHMDD" να καταγράφεται στο τέλος της μεταβλητής συμβολοσειράς, για να πάρετε μια γραμμή με την ημερομηνία και να το μετατρέψετε στον τύπο ημερομηνία.

Line \u003d "τρέχουσα ημερομηνία: 20170910"; STRFEDATE \u003d δικαιώματα (συμβολοσειρά, 8); Ημερομηνία \u003d Ημερομηνία (Strefewar);

Μεσο ΜΑΖΙΚΗΣ ΕΝΗΜΕΡΩΣΗΣ

Περιβάλλοντα (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Παίρνει ένα υποσύνολο από τη σειρά που μεταδίδεται στην παράμετρο Γραμμήξεκινώντας από τον αριθμό χαρακτήρων του οποίου καθορίζεται στην παράμετρο Ξεκίνα και το μήκος που μεταδίδεται στην παράμετρο Σλοβατάκια.Η αρίθμηση χαρακτήρων στη συμβολοσειρά αρχίζει με 1. Εάν στην παράμετρο Ξεκίνα Η τιμή είναι μικρότερη ή ίση με το μηδέν, η παράμετρος λαμβάνει την τιμή 1. Εάν η παράμετρος Nizalsimvol Δεν έχει καθοριστεί, τότε τα σύμβολα επιλέγονται μέχρι το τέλος της γραμμής.

Παράδειγμα 8. Ας υποθέσουμε ότι στη μεταβλητή String, ξεκινώντας από την ένατη θέση περιέχει τον κωδικό περιοχής, θα πρέπει να το πάρετε και να το γράψετε σε ξεχωριστή συμβολοσειρά.

Line \u003d "περιοχή: 99 Μόσχα"; Περιοχή \u003d μέσων (συμβολοσειρά, 9, 2);

Στρεμώ

Στρεμώ<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Αναζητά την καθορισμένη υποενότητα στη συμβολοσειρά, επιστρέφει τον αριθμό θέσης του πρώτου χαρακτήρα που βρέθηκε υπογείων. Εξετάστε τις παραμέτρους αυτής της δυνατότητας:

  • Γραμμή. Γραμμή πηγής?
  • Υπογράμμιση. Επιθυμητή υποσύνολο.
  • Κατεύθυνση. Καθορίζει την κατεύθυνση αναζήτησης της υποτίτησης στη σειρά. Μπορεί να πάρει τιμές:
    • Κατεύθυνση;
    • Κατεύθυνση;
  • Στασιμότητα. Καθορίζει τη θέση στη συμβολοσειρά από την οποία αρχίζει η αναζήτηση.
  • Ανατροφοδότηση. Υποδεικνύει τον αριθμό εισόδου της επιθυμητής υποτίτησης στη γραμμή προέλευσης.

Παράδειγμα 9. Στη γραμμή "Γεια σας στον κόσμο!" Προσδιορίστε τη θέση της τελευταίας καταχώρησης του συμβόλου "και".

Drive \u003d stret ("hello mir!", "Και", κατεύθυνση από το .sconsion). Αναφορά (τροφοδότης);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα ισχύει στον αριθμό οθόνης της τελευταίας καταχώρησης του συμβόλου "και": 9.

Φως

Vrega (<Строка>) . Μετατρέπει όλους τους χαρακτήρες της καθορισμένης συμβολοσειράς σε 1C 8 στον κορυφαίο μητρώο.

Παράδειγμα 10. Μετατρέψτε τη γραμμή "Hello Mir!" Στο κορυφαίο μητρώο.

Rangered \u003d καθυστέρηση ("Hello World!"); Έκθεση (κωπηλασία).

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα ισχύει στην οθόνη της γραμμής "Γεια σας στον κόσμο!"

Nreg

Nrega (<Строка>) . Μετατρέπει όλους τους χαρακτήρες της καθορισμένης συμβολοσειράς σε 1C 8 στο κατώτερο μητρώο.

Παράδειγμα 11. Μετατρέψτε μια συμβολοσειρά "Hello Mir!" σε χαμηλότερο μητρώο.

Strochanneg \u003d nreg ("Γεια σας pee!"); Έκθεση (κωπηλασία).

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα εξάγει στην οθόνη της γραμμής "Γεια σας ειρήνη!"

Treg.

Trega (<Строка>) . Μετατρέπει μια συμβολοσειρά ως εξής: Το πρώτο σύμβολο κάθε λέξης μεταφράζεται στην κεφαλή, οι υπόλοιπες λέξεις της λέξης μεταφράζονται στο κατώτερο μητρώο.

Παράδειγμα 12. Κάντε τα κεφάλια των πρώτων γραμμάτων λέξεων στη γραμμή "Γεια σας στον κόσμο!".

Stinkategate \u003d treg ("Hello Peace!"); Έκθεση (stinkate);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα εξάγει στην οθόνη της γραμμής "Γεια σας ειρήνη!"

Σύμβολο

Σύμβολο(<КодСимвола>) . Παίρνει ένα σύμβολο στον κώδικα του σε κωδικοποίηση Unicod.

Παράδειγμα 13. Προσθέστε στα αριστερά και δεξιά στη γραμμή "Γεια σας στον κόσμο!" Σύμβολο ★

Passages String \u003d Σύμβολο ("9733") + "Hello World!" + Σύμβολο ("9733"). Αναφορά (περάσματα συμβολοσειράς);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα εμφανιστεί στην οθόνη της συμβολοσειράς "★ Hi Peace! ★"

Kodsimvol.

Codeimvol (<Строка>, <НомерСимвола>) . Λάβετε έναν κωδικό συμβόλου σε Unicode που κωδικοποιεί από μια συμβολοσειρά που καθορίζεται στην πρώτη παράμετρο που βρίσκεται στη θέση που καθορίζεται στη δεύτερη παράμετρο.

Παράδειγμα 14. Μάθετε τον κώδικα του τελευταίου συμβόλου στην γραμμή "Hi World!".

Row \u003d "Γεια σου τον κόσμο!"; Codeimvol \u003d codeimvol (string, stringle (string)); Αναφορά (codeimvol);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα ισχύει στον κώδικα συμβόλου "!" - 33.

Κενή γραμμή

Κενή γραμμή (<Строка>) . Ελέγχει αν η συμβολοσειρά είναι μόνο από ασήμαντους χαρακτήρες, δηλαδή αν είναι άδειο.

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

Άδειο \u003d μεταλλαγμένο (""); Αναφορά (κενό);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα εξάγει στην οθόνη "Ναι" (έκφραση συμβολοσειράς λογικής τιμής Αληθής).

Λερώνω

Relust (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Βρείτε στην αρχική γραμμή όλες τις καταχωρήσεις της αναζήτησης και την αντικαθιστά στην υποκατάσταση υποκατάστασης.

Παράδειγμα 16. Στη γραμμή "Γεια σας στον κόσμο!" Αντικαταστήστε τη λέξη "WORLD" στη λέξη "Φίλοι".

Row \u003d relus ("hello mir!", "Mir", "φίλοι")? Αναφορά (συμβολοσειρά);

Το αποτέλεσμα της εκτέλεσης αυτού του κώδικα θα εξάγει στην οθόνη "Γεια σας φίλους!"

Στρέφω

Strokelost (<Строка>) . Σας επιτρέπει να υπολογίσετε τον αριθμό των γραμμών σε μια σειρά πολλαπλών γραμμών. Για τη μετάβαση Νέα συμβολοσειρά Το 1C 8 χρησιμοποιεί ένα σύμβολο ΥΣΤΕΡΟΓΡΑΦΟ. (Σύμβολο μετάφρασης συμβολοσειράς).

Παράδειγμα 17. Προσδιορίστε τον αριθμό των γραμμών στο κείμενο:
"Πρώτη γραμμή
Δεύτερη συμβολοσειρά
Τρίτη γραμμή »

Αριθμός \u003d Καπάκι Strover (σύμβολα "πρώτης σειράς" +. PC + "The Second Line" + χαρακτήρες. PC + "τρίτη συμβολοσειρά"). Αναφορά (αριθμός);

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

Plugulastrik

Plootchikstka (<Строка>, <НомерСтроки>) . Παίρνει μια συμβολοσειρά σε μια σειρά πολλαπλών γραμμών από τον αριθμό του. Η αριθμητική σειρά αρχίζει με 1.

Παράδειγμα 18. Πάρτε την τελευταία συμβολοσειρά στο κείμενο:
"Πρώτη γραμμή
Δεύτερη συμβολοσειρά
Τρίτη γραμμή »

Κείμενο \u003d "Πρώτη γραμμή" + χαρακτήρες. PC + "The Second Line" + χαρακτήρες. FS + "Τρίτη σειρά". Lastastright \u003d Plisproktriktka (κείμενο, Strokelock (κείμενο)); Αναφορά (τελευταία φορά);

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

Στροβιλίζω

Στροβιλίζεται (<Строка>, <ПодстрокаПоиска>) . Επιστρέφει τον αριθμό των καταχωρήσεων της καθορισμένης υποτίτησης στη συμβολοσειρά. Η λειτουργία είναι ευαίσθητη στο μητρώο.

Παράδειγμα 19. Προσδιορίστε πόσες φορές εισέρχεται στη χορδή στο 1C 8.3 και 8.2. Το γράμμα "C", ανεξάρτητα από το μητρώο του.

Row \u003d "σειρές σε 1c 8.3 και 8.2". Αριθμοί \u003d ετικέτα (καθυστέρηση (συμβολοσειρά), "c"); Αναφορά (αριθμούς);

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

Προγραμματισμένος

Rone (<Строка>, <СтрокаПоиска>) . Ελέγχει αν η συμβολοσειρά πέρασε στην πρώτη παράμετρο, από τη σειρά στη δεύτερη παράμετρο.

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

Inn \u003d counterparty.inn; Ξεκινά μαζί \u003d Rrenced (Inn, "1"). Εάν ξεκινήσει από τότε // ο κωδικός σας τελείωσε.

Strazanacivna

Σπάτωση (<Строка>, <СтрокаПоиска>) . Ελέγχει αν η συμβολοσειρά τελείωσε στην πρώτη παράμετρο, στη γραμμή στη δεύτερη παράμετρο.

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

Inn \u003d counterparty.inn; Τυποποιημένες βαλβίδες \u003d σπασμωδών (Inn, "2"). Εάν το τελειώσετε τότε // ο κωδικός σας τελείωσε.

Λουρί

Ενταση<Строка>, <Разделитель>, <ВключатьПустые>) . Εξαρτήματα Η συμβολοσειρά στο τμήμα σύμφωνα με τα καθορισμένα σύμβολα διαχωριστή και καταγράφει τις προκύπτουσες συμβολοσειρές σε μια συστοιχία. Στην πρώτη παράμετρο, η γραμμή προέλευσης αποθηκεύεται, στη δεύτερη γραμμή που περιέχει τον διαχωριστή, στο τρίτο υποδεικνύεται αν η εγγραφή κενών γραμμών στη συστοιχία (από προεπιλογή Αληθής).

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

Σειρά \u003d "1; 2; 3"; Array \u003d ιμάντα (χορδή, ";"); Για Sch \u003d 0 από μια συστοιχία. Αριθμός () - 1 Array Afray Cycle [SCH] \u003d Αριθμός (Crolp (Array [SCH])). Array Community [SCH] \u003d 0; Endrequency endropset.

Ως αποτέλεσμα της εκτέλεσης, ένας πίνακας θα ληφθεί με αριθμούς από 1 έως 3.

Εγκεφαλικό

Στρέφω<Строки>, <Разделитель>) . Μετατρέπει μια σειρά γραμμών από την πρώτη παράμετρο στη συμβολοσειρά που περιέχει όλα τα στοιχεία της συστοιχίας διαμέσου του διαχωριστή που καθορίζεται στη δεύτερη παράμετρο.

Παράδειγμα 23. Χρήση μιας σειράς αριθμών από το προηγούμενο παράδειγμα, για να αποκτήσετε την αρχική συμβολοσειρά.

Για SCH \u003d 0 από μια συστοιχία. Αριθμός () - 1 συστοιχία κύκλου [SCH] \u003d συμβολοσειρά (πίνακας [SCH]). Κολύγιο; Line \u003d εγκεφαλικό επεισόδιο (πίνακας ";");

Σε αυτό το άρθρο, θα σας πω για τη λειτουργία της Γρήγορης Αναζήτησης 1C Enterprise 8. Τι είναι μια γρήγορη αναζήτηση; Πολύ απλό. Η γρήγορη αναζήτηση είναι ένας από τους τρόπους πλοήγησης σε μεγάλες λίστες αρχείων 1C. Αυτές μπορούν να είναι καταλόγους εγγράφων, καταλόγων, καταχωρητές είναι όλα που αντιπροσωπεύονται από πίνακες.

Τι είναι μια γρήγορη αναζήτηση;

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

Πρώτα απ 'όλα, πρέπει να σημειωθεί ότι στις διαμορφώσεις του 1C Enterprise 8 που χτίστηκε σε διαχειριζόμενες μορφές, η γρήγορη αναζήτηση λειτουργεί διαφορετικά παρά ΠΡΟΗΓΟΥΜΕΝΕΣ ΕΚΔΟΣΕΙΣ 1γ. Επομένως, θα αναλύσουμε ξεχωριστά τη χρήση της γρήγορης αναζήτησης στο διαχειριζόταν φόρμας και σε συνηθισμένο.

Γρήγορη αναζήτηση σε 1C Λογιστική 8.2

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


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

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

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

Υπήρχε ένα σημαντικό μέρος του άρθρου, αλλά χωρίς javascript δεν είναι ορατό!

Πώς να απολαύσετε γρήγορη αναζήτηση στο 1C; Εύκολα! Απλά αρχίστε να εκτυπώνετε αυτό που θέλετε να βρείτε σε αυτή τη στήλη.. Όπου υπάρχει ένας δείκτης. Στο παράδειγμα, στο παραπάνω σχήμα, πρέπει να εισαγάγετε τον αριθμό λογαριασμού. Για παράδειγμα, θέλετε να βρείτε ένα σκορ 50 ταμείο. Σε αυτή την περίπτωση, εισάγετε ( Κάντε κλικ στο ποντίκι Όχι οπουδήποτε!) Ο αριθμός 50 από το πληκτρολόγιο και εάν σε αυτή τη στήλη υπάρχει ένας λογαριασμός με τον ίδιο αριθμό (και, φυσικά, είναι), τότε η λίστα μετακινείται σε αυτή τη γραμμή και η ίδια η χορδή θα είναι αφιερωμένη. Το αποτέλεσμα εμφανίζεται στο στιγμιότυπο οθόνης του προγράμματος λογαριασμού παρακάτω.

δικτυακός τόπος_

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

Εάν αρχίσετε να πληκτρολογείτε τη λέξη "εισιτήριο" στο παραπάνω παράδειγμα, το κείμενο στο κάτω μέρος του παραθύρου θα εισαχθεί και στη συνέχεια στοιβάζονται. Συμβαίνει επειδή το συντομότερο Αρχή Η εισαγόμενη σειρά γρήγορης αναζήτησης παύει να ταιριάζει με την αρχή τουλάχιστον μιας γραμμής σε αυτή τη στήλη, το 1C Enterprise καταλήγει στο συμπέρασμα ότι η επιθυμητή γραμμή δεν βρέθηκε και σβήνει αυτόματα. Σχετικά με Θα πρέπει να θυμάστε δύο κανόνες.

Στο 1C Enterprise 8 η γρήγορη αναζήτηση γίνεται στην αρχή της γραμμής, δηλ. Η στήλη αναζητά μια σύμπτωση του κειμένου εισόδου με την αρχή μιας από τις σειρές αυτής της στήλης.
Αυτό συνεπάγεται μια σημαντική σύσταση: Κατά την είσοδο δεδομένων στα βιβλία αναφοράς, καλέστε τα στοιχεία έτσι ώστε να είναι βολική αναζήτηση με τη γρήγορη αναζήτηση. Για παράδειγμα, το όνομα του αντισυμβαλλομένου είναι καλύτερο να γράψετε ως "όνομαFirma LLC" από το "LLC Needfirma. Και ακόμη περισσότερο, δεν πρέπει να χρησιμοποιείτε εισαγωγικά και άλλους περιττούς χαρακτήρες στο όνομα (μιλάμε για την πλήρωση του ονόματος σε φόρμες).

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

Γρήγορη αναζήτηση σε 1C Λογιστική 8.3

Τώρα ας δούμε ποια είναι η διαφορά μεταξύ μιας γρήγορης αναζήτησης στην έκδοση 1C Enterprise 8.3. Η χρήση είναι σε μεγάλο βαθμό παρόμοια με την έκδοση 8.2, αλλά υπάρχει μια σημαντική διαφορά που πρέπει να θυμόμαστε.

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

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

δικτυακός τόπος_

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

δικτυακός τόπος_

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

δικτυακός τόπος_

Φαίνεται ότι Η γρήγορη αναζήτηση στη λογιστική 1C 8.3 αφήνει ακριβώς το ορατό μέρος της λίστας που ικανοποιεί τους όρους αναζήτησης. Σε αυτή την περίπτωση, το κουμπί Εύρεση εξαφανίζεται και αντ 'αυτού εμφανίζεται ένας φακός με ένα σταυρό (στο εικ. Τονισμένο), όταν κάνετε κλικ στο Where On Whold The List επιστρέφει την αρχική κατάσταση (Αυτό εξακολουθεί να υπογραμμίζει μια συμβολοσειρά που βρέθηκε ως αποτέλεσμα της γρήγορης αναζήτησης).

Ένα άλλο σημαντικό χαρακτηριστικό της γρήγορης αναζήτησης στη λογιστική 1C 8.3 - Η σύμπτωση δεν αναζητά στην κορυφή της γραμμής, όπως στην έκδοση 8.2, αλλά είναι μια αναζήτηση για μια σύμπτωση με οποιοδήποτε μέρος των σειρών στη στήλη. Έτσι, αν ο αντισυμβαλλόμενος ονομάζεται "ltd.phirma llc", και όταν ψάχνετε για να αρχίσετε να εισέρχονται στο "Namefirma LLC", τότε θα υπάρχει ακόμα μια συμβολοσειρά!

Συμπληρώσαμε συμπεράσματα

Έτσι, μια γρήγορη αναζήτηση στη λογιστική 1C 8.2 και τις προηγούμενες εκδόσεις προορίζεται να μετακινηθεί στη λίστα στην επιθυμητή γραμμή και στη λογιστική 1C 8.3 Γρήγορη αναζήτηση λειτουργεί ως κανονικό φίλτρο, κρύβοντας περιττό μέρος της λίστας.