Επεξεργασία συνδρομών σε εκδηλώσεις 1c 8.2. Εκχώρηση χειριστών συμβάντων χρησιμοποιώντας συνδρομές συμβάντων. Οδηγίες χρήσης του προγράμματος Event Study

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

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

Τυπική Συμπεριφορά

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

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

Όπως μπορούμε να δούμε, στο αρχικό στάδιο καλούνται οι χειριστές συμβάντων “ProcessingFill” (για τη δημιουργία ενός νέου στοιχείου) ή “On Copying” (για τη δημιουργία ενός στοιχείου με βάση ένα υπάρχον). Και στις δύο περιπτώσεις, αφού καλέσετε τους κατονομαζόμενους χειριστές, εκτελείται η διαδικασία "OnInstallNewCode", όπου ο προγραμματιστής μπορεί να ορίσει ένα πρόθεμα στον κώδικα ή να παρακάμψει τη συμπεριφορά της πλατφόρμας κατά την εκχώρηση ενός νέου κώδικα.

Κατά τη σύνταξη ενός στοιχείου καταλόγου, είτε πρόκειται για ένα νέο στοιχείο είτε για ένα υπάρχον, ονομάζονται τρεις χειριστές: «ProcessingFillCheck» (σε αυτό το στάδιο ο χειριστής μπορεί να ελέγξει την ορθότητα των δεδομένων που έχουν εισαχθεί και, εάν υπάρχουν σφάλματα, να αρνηθεί να γράψει). "BeforeWrite" (μέχρι να εγγραφεί το αντικείμενο στη βάση δεδομένων, μπορείτε να προσαρμόσετε τις τιμές των λεπτομερειών και να ελέγξετε τυχόν πρόσθετες συνθήκες) και μετά "OnRecord" (έχει γίνει εγγραφή στη βάση δεδομένων, αλλά η συναλλαγή δεν έχει κλείσει , ο προγραμματιστής μπορεί να ελέγξει τα δεδομένα μετά την εγγραφή και, εάν είναι απαραίτητο, να ακυρώσει τη συναλλαγή).

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

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

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

Η πλευρά χωρίς έγγραφα

Ας δούμε τώρα μια ενδιαφέρουσα κατάσταση. Ας πούμε ότι για τον κατάλογό μας "SimpleDirectory" ορίζονται τρεις συνδρομές στο συμβάν "BeforeRecord":

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

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

Υποχώρηση

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

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

Υλοποιήθηκε στην έκδοση EDT 1.7.0.567.

Στο 1C:Enterprise Development Tools (EDT) έχουμε εφαρμόσει ένα πρωτότυπο ενός νέου εργαλείου. Το όνομα εργασίας αυτού του εργαλείου είναι editor Όλες οι συνδρομές εκδηλώσεων. Θα σας βοηθήσει να αναλύσετε εύκολα τις συνδρομές σε όλα τα συμβάντα που υπάρχουν στη λύση εφαρμογής.

Συνδρομές εκδηλώσεων

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

Αποδεικνύεται ότι η συνδρομή είναι ένας βολικός και καθολικός μηχανισμός. Αλλά σε μεγάλες λύσεις εφαρμογών ο αριθμός των συνδρομών εκδηλώσεων μπορεί να φτάσει αρκετές εκατοντάδες. Γίνεται άβολο να τα αναλύσουμε στο δέντρο διαμόρφωσης, σε μια γραμμική λίστα. Για παράδειγμα, σε μια λύση εφαρμογής 1C: Enterprise Management (ERP)περισσότερες από 340 συνδρομές εκδηλώσεων.

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


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

Όλες οι συνδρομές εκδηλώσεων

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


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


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

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


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


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


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


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

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


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


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


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

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

Πρώτα απ 'όλα, μπορείτε να καλέσετε αυτό το εργαλείο απευθείας στο πρόγραμμα επεξεργασίας.


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


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


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


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

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

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

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

