Εργασίες ρουτίνας και παρασκηνίου. Εργασίες ρουτίνας και παρασκηνίου Δημιουργήστε μια εργασία ρουτίνας στο 1s 8.2

Έννοια ασύγχρονου προγραμματισμού

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

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

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

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

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

Εργασίες παρασκηνίου στο 1C:Enterprise 8

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

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

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

Επιλογή πελάτη-διακομιστή

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

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

Επιλογή αρχείου

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

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

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

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

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

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

Ένα παράδειγμα ασύγχρονης εκτέλεσης κώδικα στο 1C:Enterprise 8

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

Ας δείξουμε την απλότητα και την κομψότητα της ασύγχρονης εκτέλεσης κώδικα στο 1C:Enterprise 8!

Βήμα 1.Ας δημιουργήσουμε ένα νέο σύστημα ασφάλειας πληροφοριών για την ανάπτυξη διαμόρφωσης

Βήμα 2.Στη διαμόρφωση θα προσθέσουμε τη γενική ενότητα "Asynchronous Handlers"

Γιατί προσθέσαμε μια κοινή λειτουργική μονάδα; Όλα είναι απλά εδώ: για την εκτέλεση ασύγχρονων λειτουργιών στο 1C:Enterprise 8, χρησιμοποιούνται εργασίες παρασκηνίου, οι οποίες έχουν τον δικό τους διαχειριστή - "BackgroundTask Manager". Αυτό το αντικείμενο έχει μια μέθοδο "Εκτέλεση", με τη βοήθεια της οποίας εκκινείται η εργασία παρασκηνίου.

Ας στραφούμε στον βοηθό σύνταξης.

Άρα θα χρειαστούμε μια κοινή ενότητα.

Βήμα 3.Στη γενική ενότητα "Asynkronous Handlers" θα προσθέσουμε τη διαδικασία εξαγωγής OurLongOperation()

Διαδικασία OurLongOperation(Duration) Export // Προσομοίωση μακροπρόθεσμης ενέργειας (Διάρκεια δευτ.). OperationStartDate = CurrentDate(); Ενώ CurrentDate() - Ημερομηνία έναρξης λειτουργίας< Длительность Цикл КонецЦикла; КонецПроцедуры

Βήμα 4.Προσθέστε την επεξεργασία "Asynchronous Programming Concept" στη διαμόρφωση (μπορείτε να δημιουργήσετε εξωτερική επεξεργασία)

Προσθέστε ένα χαρακτηριστικό στη φόρμα:

Διάρκεια (Αριθμός)

και δύο ομάδες

Εκτελέστε LongOperation.

Εκτελέστε μια μακροχρόνια λειτουργία ασύγχρονα.

Βήμα 5.Σύμφωνα με τον βοηθό σύνταξης, συμπληρώστε τη μονάδα φόρμας

&Στη διαδικασία πελάτη Εκτέλεση Long-RunningOperation(Command) ExecuteLong-RunningOperationOnServer(); EndProcedure &OnServer Procedure ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Τέλος διαδικασίας &Στη διαδικασία πελάτη Εκτέλεση μακροχρόνιας λειτουργίας ασύγχρονα (εντολή) Εκτέλεση μακροχρόνιας λειτουργίας ασύγχρονα στον διακομιστή (); Τέλος διαδικασίας &Στον διακομιστή Διαδικασία Εκτέλεση μακράς-μακράς λειτουργίας ΑσύγχρονηΣτον διακομιστή() Παράμετροι = Νέος πίνακας; Parameters.Add(Duration); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parameters, New UniqueIdentifier, "Example of asynchronous programming concept"); Διαδικασία λήξης

Βήμα 6.Ας ξεκινήσουμε και ας ελέγξουμε!

Αποτέλεσμα:

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

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

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

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

Ένα παράδειγμα ασύγχρονης εκτέλεσης κώδικα στο 1C:Enterprise 8 χρησιμοποιώντας BSP

Ας εξετάσουμε ένα παράδειγμα εφαρμογής της έννοιας του ασύγχρονου προγραμματισμού στο 1C:Enterprise 8 στο BSP χρησιμοποιώντας το παράδειγμα επεξεργασίας "Τρέχουσες Υποθέσεις".

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

Ας αναλύσουμε τον κώδικα προγράμματος της φόρμας.

Το συμβάν φόρμας "When CreatedOnServer" καλεί τη διαδικασία "RunBackgroundTask" - αυτό χρειαζόμαστε.

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

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

Για να γίνει αυτό, οι προγραμματιστές χρησιμοποιούν τη μέθοδο ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



Σε μια συνδεδεμένη διαδικασία Connectable_CheckTaskComplete()οι προγραμματιστές καλούν τη συνάρτηση JobCompleted (TaskID)


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

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

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

Πώς να επιταχύνετε την εργασία στο 1C: Accounting 8.3 (έκδοση 3.0) ή απενεργοποιήστε εργασίες ρουτίνας και παρασκηνίου

15-01-2019T13:28:19+00:00

Όσοι από εσάς έχετε ήδη μεταβεί στη νέα έκδοση του 1C: Accounting 8.3 (έκδοση 3.0) έχετε παρατηρήσει ότι έχει γίνει πιο αργός από 2. Μερικές περίεργες επιβραδύνσεις, ατελείωτες εργασίες στο παρασκήνιο πολλές φορές την ημέρα, τις οποίες κανείς δεν της ζήτησε να εκτελέσει εν αγνοία μας.

Οι λογιστές μου μου είπαν αμέσως μετά τη μετάβαση ότι η νέα έκδοση του 1C: Accounting 3.0 είναι εντελώς αργή σε σύγκριση με τις προηγούμενες! Και είναι απλά αδύνατο να δουλέψεις.

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

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

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

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

Πώς να το κάνετε αυτό βήμα προς βήμα παρακάτω.

1. Μεταβείτε στην ενότητα "Διαχείριση" και επιλέξτε "Συντήρηση" () στον πίνακα ενεργειών:

2. Στο παράθυρο που ανοίγει, βρείτε και επιλέξτε «Εργασίες ρουτίνας και παρασκηνίου»:

3. Ανοίξτε κάθε εργασία που έχει "On" στη στήλη "On". υπάρχει αυγή.

4. Καταργήστε την επιλογή "Ενεργοποιημένο" και κάντε κλικ στο κουμπί "Αποθήκευση και κλείσιμο".

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

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

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

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

Τι είναι οι εργασίες ρουτίνας και παρασκηνίου στο 1C

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

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

Ρύθμιση εργασιών παρασκηνίου σε λειτουργία πελάτη-διακομιστή 1C

Αρχικά, ας δημιουργήσουμε ένα νέο αντικείμενο μεταδεδομένων - μια εργασία ρουτίνας. Θα ονομάσω την εργασία μου "Φόρτωση τιμών νομίσματος". Ας δούμε την παλέτα ιδιοτήτων αυτού του αντικειμένου διαμόρφωσης:

Λάβετε 267 μαθήματα βίντεο στο 1C δωρεάν:

  • Όνομα μεθόδου— διαδρομή προς τη διαδικασία που θα εκτελεστεί σε μια εργασία παρασκηνίου σύμφωνα με ένα δεδομένο χρονοδιάγραμμα. Η διαδικασία πρέπει να είναι σε μια κοινή ενότητα. Συνιστάται να μην χρησιμοποιείτε τυπικά, αλλά να δημιουργήσετε το δικό σας. Μην ξεχνάτε ότι οι εργασίες παρασκηνίου εκτελούνται στον διακομιστή!
  • Χρήση— ένδειξη χρήσης μιας εργασίας ρουτίνας.
  • Προκαθορισμένο— υποδεικνύει εάν η εργασία ρουτίνας είναι προκαθορισμένη. Εάν θέλετε η εργασία ρουτίνας να λειτουργεί αμέσως μετά την τοποθέτηση στη βάση δεδομένων, καθορίστε αυτήν τη σημαία. Διαφορετικά, θα χρειαστεί να χρησιμοποιήσετε την επεξεργασία Job Console ή να κάνετε την εργασία να εκτελεστεί μέσω προγραμματισμού.
  • Αριθμός επαναλήψεων όταν μια εργασία τερματίζεται ασυνήθιστα— πόσες φορές έγινε επανεκκίνηση της εργασίας παρασκηνίου εάν εκτελούνταν με σφάλμα.
  • Προσπαθήστε ξανά το διάστημα όταν η εργασία τερματιστεί ασυνήθιστα— πόσο συχνά θα επανεκκινείται η εργασία παρασκηνίου εάν ολοκληρώθηκε με σφάλμα.

Και το πιο ενδιαφέρον σκηνικό είναι Πρόγραμμα:

Εδώ διαμορφώνετε το διάστημα εκκίνησης της διαδικασίας που καθορίζεται στο πεδίο "Όνομα μεθόδου". Ας πούμε ότι έχω ρυθμίσει

Προσοχή!Μην ξεχάσετε να απενεργοποιήσετε τον αποκλεισμό της εκτέλεσης εργασιών ρουτίνας και παρασκηνίου σε επίπεδο DBMS!

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

Ρύθμιση εργασιών ρουτίνας σε λειτουργία αρχείου 1C

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

Στη λειτουργία αρχείου, μια εργασία ρουτίνας αρχικοποιείται όταν εκκινείται η μέθοδος "RunTaskProcessing()".

Για έναν συγκεκριμένο χρήστη, μπορείτε να διαμορφώσετε αυτήν τη μέθοδο ώστε να εκτελείται χρησιμοποιώντας μια άλλη μέθοδο −

ConnectWaitHandler( <ИмяПроцедуры>, <Интервал>, <Однократно>).

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

ConnectWaitHandler, 3600 );

Ένα βίντεο δύο λεπτών που δείχνει πώς να ρυθμίσετε μια εργασία ρουτίνας στον διαμορφωτή 1C:

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

Πρόσφατα δημοσίευσα ένα άρθρο: Ήρθε η ώρα να αυτοματοποιηθεί:

Εργασίες ρουτίνας και παρασκηνίου

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

Ο μηχανισμός εργασιών επιλύει τις ακόλουθες εργασίες:

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

Ο μηχανισμός εργασίας αποτελείται από τα ακόλουθα στοιχεία:

  • Μεταδεδομένα εργασιών ρουτίνας.
  • Τακτικές εργασίες.
  • Εργασίες στο παρασκήνιο.
  • Χρονοδιάγραμμα εργασιών.

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

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

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

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

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

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

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

Χρήση– ένδειξη χρήσης μιας εργασίας ρουτίνας.

Προκαθορισμένο– υποδεικνύει εάν η εργασία ρουτίνας είναι προκαθορισμένη.

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

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

Προσπαθήστε ξανά το διάστημα όταν η εργασία τερματιστεί ασυνήθιστα– πόσο συχνά θα επανεκκινείται η εργασία παρασκηνίου εάν ολοκληρώθηκε με σφάλμα.

Ρύθμιση προγράμματος

Πρόγραμμαολοκλήρωση της εργασίας:

Κάθε ώρα, μόνο μια μέραRepeatDays Period = 0, RepeatDays Period = 3600
Κάθε μέρα μια φορά την ημέραRepeatDays Period = 1, RepeatDays Period = 0
Μια μέρα, μια φοράPeriodRepeatDays = 0
Κάθε δεύτερη μέρα μια φορά την ημέραPeriodRepeatDays = 2
Κάθε ώρα από 01.00 έως 07.00 καθημερινάPeriodRepeatDays = 1RepeatPeriodDuringDay = 3600StartTime = 01.00

Ώρα λήξης = 07.00

