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

Γεια σε όλους.
Σήμερα θα εξετάσουμε ενότητες της πλατφόρμας 1C Enterprise 8.2, υπάρχουν περισσότερα από αυτά στην έκδοση 8.1 και μερικές φορές δεν είναι τόσο εύκολο να το καταλάβεις.
Παράδειγμα:

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

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

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

Ας παραθέσουμε τις ενότητες που βρίσκονται στο 1C 8.2

Ενότητες της πλατφόρμας 1C Enterprise 8.2:

Μονάδα μέτρησης διαχειριζόμενη εφαρμογή
Τακτική ενότητα εφαρμογής
Μονάδα εξωτερικής σύνδεσης
Ενότητα συνεδρίας
Κοινές ενότητες
Μονάδα αντικειμένου
Ενότητα φόρμας
Μονάδα διαχείρισης αντικειμένων
Μονάδα διαχείρισης αξίας
Μονάδες συνόλου εγγραφών

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

Δεν περιέχουν όλες οι ενότητες ενότητες δήλωσης μεταβλητών και ενότητα κύριου προγράμματος.
Για παράδειγμα: Common module ή Session module.

Κανόνες συλλογής ενότητας:
1. Ορισμένες λειτουργικές μονάδες έχουν μεταγλωττιστεί πλήρως είτε από την πλευρά του πελάτη είτε από την πλευρά του διακομιστή. Όλες οι μέθοδοι σε αυτά είναι είτε από την πλευρά του πελάτη είτε από την πλευρά του διακομιστή. Ένα παράδειγμα λειτουργικής μονάδας πελάτη είναι μια λειτουργική μονάδα διαχειριζόμενης εφαρμογής.
2. Ορισμένες λειτουργικές μονάδες μπορούν να συνδυάζουν μεθόδους πελάτη και διακομιστή. Σε αυτήν την περίπτωση, για κάθε μέθοδο, πρέπει να καθορίσετε τις οδηγίες μεταγλώττισης - & AtClient ή & AtServer. Ένα παράδειγμα είναι οι ενότητες διαχειριζόμενης φόρμας.

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

Πού συντάσσονται οι ενότητες:
1. Thin Client (Παρέχει τη δυνατότητα χρήσης προγράμματος περιήγησης Ιστού).
2. Διακομιστής.
3. Χοντρός πελάτης.

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

Σκοπός κάθε ενότητας 1C 8.2

Φρουροί:Σκέφτηκες να αγοράσεις το 1C Enterprise και δεν ξέρεις από ποιον; Η εταιρεία LBS περιλαμβάνεται στους 20 κορυφαίους δικαιοδόχους 1C: Franchise. Ασχολείται με την αυτοματοποίηση της λογιστικής με βάση τα προϊόντα 1C. Αγοράστε προϊόντα 1C από την LBS και λάβετε υποστήριξη και υπηρεσία 1C υψηλής ποιότητας.

ΥΣΤΕΡΟΓΡΑΦΟ. Γέλα με το ανέκδοτο από τον Λουκασένκο))

Τι είναι οι ενότητες και σε τι ακριβώς προορίζονται; Η ενότητα περιέχει τον κωδικό προγράμματος. Επιπλέον, αξίζει να σημειωθεί ότι, σε αντίθεση με την πλατφόρμα 7.7, όπου ο κώδικας θα μπορούσε να βρίσκεται τόσο στις ιδιότητες των στοιχείων φόρμας όσο και στα κελιά των πινάκων διάταξης, στην πλατφόρμα 8.x οποιαδήποτε γραμμή κώδικα πρέπει να βρίσκεται σε οποιαδήποτε ενότητα. Συνήθως μια ενότητα αποτελείται από τρεις ενότητες - αυτή είναι μια ενότητα που περιγράφει μεταβλητές, μια ενότητα που περιγράφει διαδικασίες και λειτουργίες, καθώς και μια ενότητα του κύριου προγράμματος. Αυτή η δομή είναι τυπική για όλες σχεδόν τις μονάδες πλατφόρμας, με ορισμένες εξαιρέσεις. Ορισμένες ενότητες δεν έχουν ενότητα δήλωσης μεταβλητής και ενότητα κύριου προγράμματος. Για παράδειγμα, Session Module και οποιαδήποτε Common Module.

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

Ενότητα εφαρμογής

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

