Πάβελ Τσιστόφ. Ασφαλής λειτουργία 1c έχει ρυθμιστεί η ασφαλής λειτουργία, η λειτουργία απαγορεύεται

Όταν εκτελείτε το πρόγραμμα Document Upload ως τακτικός χρήστης, εμφανίζεται το σφάλμα "Safe mode is set. Η λειτουργία απαγορεύεται."

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

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

  • Διαδραστικό άνοιγμα εξωτερικών αναφορών και επεξεργασία
  • Χρήση πρόσθετων αναφορών και επεξεργασίας

Κάντε κλικ Αποθήκευσε και κλείσε


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


Για να μπορέσουν οι χρήστες να ξεκινήσουν την επεξεργασία, συνιστάται να προσθέσετε το Document Loading στη λίστα εξωτερικής επεξεργασίας. Για να το κάνετε αυτό στο μενού Διαχείριση / Έντυπα έντυπα και επεξεργασία / Πρόσθετες αναφορές και επεξεργασίαδημιουργήστε μια νέα επεξεργασία. Καθορίστε τη διαδρομή προς το αρχείο "Λήψη Documents.epf" και ορίστε ένα όνομα. Καθορίστε τη θέση της επεξεργασίας στο μενού, από όπου ο χρήστης μπορεί να την εκκινήσει αργότερα, για παράδειγμα, επιλέξτε το μενού καταλόγους

Κάνοντας κλικ στο στοιχείο Γρήγορη πρόσβαση, υποδεικνύετε ποιοι χρήστες έχουν πρόσβαση στην επεξεργασία:


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


Ανοιξε Μενού - Όλες οι λειτουργίες.... και βρείτε την επιλογή "Χρησιμοποιούνται προφίλ ασφαλείας" στη λίστα.


Απλώς καταργήστε την επιλογή "Χρησιμοποιούνται προφίλ ασφαλείας".


Μετά από αυτό, το πρόγραμμα θα ξεκινήσει με επιτυχία.

Το γεγονός είναι ότι όταν χρησιμοποιείτε την έκδοση πελάτη-διακομιστή του 1C, η εξωτερική επεξεργασία/αναφορές ανοίγει σε ασφαλή λειτουργία, στην οποία απαγορεύεται η χρήση της προνομιακής λειτουργίας. Και η προνομιακή λειτουργία χρησιμοποιείται πολύ συχνά σε τυπικές διαμορφώσεις: δημιουργία έντυπων εντύπων, διάφοροι έλεγχοι υπηρεσιών (καταχώρηση ανταλλαγών) κ.λπ. Ως αποτέλεσμα, ακόμη και χρησιμοποιώντας μια κανονική αναφορά στο σύστημα ελέγχου πρόσβασης χωρίς φόρμα (από προεπιλογή, χρησιμοποιείται η γενική φόρμα "ReportForm") και αποθηκεύοντας προσαρμοσμένες ρυθμίσεις αναφοράς (στον αντίστοιχο κατάλογο), θα λάβετε ένα σφάλμα σχετικά με ανεπαρκή πρόσβαση δικαιώματα σε διάφορες σταθερές και παραμέτρους περιόδου λειτουργίας που χρησιμοποιούνται για επίσημους σκοπούς μετά τη γραμμή SetPrivilegedMode(True) ;

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

Θα ήθελα να σημειώσω αμέσως ότι αυτή η επιλογή δεν είναι προτιμότερη, αλλά λόγω διαφόρων περιστάσεων μπορεί να χρησιμοποιηθεί σε τόσο απλοποιημένη μορφή. Για παράδειγμα, έχω πολλές βάσεις δεδομένων σε διαφορετικές πόλεις, μια κοινή τοπική με αυστηρά περιορισμένα δικαιώματα, κλειστό USB κ.λπ., κάπου χρησιμοποιώ το Accounting 2.0 και κάπου 3.0, κάνω σχεδόν όλες τις αναφορές χρησιμοποιώντας εργαλεία ACS χωρίς φόρμες, ώστε να άνοιξε και στις δύο εκδόσεις. Η διατήρηση όλων αυτών των αναφορών για διαφορετικές εκδόσεις και διαφορετικές βάσεις δεδομένων είναι εντατική και μάταιη, γιατί Υπάρχουν σχέδια για μετάβαση σε ενιαία διαμόρφωση και βάση...

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

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

