Σφάλμα: η χρήση modal windows σε αυτήν τη λειτουργία απαγορεύεται. Γιατί εμφανίζεται το σφάλμα "Η χρήση των modal windows σε αυτήν τη λειτουργία απαγορεύεται"; Σωστή λύση στο πρόβλημα

Υλοποιήθηκε στην έκδοση 8.3.3.641.

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

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

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

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

Ένα άλλο πρόβλημα είναι ότι τα προγράμματα περιήγησης για κινητά δεν υποστηρίζουν καθόλου modal windows. Και για να μπορέσει το 1C:Enterprise να λειτουργήσει σε αυτά, εφαρμόστηκε ένας ειδικός μηχανισμός στο πρόγραμμα-πελάτη ιστού. Αυτός είναι ένας αρκετά περίπλοκος μηχανισμός και, δυστυχώς, δεν καλύπτει όλες τις απαραίτητες καταστάσεις. Ως αποτέλεσμα, οι διαμορφώσεις σε iPad, για παράδειγμα, είναι δύσκολο να διατηρηθούν.

Σε μια τέτοια περίπτωση, η επιλογή λειτουργίας της διεπαφής 1C:Enterprise χωρίς τη χρήση modal windows εξαλείφει όλα τα προβλήματα που αναφέρονται παραπάνω.

Ταυτόχρονα, δεν υπάρχει εγκατάλειψη της λειτουργικότητας που παρείχαν προηγουμένως τα modal windows. Αλλά αυτή η λειτουργικότητα υλοποιείται από άλλες τεχνολογίες που δεν παρεμβαίνουν στη λειτουργία του 1C: Enterprise στα προγράμματα περιήγησης.

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

Σαν άποτέλεσμα:

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

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

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

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

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

Σε νέα έκδοση για τη φόρμα FormTextInput (το οποίο θα ανοίξει σε ένα παράθυρο αποκλεισμού) πρέπει να ορίσετε την ιδιότητα Λειτουργία ανοίγματος παραθύρου στο νόημα BlockAllInterface . Αυτό θα παρέχει μια δυνατότητα για τον χρήστη:

Και ο κώδικας προγράμματος, αντί για μία διαδικασία, όπως πριν, θα περιέχει δύο διαδικασίες:

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

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

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

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

Για παράδειγμα, παρακάτω εμφανίζεται χρησιμοποιώντας την παλιά μέθοδο EnterValue() και η νέα μέθοδος δημιουργίας αντιγράφων ασφαλείας ShowInputValue() :

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

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

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

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

Επιστρέψτε στο πρόγραμμα διαμόρφωσης και επιλέξτε το στοιχείο μενού "Configuration" -> "Open configuration":

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

Θα ανοίξει ένα παράθυρο με ιδιότητες διαμόρφωσης (δεξιά):

Κάντε κύλιση στο κάτω μέρος και βρείτε το στοιχείο "Modality mode" εκεί:

Ορίστε την τιμή του σε "Χρήση":

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

Τέλος, επιλέξτε το στοιχείο μενού "Configuration" -> "Save configuration":

Ετοιμος! Τώρα το σφάλμα δεν θα εμφανίζεται πλέον.

Επεξηγήσεις παρακάτω - για όσους ενδιαφέρονται για αυτό που κάναμε.

Έχουμε ενεργοποιήσει τη λειτουργία modality στη διαμόρφωσή μας. Από προεπιλογή, αυτή η λειτουργία είναι απενεργοποιημένη και αυτό δεν μας επιτρέπει να χρησιμοποιούμε εντολές όπως EnterNumber, EnterString, EnterDate, OpenValue.

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

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

Μπορούμε να το συμπεριλάβουμε με ασφάλεια, καθώς γράφουμε εκπαιδευτικά παραδείγματα που δεν έχουν σχεδιαστεί για εργασία στο Διαδίκτυο.

Στην έκδοση 8.3 της πλατφόρμας 1C, εμφανίστηκε ένας νέος τρόπος λειτουργίας του προγράμματος - χωρίς τη χρήση τροπικότητας. Πιο συγκεκριμένα, έχουν εμφανιστεί 2 νέες λειτουργίες: χωρίς χρήση modality και χρήση modality, αλλά με προειδοποίηση. Και ο παλιός τρόπος λειτουργίας υποδεικνύεται ότι χρησιμοποιεί τον τρόπο λειτουργίας.

