Ένθετα ερωτήματα στον κατασκευαστή. Κατασκευαστές ερωτημάτων 1γ συνθήκες κατασκευής ερωτήματος

Λοιπόν, ας ξεκινήσουμε με κάτι απλό: δημιουργήστε μια νέα επεξεργασία στο πρόγραμμα διαμόρφωσης, ονομάστε την Query Console ή Query Builder, όπως θέλετε.

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

Για να δημιουργήσουμε τον πίνακα Παραμέτρων, στην καρτέλα "Δεδομένα" στο "Πίνακας τμήμα" της θα προσθέσουμε έναν νέο πίνακα, τον ονομάζουμε Παράμετροι ερωτήματος, εδώ θα προσθέσουμε τις στήλες αυτού του πίνακα: 1) Όνομα παραμέτρου, πληκτρολογήστε συμβολοσειρά = 25 χαρακτήρες. ParameterValue, εδώ είναι ένας σύνθετος τύπος δεδομένων, δείτε το Σχήμα:

Επομένως, όπως φαίνεται στην εικόνα, επιλέγουμε έναν σύνθετο τύπο για τη στήλη Parameter Value: στο μενού τύπου που ανοίγει, επιλέξτε το πλαίσιο ελέγχου "Composite type", επιλέξτε αριθμό, συμβολοσειρά (καθορίστε 20 χαρακτήρες), ημερομηνία, Boolean και ελέγξτε το κάτω πλαίσιο ελέγχου – AnyLink – σημαίνει αυτό που ακολουθεί, όταν καθορίζουμε τις Παραμέτρους του αιτήματός μας, μπορούμε να αναφερθούμε σε οποιοδήποτε αντικείμενο της διαμόρφωσής μας, για παράδειγμα, καταλόγους ή έγγραφα.

Τώρα πρέπει να δημιουργήσουμε τη φόρμα της μελλοντικής μας Query Console. Κατά την επεξεργασία, ας πάμε στην καρτέλα "Φόρμες" και ας προσθέσουμε μια νέα. Εισάγουμε αυτήν τη φόρμα και υπάρχει ήδη ένα απεριόριστο πεδίο δημιουργικότητας - μπορείτε να τακτοποιήσετε τα δύο στοιχεία που μόλις δημιουργήσατε και ένα πιάτο με παραμέτρους όπως θέλετε! Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε τυπικά στοιχεία φόρμας όπως μια Ομάδα ή μια Σελίδα με σελίδες (αν προτιμάτε να ανατρέπετε σελίδες.

Το κύριο πράγμα εδώ είναι ένα πράγμα: αφού σύρετε το χαρακτηριστικό "TextValues" στο αριστερό πεδίο για την επεξεργασία της φόρμας, φροντίστε να ορίσετε το "View"=Text Document Field στις ιδιότητές του. Δείτε το Σχήμα:

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

Στη συνέχεια, στο δεξί παράθυρο για την επεξεργασία της φόρμας, μεταβείτε στην καρτέλα "Εντολές" και προσθέστε ένα νέο κουμπί, όταν κάνετε κλικ, η Κονσόλα μας θα εκτελέσει μια συγκεκριμένη ενέργεια. Ας δημιουργήσουμε ένα κουμπί "Query Designer", αν θέλετε, μπορείτε να προσθέσετε ένα εικονίδιο στο κουμπί, το κύριο πράγμα είναι να τοποθετήσετε το ίδιο το κουμπί στο αριστερό παράθυρο επεξεργασίας φόρμας - για να μπορούμε να το δούμε. Στη συνέχεια στη σωστή μορφή παράθυρο επεξεργασίας, κάντε δεξί κλικ στο κουμπί μας και επιλέξτε ιδιότητες – στις ιδιότητες, κάντε κλικ στο στοιχείο «Ενέργεια», θα εμφανιστεί ένα παράθυρο που ρωτά πού ακριβώς θα εκτελεστεί ο κωδικός του προγράμματος μας, το οποίο θα αντιστοιχίσουμε στο κουμπί – επιλέξτε « Επί του πελάτη».

Η ενότητα φόρμας θα ανοίξει με μια έτοιμη κενή διαδικασία «Δημιουργία ερωτήματος διαδικασίας (εντολή)». Μέσα σε αυτήν τη διαδικασία θα περιγράψουμε την κλήση στο τυπικό Εργαλείο δημιουργίας ερωτημάτων 1c8. Είναι πολύ εύκολο: Κατασκευαστής = Κατασκευαστής νέου αιτήματος;Αλλά υπάρχουν παγίδες εδώ - το Query Constructor που είναι ενσωματωμένο στην πλατφόρμα λειτουργεί σε λειτουργία χρήστη ΜΟΝΟ κάτω από έναν πυκνό πελάτη! Επομένως, θα εισαγάγουμε την συνθήκη της εντολής προεπεξεργαστή #If, αλλά εδώ αποφασίζετε μόνοι σας, με βάση την πλατφόρμα σας, ή έχετε συνηθισμένες φόρμες και, στη συνέχεια, επιλέξτε " FatClientRegular App" ή έχετε μια πλατφόρμα που βασίζεται σε διαχειριζόμενες φόρμες, τότε " ThickClientManagedApplication«.βλ. εικ.

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

If Constructor.OpenModal()=True Τότε Object.RequestText=Constructor.Text; τέλος εαν;

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

Αν όχι EmptyString(Object.QueryText) Τότε Constructor.Text = Object.QueryText; τέλος εαν;

Αυτό ήταν όλο, συνδέσαμε το Query Constructor που είναι ενσωματωμένο στην πλατφόρμα 1c8, ας δούμε τη δουλειά μας. Για να το κάνετε αυτό, εκκινήστε το 1C:Enterprise σε λειτουργία παχύ πελάτη χρησιμοποιώντας μία από τις ακόλουθες μεθόδους: 1) κύριο μενού του Configurator – Debugging – Start Debugging – Thick Client. 2) ή εάν έχετε αυτά τα πλήκτρα στον πίνακα ελέγχου του διαμορφωτή - απλώς πατήστε το κουμπί με έναν κίτρινο κύκλο με μια παχιά κουκκίδα, δείτε την εικόνα:

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