Υπάρχουν δύο διαφορετικές ενότητες εφαρμογών στην πλατφόρμα 8.2. Είναι μια ενότητα κοινής εφαρμογής και μια ενότητα διαχειριζόμενης εφαρμογής. Ενεργοποιούνται όταν εκκινούνται διάφοροι πελάτες. Αυτός είναι ο τρόπος με τον οποίο ενεργοποιείται η λειτουργική μονάδα διαχειριζόμενης εφαρμογής όταν το πρόγραμμα-πελάτης web, το πρόγραμμα-πελάτη thin και το παχύ πρόγραμμα-πελάτη εκκινούνται σε λειτουργία διαχειριζόμενης εφαρμογής. Και η λειτουργική μονάδα κανονικής εφαρμογής ενεργοποιείται όταν ο παχύς πελάτης εκκινείται σε κανονική λειτουργία εφαρμογής.

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

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

Μονάδα εξωτερικής σύνδεσης

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

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

Ενότητα συνεδρίας

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

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

Μην μπείτε στον πειρασμό ότι αυτή η λειτουργική μονάδα εκτελείται κάθε φορά που εκκινείται η εφαρμογή και τοποθετήστε σε αυτήν κώδικα που δεν σχετίζεται άμεσα με την προετοιμασία των παραμέτρων περιόδου λειτουργίας. Αυτό οφείλεται στο γεγονός ότι ο χειριστής SessionParameterSetting μπορεί να κληθεί επανειλημμένα κατά τη λειτουργία του συστήματος. Για παράδειγμα, αυτό συμβαίνει όταν έχουμε πρόσβαση σε μη αρχικοποιημένες παραμέτρους. Και παρόλο που είναι δυνατό να συλλάβουμε τη στιγμή της πρώτης εκκίνησης αυτού του συμβάντος (το RequiredParameters είναι τύπου Undefined), ωστόσο, θα πρέπει να ληφθεί υπόψη ότι αυτή η ενότητα έχει μεταγλωττιστεί σε προνομιακή λειτουργία, π.χ. δεν ελέγχει τα δικαιώματα πρόσβασης. Και το δεύτερο σημείο, δεν μπορούμε ακόμα να είμαστε εκατό τοις εκατό σίγουροι ότι το σύστημα θα ξεκινήσει. Ξαφνικά, παρουσιάζεται μια αποτυχία στη λειτουργική μονάδα της εφαρμογής και προσπαθούμε να εκτελέσουμε ορισμένες ενέργειες με τη βάση δεδομένων.

Κοινές ενότητες

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

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

Ενότητα φόρμας

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

Μονάδα αντικειμένου

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

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

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

Μονάδα διαχείρισης αντικειμένων

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

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

Υπόμνημα στο διάγραμμα: О.М. Client - Client common module. Ο. Μ. Διακομιστής - Κοινή μονάδα διακομιστή. Μ.Φ. Πελάτης - Διαδικασίες πελάτη της ενότητας φόρμας. Μ.Φ. Διακομιστής - Διαδικασίες διακομιστή της ενότητας φόρμας.

Εκτύπωση (Ctrl + P)

Τα αντικείμενα που βρίσκονται στον κλάδο δέντρου διαμόρφωσης γενικών μονάδων προορίζονται να περιέχουν κείμενα συναρτήσεων και διαδικασιών που μπορούν να κληθούν από οποιαδήποτε άλλη λειτουργική μονάδα διαμόρφωσης.
ΠΡΟΣΟΧΗ! Μια κοινή ενότητα μπορεί να περιέχει μόνο ορισμούς διαδικασιών και συναρτήσεων.
Κοινές διαδικασίες και λειτουργίες ενότητας για τις οποίες υποδεικνύονται οι επικεφαλίδες λέξη-κλειδίΟι εξαγωγές είναι μεταξύ εξαρτήματαπαγκόσμιο πλαίσιο. Μπορείτε να μάθετε περισσότερα σχετικά με τις διαδικασίες γραφής στη γενική ενότητα στις ενότητες "Μορφή κειμένων πηγής ενότητες λογισμικού"Και" Οι χειριστές "της ενσωματωμένης γλώσσας βοηθούν.
Για να επεξεργαστείτε μια κοινή λειτουργική μονάδα, στην παλέτα ιδιοτήτων ενός αντικειμένου του τύπου Common Modules του παραθύρου Configuration, στην ιδιότητα Module, κάντε κλικ στη σύνδεση Open. Το κείμενο της γενικής ενότητας θα εκδοθεί για επεξεργασία στο πρόγραμμα επεξεργασίας κειμένου του συστήματος 1C: Enterprise στη λειτουργία επεξεργασίας του κειμένου της ενότητας προγράμματος.
Η κοινή μονάδα, που αποτελεί μέρος της διαμόρφωσης, αποθηκεύεται μόνο ως μέρος της διαμόρφωσης.
Η ιδιότητα Καθολική καθορίζει εάν οι εξαγόμενες μέθοδοι της κοινόχρηστης λειτουργικής μονάδας αποτελούν μέρος του καθολικού περιβάλλοντος.
Εάν η ιδιότητα Καθολική έχει οριστεί σε True, τότε οι εξαγόμενες μέθοδοι της κοινής λειτουργικής μονάδας είναι διαθέσιμες ως μέθοδοι του καθολικού περιβάλλοντος.
Εάν η ιδιότητα Καθολική έχει οριστεί σε False, τότε δημιουργείται μια ιδιότητα στο καθολικό περιβάλλον με ένα όνομα που ταιριάζει με το όνομα της κοινής λειτουργικής μονάδας στα μεταδεδομένα. Αυτή η ιδιοκτησία είναι μόνο για ανάγνωση. Η τιμή αυτής της ιδιότητας είναι το αντικείμενο CommonModule. Οι μέθοδοι εξαγωγής αυτής της κοινής ενότητας είναι διαθέσιμες μέσω αυτού του αντικειμένου. Έτσι, η κλήση των μεθόδων μη καθολικών κοινών λειτουργικών μονάδων μοιάζει με XXXXX.YYYYY, όπου XXXXX είναι το όνομα της ιδιότητας που αντιστοιχεί στο περιβάλλον της κοινής λειτουργικής μονάδας και YYYYY είναι το όνομα της εξαγόμενης μεθόδου της κοινής λειτουργικής μονάδας.
Παράδειγμα:

WorkSales Equipment.Connect Barcode Scanner ();

Διαφορετικό πλαίσιο και κοινές ενότητες

Χρησιμοποιώντας τις ιδιότητες κοινών λειτουργικών μονάδων και εντολών προεπεξεργαστή, μπορείτε να οργανώσετε την εκτέλεση διαφόρων μεθόδων κοινών λειτουργικών μονάδων στο επιθυμητό πλαίσιο.
Κάθε ιδιότητα μιας κοινής λειτουργικής μονάδας είναι υπεύθυνη για τη μεταγλώττιση (και την εκτέλεση) μιας κοινής λειτουργικής μονάδας σε ένα συγκεκριμένο περιβάλλον.
Είναι διαθέσιμες οι ακόλουθες ιδιότητες που είναι υπεύθυνες για το πλαίσιο στο οποίο είναι διαθέσιμες οι μέθοδοι της κοινής ενότητας:
Πελάτης (κανονική εφαρμογή)- οι μέθοδοι της κοινής μονάδας θα είναι διαθέσιμες στον παχύ πελάτη στην κανονική λειτουργία εφαρμογής.
● - οι μέθοδοι της κοινής λειτουργικής μονάδας θα είναι διαθέσιμες για τον thin client, τον web client, καθώς και για τον thick client στο
λειτουργία διαχείρισης εφαρμογής.
● Διακομιστής - οι μέθοδοι της κοινής λειτουργικής μονάδας θα είναι διαθέσιμες στον διακομιστή.
Εξωτερική σύνδεση- οι μέθοδοι της κοινής ενότητας θα είναι διαθέσιμες στο εξωτερική σύνδεση.
Εάν ρυθμιστούν πολλές ιδιότητες ταυτόχρονα, αυτό σημαίνει ότι οι μέθοδοι της κοινής λειτουργικής μονάδας θα είναι διαθέσιμες σε διάφορα περιβάλλοντα.
Εάν μια κοινή λειτουργική μονάδα έχει την ιδιότητα Server και κάποιο άλλο σύνολο ιδιοτήτων, αυτό σημαίνει ότι η κοινή λειτουργική μονάδα θα είναι διαθέσιμη ταυτόχρονα στον διακομιστή και στον επιλεγμένο πελάτη. Θα πρέπει να γίνει κατανοητό ότι στην πραγματικότητα θα είναι αρκετές εκδόσεις του μεταγλωττισμένου κώδικα (ανάλογα με τον αριθμό των επιλεγμένων πελατών και για τον ίδιο τον διακομιστή).
Επιπλέον, εάν η μέθοδος που βρίσκεται σε μια τέτοια κοινή λειτουργική μονάδα καλείται από την πλευρά του πελάτη, τότε θα χρησιμοποιηθεί το αντίγραφο πελάτη της κοινής λειτουργικής μονάδας και εάν από τον διακομιστή - το αντίγραφο διακομιστή. Σε αυτήν την περίπτωση, χρησιμοποιώντας οδηγίες προεπεξεργαστή (δείτε λεπτομέρειες εδώ), μπορείτε να "θωρακίσετε" τον διακομιστή από τον κώδικα που δεν μπορεί να εκτελεστεί σε αυτόν.
Ας δούμε ένα παράδειγμα. Σε μια κοινή λειτουργική μονάδα (η οποία μπορεί να εκτελεστεί σε λεπτός πελάτηςκαι στον διακομιστή) υπάρχει μια μέθοδος που έχει ελαφρώς διαφορετική συμπεριφορά στην πλευρά του thin client και στην πλευρά του διακομιστή. Ας δούμε πώς μπορείτε να το κάνετε αυτό:



# If Thin Client Τότε
// Εμφάνιση προειδοποίησης
Εμφάνιση ειδοποίησης χρήστη("Στον πελάτη");
#Τέλος εαν
Τέλος Διαδικασίας
Στη συνέχεια, από την πλευρά του διακομιστή, ο κώδικας μοιάζει με αυτό:
Διαδικασία Μέθοδος CommonModule ().Εξαγωγή
// Διάφοροι σημαντικοί κώδικας πηγαίνουν εδώ
Τέλος Διαδικασίας
Στην πλευρά του thin client, ο κώδικας θα μοιάζει με αυτό:
ProcedureCommonModuleMethod () Εξαγωγή
// Διάφοροι σημαντικοί κώδικας πηγαίνουν εδώ
// Εμφάνιση προειδοποίησης
ShowUserNotification ("Σε πελάτη");
Τέλος Διαδικασίας

Υπάρχουν διάφοροι τρόποι μεταφοράς ελέγχου από τον πελάτη στον διακομιστή:
● καλέστε μια μέθοδο της κοινής μονάδας διακομιστή.
● σε μια μονάδα φόρμας ή εντολών, καλέστε μια μέθοδο που προηγείται από οδηγίες μεταγλώττισης & AtServer, & AtServerWithoutContext

Ταυτόχρονα, είναι αδύνατη η κλήση μεθόδων κοινών λειτουργικών μονάδων πελάτη (για τις οποίες δεν έχει οριστεί η ιδιότητα Διακομιστής) και μεθόδων πελάτη μιας λειτουργικής μονάδας φόρμας ή μιας μονάδας εντολών από διαδικασίες διακομιστή. Ο έλεγχος θα επιστρέψει στον πελάτη μετά την ολοκλήρωση της άκρας κλήσης προς τον διακομιστή.
Εξαίρεση αποτελούν οι μέθοδοι της ενότητας φόρμας και της ενότητας εντολών, των οποίων προηγούνται οδηγίες μεταγλώττισης. & OnClientOnServer, & OnClientOnServerWithout Context
Πρέπει επίσης να αναφερθούν τα ακόλουθα σημεία:
● Εάν μια κοινή λειτουργική μονάδα είναι διαθέσιμη σε περισσότερους από έναν πελάτες, τότε θα πρέπει να λάβετε υπόψη τους μέγιστους περιορισμούς που ενδέχεται να επιβάλλουν οι πελάτες κατά τη σύνταξη κώδικα ή να χρησιμοποιήσετε οδηγίες προεπεξεργαστή για να «απομονώσετε» τον ειδικό κώδικα πελάτη.
● Οι οδηγίες του προεπεξεργαστή έχουν επίσης νόημα όταν μια κοινή λειτουργική μονάδα έχει πολλά περιβάλλοντα εκτέλεσης, για παράδειγμα, μια εξωτερική σύνδεση και έναν thin client, ή (που είναι πολύ πιο συνηθισμένο) έναν πελάτη και διακομιστή. Σε αυτήν την περίπτωση, οι οδηγίες του προεπεξεργαστή θα πλαισιώνουν διαδραστικό κώδικα που δεν μπορεί να χρησιμοποιηθεί στον διακομιστή, αλλά είναι δυνατός στον πελάτη (βλ. παράδειγμα παραπάνω).
Για περισσότερες πληροφορίες σχετικά με τις οδηγίες προεπεξεργαστή και τις οδηγίες μεταγλώττισης, ανατρέξτε στην ενότητα Διαδικασίες και λειτουργίες εκτέλεσης της βοήθειας της ενσωματωμένης γλώσσας.
Η ιδιότητα διακομιστής κλήσεων χρησιμοποιείται για τον έλεγχο της δυνατότητας κλήσης των εξαγόμενων μεθόδων της κοινής λειτουργικής μονάδας διακομιστή από τον κωδικό πελάτη.
Εάν η ιδιότητα έχει οριστεί, τότε οι εξαγόμενες μέθοδοι της κοινής λειτουργικής μονάδας διακομιστή είναι διαθέσιμες για κλήση από τον πελάτη. Εάν η ιδιότητα δεν έχει οριστεί, τότε τέτοιες εξαγόμενες μέθοδοι μπορούν να καλούνται μόνο από μεθόδους διακομιστή (τόσο οι μέθοδοι κοινών λειτουργικών μονάδων διακομιστή όσο και οι μέθοδοι της λειτουργικής μονάδας φόρμας και οι μονάδες εντολών από την πλευρά του διακομιστή).
Συμβουλή . Συνιστάται να ορίσετε την ιδιότητα διακομιστή κλήσεων σε False σε περιπτώσεις όπου η κοινή λειτουργική μονάδα διακομιστή περιέχει μεθόδους που δεν θέλετε να καλέσετε από τον πελάτη (για παράδειγμα, για λόγους ασφαλείας).
Σημείωση... Εάν οι ιδιότητες ρυθμιστούν ταυτόχρονα Πελάτης (κανονική εφαρμογή), Πελάτης (διαχειριζόμενη εφαρμογή), Εξωτερική σύνδεση, τότε η ιδιότητα Κλήση διακομιστή διαγράφεται αυτόματα. Εάν έχει οριστεί η ιδιότητα διακομιστής κλήσεων, τότε οι ιδιότητες επαναφέρονται αυτόματα. Πελάτης (κανονική εφαρμογή), Πελάτης (διαχειριζόμενη εφαρμογή)και Εξωτερική σύνδεσηεάν αυτές οι ιδιότητες είχαν ρυθμιστεί ταυτόχρονα.
Ιδιοκτησία Προνομιούχοςπροορίζεται για την απενεργοποίηση του ελέγχου πρόσβασης κατά την εκτέλεση μεθόδων μιας κοινής λειτουργικής μονάδας.
ΣΗΜΕΙΩΣΗ. Εάν το ακίνητο Προνομιούχοςορίζεται, τότε η ιδιότητα Server ορίζεται αυτόματα στην κοινή λειτουργική μονάδα και οι υπόλοιπες ιδιότητες επαναφέρονται ( Πελάτης (κανονική εφαρμογή), Πελάτης (διαχειριζόμενη εφαρμογή)και στο εξωτερική σύνδεση). Μια προνομιακή κοινόχρηστη μονάδα μπορεί να εκτελεστεί μόνο στον διακομιστή.