Τι σημαίνουν όλα αυτά;Στις πρώτες εκδόσεις της πλατφόρμας, χρησιμοποιούσαμε διάφορα modal windows και δεν το σκεφτόμασταν πολύ. Για παράδειγμα, πρέπει να εμφανίσετε μια προειδοποίηση στον χρήστη ή πρέπει να κάνετε μια ερώτηση ή να εισαγάγετε κάποια τιμή ή να επιλέξετε ένα αρχείο. Όλα αυτά είναι modal windows.

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

&OnClient

StandardProcessing = False;




If Dialog.Edit() Τότε //Καλέστε τη φόρμα modal. Η εκτέλεση του κώδικα θα συνεχιστεί μόνο μετά το κλείσιμο της φόρμας.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialogue.Period.EndDate;
τέλος εαν;

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


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

Γιατί τα modal windows είναι κακά;Τώρα ας καταλάβουμε γιατί η 1C αποφάσισε να εγκαταλείψει τη χρήση των modal windows. Λοιπόν, πρώτα απ 'όλα, αυτό είναι συνέπεια του γεγονότος ότι η πλατφόρμα 1C μπορεί να χρησιμοποιηθεί όχι μόνο στη συνηθισμένη της μορφή - ως εφαρμογή επιτραπέζιου υπολογιστή, αλλά μπορεί επίσης να εκκινηθεί σε πρόγραμμα περιήγησης και μπορεί να εκκινηθεί ως εφαρμογή για κινητά.

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

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

Και τέλος, η εφαρμογή για κινητά 1C δεν είναι επίσης εντελώς φιλική με τα modal windows.

Εξ ου και το συμπέρασμα:Μην χρησιμοποιείτε modal windows. Τι πρέπει να χρησιμοποιήσω αντ 'αυτού; Αντίθετα, πρέπει να χρησιμοποιήσετε τα ίδια παράθυρα, αλλά χωρίς τη λειτουργία modality. Στη νέα πλατφόρμα 1C, έχουμε επίσης αναπτύξει μια τέτοια λειτουργία για κάθε παράθυρο. Εφαρμόζεται ως ξεχωριστή μέθοδος για κάθε διάλογο. Αυτή η λειτουργία σάς επιτρέπει να ανοίξετε ένα παράθυρο, αλλά να μην σταματήσετε την εκτέλεση του κώδικα προγράμματος. Τεχνικά, τα προγράμματα περιήγησης το εφαρμόζουν ως ψευδοπαράθυρο που εμφανίζεται μέσα στο γονικό παράθυρο, αλλά το επικαλύπτει. Το γεγονός ότι ο κώδικας συνεχίζει να εκτελείται μετά το άνοιγμα του παραθύρου σημαίνει ότι δεν θα μπορείτε να λάβετε αμέσως τις τιμές που έχουν επιλεγεί σε αυτόν μετά τον κωδικό για την κλήση του παραθύρου. Δεν έχουν επιλεγεί ακόμα. Επομένως, η λήψη και η επεξεργασία αυτών των τιμών πραγματοποιείται σε μια ξεχωριστή διαδικασία, η οποία καλείται κατά το κλείσιμο ενός τέτοιου παραθύρου και αυτή η διαδικασία καθορίζεται κατά την κλήση της μεθόδου ανοίγματος παραθύρου. Ας δούμε το ίδιο παράθυρο επιλογής περιόδου ως παράδειγμα.

&OnClient
Διαδικασία υπηρεσίαςStartDateStartSelection(Στοιχείο, SelectionData, StandardProcessing)

StandardProcessing = False;

Dialog = NewEditingDialogStandardPeriod();
StandardPeriod = New StandardPeriod();

StartDate = Items.Services.CurrentData.StartDate;
EndDate = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = Ημερομηνία έναρξης;
StandardPeriod.EndDate = Ημερομηνία λήξης;
Dialog.Period = StandardPeriod;

Περιγραφή ειδοποίησης = Περιγραφή νέας ειδοποίησης ("Επεξεργασία επιλογής περιόδου", ThisForm);

Dialog.Show(DescriptionAlerts)

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

&OnClient
Διαδικασία ΕπεξεργασίαΠερίοδοςΕπιλογή(Περίοδος,Παράμετροι) Εξαγωγή

Αν Περίοδος<>Απροσδιόριστο Τότε

Elements.Services.CurrentData.StartDate = Period.StartDate;
Elements.Services.CurrentData.EndDate = Period.EndDate;

τέλος εαν;

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