Έτσι, έχουμε το Query Constructor σε λειτουργία, μπορούμε να αρχίσουμε να συνθέτουμε το μελλοντικό μας ερώτημα σε αυτό, αλλά μας ενδιαφέρει να δούμε πώς θα λειτουργήσει το ερώτημα που δημιουργήσαμε! Και για να γίνει αυτό, πρέπει να δημιουργήσουμε ένα άλλο κουμπί στο διαμορφωτή κατά την επεξεργασία της φόρμας της κονσόλας μας, ας το ονομάσουμε "Εκτέλεση ερωτήματος". Στις ιδιότητες του κουμπιού «Εκτέλεση ερωτήματος», κάντε κλικ στο «Ενέργεια», εμφανίζεται ξανά ένα μενού στο οποίο ερωτούμαστε πού θα γίνει η επεξεργασία του κώδικα του προγράμματος μας, σε αυτήν την περίπτωση επιλέγουμε «Τόσο στον πελάτη όσο και στον διακομιστή». και πάλι βρισκόμαστε στη Μονάδα Φόρμες.

Στη διαδικασία Execute Query(), που έχουμε στον πελάτη, θα γράψουμε μια συνθήκη εάν ο χρήστης δεν έχει εισαγάγει το κείμενο του ερωτήματος, αλλά ζητά να το εκτελέσει:

If EmptyString(Object.QueryText) Τότε report("Enter the query text!"); τέλος εαν;

Το σύστημα έχει ήδη δημιουργήσει αυτόματα έναν σύνδεσμο προς τη διαδικασία Execute RequestOnServer(). – αυτό είναι καλό, ας πάμε σε αυτή τη διαδικασία, η οποία εκτελείται στον διακομιστή, και γράψτε εδώ τον κωδικό για την εκτέλεση του αιτήματός μας.

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

Εάν κάνετε κλικ στο στοιχείο "Εργαλείο δημιουργίας ερωτημάτων με επεξεργασία αποτελεσμάτων", θα εμφανιστεί ένα παράθυρο "Κείμενο ερωτήματος δεν βρέθηκε. Δημιουργήστε ένα νέο;", κάντε κλικ στο κουμπί Ναι. Θα ανοίξει ο ενσωματωμένος σχεδιαστής ερωτημάτων, στο οποίο στην πρώτη του καρτέλα "Επεξεργασία αποτελεσμάτων" - επιλέξτε το πρώτο στοιχείο " Παράκαμψη του αποτελέσματος". Αυτό είναι όλο, δεν χρειαζόμαστε τίποτα άλλο από αυτόν τον κατασκευαστή, κάντε κλικ στο κουμπί "Ok" - θα εμφανιστεί ένα παράθυρο "Δεν έχουν επιλεγεί πεδία στο αίτημα, κάντε κλικ στο "Ok".

Μετά από αυτό, το ακόλουθο έτοιμο πρότυπο θα εμφανιστεί στη διαδικασία ExecuteRequestOnServer():

Ας προχωρήσουμε στην έκφραση που κατασκευάστηκε από τον κατασκευαστή:

Request.Text = "";

Request.Text = Object.RequestText;