Επαναχρησιμοποίηση τιμών επιστροφής

Εάν η κοινόχρηστη λειτουργική μονάδα δεν είναι καθολική, τότε η ιδιότητα Return value reuse γίνεται διαθέσιμη. Αυτή η ιδιότητα μπορεί να λάβει τις ακόλουθες τιμές:
● Do not use — Η επαναχρησιμοποίηση της τιμής επιστροφής δεν χρησιμοποιείται για λειτουργίες σε αυτήν την κοινή λειτουργική μονάδα.
● Κατά την ώρα κλήσης και την ώρα συνεδρίας — Η μέθοδος για τον προσδιορισμό της επαναχρησιμοποίησης δεδομένων χρησιμοποιείται για την κοινή λειτουργική μονάδα. Η ουσία αυτής της μεθόδου είναι ότι κατά την εκτέλεση του κώδικα, το σύστημα θυμάται τις παραμέτρους και το αποτέλεσμα της συνάρτησης μετά την πρώτη κλήση της συνάρτησης. Όταν η συνάρτηση καλείται ξανά με τις ίδιες παραμέτρους, η αποθηκευμένη τιμή επιστρέφεται (από την πρώτη κλήση) χωρίς να εκτελεστεί η ίδια η συνάρτηση. Εάν η συνάρτηση αλλάξει τις τιμές των παραμέτρων κατά την εκτέλεσή της, τότε η επαναλαμβανόμενη κλήση της συνάρτησης δεν θα το κάνει αυτό.
Μπορούν να διακριθούν τα ακόλουθα χαρακτηριστικά αποθήκευσης αποτελεσμάτων κλήσεων:
● εάν η συνάρτηση εκτελείται στον διακομιστή και καλείται από τον κώδικα διακομιστή, τότε οι τιμές των παραμέτρων και το αποτέλεσμα της κλήσης αποθηκεύονται για την τρέχουσα περίοδο λειτουργίας στην πλευρά του διακομιστή.
● εάν η συνάρτηση εκτελείται σε παχύ ή λεπτό πελάτη, τότε οι τιμές των παραμέτρων και τα αποτελέσματα κλήσεων αποθηκεύονται στην πλευρά του πελάτη.
● εάν η συνάρτηση εκτελείται από την πλευρά του διακομιστή και καλείται από τον κωδικό πελάτη, τότε οι τιμές των παραμέτρων κλήσης απομνημονεύονται τόσο από την πλευρά του πελάτη όσο και από την πλευρά του διακομιστή (για την τρέχουσα περίοδο λειτουργίας).
Οι αποθηκευμένες τιμές διαγράφονται:
● εάν η ιδιότητα έχει οριστεί σε Κατά τη στιγμή της κλήσης:
● από την πλευρά του διακομιστή - όταν ο έλεγχος επιστρέφεται από τον διακομιστή.
● από την πλευρά του πελάτη - όταν μια διαδικασία ή λειτουργία της ενσωματωμένης γλώσσας υψηλού επιπέδου (που καλείται από το σύστημα από τη διεπαφή και όχι από άλλη διαδικασία ή λειτουργία της ενσωματωμένης γλώσσας) τερματίζεται.
● εάν η ιδιότητα της κοινής λειτουργικής μονάδας έχει οριστεί σε Για τη διάρκεια της συνεδρίας:
● από την πλευρά του διακομιστή - στο τέλος της συνεδρίας.
● στην πλευρά του πελάτη - όταν η εφαρμογή πελάτη είναι κλειστή.
Οι αποθηκευμένες τιμές θα διαγραφούν:
● στον διακομιστή, στο fat client, στην εξωτερική σύνδεση, στο thin client και στο web client σε κανονική ταχύτητα σύνδεσης - 20 λεπτά μετά τον υπολογισμό της αποθηκευμένης τιμής ή 6 λεπτά μετά την τελευταία χρήση.
● σε thin client και web client με χαμηλή ταχύτητα σύνδεσης - 20 λεπτά μετά τον υπολογισμό της αποθηκευμένης τιμής.
● σε περίπτωση έλλειψης μνήμη τυχαίας προσπέλασηςστη ροή εργασιών διακομιστή?
● κατά την επανεκκίνηση μιας ροής εργασίας.
● όταν ένας πελάτης μεταβαίνει σε διαφορετική ροή εργασίας.
Μετά τη διαγραφή των τιμών, η κλήση προς την εξαγόμενη συνάρτηση πραγματοποιείται όπως στην πρώτη κλήση.
Αυτή η ιδιότητα των κοινών λειτουργικών μονάδων δεν επηρεάζει την εκτέλεση των διαδικασιών - οι διαδικασίες εκτελούνται πάντα.

Εάν μια κοινή λειτουργική μονάδα έχει ρυθμιστεί για επαναχρησιμοποίηση τιμών επιστροφής, τότε επιβάλλονται ορισμένοι περιορισμοί στους τύπους παραμέτρων των εξαγόμενων συναρτήσεων. Οι τύποι παραμέτρων μπορούν να είναι μόνο:
● Πρωτόγονοι τύποι ( Undefined, NULL, Boolean, Number, String, Date).
● Οποιεσδήποτε αναφορές σε αντικείμενα βάσης δεδομένων.
● Κατασκευές με αξίες ιδιοκτησίας των παραπάνω τύπων. Στην περίπτωση αυτή, η ταυτότητα των παραμέτρων ελέγχεται «από το περιεχόμενο» των δομών.
Εάν η εξαγόμενη συνάρτηση επιστρέφει οποιοδήποτε αντικείμενο, τότε στην πραγματικότητα επιστρέφεται μια αναφορά στο αντικείμενο που είναι αποθηκευμένο στην κρυφή μνήμη. Εάν μετά τη λήψη αυτής της αναφοράς υπάρξει αλλαγή στην κατάσταση του αντικειμένου, τότε μια επόμενη κλήση στην ίδια συνάρτηση θα έχει ως αποτέλεσμα την επιστροφή μιας αναφοράς στο ήδη αλλαγμένο αντικείμενο χωρίς να εκτελεστεί πραγματικά η συνάρτηση. Αυτή η συμπεριφορά θα συνεχιστεί μέχρι να διαγραφεί η αποθηκευμένη τιμή (για οποιονδήποτε λόγο). Με άλλα λόγια - αλλαγή της κατάστασης ενός αντικειμένου που λαμβάνεται ως αποτέλεσμα της κλήσης μιας συνάρτησης από μια κοινή μονάδα με επαναχρησιμοποίησηΟι επιστρεφόμενες τιμές δεν είναι η βάση για την πραγματική κλήση συνάρτησης. Θα πρέπει επίσης να θυμόμαστε ότι η κρυφή μνήμη των επιστρεφόμενων αντικειμένων είναι αδιάφορη
την κατάσταση της προνομιακής λειτουργίας τη στιγμή της κλήσης συνάρτησης με επαναχρησιμοποίηση των επιστρεφόμενων τιμών. Αυτή η δυνατότητα μπορεί να οδηγήσει σε επόμενο χαρακτηριστικόη ΣΥΜΠΕΡΙΦΟΡΑ:
● Η πραγματική εκτέλεση της κλήσης συνάρτησης με επαναχρησιμοποίηση των επιστρεφόμενων τιμών (πρώτη κλήση) έγινε με ενεργοποιημένη την προνομιακή λειτουργία.
● Κατά την εκτέλεση της λειτουργίας, ελήφθη ένα αντικείμενο που δεν μπορεί να ληφθεί με απενεργοποιημένη την προνομιακή λειτουργία.
● Οι επόμενες κλήσεις λειτουργιών πραγματοποιήθηκαν χωρίς να ρυθμιστεί η προνομιακή λειτουργία.
● Ωστόσο, μέχρι να διαγραφεί η κρυφή μνήμη των επιστρεφόμενων αντικειμένων ή να επαναληφθεί η πραγματική κλήση, η συνάρτηση θα επιστρέψει ένα επίσημα μη προσβάσιμο αντικείμενο.
● Η αντίθετη συμπεριφορά ισχύει επίσης, όταν η πρώτη κλήση γίνεται χωρίς να έχει οριστεί η προνομιακή λειτουργία και στην προνομιακή λειτουργία δεν επιστρέφεται το αντικείμενο που θα μπορούσε να έχει ληφθεί στην προνομιακή λειτουργία.

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

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

Η κατανόηση της διαφοράς στον σκοπό τους σάς επιτρέπει να γράψετε έναν πιο δομημένο κώδικα προγράμματος και σε ορισμένες περιπτώσεις να αποθηκεύσετε τους πόρους του διακομιστή 1C και να αυξήσετε την απόδοση της λύσης εφαρμογής.

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

Θεωρία

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

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

Ας περάσουμε από τη θεωρία στην πράξη.

Πρακτική

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

Διαδικασία εκτύπωσης στη μονάδα αντικειμένου

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

// Περάστε την αναφορά στο στοιχείο αναφοράς στη συνάρτησηΣυνάρτηση PrintSelected Items (Σύνδεσμος) Εξαγωγή TabDoc = Νέο πίνακα πίνακα. Διάταξη = Αναφορές. Προϊόντα. Λήψη διάταξης ("Διάταξη"); Request = New Request; Ερευνα. Κείμενο = "ΕΠΙΛΟΓΗ | Προϊόντα ... Αντιπροσωπεία AS Προϊόν,| Προϊόντα ... Διαγραφή σήμανσης,| Προϊόντα ... κωδικός προμηθευτή |ΑΠΟ| Ευρετήριο ... Προϊόντα AS Προϊόντα| ΠΟΥ | Προϊόντα ... Σύνδεση (& ArrayProducts)"; Αίτημα. SetParameter (" ArrayProducts ", Σύνδεσμος); // Ορισμός επιλογής με σύνδεσμο

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

Ο κώδικας προγράμματος για την κλήση της μεθόδου του αντικειμένου "PrintSelected Items" με την εντολή της φόρμας "Print" εμφανίζεται στην ακόλουθη λίστα:

Διαδικασία εκτύπωσης & On-Client (Εντολή) // Κλήση της διαδικασίας διακομιστή για λήψη του εγγράφου υπολογιστικού φύλλου που δημιουργήθηκε TabDoc = PrintServer (); // Εμφάνιση του εγγράφου υπολογιστικού φύλλου που δημιουργήθηκε TabDoc. Προβολή() ; EndProcedure & AtServer Function PrintServer () // Μετατρέψτε το αντικείμενο φόρμας στο αντικείμενο καταλόγου "Προϊόντα" για να καλέσετε τη συνάρτηση από τη λειτουργική μονάδα αντικειμένου ObjectGood = FormInValue ("Object"); // Καλούμε τη διαδικασία της ενότητας αντικειμένου, μεταβιβάζοντας εκεί έναν σύνδεσμο προς το τρέχον στοιχείο λεξικού. Αποτέλεσμα // επιστροφή στην πλευρά του πελάτηΕπιστροφή αντικειμένου. Εκτύπωση επιλεγμένων αντικειμένων (Σύνδεσμος αντικειμένου). EndFunction

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

Διαδικασία εκτύπωσης στη μονάδα διαχειριστή

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

// Περάστε μια σειρά από συνδέσμους προς προϊόνταΛειτουργία Εκτύπωση επιλεγμένων αντικειμένων (Πίνακας αντικειμένων) Εξαγωγή TabDocs = Νέο πίνακα πίνακα. Διάταξη = Αναφορές. Προϊόντα. Λήψη διάταξης ("Διάταξη"); Request = New Request; Ερευνα. Κείμενο = "ΕΠΙΛΟΓΗ | Προϊόντα ... Αντιπροσωπεία AS Προϊόν,| Προϊόντα ... Διαγραφή σήμανσης,| Προϊόντα ... κωδικός προμηθευτή |ΑΠΟ| Ευρετήριο ... Προϊόντα AS Προϊόντα| ΠΟΥ | Προϊόντα ... Σύνδεση (& ArrayProducts)"; Request. SetParameter (" Array of Goods ", Array of Goods); // Ορισμός επιλογής ανά πίνακαΑποτέλεσμα = Αίτημα. Τρέξιμο (); AreaHeader = Διάταξη. GetScope ("Τίτλος"); AreaFooter = Διάταξη. GetArea ("Υπόγειο"); AreaTablesHead = Διάταξη. GetArea ("TableHead"); AreaFooterTables = Διάταξη. GetArea ("Υποσέλιδο πίνακα"); Περιοχή DetailRecords = Διάταξη. GetArea ("Λεπτομέρειες"); TabDoc. Σαφή (); TabDoc. Εμφάνιση (ScopeHeader); TabDoc. Εμφάνιση (ScopeTableHap); TabDoc. StartAutoGroupLines (); SampleDetailed Records = Αποτέλεσμα. Select() ; Ενώ SampleDetailed Records. Επόμενη () Περιοχή DetailRecords Loop. Παράμετροι. Συμπλήρωση (Επιλογή Λεπτομερών Εγγραφών). TabDoc. Έξοδος (DetailRecordsArea, SelectionDetailRecords. Επίπεδο ()); Τέλος Κύκλου; TabDoc. EndAutoGroupLines (); TabDoc. Έξοδος (ScopeTableFootball); TabDoc. Εμφάνιση (AreaFooter); Επιστροφή του TabDoc; EndFunction

Η κύρια διαφορά από μια συνάρτηση σε μια μονάδα αντικειμένου είναι η παράμετρος συνάρτησης. Τώρα ένας πίνακας με συνδέσμους προς προϊόντα προς εκτύπωση μεταβιβάζεται ως παράμετρος.

Ο κώδικας προγράμματος της ενότητας εντολών της φόρμας "Εκτύπωση" μοιάζει με αυτό:

& Στη διαδικασία πελάτη Εκτύπωση (Command) TabDoc = PrintServer (); TabDoc. Προβολή() ; EndProcedure & AtServer Function PrintServer () // Περάστε μια σειρά από συνδέσμους των επιλεγμένων προϊόντων στη λίστα καταλόγου // στη συνάρτηση της ενότητας διαχειριστή "PrintSelected Items"Επιστροφή καταλόγους. Προϊόντα. PrintSelectedProducts (Items. List. SelectedLines); EndFunction

Σε αυτήν την περίπτωση, το αποτέλεσμα της εκτέλεσης της εντολής σε λειτουργία 1C: Enterprise θα είναι το εξής:

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

Τι πρέπει να χρησιμοποιήσετε;

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

V τυπική διαμόρφωσηΤο "Trade Management" έκδοση 11 είναι μια ευρέως χρησιμοποιούμενη ενότητα διαχείρισης για την εκτύπωση εγγράφων. Αν κοιτάξετε τη διαμόρφωση "Manufacturing Enterprise Management", τότε η λειτουργική μονάδα manager πρακτικά δεν χρησιμοποιείται, καθώς η διαμόρφωση γράφτηκε σε παλαιότερες εκδόσεις της πλατφόρμας, όπου αυτός ο μηχανισμός δεν υποστηρίζονταν πλήρως.

Διαμόρφωση με παραδείγματα από το άρθρο.

Ενότητες πλατφόρμας 1C: Enterprise 8.3, 8.2

Κοινές ενότητες

Οι συναρτήσεις που δηλώνονται με τη σημαία "εξαγωγή" σε μια τέτοια ενότητα μπορούν να κληθούν από οπουδήποτε στη διαμόρφωση. Η κλήση πραγματοποιείται μέσω CommonModuleName.FunctionName ().

Δεν υπάρχει μεταβλητή ενότητα σε τέτοιες ενότητες.

Η εκτέλεση κοινών λειτουργικών μονάδων εξαρτάται από τις παραμέτρους που ορίζονται στις ιδιότητές τους:

Σημαία "Παγκόσμια"

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

Σημαία διακομιστή

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

Σημαία πελάτη (κανονική εφαρμογή).

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

Σημαία πελάτη (Διαχειριζόμενη εφαρμογή).

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

Σημαία κλήσης διακομιστή

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

Εξωτερική σημαία σύνδεσης

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

Σημαία "Προνόμιο"

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

Επιλογή επαναχρησιμοποίησης

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

Ενότητα εφαρμογής

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

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

Ενότητα συνεδρίας

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

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

Με εκτίμηση, (δάσκαλος και προγραμματιστής).