ΥΣΤΕΡΟΓΡΑΦΟ. Νόμιζα ότι τα προφίλ ασφαλείας λειτουργούν μόνο όταν χρησιμοποιούνται άδειες πλατφόρμας και διακομιστή σε επίπεδο CORP, αλλά αυτή η λειτουργία λειτουργεί επίσης στην πλατφόρμα 1C:Enterprise 8.3 (μπορεί να ονομαστεί υπό όρους PROF, κατ' αναλογία με τις τυπικές διαμορφώσεις Basic/PROF/CORP)

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

Αντικείμενα διαμόρφωσης

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

Σε ασφαλή λειτουργία:

  • Προνομιακή λειτουργία ακυρώθηκε.
  • Μετάβαση σε προνομιακή λειτουργία αγνόησε.
  • Απαγορευμένοςλειτουργίες που οδηγούν στη χρήση εξωτερικών μέσων σε σχέση με την πλατφόρμα 1C:Enterprise (συμπεριλαμβανομένων των μη αποκλειστικών αναλόγων των καθορισμένων μεθόδων):
  • Μηχανισμοί COM:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Φόρτωση εξωτερικών εξαρτημάτων:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Πρόσβαση στο σύστημα αρχείων:
    • ValueInFile();
    • Αντιγραφή αρχείου();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Διαγραφή αρχείων();
    • Νέο αρχείο;
    • Νέο xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • New ReadText(), εάν η πρώτη παράμετρος είναι συμβολοσειρά.
    • ReadText.Open(), εάν η πρώτη παράμετρος είναι συμβολοσειρά.
    • NewTextRecord(), εάν η πρώτη παράμετρος είναι συμβολοσειρά.
    • WriteText.Open(), εάν η πρώτη παράμετρος είναι συμβολοσειρά.
    • NewTextExtract();
    • αλλαγή της ιδιότητας ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), εάν η πρώτη παράμετρος είναι συμβολοσειρά.
    • Picture.Write();
    • new BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), εάν η πρώτη παράμετρος είναι συμβολοσειρά.
    • New ReadData(), υπάρχει μια πρώτη παράμετρος - μια συμβολοσειρά.
    • όλες οι μέθοδοι του αντικειμένου FileStreamManager.
    • New FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Πρόσβαση στο διαδίκτυο:
    • Νέα σύνδεση στο Διαδίκτυο,
    • Νέο InternetMail,
    • Νέος διακομιστής InternetProxy,
    • Νέα σύνδεση HTTP,
    • Νέα σύνδεση FTP.

ΠΡΟΣΟΧΗ! Κατά την εκτέλεση απαγορευμένων λειτουργιών, γίνεται εξαίρεση κατά το χρόνο εκτέλεσης.

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

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

Εάν σε μια διαδικασία ή συνάρτηση καλεί μια μέθοδο SetSafeMode (Λάθος)πραγματοποίησαν περισσότερες από κλήσεις μεθόδων SetSafeMode (True), τότε θα γίνει εξαίρεση.

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

// Δημιουργείται κώδικας προγράμματος που πρέπει να εκτελεστεί // Είναι πιθανό ο κώδικας να φορτωθεί από εξωτερικές πηγές // ή να εισαχθεί χειροκίνητα ExecutableCode = GetExecutedCodeFromExternalWorld(); // Ενεργοποίηση ασφαλούς λειτουργίας SetSafeMode(True); // Εκτέλεση δυνητικά επικίνδυνου κώδικα Execute(ExecutableCode); // Απενεργοποίηση ασφαλούς λειτουργίας SetSafeMode(False);