Τόσο απλό είναι, το κουμπί "Εκτέλεση αιτήματος" στη φόρμα επεξεργασίας είναι ήδη πρακτικά λειτουργικό, μέχρι στιγμής μπορεί να επεξεργαστεί μόνο απλά αιτήματα χωρίς παραμέτρους, αλλά το κυριότερο είναι ότι λειτουργεί! Το μόνο που μένει είναι να εμφανίσουμε οπτικά τα αποτελέσματα του αιτήματός μας στο χαρακτηριστικό "Πίνακας τιμών" στη φόρμα επεξεργασίας. Να σας υπενθυμίσω ότι το χαρακτηριστικό μας "Πίνακας τιμών" είναι τύπου "Πίνακας εγγράφου", γιατί διαφορετικά δεν θα βλέπουμε τα αποτελέσματά μας σε λειτουργία χρήστη. Η εμφάνιση των δεδομένων σε πίνακα στον χρήστη γίνεται πάντα είτε με Πίνακας Έγγραφο είτε με Διάταξη. Θα ήθελα πολύ να είναι δυνατή η εμφάνιση δεδομένων μέσω ενός πίνακα τιμών - καθώς είναι πολύ εύκολο στη χρήση και οικείο, αλλά , δυστυχώς, ένας πίνακας τιμών είναι μόνο ένα εργαλείο που χρειάζεται ένας προγραμματιστής, δεν μπορείτε να εμφανίσετε δεδομένα στην οθόνη χρησιμοποιώντας τον...

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

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

Και αν τώρα γράφουμε μετά την έκφραση Query Result = Query.Execute(); (δημιουργήθηκε από τον κατασκευαστή), εδώ είναι ένας τόσο απλός κύκλος για τις Συλλογές:

Για κάθε ColumnName From Query Result.Columns Αναφορά βρόχου(ColumnName.Name); EndCycle;

Μετά από αυτόν τον κύκλο, σημειώστε προς το παρόν όλες τις εκφράσεις που δημιουργούνται αυτόματα από τον κατασκευαστή. Και εκτελέστε το 1C:Enterprise8 κάτω από το παχύ πρόγραμμα-πελάτη. Δημιουργήστε οποιοδήποτε απλό ερώτημα (Μπορείτε να χρησιμοποιήσετε το Εργαλείο δημιουργίας ερωτημάτων - λειτουργεί ήδη για εμάς) και κάντε κλικ στο κουμπί "Εκτέλεση ερωτήματος":

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

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

Για κάθε ColumnName From Query Result.Columns Loop Cell=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=ColumnName.Name; EndCycle;

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

SelectionDetailRecords = QueryResult.Select(); Ενώ το SelectionDetailedRecords.Next() Loop //στην πρώτη γραμμή έχουμε ήδη γραμμένα τα ονόματα των στηλών του πίνακα, επομένως φορτώνουμε τα δεδομένα κάτω από το πρώτο lineDocRowNumber=Object.QueryTable.TableHeight+1; Για κάθε ColumnName From Query Result.Columns Cycle Cell=Object.QueryTable.Area(DocRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text = SelectionDetailedRecords[ColumnName.Name]; EndCycle; EndCycle;

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

Ωραία, όλα λειτουργούν!!!

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

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

Μπορείτε επίσης να προσθέσετε μερικά κουμπιά στην Κονσόλα μας που θα διαγράψουν το παράθυρο Parameters και το παράθυρο Request Text στη λειτουργία χρήστη.

Η Query Console είναι έτοιμη για χρήση, σας εύχομαι επιτυχημένες δημιουργικές λύσεις χρησιμοποιώντας ένα τόσο απλό και ισχυρό εργαλείο όπως η Query Console!

Αυτή η επεξεργασία είναι γραμμένη στην πλατφόρμα 1c8.3 (διαχειριζόμενες φόρμες) και εκτελείται κάτω από έναν πυκνό πελάτη. Μπορεί επίσης να γραφτεί στην πλατφόρμα 1c8.2, τόσο σε κανονικές όσο και σε διαχειριζόμενες φόρμες.

Η λήψη περιέχει ένα δείγμα της Query Console που μόλις δημιουργήσαμε.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Αναβάθμιση Query Console:

1) Τώρα η σπιτική μας Κονσόλα ερωτημάτων με ενσωματωμένο Εργαλείο δόμησης ερωτημάτων θα εκτελείται κάτω από οποιονδήποτε πελάτη: κάτω από ένα μεγάλο πρόγραμμα-πελάτη με κανονικές και διαχειριζόμενες φόρμες και κάτω από ένα λεπτό και web-πελάτη.

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

&Στο Client Procedure Query Constructor (εντολή) //η κλήση του τυπικού Query Constructor είναι δυνατή μόνο σε έναν παχύ πελάτη #If ThickClientManagedApplication ή ThickClientNormalApplication Then Constructor=New Query Constructor; Αν όχι EmptyString(Object.QueryText) Τότε Constructor.Text = Object.QueryText; τέλος εαν; If Constructor.OpenModal()=True Τότε Object.RequestText=Constructor.Text; τέλος εαν; // #Else // Report("Η κλήση του Εργαλείου δόμησης ερωτημάτων είναι δυνατή μόνο με έναν μεγάλο πελάτη"); // ΕΠΙΣΤΡΟΦΗ; //# EndIf #Else Report("Εκτελείτε το Query Builder κάτω από έναν thin client - διαφέρει ελαφρώς ως προς τη μορφή και την ταχύτητα απόδοσης!"); Constructor = New QueryConstructor(); Αν όχι EmptyString(Object.QueryText) Τότε Constructor.Text = Object.QueryText; τέλος εαν; Constructor Alert = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(Constructor Alert); # EndIf Τέλος διαδικασίας &Στη διαδικασία πελάτη ExecuteAfterClosingConstructor(Result, ConstructorParameters) Εξαγωγή //Result=text, εάν το Constructor έκλεισε χρησιμοποιώντας το κουμπί ok Object.RequestText = AbbreviatedLP(Result); //έργα!!! Τέλος Διαδικασίας

2) Προστέθηκε η δυνατότητα στην απλή Query Console μας να εισάγει σύνθετα ερωτήματα με έναν Προσωρινό πίνακα μεταβιβασμένο στις παραμέτρους!!! Ο μηχανισμός αποδείχθηκε πολύ απλός και κομψός - χωρίς τη χρήση κώδικα XML, όπως γίνεται στις επαγγελματικές κονσόλες.

Μπορείτε να δείτε τον ίδιο τον κώδικα και τις διαδικασίες για τον μηχανισμό μεταφοράς στις παραμέτρους των Προσωρινών πινάκων στο δεύτερο συνημμένο αρχείο. Πώς άρχισα να αναπτύσσω τη δική μου έκδοση των Προσωρινών πινάκων στις παραμέτρους μπορείτε να βρείτε σε αυτόν τον σύνδεσμο https://forum.infostart.ru/forum9/topic183700/

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

SELECT ExternalData.Product, ExternalData.Quantity PLACE ExternalData FROM &ExternalData AS ExternalData; ////////////////////////////////////////////////////////////////// ////////////////////////// SELECT ExternalData.Product, ExternalData.Quantity, ISNULL(RemainingProductRemaining.QuantityRemaining, 0) AS Field1, ISNULL(Remaining ProductsRemainings.QuantityRemainings, 0) - ExternalData.Quantity AS Remaining FROM ExternalData AS ExternalData ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗ Εγγραφή Συσσωρεύσεις.Υπόλοιπα Προϊόντα.Υπόλοιπα(&Ημερομηνία, Προϊόν ΕΙΣΟΔΟΣ (SELECT ExternalData.Product FROMASEternalData)ΕξωτερικάΔεδομένα αγωγός = RemainingProductRemaining . Προϊόν

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

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

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

Σημειώστε εδώ ότι σε αυτήν την περίπτωση, στη σελίδα "TimeTables" στο κάτω μέρος στο πεδίο "Temporary table name in parameters", θα εμφανιστεί το όνομα του προσωρινού μας πίνακα (αντιγράφεται από τον πίνακα Parameters).

Μέχρι στιγμής, στη σελίδα "Πίνακες χρόνου" βλέπουμε μόνο έναν κενό πίνακα - αυτός είναι ο πίνακας Τύποι του μελλοντικού προσωρινού μας πίνακα. Χρησιμοποιώντας το κουμπί "Προσθήκη", θα προσθέσουμε το όνομα των λεπτομερειών και τον τύπο του μελλοντικού πίνακα . Να είστε προσεκτικοί - το όνομα και ο τύπος πρέπει να ταιριάζουν με αυτό που καθορίσαμε στο αίτημα για &ExternalData:

Τώρα πατάμε το κουμπί "Ενημέρωση προσωρινού πίνακα" - και θα έχουμε έναν δεύτερο πίνακα εδώ - θα τον γεμίσουμε απευθείας με δεδομένα προσωρινού πίνακα μέσω του κουμπιού "Προσθήκη".

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

p.s. Εάν κάνατε λάθος κατά την πληκτρολόγηση του ονόματος των λεπτομερειών και των τύπων τους (στον πρώτο πίνακα) - απλώς κλείστε την Κονσόλα και ανοίξτε την ξανά - ο προσωρινός πίνακας δεδομένων θα διαγραφεί - και ο πίνακας Τύποι μπορεί να επεξεργαστεί ξανά και μπορεί να δημιουργηθεί ξανά νέος πίνακας δεδομένων.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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

Ας δούμε πώς μπορούμε να ενώσουμε αυτούς τους δύο πίνακες ανά πεδίο Κωδικός προϊόντοςχρησιμοποιώντας
κατασκευαστής ερωτήματος (δίνεται ως παράδειγμα ο κώδικας για τη δημιουργία προσωρινών πινάκων
Δεν θα το κάνω. Μπορείτε να το πάρετε από τον παραπάνω σύνδεσμο).

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