Για παράδειγμα, προέκυψε μια εργασία - είναι απαραίτητο να καταγράψετε ορισμένα δεδομένα (πληροφορίες σχετικά με τις δραστηριότητες της εταιρείας) σε έγγραφα πληρωμής μετά το σχηματισμό των κύριων κινήσεων του εγγράφου (που δημιουργούνται στο συμβάν "Επεξεργασία Επεξεργασίας"). Θα υλοποιήσουμε την εργασία χρησιμοποιώντας τη διαμόρφωση "Manufacturing Enterprise Management", εκδ. 1.3.

Ας δούμε τη λύση πιο αναλυτικά:

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

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

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

Χειριστής- ένδειξη της διαδικασίας κατά την οποία θα πραγματοποιηθεί η επεξεργασία. Ας επιλέξουμε μια γενική ενότητα για αυτούς τους σκοπούς Γενικού σκοπού.

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

Ας εξετάσουμε τις παραμέτρους του:

Πηγή- αυτό το αντικείμενο του τύπου DirectoryObject ή DocumentObject για το οποίο πραγματοποιείται η ενέργεια.

Αρνηση- μια παράμετρος που σας επιτρέπει να ακυρώσετε τη δημοσίευση ενός εγγράφου υπό ορισμένες προϋποθέσεις.

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

Ας εστιάσουμε στην παράμετρο Πηγή. Για την εργασία μας, ο τύπος αυτής της παραμέτρου θα είναι - DocumentObject. Μια συλλογή είναι διαθέσιμη για αυτόν τον τύπο κινήσεις, το οποίο περιέχει όλα τα σύνολα εγγραφών μητρώου για τα οποία αυτό το έγγραφο είναι καταγραφικό.

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

Ας γράψουμε τον παρακάτω κώδικα:

Σετ = Πηγή. Κινήσεις; Υπολογισμοί = Σύνολα. Διακανονισμοί με αντισυμβαλλόμενους. Για κάθε Σελίδα Κύκλου Υπολογισμών. Κατεύθυνση = Πηγή. Κατεύθυνση; Τέλος εαν ;

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

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

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

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

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

Τα συμβάντα μπορούν να δημιουργηθούν σε ελεγχόμενη μορφή: On ReadingOnServer, OnCreatingOnServer, OnOpening, κ.λπ.

Τα συμβάντα σε ελεγχόμενη μορφή δημιουργούνται στον πελάτη και στο διακομιστή: BeforeRecord, BeforeRecordOnServer.

Τα συμβάντα καλούνται σε διαφορετικές ενότητες: ElementForm, ObjectModule, ManagerModule.

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

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

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

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

Οδηγίες χρήσης του προγράμματος Event Study

Το πρόγραμμα Event Study δείχνει τα συμβάντα που δημιουργεί η πλατφόρμα 1C κατά τη διάρκεια διαδραστικών ενεργειών χρήστη. Η αρχή λειτουργίας είναι η εξής: ο χρήστης ανοίγει τον κατάλογο, το πρόγραμμα εμφανίζει την αλυσίδα των γεγονότων. Ο χρήστης επισημαίνει ένα στοιχείο καταλόγου για διαγραφή και το πρόγραμμα εμφανίζει την ακολουθία των γεγονότων που συμβαίνουν. Τα συμβάντα εμφανίζονται με μια μικρή καθυστέρηση 3 δευτερολέπτων από προεπιλογή, αυτό είναι απαραίτητο για τον διαχωρισμό μιας αλυσίδας συμβάντων από μια άλλη αλυσίδα συμβάντων. Επομένως, πρέπει να εκτελέσετε διαδραστικές ενέργειες «αργά».

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

Το ίδιο το πρόγραμμα δεν μπορεί να προσδιορίσει ποια ενέργεια προκάλεσε την αλυσίδα των γεγονότων. Σας συμβουλεύω να πληκτρολογήσετε στο πεδίο "Action Cause" τα ονόματα των τελευταίων ενεργειών σας, για παράδειγμα, "Η φόρμα λίστας καταλόγου είναι ανοιχτή", "Ένα στοιχείο στον κατάλογο η λίστα επισημαίνεται για διαγραφή» κ.λπ. Αυτό θα διευκολύνει την ανάλυση των ενεργειών και των γεγονότων.