Όπως μπορούμε να δούμε, αντί για Edit(), καλείται η Show(). Και η επεξεργασία του συμβάντος επιλογής βρίσκεται ήδη σε άλλη διαδικασία.

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

Λοιπόν, ας εγκαταλείψουμε τη τροπικότητα και ας κυριαρχήσουμε στις νέες τεχνολογίες για την εργασία 1C σε προγράμματα περιήγησης και φορητούς υπολογιστές.

Στις ιδιότητες διαμόρφωσης στην πλατφόρμα 1C:Enterprise 8.3 υπάρχει μια Λειτουργία για χρήση τροπικότητας. Εάν η τιμή αυτού του πεδίου είναι "Do not use", τότε όταν προσπαθείτε να ανοίξετε ένα παράθυρο modal, η πλατφόρμα θα εμφανίσει το μήνυμα "Η χρήση των modal windows σε αυτήν τη λειτουργία απαγορεύεται". Σε αυτήν την περίπτωση, η εκτέλεση του κώδικα προγράμματος σταματά.

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

Από καιρό σε καιρό, κατά την ανάπτυξη ενός προϊόντος λογισμικού, υπάρχει ανάγκη να ρωτήσετε τον χρήστη για τις ενέργειες που εκτελούνται. Για παράδειγμα, κατά την αυτόματη συμπλήρωση τμημάτων πίνακα. Όταν, πριν ξαναγεμίσετε το PM, είναι απαραίτητο να ρωτήσετε τον χρήστη σχετικά με την ανάγκη να γίνει αυτό. Και ανάλογα με την απάντησή του, το PM θα καθαριστεί και θα ξαναγεμιστεί ή όχι.

Το τμήμα ερώτησης του κώδικα μπορεί να μοιάζει κάπως έτσι:

Αν PM. Ποσότητα()< >0 Στη συνέχεια Απάντηση = Ερώτηση(" // Αυτή η γραμμή θα εμφανίσει ένα παράθυρο με μια ερώτηση και η εκτέλεση κώδικα θα σταματήσει μέχρι να απαντήσει ο χρήστηςΕάν Answer = DialogReturnCode. Όχι Τότε Επιστροφή ; Τέλος εαν ; // Ο χρήστης συμφωνεί να συνεχίσειΜΕΤΑ ΜΕΣΗΜΒΡΙΑΣ. Σαφή() ; Τέλος εαν ; // Εκτελέστε περαιτέρω ενέργειες // Το πρόγραμμα θα πάει εδώ εάν το PM ήταν άδειο ή ο χρήστης απάντησε θετικά στην ερώτηση σχετικά με την επαναπλήρωσηΕκτελέστε περαιτέρω ενέργειες () ;

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

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

Πώς θα αλλάξει ο προηγουμένως γραμμένος κώδικας:

// Είναι απαραίτητο να συμπληρώσετε τα δεδομένα PM // Έλεγχος του PM για πληρότηταΑν PM. Ποσότητα()< >0 Τότε // Το PM δεν είναι κενό, πρέπει να ρωτήσετε τον χρήστη σχετικά με την επαναπλήρωση ShowQuestion(New DescriptionAlerts(" Αναπλήρωση TCCompletion" , ThisObject, AdditionalParameters) , " Το PM θα ξαναγεμιστεί. Να συνεχίσει ?", Dialogue ModeQuestion. Ναι Όχι) ; // Αυτή η γραμμή θα εμφανίσει ένα παράθυρο ερωτήσεων, αλλά ο κώδικας δεν θα σταματήσει να εκτελείταιΣε διαφορετική περίπτωση // Το πρόγραμμα θα πάει εδώ αν το PM ήταν άδειοΕκτελέστε περαιτέρω ενέργειες() ; Τέλος εαν ; // Το πρόγραμμα θα φτάσει εδώ σε κάθε περίπτωση, είτε το PM ήταν άδειο είτε όχι // (εκτός αν, φυσικά, υπήρξε σφάλμα στον προηγούμενο κώδικα) . . . // Διαδικασία εξαγωγής στην ίδια ενότητα // Καλείται αφού ο χρήστης απαντήσει στην ερώτηση& On the Client Procedure Refill TCompletion (Αποτέλεσμα απόκρισης, πρόσθετες παράμετροι) Εξαγωγή εάν Αποτέλεσμα απόκρισης = Κωδικός επιστροφής διαλόγου. Οχι τότε // Ο χρήστης αρνήθηκε να συνεχίσειΕΠΙΣΤΡΟΦΗ ; Τέλος εαν ; // Εκτελέστε περαιτέρω ενέργειες // Το πρόγραμμα θα πάει εδώ εάν το PM δεν ήταν άδειο και ο χρήστης απάντησε θετικά στην ερώτηση σχετικά με την επαναπλήρωσηΜΕΤΑ ΜΕΣΗΜΒΡΙΑΣ. Σαφή() ; Εκτελέστε περαιτέρω ενέργειες() ; Τέλος Διαδικασίας

Έτσι, δεδομένου ότι το πρόγραμμα δεν θα σταματήσει όταν εκτελεστεί η διαδικασία ShowQuestion, είναι απαραίτητο να χειριστείτε προσεκτικά όλα τα συμβάντα
Κατά την επίλυση αυτού του προβλήματος, μπορούν να προκύψουν περαιτέρω ενέργειες όταν συμβαίνουν δύο συμβάντα:
1. Εάν το PM ήταν άδειο
2. Εάν το PM δεν ήταν άδειο και ο χρήστης απάντησε θετικά στην ερώτηση, συμπληρώστε ξανά

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

Ένας παρόμοιος μηχανισμός χρησιμοποιείται για παρόμοιες λειτουργίες αλληλεπίδρασης χρήστη (SelectValue, SelectFromList, κ.λπ.)

"Η χρήση των modal windows σε αυτήν τη λειτουργία απαγορεύεται" - αυτό το σφάλμα αρχίζει τώρα να ενοχλεί τους χρήστες και τους προγραμματιστές 1C με την άφιξη της νέας διεπαφής της πλατφόρμας 1C 8.3 - " ".

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

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

Ιδιαίτερα συχνά βλέπουμε ένα σφάλμα τροποποίησης στις ακόλουθες μεθόδους 1C:

  • Ερώτηση;
  • Προειδοποίηση;
  • OpenValue.

Με την κυκλοφορία της νέας διεπαφής "ταξί", οι προγραμματιστές της πλατφόρμας 1C 8 πήραν τη σωστή απόφαση - να προσπαθήσουν να επανεκπαιδεύσουν τους προγραμματιστές λύσεων εφαρμογών με νέο τρόπο. Περιέλαβαν ένα χαρακτηριστικό στη νέα πλατφόρμα - "modality mode".

Γρήγορο φτιάξιμο

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

Για να το κάνετε αυτό, συνδεθείτε στο σύστημα σε λειτουργία, ανοίξτε τη διαμόρφωση:

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

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

Θα ανοίξουν οι ιδιότητες διαμόρφωσης, όπου στο υποσέλιδο υπάρχει η ιδιότητα που μας ενδιαφέρει - “Modality use mode”, επιλέξτε τη λειτουργία “Use”:

Μετά από αυτό, αποθηκεύστε και εφαρμόστε τις αλλαγές πατώντας το πλήκτρο "F7".

Σωστή λύση στο πρόβλημα

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

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

Οι ενσωματωμένοι τελεστές που ονομάζουν modal windows πρέπει να αντικατασταθούν με διπλότυπες συναρτήσεις.

Για παράδειγμα:

  • Προειδοποίηση - ShowWarning;
  • Question - ShowQuestion (λεπτομέρειες - );
  • — Εμφάνιση αριθμών εισόδου.

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

Παράδειγμα αντικατάστασης:

String = "" ; EnterString(String, "Εισαγάγετε μια τιμή συμβολοσειράς") Ειδοποίηση ("Εισαγάγατε " + Συμβολοσειρά) ;

Πρέπει να αντικατασταθεί με:

String = "" ; DescriptionAlerts = New DescriptionAlerts( "TestLineInput", Αυτή η μορφή) ; ShowLineInput(DescriptionAlerts, String, "Εισαγάγετε μια τιμή συμβολοσειράς") ;

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

&Στη διαδικασία πελάτη TestInputString(ReceivedValue, PassedParameters) Ειδοποίηση εξαγωγής("Εισαγάγατε " + Συμβολοσειρά) ; Τέλος Διαδικασίας

Οι φόρμες που αναπτύσσονται εντός της διαμόρφωσης ανοίγουν με τον ίδιο τρόπο. Αρκεί να αντικαταστήσετε τη μέθοδο "OpenFormModal" με "OpenForm", καθορίζοντας μια περιγραφή της ειδοποίησης και τη νέα διαδικασία που απαιτείται για αυτήν.

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