Κάθε Σάββατο και Κυριακή στις 09.00RepeatDays Period = 1 WeekDays = 6, 7 StartTime = 09.00
Κάθε μέρα για μια εβδομάδα, παραλείψτε μια εβδομάδαPeriodRepeatDays = 1 PeriodWeeks = 2
Στις 01.00 μια φοράΏρα έναρξης = 01.00
Τελευταία μέρα κάθε μήνα στις 9:00.PeriodRepeatDays = 1 DayInMonth = -1StartTime = 09.00
Πέμπτη ημέρα κάθε μήνα στις 9:00PeriodRepeatDays = 1 DayIn Month = 5 StartTime = 09.00
Δεύτερη Τετάρτη κάθε μήνα στις 9:00PeriodRepeatDays = 1 DayWeekMonth = 2 DaysWeek = 3

Ώρα έναρξης = 09.00

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

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

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

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

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

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

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

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

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

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

Το σχήμα που παρουσιάζεται παραπάνω δείχνει τα περιεχόμενα αυτού του πίνακα.

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

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

Ένα παράδειγμα εργασίας με μια εργασία παρασκηνίου 1C - Μέθοδος "GetBackgroundTasks"

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

Η δομή μπορεί να περιέχει πεδία: Μοναδικό αναγνωριστικό, Κλειδί, Κατάσταση, Έναρξη, Τέλος, Όνομα, Όνομα μεθόδου, ΠρογραμματισμένηΕργασία.

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


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

Και προσθέστε τον ακόλουθο κώδικα σε αυτό:

Διαδικασία ProduceBackgroundCalculation(Parameter) Εξαγωγή

TimeStart = CurrentDate() ;

Ενώ CurrentDate() - Ώρα έναρξης Κύκλος

EndCycle ;

Διαδικασία λήξης

2. Ας δημιουργήσουμε μια επεξεργασία και ας τοποθετήσουμε ένα κουμπί στη φόρμα "Εκτέλεση της εργασίας στο παρασκήνιο"και στη διαδικασία για την επεξεργασία του γεγονότος κλικ στο κουμπί, προσθέστε τον ακόλουθο κώδικα:

&Στη διαδικασία πελάτη ExecuteTask(Command) ExecuteBackgroundTaskOnServer() ; Διαδικασία λήξης

Περιγραφή της καλούμενης διαδικασίας:

Διαδικασία &OnServer ExecuteBackgroundTaskOnServer()BackgroundTask Parameters = New Array; Παράμετροι BackgroundTask. Προσθήκη( "Κάποια παράμετρος" "Δοκιμή") ; BackgroundTaskParameters = Νέος πίνακας; Παράμετροι BackgroundTask. Προσθήκη( "Κάποια παράμετρος") ; BackgroundTasks. Τρέξιμο ( "Χειριστές εργασιών παρασκηνίου. Εκτελέστε Υπολογισμό Παρασκηνίου", BackgroundTask Parameters, New UniqueIdentifier, "Δοκιμαστική εργασία 2") ; Διαδικασία λήξης // Εκτέλεση BackgroundTaskOnServer()

Τώρα ας ξεκινήσουμε το 1C σε λειτουργία επιχείρησης και ας αρχίσουμε να εκτελούμε μια εργασία παρασκηνίου.


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

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

&Στη διαδικασία πελάτη GetBackgroundJob(Command) GetBackgroundJobOnServer() ; Διαδικασία λήξης

Το κείμενο της διαδικασίας στον διακομιστή:

Διαδικασία &OnServer GetBackgroundTasksOnServer() Παράμετροι επιλογής = Νέα δομή ("Όνομα" , "Δοκιμαστική εργασία 2") ; ListBackgroundTasks = BackgroundTasks. GetBackgroundTasks(Επιλογές Επιλογής) ; Για κάθε Εργασία Από τη Λίστα Αναφοράς Κύκλου Εργασιών Παρασκηνίου(Όνομα Εργασίας) ; EndCycle ; Διαδικασία λήξης // GetBackgroundTasksOnServer()

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

mob_info