Τα συμβάντα καταγράφονται και εμφανίζονται για αντικείμενα που τοποθετούνται στην ενότητα "Ιχνηλάτηση συμβάντων", με την προϋπόθεση ότι η εγγραφή συμβάντων είναι ενεργοποιημένη στη φόρμα "Πρόσφατα συμβάντα".

Όλα τα καταγεγραμμένα συμβάντα μπορούν να προβληθούν μέσω της «Αναφοράς συμβάντων», η οποία βρίσκεται στην ενότητα «Υπηρεσία».

Για να διαγράψετε γρήγορα όλες τις καταγεγραμμένες ενέργειες και συμβάντα, στην ενότητα "Υπηρεσία", επιλέξτε "Εκκαθάριση συμβάντων και ενεργειών".

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

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

Εφαρμογή

Το άρθρο εξετάζει την έκδοση 8.3 της πλατφόρμας 1C:Enterprise. Οι πληροφορίες που παρουσιάζονται είναι σχετικές με τις τρέχουσες εκδόσεις πλατφόρμας.

Συνδρομές εκδηλώσεων

Το άρθρο εξετάζει πολλά παραδείγματα χρήσης ενός από τα βοηθητικά αντικείμενα της πλατφόρμας 1C:Enterprise 8 - συνδρομές εκδηλώσεων.

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

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

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

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

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

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

Πρόβλημα 1

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

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

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

Στο νήμα Είναι κοινάτο παράθυρο αντικειμένων διαμόρφωσης δημιουργεί μια νέα συνδρομή συμβάντος. Στην παλέτα ιδιοτήτων, εισαγάγετε το όνομα της συνδρομής Έλεγχος του ονόματος του καταλόγου. Στο πεδίο επιλογής Πηγήεπισημάνετε τον τύπο δεδομένων DirectoryObject.Counterparties. Στο πεδίο επιλογής Εκδήλωσηεπιλέξτε εκδήλωση BeforeWrite(). Μετά την επεξεργασία αυτού του συμβάντος, θα ενεργοποιηθεί η διαδικασία επεξεργασίας συνδρομής συμβάντος (Εικ. 2).

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

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

Λίστα διαδικασιών Έλεγχος του DirectoryNameBeforeWriting()

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

Πρόβλημα 2

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

Δημιουργήστε ένα νέο διαπραγματεύσιμο μητρώο με το όνομα Διαθέσεις Μετρητά. Επιλέξτε τον καταχωρητή «Εντολή εκροής μετρητών». Προσθήκη διαστάσεων μητρώου:

Δημιουργήστε έναν πόρο μητρώου:

Αθροισμα, τύπος Αριθμός, Μήκος – 15, Ακρίβεια – 2.

Στο έγγραφο «Εντολή δαπανών μετρητών» δημιουργήστε τα στοιχεία ΆρθροΚινήματαμε τύπο δεδομένων DirectoryLink.ArticlesMoneyMovements.

Ονομα - Κινήσεις για διάθεση μετρητών;
Πηγή - DocumentObject.RKO;
Εκδήλωση - Επεξεργασία Διεξαγωγή.

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

Λίστα διαδικασιών Movements on Disposal of CashProcessingProcessing()

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

Πρόβλημα 3

Εξασφαλίστε την αντικατάσταση της κύριας φόρμας του παραστατικού «Εντολή δαπανών μετρητών».

Δημιουργήστε ένα νέο έγγραφο φόρμας «Εντολή απόδειξης μετρητών» με το όνομα DocumentFormClient. Πραγματοποιήστε αυθαίρετες αλλαγές στη φόρμα, για παράδειγμα, αλλάξτε τη σειρά των στοιχείων ελέγχου. Για να καλέσετε αυτήν τη φόρμα πρέπει να χρησιμοποιήσετε μια συνδρομή εκδήλωσης ProcessGetForm()στη μονάδα διαχείρισης εγγράφων «Εντολή απόδειξης μετρητών».

Δημιουργήστε μια νέα συνδρομή εκδήλωσης:

Ονομα - MainFormRKO;
Πηγή - DocumentManager.RKO;
Εκδήλωση - ProcessingFormReceiving.

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

Λίστα διαδικασιών MainFormRKOFormReceivingProcessing()

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

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

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

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



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: