• Σημειωματάριο προγραμματιστή. Χρησιμοποιώντας την οδηγία "Allowed" 1c επιλέξτε επιτρεπόμενο

    21.06.2023

    20.09.2014

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

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

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

    "Επιλέγω

    Οργάνωση,

    Ατομο

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

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

    "Επιλέγω

    Οργάνωση,

    Ατομο

    (Επιλέγω

    Οργάνωση

    Ατομο)

    Από το Μητρώο Συσσώρευσης Αμοιβαίοι διακανονισμοί

    (Οπου

    Οργάνωση

    Ατομο)

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

    Μπορείτε να ρωτήσετε ξανά - "Γιατί δεν πρέπει να χρησιμοποιήσετε την οδηγία Επιτρεπόμενη;" αυτό επιβάλλει αμέσως την επιλογή και θα προστατεύσει τον χρήστη από περιττά μηνύματα!

    Η απάντηση σε αυτή την ερώτηση θα είναι η εξής: πώς σε αυτή την περίπτωση ο χρήστης θα γνωρίζει ότι όλα τα απαραίτητα δεδομένα περιλαμβάνονται στην αναφορά. Ας πούμε ότι νωρίτερα αυτός ο χρήστης εργάστηκε με πλήρη δικαιώματα και έκανε λάθος και επέλεξε ένα άτομο από άλλο οργανισμό στο έγγραφο. Μπορεί επίσης να υπάρξει μια κατάσταση όπου έγινε λήψη των δεδομένων - και καταγράφηκε μια διαίρεση άλλου οργανισμού στα έγγραφα του οργανισμού (στο ZUP υπόκεινται επίσης σε περιορισμούς για τον ιδιοκτήτη). Σε αυτήν την περίπτωση, η οδηγία «Επιτρέπεται» θα κόψει τα απαγορευμένα δεδομένα χωρίς μηνύματα προς τον χρήστη και δεν θα γνωρίζει ότι δεν είναι όλα όσα πρέπει να περιλαμβάνονται στην αναφορά.

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

    Αλλά πώς μπορείτε να αποφύγετε το σφάλμα του προγράμματος να "συντρίψει" εάν δεν έχετε αρκετά δικαιώματα;

    Ναι, είναι πολύ απλό, πρέπει να χρησιμοποιήσετε την εντολή "Try", εδώ είναι ένα παράδειγμα:

    Απόπειρα

    Request.Run();

    Εξαίρεση

    Αναφορά(ErrorDescription());

    EndAttempt;

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

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

    Μπορείτε να εξοικειωθείτε με τις αποχρώσεις της ρύθμισης του RLS σε ξεχωριστά τμήματα στο άρθρο μας.

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

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

    Το πρόβλημα της πιθανής εξάρτησης του αποτελέσματος των περιορισμών πρόσβασης δεδομένων από το σχέδιο ερωτημάτων DBMS μπορεί να προκύψει κατά την εκτέλεση ενός ερωτήματος βάσης δεδομένων χωρίς λέξη-κλειδί ΕΠΙΤΡΕΠΕΤΑΙ, εάν ο τρέχων χρήστης έχει περιορισμούς πρόσβασης στα δεδομένα και το αίτημα περιέχει μία ή περισσότερες συγκρίσεις της φόρμας:

    • <Выражение над полями>(ΣΕ|ΟΧΙ ΜΕΣΑ) (<Вложенный запрос>)
    • (<Выражение над полями 1>, …, <Выражение над полями N>) (ΣΕ|ΟΧΙ ΜΕΣΑ) (<Вложенный запрос>)

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

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

    Λόγος για διαφορές

    Η πιθανή διαφορά στη συμπεριφορά οφείλεται στην εφαρμογή περιορισμών πρόσβασης δεδομένων χωρίς λέξη-κλειδί ΕΠΙΤΡΕΠΕΤΑΙστο 1C Enterprise 8.3.

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

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

    Ωστόσο, κατά τη δημιουργία ενός σχεδίου ερωτήματος, το DBMS ενδέχεται να μην λάβει το πλήρες δείγμα <Вложенным запросом> , και λάβετε μόνο εκείνες τις εγγραφές που είναι πραγματικά απαραίτητες για τον έλεγχο της κατάστασης ΣΕ/ΟΧΙ ΜΕΣΑ. Σε αυτήν την περίπτωση, το αίτημα μπορεί να επιτύχει ακόμη και αν το <Вложенного запроса> ως ανεξάρτητο αίτημα, θα μπορούσε να υπάρξει πρόσβαση σε απαγορευμένα δεδομένα.

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

    Πίνακας.Ατομικό AS Individual

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

    Πίνακας.Ατομικό AS Individual

    Directory.Individuals AS Table)

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

    Συμφωνία Εκτέλεσης Εργασίας με Ιδιώτη.Εργαζόμενο.Ιδιώτη

    Έγγραφο Συμφωνία για την εκτέλεση εργασιών με φυσικό πρόσωπο ΩΣ συμφωνία για την εκτέλεση εργασιών με ένα φυσικό πρόσωπο

    Συμφωνία Εκτέλεσης Εργασίας με Ιδιώτη.Εργαζόμενο.Άτομο Β (

    Πίνακας.Ατομικό AS Individual

    Κατάλογος.Πίνακας ιδιωτών AS

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

    Τα κύρια πλεονεκτήματα της γλώσσας ερωτημάτων 1C 8.3 (8.2) έναντι της SQL:

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

    Μειονεκτήματα της γλώσσας ερωτήματος στο 1C:

    • Σε αντίθεση με την SQL, στα ερωτήματα 1C δεν επιτρέπεται η αλλαγή δεδομένων.
    • έλλειψη αποθηκευμένων διαδικασιών.
    • αδυναμία μετατροπής συμβολοσειράς σε αριθμό.

    Ας ρίξουμε μια ματιά στο μικρό μας σεμινάριο σχετικά με τις βασικές δομές της γλώσσας ερωτημάτων 1C.

    Λόγω του γεγονότος ότι τα ερωτήματα στο 1C σάς επιτρέπουν μόνο να λαμβάνετε δεδομένα, κάθε ερώτημα πρέπει να ξεκινά με τη λέξη "ΕΠΙΛΟΓΗ". Μετά από αυτήν την εντολή, υποδεικνύονται τα πεδία από τα οποία πρέπει να ληφθούν δεδομένα. Εάν καθορίσετε "*", θα επιλεγούν όλα τα διαθέσιμα πεδία. Ο τόπος από τον οποίο θα επιλεγούν τα δεδομένα (έγγραφα, μητρώα, κατάλογοι κ.λπ.) αναγράφεται μετά τη λέξη «ΑΠΟ».

    Στο παράδειγμα που συζητείται παρακάτω, τα ονόματα ολόκληρης της ονοματολογίας επιλέγονται από τον κατάλογο "Ονοματολογία". Μετά τη λέξη "HOW", υποδεικνύονται ψευδώνυμα (ονόματα) για πίνακες και πεδία.

    ΕΠΙΛΕΓΩ
    Ονοματολογία Όνομα AS Όνομα ονοματολογίας
    ΑΠΟ
    Κατάλογος.Ονοματολογία AS Nomenclature

    Δίπλα στην εντολή "ΕΠΙΛΟΓΗ" μπορείτε να καθορίσετε λέξεις-κλειδιά:

    • ΔΙΑΦΟΡΟΣ. Το ερώτημα θα επιλέξει μόνο σειρές που διαφέρουν σε τουλάχιστον ένα πεδίο (χωρίς διπλότυπα).
    • FIRST n, Οπου n– ο αριθμός των σειρών από την αρχή του αποτελέσματος που πρέπει να επιλεγούν. Τις περισσότερες φορές, αυτή η κατασκευή χρησιμοποιείται σε συνδυασμό με την ταξινόμηση (ORDER BY). Για παράδειγμα, όταν πρέπει να επιλέξετε έναν ορισμένο αριθμό εγγράφων που είναι πρόσφατα κατά ημερομηνία.
    • ΕΠΙΤΡΕΠΕΤΑΙ. Αυτός ο σχεδιασμός σάς επιτρέπει να επιλέξετε από τη βάση δεδομένων μόνο εκείνες τις εγγραφές που είναι διαθέσιμες στον τρέχοντα χρήστη. Με βάση τη χρήση αυτής της λέξης-κλειδιού, ο χρήστης θα λάβει ένα μήνυμα σφάλματος όταν προσπαθεί να υποβάλει ερώτημα σε εγγραφές στις οποίες δεν έχει πρόσβαση.

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

    ΓΙΑ ΑΛΛΑΓΗ

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

    Τις περισσότερες φορές, η ρήτρα «ΓΙΑ ΑΛΛΑΓΗ» χρησιμοποιείται κατά τη λήψη υπολοίπων. Άλλωστε, όταν πολλοί χρήστες εργάζονται στο πρόγραμμα ταυτόχρονα, ενώ ένας λαμβάνει υπόλοιπα, ένας άλλος μπορεί να τα αλλάξει. Σε αυτήν την περίπτωση, το υπόλοιπο που προκύπτει δεν θα είναι πλέον σωστό. Εάν αποκλείσετε τα δεδομένα με αυτήν την πρόταση, τότε μέχρι ο πρώτος υπάλληλος να λάβει το σωστό υπόλοιπο και να εκτελέσει όλους τους απαραίτητους χειρισμούς με αυτό, ο δεύτερος υπάλληλος θα αναγκαστεί να περιμένει.

    ΕΠΙΛΕΓΩ
    Αμοιβαίοι διακανονισμοί Υπάλληλος,
    Αμοιβαίοι διακανονισμοί Ποσό αμοιβαίων διακανονισμών Υπόλοιπο
    ΑΠΟ
    Μητρώο Συσσωρεύσεων Αμοιβαίοι διακανονισμοί με υπαλλήλους Υπόλοιπα AS Αμοιβαίοι διακανονισμοί
    ΓΙΑ ΑΛΛΑΓΗ

    ΟΠΟΥ

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

    Παρακάτω είναι ένα παράδειγμα αιτήματος για την απόκτηση προσώπων επικοινωνίας για μια συγκεκριμένη θέση. Η παράμετρος επιλογής έχει τη μορφή: &ParameterName (το όνομα της παραμέτρου είναι αυθαίρετο).

    ΕΠΙΛΟΓΗ (ΠΕΡΙΠΤΩΣΗ)

    Ο σχεδιασμός σας επιτρέπει να καθορίσετε συνθήκες απευθείας στο σώμα του αιτήματος.

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

    ΕΠΙΛΕΓΩ
    ΕισαγωγήT&U.Link,
    ΕΠΙΛΟΓΗ
    ΠΟΤΕ Πραγματοποιήθηκε η ΕίσοδοςT&U
    ΤΟΤΕ "Το έγγραφο πέρασε!"
    ΑΛΛΑ "Το έγγραφο δεν δημοσιεύτηκε..."
    ΤΕΛΟΣ ΩΣ Πρόσθετο Πεδίο
    ΑΠΟ
    Έγγραφο Παραλαβή Αγαθών και Υπηρεσιών ΠΩΣ Όροι και Προϋποθέσεις Παραλαβής

    ΣΥΜΜΕΤΟΧΗ

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

    ΑΡΙΣΤΕΡΑ/ΔΕΞΙΑ ΣΥΝΔΕΣΗ

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

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

    ΕΠΙΛΕΓΩ
    Παραλαβή&Ονοματολογία,
    Τιμές.Τιμή
    ΑΠΟ
    Έγγραφο Παραλαβή Αγαθών και Υπηρεσιών Αγαθά ΠΩΣ Όροι και Προϋποθέσεις Παραλαβής
    ΕΣΩΤΕΡΙΚΗ ΣΥΜΜΕΤΟΧΗ RegisterInformation.PricesNomenclature.SliceLast AS Τιμές
    Λογισμικό Receipt&U.Nomenclature = Τιμές.Ονοματολογία

    ΣΤΟ ΔΕΞΙΟ όλα είναι ακριβώς το αντίθετο.

    ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ

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

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

    ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

    Η διαφορά μεταξύ μιας ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ και μιας ΠΛΗΡΗΣ ΣΥΝΔΕΣΗΣ είναι ότι εάν μια εγγραφή δεν βρεθεί σε τουλάχιστον έναν από τους πίνακες, το ερώτημα δεν θα την εμφανίσει καθόλου. Ως αποτέλεσμα, θα επιλεγούν μόνο εκείνα τα είδη από το έγγραφο «Παραλαβή αγαθών και υπηρεσιών» για τα οποία υπάρχουν εγγραφές στο μητρώο πληροφοριών «Τιμές αντικειμένων», εάν στο προηγούμενο παράδειγμα αντικαταστήσουμε το «ΠΛΗΡΕΣ» με το «ΕΣΩΤΕΡΙΚΟ».

    ΟΜΑΔΑ ΑΠΟ

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

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

    ΕΠΙΛΕΓΩ
    ,
    ΜΕΓΙΣΤΗ (Τιμή.Τιμή) ΩΣ Τιμή
    ΑΠΟ

    ΟΜΑΔΑ ΑΠΟ
    Τιμές.Ονοματολογία.Είδος Ονοματολογίας

    ΑΠΟΤΕΛΕΣΜΑΤΑ

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

    Τα αποτελέσματα μπορούν να συνοψιστούν για ολόκληρο τον πίνακα (χρησιμοποιώντας τη λέξη-κλειδί «ΓΕΝΙΚΑ»), για πολλά πεδία, για πεδία με ιεραρχική δομή (λέξεις-κλειδιά «ΙΕΡΑΡΧΙΑ», «ΜΟΝΟ ΙΕΡΑΡΧΙΑ»). Κατά τη σύνοψη των αποτελεσμάτων, δεν είναι απαραίτητο να χρησιμοποιείτε συγκεντρωτικές συναρτήσεις.

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

    ΕΠΙΛΕΓΩ
    Τιμές.Ονοματολογία.Είδος Ονοματολογίας AS Τύπος Ονοματολογίας,
    Τιμές.Τιμή ΩΣ Τιμή
    ΑΠΟ
    Μητρώο Πληροφοριών Τιμές Ονοματολογίας Στιγμιότυπο από τις πιο πρόσφατες τιμές AS
    ΑΠΟΤΕΛΕΣΜΑΤΑ
    MAXIMUM (Τιμή)
    ΜΕ
    ΤύποςΟνοματολογία

    ΕΧΟΝΤΑΣ

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

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

    ΕΠΙΛΕΓΩ

    ΜΕΓΙΣΤΗ (Τιμή.Τιμή) ΩΣ Τιμή
    ΑΠΟ
    Μητρώο Πληροφοριών Τιμές Ονοματολογίας Στιγμιότυπο από τις πιο πρόσφατες τιμές AS
    ΟΜΑΔΑ ΑΠΟ
    Τιμές.Ονοματολογία.Είδος Ονοματολογίας
    ΕΧΟΝΤΑΣ
    MAXIMUM(Τιμές.Τιμή) > 1000

    ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

    Ο τελεστής ORDER BY ταξινομεί το αποτέλεσμα ενός ερωτήματος. Για να διασφαλιστεί ότι οι εγγραφές εμφανίζονται με συνεπή σειρά, χρησιμοποιείται η ΑΥΤΟΜΑΤΗ ΑΡΧΗ. Οι πρωτόγονοι τύποι ταξινομούνται σύμφωνα με τους συνήθεις κανόνες. Οι τύποι αναφοράς ταξινομούνται κατά GUID.

    Ένα παράδειγμα ταξινόμησης λίστας υπαλλήλων με βάση το όνομα:

    ΕΠΙΛΕΓΩ
    Υπάλληλοι.Όνομα AS Όνομα
    ΑΠΟ
    Κατάλογος.Εργαζόμενοι ΠΩΣ Εργαζόμενοι
    ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ
    Ονομα
    ΑΥΤΟΜΑΤΗ ΠΑΡΑΓΓΕΛΙΑ

    Άλλες κατασκευές γλώσσας ερωτήματος 1C

    • ΣΥΝΔΥΑΣΜΟΣ– αποτελέσματα δύο ερωτημάτων σε ένα.
    • ΣΥΝΔΥΑΣΤΕ ΤΑ ΠΑΝΤΑ– παρόμοιο με το COMBINE, αλλά χωρίς ομαδοποίηση πανομοιότυπων σειρών.
    • ΑΔΕΙΟ ΤΡΑΠΕΖΙ– μερικές φορές χρησιμοποιείται κατά την ένωση ερωτημάτων για τον καθορισμό ενός κενού ένθετου πίνακα.
    • ΘΕΣΗ– δημιουργεί έναν προσωρινό πίνακα για τη βελτιστοποίηση σύνθετων ερωτημάτων 1C. Τέτοια αιτήματα ονομάζονται αιτήματα παρτίδας.

    Λειτουργίες γλώσσας ερωτήματος

    • ΥΠΟΤΡΟΠΗπερικόπτει μια συμβολοσειρά από μια καθορισμένη θέση σε έναν καθορισμένο αριθμό χαρακτήρων.
    • ΕΤΟΣ...ΔΕΥΤΕΡΟσας επιτρέπει να λάβετε την επιλεγμένη τιμή ενός αριθμητικού τύπου. Η παράμετρος εισαγωγής είναι η ημερομηνία.
    • ΑΡΧΗ ΠΕΡΙΟΔΟΥ και ΤΕΛΟΣ ΠΕΡΙΟΔΟΥχρησιμοποιείται κατά την εργασία με ημερομηνίες. Ο τύπος της περιόδου (ΗΜΕΡΑ, ΜΗΝΑΣ, ΕΤΟΣ, κ.λπ.) υποδεικνύεται ως πρόσθετη παράμετρος.
    • ADDKDATEσας επιτρέπει να προσθέσετε ή να αφαιρέσετε μια καθορισμένη ώρα ενός συγκεκριμένου τύπου από μια ημερομηνία (SECOND, MINUTE, DAY, κ.λπ.).
    • ΔΙΑΦΟΡΑκαθορίζει τη διαφορά μεταξύ δύο ημερομηνιών, υποδεικνύοντας τον τύπο της τιμής εξόδου (ΗΜΕΡΑ, ΕΤΟΣ, ΜΗΝΑΣ, κ.λπ.).
    • ISNULLαντικαθιστά την τιμή που λείπει με την καθορισμένη έκφραση.
    • ΣΥΝΔΕΣΜΟΙ ΑΝΤΙΠΡΟΣΩΠΗΣΗΣ και ΑΝΤΙΠΡΟΣΩΠΗΣΗΣλάβετε μια παράσταση συμβολοσειράς του καθορισμένου πεδίου. Εφαρμόστε σε οποιεσδήποτε τιμές και μόνο σε τιμές αναφοράς, αντίστοιχα.
    • ΤΥΠΟΣ, ΤΙΜΕΣ ΤΥΠΟΥχρησιμοποιούνται για τον προσδιορισμό του τύπου της παραμέτρου εισόδου.
    • ΣΥΝΔΕΣΜΟΣείναι ένας λογικός τελεστής σύγκρισης για τον τύπο τιμής χαρακτηριστικού.
    • ΕΞΠΡΕΣχρησιμοποιείται για τη μετατροπή μιας τιμής στον επιθυμητό τύπο.
    • ΗΜΕΡΟΜΗΝΙΑ ΩΡΑπαίρνει μια τιμή τύπου "Ημερομηνία" από αριθμητικές τιμές (Έτος, Μήνας, Ημέρα, Ώρα, Λεπτό, Δευτερόλεπτο).
    • ΕΝΝΟΙΑσε ένα αίτημα 1C χρησιμοποιείται για να υποδείξει προκαθορισμένες τιμές - καταλόγους, απαριθμήσεις, σχέδια για τύπους χαρακτηριστικών. Παράδειγμα χρήσης: " Όπου Legal Individual = Value(Anumeration. Legal Individual. Individual)«.

    Εργαλείο δημιουργίας ερωτημάτων

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

    • "Πίνακες και πεδία" - περιέχει τα πεδία που πρέπει να επιλεγούν και τις πηγές τους.
    • "Συνδέσεις" - περιγράφει τις συνθήκες για τη δομή ΣΥΝΔΕΣΗ.
    • "Ομαδοποίηση"—περιέχει μια περιγραφή των δομών ομαδοποίησης και των αθροισμένων πεδίων που βασίζονται σε αυτές.
    • "Προϋποθέσεις" - είναι υπεύθυνος για την επιλογή δεδομένων στο αίτημα.
    • "Για προχωρημένους"—πρόσθετες παράμετροι ερωτήματος, όπως λέξεις-κλειδιά για την εντολή "ΕΠΙΛΟΓΗ" κ.λπ.
    • "Συνδέσεις/Ψευδώνυμα" - υποδεικνύονται οι δυνατότητες σύνδεσης πινάκων και καθορίζονται ψευδώνυμα (η κατασκευή "HOW").
    • Η "Παραγγελία" είναι υπεύθυνη για την ταξινόμηση των αποτελεσμάτων των ερωτημάτων.
    • "Σύνολα" - παρόμοια με την καρτέλα "Ομαδοποίηση", αλλά χρησιμοποιείται για την κατασκευή "TOTALS".

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


    Αίτημα Κονσόλας

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

    Μπορείτε να κάνετε λήψη της κονσόλας ερωτήματος στον δίσκο ITS ή μέσω .

    Το αντικείμενο διαμόρφωσης "ρόλος" δίνει ένα σύνολο δικαιωμάτων σε λειτουργίες (ενέργειες) πάνω σε αντικείμενα διαμόρφωσης.

    Ρόλος «Πλήρης Δικαιώματα».

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

    Αυτό που το διακρίνει από άλλους ρόλους είναι η παρουσία του δικαιώματος της «Διοίκησης».

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

    Περιορισμοί πρόσβασης σε επίπεδο εγγραφής

    Ασφάλεια επιπέδου γραμμής (RLS) – περιορισμός σε επίπεδο εγγραφής.

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

    • ρόλους,
    • παράμετροι συνεδρίας,
    • λειτουργικές επιλογές,
    • προνομιούχες κοινές ενότητες,
    • λέξη-κλειδί ΕΠΙΤΡΕΠΕΤΑΙ στη γλώσσα ερωτήματος.

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

    Τεχνική εφαρμογή περιορισμών πρόσβασης στο 1C

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


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

    • σε αναφορές,
    • σε δυναμικές λίστες και σε κανονικές φόρμες λίστας
    • σε προσαρμοσμένα ερωτήματα.

    Μια τέτοια υλοποίηση του μηχανισμού επηρεάζει σε μεγάλο βαθμό την απόδοση.

    Τρόποι παράκαμψης περιορισμών πρόσβασης.

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

    ΕΝΑ) Προνομιακή ενότητα είναι μια κοινή ενότητα με τη σημαία "Προνομιούχα" στις ιδιότητες.

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


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

    • Προνομιακή μεταχείριση κατά τη διεξαγωγή
    • Προνομιακή λειτουργία κατά την ακύρωση μιας συναλλαγής


    Β) Μέθοδος SetPrivilegedMode()

    Η εντολή συστήματος σάς επιτρέπει να κάνετε μέρος του κώδικα οποιασδήποτε μονάδας προνομιακό.

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

    Θα λειτουργεί μέχρι τη γραμμή για την απενεργοποίηση αυτής της λειτουργίας ή μέχρι το τέλος της διαδικασίας/λειτουργίας

    (Αληθής);

    // οποιοσδήποτε κώδικας εδώ θα εκτελεστεί χωρίς έλεγχο δικαιωμάτων και RLS

    SetPrivilegedMode(Ψέμα ); // ή τέλος διαδικασίας / συνάρτησης

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

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

    Λειτουργία PrivilegedModeΤο () επιστρέφει True εάν η προνομιακή λειτουργία εξακολουθεί να είναι ενεργοποιημένη και False εάν είναι εντελώς απενεργοποιημένη. Αυτό δεν αναλύει τον αριθμό των ρυθμίσεων προνομιακής λειτουργίας σε μια συγκεκριμένη λειτουργία.

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


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


    Ανακύπτει φυσικά το ερώτημα: Γιατί τότε να ρυθμίσετε καθόλου περιορισμούς πρόσβασης, εάν μπορεί να παρακαμφθεί τόσο εύκολα;

    Λειτουργία ασφαλείας.

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

    SetSafeMode().

    Η ασφαλής λειτουργία, μεταξύ άλλων, αγνοεί την προνομιακή λειτουργία.

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

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

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

    Ρύθμιση περιορισμών πρόσβασης

    Το RLS μπορεί να διαμορφωθεί μόνο για δικαιώματα:

    • διαβάστε (επιλέξτε)
    • προσθήκη (εισαγωγή)
    • αλλαγή (ενημέρωση)
    • διαγράφω

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

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

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

    Για όλα τα άλλα δικαιώματα δεν υπάρχει τέτοια επιλογή.

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

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

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


    *Δυνατότητα: για δικαιώματα προσθήκης, αλλαγής, διαγραφής:

    • Ο περιορισμός μπορεί να διαμορφωθεί μόνο για όλα τα πεδία.
    • Μπορεί να υπάρχει μόνο ένας περιορισμός.

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

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

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

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

    Μηχανισμός επιβολής περιορισμών πρόσβασης.

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

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

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

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

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

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


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

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

    Μέθοδος «τα πάντα».

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

    Η επιβολή περιορισμών πρόσβασης χρησιμοποιώντας τη μέθοδο "όλα" παρουσιάζεται σχηματικά στο σχήμα:


    Μέθοδος "Επιτρεπόμενη".

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


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

    Στην έκδοση πελάτη-διακομιστή του 1C:Enterprise, εφαρμόζονται περιορισμοί στον διακομιστή 1C:Enterprise.

    Ωστόσο, αυτή η επιλογή (ΕΠΙΤΡΕΠΕΤΑΙ) δεν θα λειτουργήσει εάν σε ένα ερώτημα αναφερόμαστε σε έναν πίνακα για τον οποίο δεν έχουν ρυθμιστεί περιορισμοί πρόσβασης, αλλά ο οποίος περιέχει αναφορές σε σειρές πίνακα με ρυθμισμένους περιορισμούς. Σε αυτήν την περίπτωση, το αποτέλεσμα του ερωτήματος θα εμφανίσει "<Объект не найден>......" αντί για την τιμή του πεδίου αναφοράς.


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

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

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

    Εξάσκηση 1. Εργαλείο δημιουργίας ερωτημάτων σε ρυθμίσεις RLS.

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


    Καρτέλα "Πίνακες".

    Ο κύριος πίνακας θα είναι ο πίνακας του αντικειμένου για το οποίο διαμορφώνεται ο περιορισμός.

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

    Καρτέλα "Προϋποθέσεις"

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

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

    “Ονοματολογία WHERE Ονοματολογία. Τιμή > 500”

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


    Μετά τη ρύθμιση ενός περιορισμού πρόσβασης, ο πίνακας θα εμφανίζει μόνο στοιχεία που ικανοποιούν την προϋπόθεση:


    Εξαφανίστηκαν και ομάδες. Ας αλλάξουμε το κείμενο του περιορισμού

    «Ονοματολογία WHERE Ονοματολογία. Τιμή > 500

    Ή Ονοματολογία. Αυτή είναι μια ομάδα"

    Λοιπόν, τώρα αυτό είναι που χρειάζεστε.


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


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


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


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

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

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

    Περιορισμοί κατά τη ρύθμιση της πρόσβασης (RLS).

    • Δεν υπάρχει ενότητα Περίληψη.
    • Δεν είναι δυνατή η πρόσβαση σε πίνακες εικονικών καταχωρητών.
    • Δεν μπορείτε να χρησιμοποιήσετε ρητά παραμέτρους.
    • Μπορεί να χρησιμοποιηθεί σε ένθετα ερωτήματα any>/span> εργαλεία γλώσσας ερωτημάτων εκτός από:
      • χειριστής IN HIERARCHY?
      • ΑΠΟΤΕΛΕΣΜΑΤΑ προτάσεις?
      • ένθετα αποτελέσματα ερωτημάτων δεν πρέπει να περιέχει μέρη πίνακα>/span>;
      • εικονικά τραπέζια, ιδίως Υπόλοιπα και Κύκλοι Εργασιών

    Πρακτική 2. Ονοματολογία με τρέχουσα τιμή.

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

    Λύση:

    Προσθέτουμε έναν νέο κανόνα περιορισμού πρόσβασης για τον κατάλογο "Ονοματολογία" με το δικαίωμα "ανάγνωση".
    Επιλέξτε «άλλα πεδία».
    Στον κατασκευαστή προσθέτουμε ένα ένθετο ερώτημα. Σε αυτό, επιλέξτε τον πίνακα μητρώου πληροφοριών "Τιμές προϊόντων".
    Δεν υπάρχει καρτέλα "παραγγελία" - αυτό είναι ένα χαρακτηριστικό του σχεδιαστή ερωτημάτων για τη δημιουργία ενός αιτήματος περιορισμού πρόσβασης.
    Στην καρτέλα "Για προχωρημένους", ορίστε το "first 999999999", εμφανίζεται η καρτέλα "παραγγελία".
    Ρυθμίζουμε την παραγγελία κατά το πεδίο «Περίοδος» με φθίνουσα σειρά.
    Στη συνέχεια, δημιουργήσαμε μια σύνδεση μεταξύ του κύριου πίνακα και του υποερωτήματος με αναφορά.


    Πρότυπα περιορισμού πρόσβασης.

    Πρακτική 3. Περιορισμός σε «αντισυμβαλλόμενους» κατά τιμή σε σταθερά.

    Ας ορίσουμε έναν περιορισμό πρόσβασης για τον κατάλογο Counterparties με βάση την τιμή που είναι αποθηκευμένη στη Constant.

    Επιπλέον, πρέπει να ορίσετε έναν περιορισμό για όλα τα αντικείμενα που χρησιμοποιούν τον κατάλογο "Αντισυμβαλλόμενοι" στις λεπτομέρειες.

    Λύση

    Για τον κατάλογο "Αντισυμβαλλόμενοι", θα ορίσουμε έναν περιορισμό για το δικαίωμα "ανάγνωσης" προσθέτοντας ένα ένθετο ερώτημα στη σταθερά στην ενότητα "Προϋποθέσεις". Μην ξεχνάτε Αυτό είναι μια ομάδα.

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

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

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

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

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

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

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

    Ας προσθέσουμε το κείμενο μετά τη λέξη WHERE στο πρότυπο "Πρότυπο εργολάβου", εκτός από το κείμενο για το EtoGroup.

    Παράμετροι σε πρότυπα περιορισμού πρόσβασης.

    Ας συνεχίσουμε να λύνουμε το πρόβλημα 2.

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

    Ας αλλάξουμε το όνομα του κύριου πίνακα στο κείμενο του προτύπου σε "#CurrentTable"

    Το "#CurrentTable" είναι μια προκαθορισμένη παράμετρος.

    Και μέσα από μια τελεία υποδεικνύουμε τον αριθμό της παραμέτρου εισόδου - “.#Parameter(1)

    Το "#Parameter" είναι επίσης μια προκαθορισμένη τιμή. Μπορεί να περιέχει έναν αυθαίρετο αριθμό παραμέτρων εισόδου. Απευθύνονται με αύξοντα αριθμό.

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

    Για το έγγραφο τα εξής:

    "Πωλήσεις αγαθών WHERE #TemplateCounterparty ("Counterparty")"

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

    Κύριος πίνακας - Ονοματολογία

    Το κείμενο του προτύπου είναι:

    #CurrentTable WHERE #CurrentTable.#Parameter(1) = #Parameter(2)

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

    Το σύμβολο "#" μπορεί να ακολουθείται από:

    • Μία από τις λέξεις-κλειδιά:
      • Μια παράμετρος ακολουθούμενη από τον αριθμό της παραμέτρου στο πρότυπο σε παρένθεση.
      • CurrentTable – υποδηλώνει την εισαγωγή στο κείμενο του πλήρους ονόματος του πίνακα για τον οποίο δημιουργείται ο περιορισμός.
      • CurrentTableName– υποδηλώνει την εισαγωγή στο κείμενο του πλήρους ονόματος του πίνακα (ως τιμή συμβολοσειράς, σε εισαγωγικά) στον οποίο εφαρμόζεται η εντολή, στην τρέχουσα έκδοση της ενσωματωμένης γλώσσας·
      • NameCurrentAccessRight– περιέχει το όνομα του δικαιώματος για το οποίο εκτελείται ο τρέχων περιορισμός: READ, ADD, INSERT, CHANGE, UPDATE, DELETE.
    • όνομα παραμέτρου προτύπου – σημαίνει εισαγωγή του αντίστοιχου περιορισμού παραμέτρου προτύπου στο κείμενο.
    • σύμβολο "#" - υποδηλώνει την εισαγωγή ενός χαρακτήρα "#" στο κείμενο.

    Μια έκφραση περιορισμού πρόσβασης μπορεί να περιέχει:

    • Πρότυπο περιορισμού πρόσβασης, το οποίο καθορίζεται στη μορφή #TemplateName("Τιμή παραμέτρου προτύπου 1", "Τιμή παραμέτρου προτύπου 2",...). Κάθε παράμετρος προτύπου περικλείεται σε διπλά εισαγωγικά. Εάν πρέπει να καθορίσετε έναν χαρακτήρα διπλού εισαγωγικού στο κείμενο της παραμέτρου, πρέπει να χρησιμοποιήσετε δύο διπλά εισαγωγικά.
    • Λειτουργία StrContains (WhereWeLook, WhatWeLook). Η συνάρτηση έχει σχεδιαστεί για να αναζητά μια εμφάνιση της συμβολοσειράς WhatWeLook στη συμβολοσειρά WhereWeLook. Επιστρέφει True εάν εντοπιστεί το περιστατικό και False διαφορετικά.
    • Ο τελεστής + είναι για τη συνένωση συμβολοσειρών.

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

    Δεν μπορούν να εγκατασταθούν χρησιμοποιώντας SetParameter()ή κάτι παρόμοιο.

    Οι παράμετροι σε αυτή την περίπτωση είναι:

    • Επιλογές συνεδρίας
    • Λειτουργικές επιλογές

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

    Πρακτική 4. Πρόσβαση στους αντισυμβαλλομένους «σας».

    Είναι απαραίτητο να ρυθμίσετε τον περιορισμό της πρόσβασης του τρέχοντος χρήστη στους αντισυμβαλλομένους «τους».

    Υπάρχει ένας κατάλογος "Χρήστες", ένας κατάλογος "Αντισυμβαλλόμενοι", έγγραφα με τα στοιχεία "Αντισυμβαλλόμενος".

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

    Η επικοινωνία πρέπει επίσης να διαμορφωθεί.

    Πιθανές επιλογές:

    Δημιουργία συνδέσεων μεταξύ χρήστη και αντισυμβαλλομένου

    • Λεπτομέρειες στον κατάλογο αντισυμβαλλομένων
    • Μητρώο πληροφοριών

    Πιθανές λύσεις στο πρόβλημα:

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

    Λύση.

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

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

    Ας δημιουργήσουμε έναν νέο ρόλο και σε αυτόν έναν νέο περιορισμό πρόσβασης για το έγγραφο «Τιμολόγιο».

    Στο κείμενο του αιτήματος, θα συνδέσουμε τον κύριο πίνακα με το μητρώο πληροφοριών για Account = Account και Manager = &CurrentUser. Τύπος σύνδεσης Εσωτερική.

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

    Έλεγχος - οι περιορισμοί λειτουργούν

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

    Πρακτική 5. Ημερομηνία απαγόρευσης αλλαγών.

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

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

    Ας οικοδομήσουμε τη λογική της λύσης ως εξής:

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

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

    • Τεκμηρίωση
    • Μητρώα περιοδικών πληροφοριών

    Ας δημιουργήσουμε έναν νέο ρόλο «Περιορισμοί Κατά Ημερομηνία Απαγόρευσης Αλλαγών».

    Σε αυτό, για το παραστατικό «Τιμολόγιο» για τη σωστή «αλλαγή» θα προσθέσουμε έναν νέο περιορισμό πρόσβασης.

    Καθορίζουμε τη ρύθμιση για όλα τα πεδία.

    Το κείμενο του περιορισμού είναι:

    ReceiptInvoice FROM Document.ReceiptInvoice AS ReceiptInvoice

    Αλλαγή ημερομηνιών απαγόρευσης Ημερομηνία απαγόρευσης AS Ημερομηνία απαγόρευσης
    ΑΠΟ

    ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ (ΕΠΙΛΟΓΗ
    MAX (Αλλαγή απαγορευμένων ημερομηνιών. Χρήστης) AS χρήστης
    ΑΠΟ
    Μητρώο Πληροφοριών Ημερομηνίες Απαγόρευσης Αλλαγών AS Ημερομηνίες Απαγόρευσης Αλλαγών
    ΟΠΟΥ
    (Αλλαγή Απαγορευμένων Ημερομηνιών. Χρήστης = &Τρέχων Χρήστης
    Ή Dates Prohibited Changes.User = VALUE(Directory.users.EmptyLink))) AS VZ_User
    BY Date of Prohibition of Changes.User = VZ_User.User) AS NestedQuery
    Τιμολόγιο απόδειξης λογισμικού. Ημερομηνία > Ένθετο ερώτημα. Ημερομηνία απαγόρευσης

    Ας ελέγξουμε - ο περιορισμός λειτουργεί.

    Χρήση οδηγιών προεπεξεργαστή

    #If Condition1 #Τότε

    Αίτημα τμήματος 1

    #ElseIf Condition2 #Τότε

    Αίτημα τμήματος 2

    #Σε διαφορετική περίπτωση

    Αίτημα απόσπασμα 3

    #Τέλος εαν

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

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

    Το μειονέκτημα είναι ότι ο κατασκευαστής ερωτήματος δεν θα λειτουργήσει με τέτοιο κείμενο.

    *Ιδιομορφία:

    Σε αντίθεση με τις οδηγίες στον προεπεξεργαστή της ενσωματωμένης γλώσσας στα κείμενα περιορισμού πρόσβασης, πριν από τον χειριστή Τότε πρέπει να βάλετε ένα κατακερματισμό - #Τότε

    Εξάσκηση 6. Εναλλαγή "Χρήση RLS"

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

    Για να γίνει αυτό, θα προσθέσουμε μια σταθερά και μια παράμετρο συνόδου με το όνομα "UseRLS".

    Ας γράψουμε στο Session Module για να ορίσουμε την τιμή της παραμέτρου περιόδου λειτουργίας από την τιμή της σταθεράς.

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

    "#If &UseRLS #Then….. #EndIf"

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

    Ωστόσο, τώρα μετά την ενεργοποίηση της σημαίας "χρήση ραντάρ", οι αλλαγές δεν θα τεθούν αμέσως σε ισχύ. Γιατί;

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

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


    Τέλος πρώτου μέρους.

       

    17 κανόνες για τη σύνταξη ενός βέλτιστου QUERY για δεδομένα βάσης δεδομένων 1C

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

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

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

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

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

    Προτάσεις για τη σύνταξη ερωτημάτων βάσης δεδομένων στη γλώσσα ερωτημάτων της πλατφόρμας 1C:

    1) Το σώμα αιτήματος μπορεί να περιέχει προκαθορισμένα δεδομένα διαμόρφωσης, όπως:

    • τιμές enum?
    • προκαθορισμένα δεδομένα:
    • βιβλία αναφοράς;
    • σχέδια για τύπους χαρακτηριστικών·
    • λογιστικά σχέδια?
    • σχέδια για τύπους υπολογισμών·
    • Κενοί σύνδεσμοι?
    • τιμές σημείων διαδρομής επιχειρηματικής διαδικασίας.

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

    Παράδειγμα χρήσης κυριολεκτικού ΕΝΝΟΙΑ:

    • WHERE City = VALUE (Κατάλογος. Πόλεις. Μόσχα)
    • WHERE City = VALUE(Directory.Cities.EmptyLink)
    • WHEREProductType = VALUE(Enumeration.ProductTypes.Service)
    • WHEREMovementType = VALUE(MovementTypeAccumulation.Incoming)
    • WHERE RoutePoint = VALUE(BusinessProcess.BusinessProcess1.RoutePoint.Action1

    2) Χρησιμοποιώντας τις οδηγίες ΑΥΤΟΜΑΤΗ ΠΑΡΑΓΓΕΛΙΑΤο ερώτημα μπορεί να διαρκέσει πολύ για να ολοκληρωθεί, επομένως εάν δεν απαιτείται ταξινόμηση, τότε είναι προτιμότερο να μην το χρησιμοποιήσετε καθόλου. Στις περισσότερες περιπτώσεις, είναι καλύτερο να χρησιμοποιείτε ταξινόμηση εντολών ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ.

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

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

    3) Για να αποφύγετε την επανάληψη ενός ερωτήματος στη βάση δεδομένων κατά την εμφάνιση του αποτελέσματος του ερωτήματος στο χρήστη (για παράδειγμα, δημιουργία ερωτήματος ή εμφάνιση του αποτελέσματος του ερωτήματος χρησιμοποιώντας ένα έγγραφο υπολογιστικού φύλλου), είναι χρήσιμο να χρησιμοποιήσετε την οδηγία ΕΙΣΑΓΩΓΙΚΟΙ ΣΥΝΔΕΣΜΟΙ, το οποίο σας επιτρέπει να λάβετε μια αναπαράσταση μιας τιμής αναφοράς. Παράδειγμα:

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

    4) Εάν το αίτημα περιέχει ένα πεδίο με σύνθετο τύπο, τότε για τέτοια πεδία καθίσταται απαραίτητο να μετατραπούν οι τιμές πεδίων σε συγκεκριμένο τύπο χρησιμοποιώντας μια εντολή ΕΞΠΡΕΣ, που θα σας επιτρέψει να αφαιρέσετε περιττούς πίνακες από την αριστερή ένωση με ένα πεδίο σύνθετου τύπου δεδομένων και να επιταχύνετε την εκτέλεση ερωτήματος. Παράδειγμα:

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

    Κωδικός 1C v 8.x ΕΠΙΛΟΓΗ
    EXPRESS(Υπόλοιπα εμπορεύματα. Έγγραφο καταχωρητή AS. Παραλαβή εμπορευμάτων).Αριθμός AS αριθμός απόδειξης,
    EXPRESS(Υπόλοιπα αγαθά. Έγγραφο AS. Παραλαβή Αγαθών). Ημερομηνία AS Ημερομηνία παραλαβής
    ΑΠΟ
    Μητρώο Συσσωρεύσεων Υπόλοιπα Αγαθών ΩΣ Υπολειπόμενα Αγαθά

    Εάν ένας τύπος cast θεωρείται μη εφικτός, τότε το αποτέλεσμα του τύπου cast θα είναι η τιμή ΜΗΔΕΝΙΚΟ.

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

    6) Εάν το ερώτημα χρησιμοποιεί μια ένωση και ορισμένα μέρη της ένωσης περιέχουν ένθετους πίνακες (ένα έγγραφο με τμήμα πίνακα) και ορισμένα όχι, καθίσταται απαραίτητο να συμπληρωθεί η λίστα επιλογής με πεδία - κενοί ένθετοι πίνακες. Αυτό γίνεται χρησιμοποιώντας μια λέξη-κλειδί ΑΔΕΙΟΣ, μετά το οποίο τα ψευδώνυμα των πεδίων που θα αποτελέσουν τον ένθετο πίνακα υποδεικνύονται σε παρένθεση. Παράδειγμα:

    Κωδικός 1C v 8.x // Επιλέξτε τα πεδία Αριθμός και Σύνθεση
    // από τον εικονικό πίνακα Document.Expenditure
    ΕΠΙΛΕΞΤΕ Σύνδεσμο.Αριθμός, ΚΕΝΟΣ ΠΙΝΑΚΑΣ.(Αρ., Είδος, Ποσότητα) ΩΣ Σύνθεση
    ΑΠΟ Έγγραφο.Τιμολόγιο Εξόδων
    ΣΥΝΔΥΑΣΤΕ ΤΑ ΠΑΝΤΑ
    ΕΠΙΛΕΞΤΕ Σύνδεσμο.Αριθμός, Περιεχόμενα.(Αριθμός γραμμής, Προϊόν, Ποσότητα)
    FROM Document.Invoice Document.Invoice.Composition.*

    7) Για να αποτρέψετε την εμφάνιση διπλότυπων γραμμών στο αποτέλεσμα του ερωτήματος, θα πρέπει να χρησιμοποιήσετε την οδηγία ΔΙΑΦΟΡΟΣ, γιατί είναι πιο οπτικό και κατανοητό, και οι οδηγίες ΟΜΑΔΑ ΑΠΟχρησιμοποιείται για ομαδοποίηση με χρήση συναρτήσεων συγκεντρωτικών στοιχείων. Ξάτι, όταν χρησιμοποιείτε συναρτήσεις συγκεντρωτικών, μια πρόταση ΟΜΑΔΑ ΑΠΟμπορεί να μην καθορίζεται καθόλου, αλλά όλα τα αποτελέσματα ερωτημάτων θα ομαδοποιηθούν σε μία μόνο γραμμή. Παράδειγμα:

    Κωδικός 1C v 8.x // Είναι απαραίτητο να μάθετε ποιοι αντισυμβαλλόμενοι
    // τα αγαθά αποστέλλονται για την περίοδο.
    Επιλέξτε Διάφορα
    Έγγραφο.Τιμολόγιο.Αντισυμβαλλόμενος

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

    Κωδικός 1C v 8.x ΕΠΙΛΟΓΗ
    Παραλαβή Αγαθών και Υπηρεσιών Αγαθά (SUM (Ποσότητα), Ονοματολογία),
    Παραλαβή Αγαθών και Υπηρεσιών Σύνδεσμος,
    Παραλαβή Αγαθών και Υπηρεσιών Αντισυμβαλλόμενος
    ΑΠΟ
    Έγγραφο Παραλαβή Αγαθών και Υπηρεσιών ΠΩΣ Παραλαβή Αγαθών και Υπηρεσιών
    ΟΜΑΔΑ ΑΠΟ
    Παραλαβή Αγαθών και Υπηρεσιών Αγαθά (Ονοματολογία)

    9) Οδηγίες ISNULLπροορίζεται να αντικαταστήσει την τιμή ΜΗΔΕΝΙΚΟσε άλλη τιμή, αλλά μην ξεχνάτε ότι η δεύτερη παράμετρος θα μετατραπεί στον τύπο της πρώτης εάν ο τύπος της πρώτης παραμέτρου είναι συμβολοσειρά ή αριθμός.

    10) Κατά την πρόσβαση στον κύριο πίνακα, μπορείτε να έχετε πρόσβαση υπό όρους στα δεδομένα στον δευτερεύοντα πίνακα. Αυτό το χαρακτηριστικό ονομάζεται αποαναφορά πεδίων ενός δευτερεύοντος πίνακα.

    Παράδειγμα (αναζητήστε έγγραφα που περιέχουν ένα συγκεκριμένο προϊόν στην ενότητα του πίνακα):

    Το πλεονέκτημα αυτού του ερωτήματος σε σχέση με ένα ερώτημα στον δευτερεύοντα πίνακα Receipt.Goods είναι ότι εάν υπάρχουν διπλότυπα σε έγγραφα, το αποτέλεσμα του ερωτήματος θα επιστρέψει μόνο μοναδικά έγγραφα χωρίς τη χρήση της ΔΙΑΦΟΡΕΤΙΚΗΣ λέξης-κλειδιού.

    11) Μια ενδιαφέρουσα παραλλαγή του τελεστή Β είναι να ελέγχει εάν ένα διατεταγμένο σύνολο περιλαμβάνεται στο σύνολο τέτοιων συνόλων (Πεδίο1, Πεδίο2, ..., ΠεδίοΝ) Β (Πεδίο1, Πεδίο2, ..., ΠεδίοΝ).

    Κωδικός 1C v 8.x ΕΠΙΛΟΓΗ
    Αντισυμβαλλόμενοι.Σύνδεσμος
    ΟΠΟΥ
    (Counterparties.Link, Products.Link) B
    (SELECT Sales.Customer, Sales.Product
    ΑΠΟ RegisterAccumulation.Sales AS Sales)
    ΑΠΟ
    Κατάλογος. Αντισυμβαλλόμενοι,
    Κατάλογος.Προϊόντα

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

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

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

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

    13) Στον τρόπο λειτουργίας πελάτη-διακομιστή, η συνάρτηση SUBSTRING()υλοποιείται χρησιμοποιώντας τη συνάρτηση SUBSTRING() της αντίστοιχης δήλωσης SQL που μεταβιβάστηκε στον διακομιστή βάσης δεδομένων του SQL Server, ο οποίος υπολογίζει τον τύπο του αποτελέσματος της συνάρτησης SUBSTRING() χρησιμοποιώντας σύνθετους κανόνες ανάλογα με τον τύπο και τις τιμές των παραμέτρων της, όπως καθώς και ανάλογα με το πλαίσιο στο οποίο χρησιμοποιείται . Στις περισσότερες περιπτώσεις, αυτοί οι κανόνες δεν έχουν καμία επίδραση στην εκτέλεση του ερωτήματος, αλλά υπάρχουν φορές που το μέγιστο μήκος γραμμής αποτελεσμάτων που υπολογίζεται από τον SQL Server είναι σημαντικό για την εκτέλεση του ερωτήματος. Είναι σημαντικό να έχετε κατά νου ότι σε ορισμένα περιβάλλοντα κατά τη χρήση της συνάρτησης SUBSTRING(), το μέγιστο μήκος του αποτελέσματός της μπορεί να είναι ίσο με το μέγιστο μήκος μιας συμβολοσειράς περιορισμένου μήκους, η οποία στον SQL Server είναι 4000 χαρακτήρες. Αυτό μπορεί να προκαλέσει απροσδόκητη διακοπή λειτουργίας του ερωτήματος:

    Microsoft OLE DB Provider για SQL Server: Προειδοποίηση: Ο επεξεργαστής ερωτημάτων δεν μπόρεσε να δημιουργήσει ένα σχέδιο ερωτήματος από το βελτιστοποιητή, επειδή το συνολικό μήκος όλων των στηλών στην ρήτρα GROUP BY ή ORDER BY υπερβαίνει τα 8000 byte.

    HRESULT=80040E14, SQLSTATE=42000, native=8618

    14) Χρησιμοποιήστε με προσοχή Ήστο σχέδιο ΟΠΟΥ, καθώς η χρήση μιας συνθήκης OR μπορεί να κάνει το ερώτημα σημαντικά βαρύτερο. Το πρόβλημα μπορεί να λυθεί με σχεδιασμό ΣΥΝΔΥΑΣΤΕ ΤΑ ΠΑΝΤΑ. Παράδειγμα:

    Κωδικός 1C v 8.x ΕΠΙΛΟΓΗ

    ΑΠΟ

    ΟΠΟΥ
    _Demo Contractors.Link =Link1
    ΣΥΝΔΥΑΣΤΕ ΤΑ ΠΑΝΤΑ
    ΕΠΙΛΕΓΩ
    _Demo Contractors.NameFull
    ΑΠΟ
    Κατάλογος._Demo Counterparties ΠΩΣ ΝΑ _Demo Counterparties
    ΟΠΟΥ
    _Demo Contractors.Link = Link2

    15) Κατάσταση ΟΧΙ ΜΕΣΑστο σχέδιο ΟΠΟΥαυξάνει τον χρόνο εκτέλεσης του ερωτήματος, καθώς αυτό είναι ένα είδος ΟΧΙ (OR1 OR2 ... ORn), οπότε για μεγάλα τραπέζια προσπαθήστε να χρησιμοποιήσετε ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗ με προϋπόθεση ΕΙΝΑΙ ΜΗΧΑΝΗ. Παράδειγμα:

    Κωδικός 1C v 8.x ΕΠΙΛΟΓΗ
    _Demo Contractors.Link
    ΑΠΟ
    Κατάλογος._Demo Counterparties ΠΩΣ ΝΑ _Demo Counterparties
    ΑΡΙΣΤΕΡΗ ΣΥΝΔΕΣΗ Έγγραφο._Παραγγελία επίδειξης αγοραστή ΠΩΣ ΝΑ _Εναγγελία επίδειξης αγοραστή
    Λογισμικό _Αντισυμβαλλόμενοι επίδειξης Σύνδεσμος = _Επίδειξη Παραγγελίας του Αγοραστή. Αντισυμβαλλόμενος
    ΟΠΟΥ
    _Εντολή επίδειξης του αγοραστή. Ο αντισυμβαλλόμενος ΕΙΝΑΙ ΜΗΧΑΝΟΣ

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

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

    17) Εάν δεν χρησιμοποιείτε Προσωρινός διαχειριστής τραπεζιού, τότε δεν χρειάζεται να διαγράψετε ρητά τον προσωρινό πίνακα, θα διαγραφεί μετά την ολοκλήρωση του ερωτήματος δέσμης, διαφορετικά θα πρέπει να διαγράψετε τον προσωρινό πίνακα χρησιμοποιώντας μία από τις ακόλουθες μεθόδους: εντολή ΚΑΤΑΣΤΡΕΦΩστο αίτημα, καλέστε τη μέθοδο TemporaryTableManager.Close().

    Και εκτός από το βίντεο από τον Evgeny Gilev: Τυπικά σφάλματα κατά τη σύνταξη ερωτημάτων σε 1C:

    Παρόμοια άρθρα