Μεταβείτε στον σελιδοδείκτη "Συνδέσεις". Προσθέστε μια νέα γραμμή. Στο χωράφι Τραπέζι 1
από την αναπτυσσόμενη λίστα επιλέξτε τον πίνακα με τα προϊόντα και στο πεδίο Πίνακας 2Τραπέζι
με χώρες.

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

Ως αποτέλεσμα αυτής της σύνδεσης, λαμβάνουμε το ακόλουθο κείμενο αίτησης:

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product LEFT JOIN VT_Country AS VT_Country BY VT_Product.Κωδικός προϊόντος = VT_Country.Product

Τώρα ας ρίξουμε μια πιο προσεκτική ματιά σε ορισμένα σημεία.
Ας προσπαθήσουμε να αλλάξουμε το πλαίσιο ελέγχου Ολα.


Φαίνεται ότι στο τέλος θα πρέπει να λειτουργήσει ΔΕΞΙΑ ΣΥΝΔΕΣΗ, αλλά αν εμείς
Ας δούμε το κείμενο του ερωτήματος που δημιουργείται από τον κατασκευαστή, θα δούμε ότι οι πίνακες
άλλαξαν θέσεις, αλλά η σύνδεση παρέμενε αριστερά:

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Country AS VT_Country LEFT JOIN VT_Product AS VT_Product BY VT_Product.Κωδικός προϊόντος = VT_Country.Product

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

Ως αποτέλεσμα, έχουμε μια εσωτερική σύνδεση.

ΕΠΙΛΕΞΤΕ VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product ΕΣΩΤΕΡΙΚΟ ΕΓΓΡΑΦΕΙΤΕ VT_Country AS VT_Country BY VT_Product.Κωδικός προϊόντος = VT_Country.Product.

Τέλος, εάν είναι επιλεγμένα και τα δύο πλαίσια ελέγχου


έχουμε πλήρη σύνδεση

SELECT VT_Product.Product Code, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product FULL CONNECTION VT_Country AS VT_Country BY VT_Product.Κωδικός προϊόντος = VT_Country.Product

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


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

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

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

Μπορείτε να εκχωρήσετε παραμέτρους για εικονικούς πίνακες κάνοντας κλικ στο κουμπί «Παράμετροι εικονικών πινάκων»:

Συνιστάται η ενεργή χρήση των παραμέτρων εικονικών πινάκων για επιλογή με συγκεκριμένες διαστάσεις, καθώς αυτό αυξάνει την ταχύτητα εκτέλεσης ερωτήματος. Μπορείτε να χρησιμοποιήσετε εξωτερικές μεταβλητές σε παραμέτρους, των ονομάτων των οποίων προηγείται το σύμβολο "&".
ντο. "Πεδία" - μια λίστα πεδίων που επιλέγονται από πίνακες. Μπορείτε επίσης να προσθέσετε υπολογισμένα πεδία· για να το κάνετε αυτό, κάνοντας κλικ στο κουμπί «Προσθήκη» ανοίγει ο κατασκευαστής προσαρμοσμένης έκφρασης:

Στα αριστερά υπάρχει ένα παράθυρο με τα πεδία που είναι διαθέσιμα στην έκφραση. Στα δεξιά υπάρχει μια υπόδειξη των λειτουργιών που χρησιμοποιούνται. Παρακάτω είναι μια κατασκευαστή αυθαίρετη έκφραση. Μπορείτε να χρησιμοποιήσετε εξωτερικές παραμέτρους σε εκφράσεις· συμβολίζονται με το σύμβολο "&", για παράδειγμα: &Period, &StartDate
Πρέπει να είστε προσεκτικοί, εάν στο παράθυρο πληκτρολογηθεί μια μεγάλη και πολύπλοκη έκφραση, η οποία περιέχει ένα μικρό συντακτικό σφάλμα, τότε αφού κάνετε κλικ στο κουμπί "OK", το σύστημα θα εκδώσει μια προειδοποίηση και θα κλείσει το παράθυρο. Όλος ο πληκτρολογημένος κώδικας θα χαθεί, γι' αυτό σας συνιστώ αν δεν είστε βέβαιοι για την ορθότητα της έκφρασης, να αποθηκεύετε πάντα τα περιεχόμενα στο πρόχειρο (Ctrl-C) πριν κλείσετε τον κατασκευαστή.

2. "Σχέσεις" - στην καρτέλα, υποδεικνύονται οι συνδέσεις μεταξύ των πινάκων.

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

3. "Ομαδοποίηση" - η καρτέλα υποδεικνύει ποια πεδία ομαδοποιούνται και ποια συγκεντρώνονται (συνοψίζονται).

4. Καρτέλα "Προϋποθέσεις" - παραθέτει τις προϋποθέσεις που επιβάλλονται στο αίτημα.
Σε συνθήκες, μπορείτε επίσης να γράψετε σύνθετες εκφράσεις χρησιμοποιώντας τον κατασκευαστή απλής έκφρασης και χρησιμοποιώντας εξωτερικές μεταβλητές:

5. "Για προχωρημένους"
Πρόσθετες παράμετροι που επιβάλλονται στο αίτημα

6. «Σύλλογοι και ψευδώνυμα»
Σε αυτήν την καρτέλα μπορείτε να εκχωρήσετε ψευδώνυμα για πεδία, καθώς και να διαχειριστείτε ερωτήματα που συνδέονται μέσω των δομών "UNITE" ή "UNITE ALL".

7. "Παραγγελία"
Με ποια σειρά θα εμφανίζονται τα αποτελέσματα του ερωτήματος;

Προσοχή! Στο κάτω μέρος του σελιδοδείκτη μπορείτε να δείτε ένα σημάδι επιλογής "Αυτόματη παραγγελία"- στην τρέχουσα έκδοση του 1C 8.1 στο ACS, είναι άχρηστο· επιπλέον, όταν είναι επιλεγμένο το πλαίσιο ελέγχου, κατά την εγγραφή, το ACS δίνει ένα σφάλμα, επομένως δεν πρέπει να το χρησιμοποιήσετε.

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

A. Στην καρτέλα "Πίνακες" - παρατίθενται οι πίνακες που χρησιμοποιούνται στο ερώτημα· μπορείτε να υποδείξετε εάν ο πίνακας πρέπει να συμπεριληφθεί στο ερώτημα επιλέγοντας το πλαίσιο ελέγχου "Απαιτείται". Εκείνοι. Εάν δεν περιλαμβάνονται πεδία στην επιλογή, τότε αυτός ο πίνακας δεν συμμετέχει καθόλου στο ερώτημα. Μπορείτε επίσης να καθορίσετε παραμέτρους για πίνακες.

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

9. «Χαρακτηριστικά»
Ένας σελιδοδείκτης που δεν έχει ανάλογο στον συνήθη κατασκευαστή φόρμας εξόδου.

Αυτή η καρτέλα σάς επιτρέπει να επεκτείνετε την εργασία των ερωτημάτων με χαρακτηριστικά. Ο πίνακας στην καρτέλα αποτελείται από πολλά πεδία:
ένα. "Τύπος τιμής" - ο τύπος για τον οποίο θα επιλεγούν τα χαρακτηριστικά. Για παράδειγμα, εάν καθορίσετε "Σύνδεσμος καταλόγου.Ονοματολογία", τότε όλα τα χαρακτηριστικά για την ονοματολογία θα επιλεγούν στο ερώτημα.
σι. "Πηγή" - η πηγή για ιδιότητες χαρακτηριστικών τύπων, μπορεί να είναι ένα ερώτημα ή ένας πίνακας. Σε αυτό το πεδίο μπορούμε να γράψουμε ένα αίτημα για να επιλέξουμε μόνο εκείνες τις ιδιότητες που χρειαζόμαστε.
ντο. "Λίστα χαρακτηριστικών" - ένα πεδίο στο οποίο αναφέρεται η πηγή για τις ιδιότητες των χαρακτηριστικών. Τις περισσότερες φορές αυτό είναι ένα σχέδιο χαρακτηριστικών τύπων ή ένα αίτημα. Πρέπει επίσης να καθορίσετε τα πεδία που είναι υπεύθυνα για το «Αναγνωριστικό», «Όνομα» και «Τύπος» της ιδιοκτησίας.
ρε. Το "Source" είναι το επόμενο πεδίο στο οποίο υποδεικνύουμε την πηγή των χαρακτηριστικών τιμών, η οποία μπορεί επίσης να είναι είτε πίνακας είτε ερώτημα.
μι. Η "Χαρακτηριστική τιμή" είναι ένας πίνακας ή ένα ερώτημα που λαμβάνει χαρακτηριστικές τιμές. Για παράδειγμα, ο καταχωρητής πληροφοριών "ObjectPropertyValues" μπορεί να χρησιμεύσει ως πίνακας τιμών χαρακτηριστικών. Πρέπει επίσης να υποδείξουμε εκείνα τα πεδία από τον πίνακα (ή το ερώτημα) που είναι υπεύθυνα για το «Αντικείμενο», «Ιδιότητα» και «Τιμή» του χαρακτηριστικού.
Μετά την επεξεργασία του αιτήματος, το κείμενο του αιτήματος μπορεί να εμφανιστεί στο παράθυρο κάτω από τη λίστα των πεδίων. Παρακάτω, με το πλαίσιο ελέγχου «Αυτόματη συμπλήρωση», μπορούμε να ρυθμίσουμε τη συμπλήρωση πρόσθετων παραμέτρων για τα πεδία που καθορίζονται στο αίτημα. Λάβετε υπόψη ότι η σύνθεση των πεδίων καθορίζεται μόνο στο ίδιο το αίτημα.

Πληροφορίες που λαμβάνονται από τον ιστότοπο

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

Ας υποθέσουμε ότι έχουμε αυτό το απλό μητρώο πληροφοριών, όπου οι τιμές αποθηκεύονται από αγαθά και προμηθευτές:

Θέλουμε να ζητήσουμε να λάβουμε όλα τα προϊόντα που έχουν περισσότερους από έναν προμηθευτές. Αυτό μπορεί να υλοποιηθεί χρησιμοποιώντας το ακόλουθο ερώτημα:

SELECT Number of Suppliers.Product AS Product FROM (SELECT Price.Product AS Product, QUANTITY(DIFFERENT Price.Supplier) AS Suppliers FROM RegisterInformation.Price AS Price GROUP BY Price.Product) AS Αριθμός Προμηθευτών WHERE Αριθμός Προμηθευτών1 > Προμηθευτές.

Σχηματίζοντας ένα ένθετο ερώτημα στον κατασκευαστή

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

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


Μετά από αυτό θα ανοίξει ένα παράθυρο με μια άλλη παρουσία του κατασκευαστή ερωτήματος:


Και σε αυτό το νέο παράθυρο κατασκευάζουμε ένα ένθετο ερώτημα:




Κάνοντας κλικ στο κουμπί ΑίτησηΣτην κάτω αριστερή γωνία μπορούμε να δούμε το κείμενο του υποερωτήματος:


Αφού κάνουμε κλικ στο κουμπί OK στον βοηθητικό κατασκευαστή, έχουμε την ακόλουθη εικόνα στο κύριο παράθυρο:


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




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

Πώς να κάνετε ένα ένθετο ερώτημα από ένα κανονικό ερώτημα στον κατασκευαστή

Πολύ συχνά δημιουργείται μια κατάσταση όταν ξεκινάς να κάνεις ένα αίτημα στον κατασκευαστή και κάποια στιγμή συνειδητοποιείς ότι πρέπει να είναι ένθετο. Φυσικά, στο παράδειγμά μας δεν υπάρχει πρόβλημα - μπορείτε απλά να διαγράψετε τα πάντα και να επανεκδώσετε το αίτημα. Αλλά στην πράξη, υπάρχουν πολύ πιο σύνθετα παραδείγματα, για παράδειγμα, με πολλά επίπεδα φωλιάς, όταν αφιερώθηκαν αρκετές ώρες για την υποβολή του αιτήματος. Και σε αυτή την περίπτωση υπάρχει μια αρκετά απλή διέξοδος. Μπορείτε να χρησιμοποιήσετε το πρόγραμμα επεξεργασίας κειμένου ερωτήματος που είναι ενσωματωμένο στον σχεδιαστή. Πρέπει να χρησιμοποιήσετε ένα κουμπί Αίτησηλάβετε το κείμενο του αιτήματος (δείτε την παραπάνω εικόνα) και αντιγράψτε το στο πρόχειρο. Στη συνέχεια, δημιουργήστε ένα νέο ένθετο ερώτημα και πατήστε ξανά το κουμπί Αίτηση, επικολλήστε το κείμενο από το buffer, κάντε κλικ στο OK. Αντίστοιχα, εκκαθαρίζουμε το παλιό αίτημα στο ανώτατο επίπεδο. Με αυτόν τον τρόπο, εάν είναι απαραίτητο, μπορούμε εύκολα να δημιουργήσουμε ένθετα ερωτήματα πολλαπλών επιπέδων on the fly.

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

Σχόλιο.

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

Ας δημιουργήσουμε την επεξεργασία «Request Constructor» και ας την ορίσουμε στο υποσύστημα «Reports and Processing».

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

Στη μονάδα φόρμας, για να λειτουργήσει η εντολή, γράφουμε μια διαδικασία:

&OnClient

Διαδικασία Εκτέλεση ερωτήματος (εντολή)

ExecuteRequestServer();

Τέλος Διαδικασίας

&Στον διακομιστή

Τέλος Διαδικασίας

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

Εικόνα 2.65 Κατασκευαστής ερωτήματος με επεξεργασία αποτελεσμάτων

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

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

Εικόνα 2.67 Κατασκευαστής ερωτήματος

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

Εικ. 2.68 Κατασκευαστής ερωτήματος

Εδώ καταργήσαμε το προεπιλεγμένο πεδίο προβολής που δημιουργήθηκε - "ΠΑΡΟΥΣΙΑΣΗ (Παραλαβή Προϊόντων.Ονοματολογία)"

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

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

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

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

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

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

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

Εάν τα δεδομένα που λαμβάνονται από το αίτημα πρέπει να επιλεγούν σύμφωνα με κάποια συνθήκη, τότε σε αυτήν την περίπτωση μπορεί να χρειαστεί να χρησιμοποιήσετε την καρτέλα "Προϋποθέσεις". Ας επιλέξουμε Goods ReceiptGoods.Quantity=10 (Εικόνα 2.71).

Εικόνα 2.71 Συνθήκη κατασκευής ερωτήματος.

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

Υπάρχουν δύο τρόποι για να διορθώσετε την κατάσταση:

    Επαναπροσδιορίζοντας τη συνθήκη ελέγχοντας τη σημαία "P...".

    Εκμεταλλευόμενοι την ευκαιρία να αλλάξετε το ίδιο το κείμενο του αιτήματος (που λαμβάνεται κάνοντας κλικ στο κουμπί «Επεξεργασία αιτήματος»).

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

Εικόνα 2.73 Επεξεργασία ερωτήματος

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

Εικόνα 2.74 Πρόσθετες συναρτήσεις ερωτήματος

Στην καρτέλα "Συμμετοχές/Ψευδώνυμα", μπορείτε να αλλάξετε τα ονόματα των πεδίων ορίζοντας "Ψευδώνυμα", αλλά δεν θα το κάνουμε αυτό.

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

Εικόνα 2.75 Σειρά ταξινόμησης εγγραφών

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

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

Εικόνα 2.76.Αποτελέσματα του κατασκευαστή ερωτήματος.

Είναι δυνατό να καθοριστούν αρκετοί τύποι συνόλων:

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

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

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

Αφού κάνετε κλικ στο κουμπί "Ok" του κατασκευαστή, θα δημιουργηθεί ένα "Layout" και ο κώδικας για τη διαδικασία ExecuteRequestServer() θα γραφτεί στη μονάδα φόρμας:

&Στον διακομιστή

Διαδικασία ExecuteRequestServer()

//((QUERY_CONSTRUCTOR_WITH_RESULT_PROCESSING

// Αυτό το τμήμα δημιουργείται από τον κατασκευαστή.

// Κατά την επαναχρησιμοποίηση του κατασκευαστή, οι αλλαγές που γίνονται χειροκίνητα θα χαθούν!!!

Layout = Processing.QueryConstructor.GetLayout("Layout");

Request = New Request;

Αίτημα.Κείμενο =

| Παραλαβή Αγαθών Αγαθών Ονοματολογία AS Ονοματολογία,

| SUM (Παραλαβή Αγαθών Αγαθών. Ποσότητα) ΩΣ Ποσότητα,

| ΠΟΣΟ (Παραλαβή Αγαθών Αγαθά. Ποσό) ΩΣ Ποσό

| Έγγραφο.Παραλαβή Αγαθών.Εμπορεύματα

| ΠΩΣ ΘΑ ΛΑΒΕΤΕ ΠΡΟΪΟΝΤΑ

| Παραλαβή Αγαθών Αγαθών Ποσότητα > 1

|ΟΜΑΔΑ ΑΠΟ

| Παραλαβή ΑγαθώνΕμπορευμάτων.Ονοματολογία

|ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ

| Ποσότητα,

| ΜΕΙΩΣΗ ΠΟΣΟΥ

| SUM (Ποσότητα),

| SUM(Sum)

| Ονοματολογία ΙΕΡΑΡΧΙΑ";

Αποτέλεσμα = Query.Run();

HeaderArea = Layout.GetArea("Header");

AreaFooter = Layout.GetArea("Υποσέλιδο");

TableHeadArea = Layout.GetArea("TableHeader");

TableFooterArea = Layout.GetArea("TableFooter");

AreaNomenclatureHierarchy = Layout.GetArea("NomenclatureHierarchy");

AreaNomenclature = Layout.GetArea("Ονοματολογία");

TabDoc.Clear();

TabDoc.Output(AreaHeader);

TabDoc.Output(TableHeadArea);

TabDoc.StartAutoGroupingRows();

SelectionNomenclature = Result.Select(BypassQueryResult.ByGrouping);

Ενώ SelectionNomenclature.Next() βρόχος

Αν SelectionNomenclature.RecordType() = RequestRecordType.TotalByHierarchy Τότε

Area = AreaNomenclatureHierarchy;

Περιοχή = Ονοματολογία Περιοχής;

τέλος εαν;

Area.Parameters.Fill(SelectionNomenclature);

TabDoc.Output(Area, SelectionNomenclature.Level());

EndCycle;

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(TableFooterArea);

TabDoc.Output(AreaFooter);

//)) CONSTRUCTOR_QUERY_WITH_RESULT_PROCESSING