Σε ορισμένες περιπτώσεις, οι ρυθμίσεις ασφαλούς λειτουργίας ενδέχεται να έρχονται σε διένεξη με τις ρυθμίσεις της προνομιακής λειτουργίας. Ένα παράδειγμα τέτοιας διένεξης είναι η ανάρτηση ενός εγγράφου για το οποίο έχει οριστεί η ιδιότητα Προνομιακή κατά την δημοσίευση, από κώδικα στην ενσωματωμένη γλώσσα που εκτελείται σε ασφαλή λειτουργία. Σε αυτήν την περίπτωση, η προνομιακή λειτουργία είναι απενεργοποιημένη και οι προσπάθειες ενεργοποίησής της αγνοούνται. Ως αποτέλεσμα, ο κώδικας στην ενσωματωμένη γλώσσα, ο οποίος «μετράει» στην ενεργοποιημένη προνομιακή λειτουργία, «συναντά» την απουσία του, γεγονός που οδηγεί σε σφάλματα με μη προφανείς λόγους εμφάνισής τους. Για να αποφευχθεί αυτή η κατάσταση, το σύστημα 1C:Enterprise απενεργοποιεί αυτόματα την ασφαλή λειτουργία για τους χειριστές συμβάντων που είναι διαθέσιμοι στη μονάδα αντικειμένου ή τη λειτουργική μονάδα διαχειριστή, υπό την προϋπόθεση ότι ο εκτελέσιμος κώδικας στην ενσωματωμένη γλώσσα δεν βρίσκεται στην επέκταση διαμόρφωσης. Τέτοιοι χειριστές επισημαίνονται με ειδικό τρόπο στον βοηθό σύνταξης.

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

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

// Σωστή χρήση της ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Εσφαλμένη χρήση της ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Εξαίρεση EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Εξαίρεση EndProcedure

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

Εκτέλεση εξωτερικής επεξεργασίας σε κανονική λειτουργία εφαρμογής

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


Επεξεργασία = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

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

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

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

&Στον διακομιστή
Συνάρτηση GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Επιστροφή ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Πλήρες όνομα του εξωτερικού αρχείου επεξεργασίας.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Ασφαλής λειτουργία για εξωτερική επεξεργασία

Οι μέθοδοι Create() και Connect() του αντικειμένου ExternalProcessing έχουν μια εισερχόμενη παράμετρο SafeMode - ένα σημάδι σύνδεσης εξωτερικής επεξεργασίας σε ασφαλή λειτουργία. Εάν η παράμετρος δεν έχει καθοριστεί, η σύνδεση θα πραγματοποιηθεί σε ασφαλή λειτουργία.
Η ασφαλής λειτουργία έχει σχεδιαστεί για να προστατεύει το σύστημα από την εκτέλεση «μη αξιόπιστου» κώδικα προγράμματος στον διακομιστή. Πιθανός κίνδυνος προέρχεται από εξωτερική επεξεργασία ή κώδικα προγράμματος που έχει εισαχθεί από τον χρήστη για χρήση στις μεθόδους Run() και Calculate().
Η ασφαλής λειτουργία επιβάλλει τους ακόλουθους περιορισμούς:
  • Η προνομιακή λειτουργία ακυρώνεται εάν είχε εγκατασταθεί.
  • οι προσπάθειες για είσοδο σε προνομιακή λειτουργία αγνοούνται.
  • οι λειτουργίες με αντικείμενα COM απαγορεύονται.
  • Η φόρτωση και η σύνδεση εξωτερικών εξαρτημάτων απαγορεύεται.
  • η πρόσβαση στο σύστημα αρχείων απαγορεύεται (εκτός από προσωρινά αρχεία).
  • Η πρόσβαση στο Διαδίκτυο απαγορεύεται.
Οι διεργασίες που ανοίγουν διαδραστικά δεν εκτελούνται σε ασφαλή λειτουργία, επομένως συνιστάται η εφαρμογή ενός μηχανισμού για το άνοιγμα εξωτερικών επεξεργαστών σε ασφαλή λειτουργία, καθώς και σε επίπεδο άδειας για να απαγορεύεται στο χρήστη να ανοίγει διαδραστικά εξωτερικούς επεξεργαστές.
Για να απαγορεύσετε το διαδραστικό άνοιγμα της επεξεργασίας, σε όλους τους ρόλους που έχουν ανατεθεί στον χρήστη, είναι απαραίτητο να αφαιρέσετε το σωστό «Διαδραστικό άνοιγμα εξωτερικής επεξεργασίας» (βλ. Εικόνα 1).
Εικόνα 1. Δικαιώματα για διαδραστικό άνοιγμα εξωτερικής επεξεργασίας/αναφορών
Το δικαίωμα "Διαδραστικό άνοιγμα εξωτερικής επεξεργασίας" δεν επηρεάζει με κανέναν τρόπο το αντικείμενο Εξωτερικής επεξεργασίας.

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