Warnung ohne Modalitätsmodus. Warum tritt der Fehler „Die Verwendung modaler Fenster in diesem Modus ist verboten“ auf? Anweisungen zur Behebung des Fehlers für normale Benutzer

In dem Artikel werden die Hauptgründe für den Verzicht auf die Modalität in der 1C:Enterprise-Plattform und die wichtigsten Methoden zur Konvertierung von Codeabschnitten in ein neues asynchrones Modell erörtert.

Anwendbarkeit

Der Artikel diskutiert das asynchrone Modell zum Aufbau von Geschäftslogik, die hinzugefügte Plattform „1C:Enterprise“ Edition 8.3. Die dargestellten Informationen sind für aktuelle Plattformversionen relevant.

Weigerung, modale Fenster in der 1C:Enterprise 8.3-Plattform zu verwenden

Bei der Entwicklung einer Konfiguration auf der 1C:Enterprise 8-Plattform besteht regelmäßig die Notwendigkeit, das Programm anzuhalten, bis der Benutzer eine Entscheidung trifft oder eine Aktion ausführt.

Wenn der Benutzer beispielsweise auf die Schaltfläche „Tabellenabschnitt füllen“ klickt, sollte er gefragt werden, ob der Tabellenabschnitt geleert werden muss, damit zuvor eingegebene Daten nicht verloren gehen.

Dieses Verhalten kann beispielsweise durch folgenden Code erreicht werden:

&OnClient
Verfahren Geben Sie Produkte ein(Team )
Antwort = Frage („Der Tabellenteil wird gelöscht. Weitermachen?“, DialogmodusFrage.JaNein);
Wenn Antwort = Dialog-Rückgabecode.Ja Dann
//Füllalgorithmus
EndIf ;
Ende des Verfahrens

Als Ergebnis dieses Codefragments wird die Ausführung des Programmcodes angehalten, eine Frage wird auf dem Bildschirm angezeigt, die Anwendungsschnittstelle außer dem Dialog mit der Frage wird nicht mehr verfügbar sein, das System wartet darauf, dass der Benutzer eine Anfrage stellt Die Entscheidung wird getroffen und die Codeausführung wird erst fortgesetzt, nachdem die Frage beantwortet wurde.

Auch das Öffnen modaler Fenster durch Aufruf der OpenModal()-Methode führt zu Pausen bei der Codeausführung und Blockierung der Schnittstelle.

Wenn Sie mit der Konfiguration im Web-Client-Modus über einen Browser arbeiten, öffnet sich in diesem Fall ein neues Fenster – ein Popup-Fenster, das nicht nur die aktuelle Registerkarte, sondern die gesamte Browseroberfläche, einschließlich anderer geöffneter Fenster und Registerkarten, blockiert.

Popup-Fenster im Internet werden häufig zur böswilligen Verbreitung unerwünschter Werbung verwendet. Aus diesem Grund verfügen Browser über Funktionen zum Blockieren von Popups.

In diesem Fall müssen Sie die Popup-Blockierung deaktivieren, um mit 1C:Enterprise 8-Konfigurationen über einen Browser arbeiten zu können.

Auch beim Arbeiten auf mobilen Geräten treten Probleme auf. Beispielsweise werden modale Fenster auf dem iPad nicht unterstützt.

Um diese Probleme zu lösen, sollten Sie blockierende Fenster anstelle modaler Fenster verwenden. Für den Nutzer sieht optisch alles gleich aus: Das Fenster blockiert die Web-Client-Oberfläche.

Allerdings wird das Blockierungsfenster über dem Hauptfenster „gezeichnet“ und nur der aktuelle Browser-Tab, in dem die Konfiguration geöffnet ist, wird blockiert, sodass Sie zu anderen Tabs wechseln können, da modale Browserfenster nicht verwendet werden.

Somit öffnen sich keine Popup-Fenster im Browser und die Arbeit über den Webclient auf mobilen Geräten ist gewährleistet.

Das Wurzelelement der Konfiguration verfügt über eine Eigenschaft „Modalitätsmodus“, die bestimmt, ob modale Fenster in der Konfiguration geöffnet werden können.

Wenn die Option „Verwenden“ ausgewählt ist, können modale Fenster geöffnet werden. Wenn die Option „Nicht verwenden“ ausgewählt ist, sind modale Fenster nicht zulässig. Wenn Sie versuchen, eine Methode aufzurufen, die ein modales Fenster öffnet, zeigt das System eine Fehlermeldung an:

Mit diesem Wert der Eigenschaft „Modalitätsnutzungsmodus“ sind nur blockierende Fenster zulässig.

Wenn die Option „Mit Warnungen verwenden“ ausgewählt ist, wird beim Öffnen modaler Fenster der folgende Text im Meldungsfenster angezeigt:

Diese Arbeitsoption kann als Zwischenoption bei der Überarbeitung der Konfiguration verwendet werden, um auf die Verwendung modaler Fenster zu verzichten.

Der Hauptunterschied zwischen blockierenden Fenstern und modalen Fenstern besteht darin, dass das Öffnen eines blockierenden Fensters die Codeausführung nicht anhält.

Daher müssen Entwickler den Programmcode, der modale Fenster verwendet, neu schreiben, um diese Funktion zu berücksichtigen.

Der Code muss in zwei Teile unterteilt werden:

  • Öffnen eines blockierenden Fensters;
  • Verarbeitung der Benutzerauswahl.

Das am Anfang des Artikels angegebene Codefragment muss wie folgt umgeschrieben werden:

&OnClient
Verfahren Geben Sie Produkte ein(Team )
Warnung = Neu BeschreibungWarnungen(, ThisObject );

DialogmodusFrage.JaNein);
Ende des Verfahrens
&OnClient
Vorgehensweise (Ergebnis, Zusätzliche Optionen) Export
Wenn Ergebnis = Dialog-Rückgabecode.Ja Dann
//Füllalgorithmus
EndIf ;
Ende des Verfahrens

Nach der Ausführung der ShowQuestion()-Prozedur stoppt das System nicht und wartet auf die Antwort des Benutzers, die Codeausführung wird fortgesetzt.

Der Benutzer kann erst dann eine Auswahl treffen, wenn der gesamte Vorgang abgeschlossen ist. In diesem Fall wird die Exportprozedur FillItemsQuestionComplete() aufgerufen. Wir haben seinen Namen an den Konstruktor des DescriptionAlerts-Objekts übergeben.

Die Prozedur, die nach der Auswahl aufgerufen wird, kann sich in einem Formularmodul, einem Befehlsmodul oder einem allgemeinen nicht-globalen Modul befinden.

Im betrachteten Beispiel befindet sich die aufgerufene Prozedur in einem verwalteten Formularmodul, daher haben wir den Parameter ThisObject übergeben.

Betrachten wir den Aufruf einer Prozedur, die sich in einem gemeinsamen Modul befindet. Fügen Sie dazu ein neues gemeinsames Modul Notification Processing hinzu, setzen Sie dafür das Flag „Client (verwaltete Anwendung)“ und setzen Sie das Flag „Global“ nicht. Platzieren wir die Prozedur Fill in Products Question Completion () in diesem Modul.

Dann sieht der Füllbefehlshandler so aus:

&OnClient
Verfahren Geben Sie Produkte ein(Team )
Warnung = Neu BeschreibungWarnungen(„Ausfüllen der Produktfrage“,
Verarbeitungswarnungen);
Fragetext = „Der tabellarische Teil wird gelöscht. Weitermachen?" ;
ShowQuestion (Alert, Fragetext, DialogmodusFrage.JaNein);
Ende des Verfahrens

Nach dem Aufruf einer Methode, die ein blockierendes Fenster öffnet, muss die Prozedur beendet werden, und der als nächstes ausgeführte Code sollte in einer Prozedur platziert werden, die nach dem Schließen des Fensters aufgerufen wird.

Um Kontext (Hilfsdaten, bestimmte Parameter, Variablenwerte) von der Prozedur, die das modale Fenster öffnet, an die beim Schließen aufgerufene Prozedur zu übertragen, wird ein dritter optionaler Parameter des Objektkonstruktors bereitgestellt: DescriptionAlerts – Zusätzliche Parameter.

Dieses Objekt (beliebigen Typs) wird als letzter Parameter an die in der Warnungsbeschreibung beschriebene Prozedur übergeben.

Am Beispiel des oben besprochenen Codeabschnitts kann dies folgendermaßen erfolgen:

&OnClient
Verfahren Geben Sie Produkte ein(Team )
Parameter1 = 0 ;
Parameter2 = 0 ;
Liste der Parameter= Neue Struktur („Parameter1, Parameter2“, Parameter1, Parameter2);
Warnung = Neu BeschreibungWarnungen(„Ausfüllen der Produktfrage“, DiesesObjekt ,
Liste der Parameter);
ShowQuestion (Warnung: „Der Tabellenteil wird gelöscht. Fortfahren?“,
DialogmodusFrage.JaNein);
Ende des Verfahrens
&OnClient
Verfahren Füllen Sie ProdukteFrageAbschluss aus(Ergebnis , Zusätzliche Optionen) Export
Wenn Ergebnis = Dialog-Rückgabecode.Ja Dann
//Zusätzliche Parameter analysieren.Parameter1
//Zusätzliche Parameter analysieren.Parameter2
EndIf ;
Ende des Verfahrens

Wenn Sie nur einen Wert übergeben müssen, können Sie die Struktur nicht verwenden, sondern diesen Wert dem Parameter „Zusätzliche Parameter“ des Konstruktors des Objekts „DescriptionAlerts“ zuweisen.

Schauen wir uns einige Beispiele für die Arbeit mit blockierenden Fenstern an.

Aufgabe 1: Öffnen Sie ein anderes Formular

Im Dokumentformular müssen Sie durch Klicken auf die Schaltfläche „Parameter öffnen“ ein Formular öffnen, in dem sich zwei Kontrollkästchen Parameter1 und Parameter2 befinden, die der Benutzer festlegen muss. Zeigen Sie nach dem Schließen des Formulars die Parameterwerte in der Nachrichtenzeile an.

Wir erstellen ein allgemeines Formular „ParametersForm“, auf dem wir die Details Parameter1 und Parameter2 sowie den CloseForm-Befehl platzieren:

Der Befehlshandler sieht folgendermaßen aus:

Der Befehlshandler sieht folgendermaßen aus: &OnClient
Prozedur CloseForm (Befehl)
Liste der Parameter= Neue Struktur ( „Parameter1, Parameter2“, Parameter1 , Parameter2 );
Schließen ( Liste der Parameter); Ende des Verfahrens

Setzen Sie für das Formular die WindowOpenMode-Eigenschaft auf „Gesamte Schnittstelle blockieren“:

Auf dem Dokumentformular platzieren wir den Befehl OpenParameters, dessen Handler wie folgt beschrieben wird:

&OnClient
Verfahren OpenOptions(Team )
Warnung = Neu BeschreibungWarnungen(„Optionen öffnen – Fertig stellen“, ThisObject );
OpenForm ( „GeneralForm.FormParameters“, , , , , , Benachrichtigung);
Ende des Verfahrens
&OnClient
Verfahren OpenOptionsComplete(Ergebnis , Zusätzliche Optionen) Export
Wenn TypeValue (Ergebnis) = Typ („Struktur“), dann
Für jeden Schlüsselwert aus der Ergebnisschleife
Nachricht = Neu Nachricht an den Benutzer;
Message.Text = „Schlüssel: „“ ” + KeyValue.Key + „““, Wert = ”
+ Schlüsselwert.Wert;
Nachricht.Bericht();
EndCycle ;
EndIf ;
Ende des Verfahrens

Im Benutzermodus erhalten wir beim Ausführen der Konfiguration unter dem Webclient folgende Ergebnisse:

Zum Vergrößern klicken Sie auf das Bild.

Der Fensteröffnungsmodus kann auch im letzten Parameter der OpenForm-Prozedur angegeben werden.

&OnClient
Verfahren OpenOptions(Team )
Warnung = Neu BeschreibungWarnungen(„Optionen öffnen – Fertig stellen“, ThisObject );
OpenForm ( „GeneralForm.FormParameters“, , , , , , Alarm
FormWindowOpenMode.LockEntireInterface
);
Ende des Verfahrens

Aufgabe 2. Frage beim Schließen des Formulars

Fragen Sie den Benutzer beim Schließen eines Bearbeitungsfensters, ob er das Fenster wirklich schließen möchte.

Dieses Problem kann mit dem folgenden Code gelöst werden, der sich im Verarbeitungsformularmodul befindet:

&OnClient
Perem Das Formular muss geschlossen werden;
&OnClient
Vorgehensweise vor dem Abschluss (Fehler, Standardverarbeitung)
Wenn nicht Das Formular muss geschlossen werden= Dann stimmt
Fehler = Wahr;
Warnung = Neu BeschreibungWarnungen(„Vor AbschlussAbschluss“, ThisObject );
ShowQuestion (Warnung: „Möchten Sie das Fenster wirklich schließen?“,
DialogmodusFrage.JaNein
);
EndIf ;
Ende des Verfahrens
&OnClient
Verfahren Vor dem Abschluss(Ergebnis , Zusätzliche Optionen) Export
Wenn Ergebnis = Dialog-Rückgabecode.Ja Dann
Das Formular muss geschlossen werden= Wahr;
Schließen();
Ansonsten
Das Formular muss geschlossen werden= Undefiniert ;
EndIf ;
Ende des Verfahrens

Bei der Formularprozedur „BeforeClosing“ wird dem Benutzer eine Frage gestellt, das Ablehnungsflag auf „True“ gesetzt und das Schließen des Formulars abgebrochen.

Nach einer positiven Antwort auf die Frage wird die Variable Need toCloseForm auf True gesetzt und das Formular wieder geschlossen.

Aufgabe 3: Einen numerischen Wert eingeben

Wenn Sie im Bearbeitungsformular auf die Schaltfläche klicken, wird ein Standarddialog zur Nummerneingabe geöffnet.

Dazu müssen Sie die Methode ShowNumberInput() anstelle von EnterNumber() verwenden, die ein blockierendes Fenster anstelle eines modalen Fensters öffnet.

&OnClient
Vorgehensweise Zahlen eingeben (Befehl)
Warnung = Neu BeschreibungWarnungen(„EnterNumberComplete“, ThisObject );
ShowEnterNumbers(Alarm, 0, „Menge eingeben“, 15, 3);
Ende des Verfahrens
&OnClient
Verfahren Zahlen eingeben, abschließen(Ergebnis , Zusätzliche Optionen) Export

Nachricht = Neu Nachricht an den Benutzer;
Message.Text = „Sie haben eine Menge eingegeben“ + Ergebnis;
Nachricht.Bericht();
EndIf ;
Ende des Verfahrens

Nach dem Schließen des Nummerneingabefensters wird eine Prozedur aufgerufen, deren erster Parameter die eingegebene Nummer oder der undefinierte Wert ist, wenn der Benutzer die Eingabe verweigert.

Aufgabe 4. Eine Farbe auswählen

Durch Klicken auf die Schaltfläche im Bearbeitungsformular gibt der Benutzer über den Standard-Farbauswahldialog die gewünschte Farbe an. Legen Sie diese Farbe für den Hintergrund der angeklickten Schaltfläche fest.

Fügen Sie den SelectColor-Befehl mit dem folgenden Handler zum Formular hinzu:

&OnClient
Auswahl der Prozedurfarbe (Befehl)
Dialog zur Farbauswahl= Neu Dialog zur Farbauswahl;
Warnung = Neu BeschreibungWarnungen(„Farbauswahl abgeschlossen“, ThisObject );
Dialog zur Farbauswahl. Show(Alert);
Ende des Verfahrens
&OnClient
Verfahren ChoiceColorsCompletion(Ergebnis , Zusätzliche Optionen) Export
Wenn NICHT Ergebnis = Undefiniert, dann
Elemente.Farbauswahl.Hintergrundfarbe= Ergebnis ;
EndIf ;
Ende des Verfahrens

Für Farbauswahldialogobjekte (sowie Standardzeitraum-Bearbeitungsdialog, Formatlinienkonstruktor, regulärer Aufgabenplandialog, Schriftartauswahldialog) öffnet die Methode Show() ein blockierendes Fenster.

Nach dem Schließen des Fensters wird eine Prozedur aufgerufen, deren erster Parameter den ausgewählten Wert (Farbe, Schriftart usw.) oder den undefinierten Wert übergeben wird, wenn der Benutzer die Auswahl abgelehnt hat.

Es ist zu beachten, dass das FileSelectionDialog-Objekt im Gegensatz zu Farb- oder Schriftartenauswahldialogen über keine Show()-Methode verfügt, da sich die Implementierung dieser Dialoge erheblich unterscheidet.

Um den Dateiauswahldialog auf dem Webclient nutzen zu können, müssen Sie zunächst die Dateierweiterung aktivieren.

Durch die Dateierweiterung implementierte Dialoge verursachen nicht die gleichen Betriebsprobleme wie modale Browserfenster, daher wurde das Öffnen blockierender Fenster für das FileSelectionDialog-Objekt nicht implementiert.

Abschließend stellen wir fest, dass ab Version 8.3.10 die Unterstützung für modale Fenster im Webclient eingestellt wurde. In diesem Fall wird beim Aufruf einer modalen Methode in der Konfiguration eine Ausnahme generiert. Außerdem wurde die Unterstützung des Schnittstellenmodus im Webclient eingestellt In separaten Fenstern. Darüber hinaus ist es sowohl im Thin- als auch im Web-Client nicht mehr möglich, ein Formular in einem separaten Fenster zu öffnen (beim Arbeiten im Lesezeichen-Schnittstellenmodus). Diese drastischen Schritte ermöglichten den Verzicht auf den Schnittstellenmodus, der nicht mehr von allen modernen Browsern unterstützt wird.

Welche praktische Schlussfolgerung lässt sich aus diesen Informationen ziehen? Und die Schlussfolgerung ist ganz einfach: Wenn Ihre Konfiguration aus irgendeinem Grund noch modale Aufrufe enthält, wird an diesen Stellen im Webclient ein Fenster mit einer Fehlermeldung angezeigt. Ich möchte davor warnen, nach einer schnellen Lösung für dieses Problem zu „googeln“, denn... Die meisten Ratschläge basieren auf diesem Rezept: Setzen Sie im Konfigurator auf der Konfigurationsebene die Eigenschaft „Modalitätsnutzungsmodus“ auf „Verwenden“. Dies wird derzeit natürlich nur deshalb nicht funktionieren, weil moderne Browser selbst keine modalen Aufrufe mehr unterstützen.

Und Sie haben nur zwei Möglichkeiten, das oben beschriebene Problem zu lösen:

  1. Aktualisieren Sie die Plattform auf Version 8.3.10+ (8.3.11), setzen Sie die Konfigurationseigenschaft „Kompatibilitätsmodus“ auf „Nicht verwenden“ und schreiben Sie Codefragmente, die modale Methoden verwenden, in ein asynchrones Geschäftslogikmodell um
  2. Empfehlen Sie Ihren Kunden, ältere Browser zu verwenden, die noch modale Aufrufe unterstützen (Mozilla Firefox-Versionen 37 und niedriger, Chrome-Versionen unter 37 usw.).

Übrigens werden ab Version 8.3.11 die Webbrowser Microsoft Internet Explorer Version 8 und 9 nicht mehr unterstützt.

Wir haben uns unter Berücksichtigung der Modalitäten mit Webbrowsern beschäftigt, jetzt ist es an der Zeit, die Situation mit anderen Kunden zu klären.

Ab Version 8.3.5 wird die Eigenschaft „Modality Usage Mode“ in Thin- und Thick-Clients nur dann berücksichtigt, wenn die Befehlszeilenoption /EnableCheckModal angegeben ist. Dieser Parameter wird nur dann automatisch in die Befehlszeile eingefügt, wenn die Anwendung über den Konfigurator gestartet wird. Wenn dieser Parameter nicht angegeben ist, werden keine Ausnahmen generiert und entsprechende Warnungen werden nicht angezeigt. Diese. In der Praxis ist bei der Verwendung eines Thick- und Thin-Clients keine grundlegende Änderung der Bedienung bei Verwendung des modalen Modus zu beobachten – modale Aufrufe funktionieren wie zuvor, ohne dass es zu Warnungen kommt, wie im Web-Client.

Um das Ganze abzurunden, beachten Sie, dass der Thick Client ab Version 8.3.9 die Konfigurationseigenschaft „Modus der Verwendung synchroner Aufrufe von Plattformerweiterungen und externen Komponenten“ ignoriert, während die entsprechenden synchronen Methoden ohne die Generierung von Ausnahmen und die Anzeige von Warnungen funktionieren. Die angegebene Eigenschaft „Ignoriert“ wurde in Version 8.3.5 hinzugefügt, um asynchrone Arbeit mit externen Komponenten, Kryptografie und Erweiterungen für die Arbeit mit Dateien im Google Chrome-Webbrowser zu unterstützen. Es ist klar, dass dies nichts mit dem Thick Client zu tun hat, und daher wurden durch das „stille“ Ignorieren dieser Eigenschaft lediglich unnötige Prüfungen für die Verwendung synchroner Methoden bei der Verwendung der Konfiguration vermieden.

Übrigens! Aufgrund der Tatsache, dass sich die Plattform souverän in Richtung Web bewegt, haben die Entwickler mit Version 8.3.8 bestimmte Einschränkungen für den Programmcode eingeführt, der mit der Logik zum Schließen eines Formulars oder einer Anwendung verbunden ist und in Thick- und Thin-Clients ausgeführt wird. Lesen Sie unbedingt unseren Artikel über diese Nuance im Detail. Darüber hinaus gibt es im Kurs „Professionelle Entwicklung von Schnittstellen und Formularen in 1C: Enterprise 8.3“ ein Kapitel, das dem Verzicht auf Modalität gewidmet ist, und Sie können viele nützliche und relevante Informationen zu diesem Thema sammeln.

Kolleginnen und Kollegen, es gibt zwei Dinge, die Sie endlos lesen können: den VKontakte-Feed und die Liste der Änderungen in der nächsten Version der Plattform, also fassen wir die Endergebnisse zusammen;)

Bei der Betrachtung von Beispielen, mit denen Sie von Elementen eines synchronen Modells zu einem asynchronen Modell wechseln können, ist Ihnen wahrscheinlich bereits aufgefallen, dass im Allgemeinen mehr Programmcode vorhanden ist. Je mehr Code vorhanden ist, desto komplexer wird die weitere Wartung und Fehlerbehebung.

Darüber hinaus wird die Menge an Code noch größer, wenn wir während des Entwicklungsprozesses mehr Dialoge verwenden. Daher müssen Sie bei der Entwicklung von Anwendungslösungen, die sich auf die Arbeit in einem Web-Client konzentrieren, das Arbeitsparadigma berücksichtigen, das derzeit in modernen Webanwendungen verwendet wird. Wenn Ihre Konfiguration daher viele interaktive Dialoge mit dem Benutzer und Warnungen enthält, ist es sinnvoll, diese Funktionalität zugunsten einiger anderer Ansätze zur Organisation der Benutzerinteraktion zu überdenken.

Statt einer Schlussfolgerung

Unser Zyklus „Erste Schritte in der 1C-Entwicklung“ ist zu Ende. Wenn Sie es vollständig lesen, haben Sie höchstwahrscheinlich bereits bemerkt, wie sich die Plattform in letzter Zeit rasant weiterentwickelt hat. Das Material dieser Serie wurde vor relativ kurzer Zeit geschrieben, wir waren jedoch gezwungen, es ernsthaft zu aktualisieren, weil ... Selbst in so kurzer Zeit sind viele neue wichtige Funktionen und Änderungen erschienen. Solche großen Änderungen können für einen 1C-Programmierer etwas verwirrend sein, wenn er nicht die ganze Zeit über beruflich mit der Plattform gewachsen ist und sich weiterentwickelt hat.

Auf speziellen Internetressourcen kann man oft Anfragen von unerfahrenen Programmierern und ihren erfahreneren Kollegen lesen, Materialien zu empfehlen, die ihnen helfen würden, die umfangreichen und manchmal scheinbar endlosen Möglichkeiten der 1C-Plattform zu verstehen. Wir empfehlen Ihnen traditionell, unsere Programmierkurse zu beachten

14
Um einen Enterprise-Start in einer normalen oder verwalteten Anwendung zu erzwingen, verwenden Sie die folgenden Schlüssel: /RunModeOrdinaryApplication startet den Thick Client im normalen Modus, trotz der Konfigurationseinstellungen und... 3
Es ist notwendig, dass Benutzer die für sie konfigurierte Schnittstelle nicht ändern können! Lösung: Um es zu deaktivieren, müssen Sie das Recht „Benutzerdaten speichern“ aus den Zugriffsrechten des Root-Konfigurationselements entfernen. ... 2
Bei aktuellen Arbeiten öffnet der Benutzer meist mehrere Objekte. Dies kann ein Dokument, ein Nachschlagewerk, ein Bericht usw. sein. In der vorherigen Benutzeroberfläche gab es keine Probleme, schnell ein geöffnetes Objekt zu finden und es für ... zu aktualisieren. 2
Im vorherigen Artikel: Installieren eines Adressklassifikators (KLADR) in 1C habe ich Ihnen erklärt, was KLADR ist und wie Sie es in reguläre 1C-Formulare (8.0-8.2) laden. In diesem Artikel erkläre ich Ihnen, wie Sie den Adressklassifikator (KLADR) in ... laden. 2
Beim Entwickeln einer bestimmten Konfiguration möchten Benutzer häufig Fotos an ein Verzeichniselement anhängen und diese in der Datenbank speichern. In diesem Artikel erkläre ich Ihnen, wie Sie Bauobjekte mit dem Verzeichnis verbinden ...

Die Syntaxhilfe für diese Befehle gibt an, dass es sich um die Konfigurationseigenschaft handelt Art der NutzungModalitäten eingebaut Verwende nicht, dann sollten Sie in Ihrem Programmcode andere Befehle verwenden, z ShowQuestion(), ShowWarning(), ShowNumberInput():

Um mit diesen Situationen zu arbeiten, stellt das Programm 1C 8.3 ein neues Systemobjekt „Beschreibung von Warnungen“ bereit, mit dem der Aufruf einer Programmmodulprozedur beschrieben wird, wenn ein erwartetes Ereignis eintritt, z. B. das Schließen eines Formulars oder eines nichtmodalen Dialogs :

Dies ist ein Einblick in das Problem für diejenigen, die der Ursache auf den Grund gehen wollen. Zunächst einmal für 1C-Programmierer. Wie können normale Benutzer in dieser Situation den Fehler beheben, ohne am Programmcode zu arbeiten? Es gibt eine sehr einfache Methode.

Anweisungen zur Behebung des Fehlers für normale Benutzer

Schritt 1: Fertig stellen:

Schritt 2. Kehren Sie zum Startmenü zurück, um die Konfiguration zu starten. Wählen Sie den Menüpunkt „Konfiguration“:

Schritt 3. Öffnen Sie den „Konfigurator“: Im oberen Bereich finden wir die Schaltfläche „Konfiguration“ und wählen in der vorgeschlagenen Liste das Menü „Konfiguration öffnen“:

Schritt 4. Platzieren Sie den Cursor auf Konfiguration und rufen Sie mit der rechten Maustaste das Kontextmenü auf, in dem wir den Punkt „Eigenschaften“ auswählen:

Schritt 5. Öffnen Sie das Formular „Eigenschaften“:

Schritt 6. Suchen Sie die Zeile „Modus der Verwendungsmodalität“ (am Ende der Liste):

Standardmäßig lautet der Wert im Programm 1C 8.3 „Nicht verwenden“. Wandeln Sie den Wert „Nicht verwenden“ in den Wert „Verwenden“ um:

Ergebnis:

Wenn der Fehler „Die Verwendung modaler Fenster in diesem Modus ist verboten“ in 1C 8.3 verschwunden ist, können Sie weiterarbeiten. Das passiert normalerweise.

Wenn der Modalitätsfehler in 1C jedoch nach Durchführung aller dieser Schritte weiterhin besteht, sollten Sie sich an die Programmierer wenden, die Ihr 1C-Programm warten und unterstützen.

Wie man in der „Taxi“-Benutzeroberfläche arbeitet, wie man den Arbeitsplatz anpasst, wie man die Favoriten-Navigationsleiste anpasst, wie man eine Volltextsuche durchführt, Techniken für die Arbeit mit Protokollen, die Schaltfläche „Auswählen“ in Dokumenten, Senden von Links zu Dokumenten, Überprüfung und weitere Funktionen in der neuen Benutzeroberfläche – das alles erfahren Sie in unserem Video:

Weitere Details zur korrekten und schnellen Organisation der Navigation durch das Programm 1C 8.3 mithilfe der neuen TAXI-Schnittstelle sowie zu neuen Möglichkeiten bei der Verwendung bekannter Tools wie integriertem Taschenrechner, Kalender, Dateivergleich und der Übertragung von Links zu Dokumenten an Kollegen werden besprochen in unserem Kurs „“


Bitte bewerten Sie diesen Artikel:

„Die Verwendung modaler Fenster in diesem Modus ist verboten“ – dieser Fehler beginnt nun 1C-Benutzer und Programmierer mit der Einführung der neuen Schnittstelle der 1C 8.3-Plattform zu stören – „“.

Entwickler der 1C-Technologieplattform gehen mit der Zeit und standardisieren ihre Lösung nach internationalen Softwareentwicklungsstandards. Alle Standards laufen auf die eine oder andere Weise auf eine einzige Schnittstelle in der Nähe von Webseiten hinaus.

Modale und Popup-Fenster gelten als schlechte Form und sind in der Softwareentwicklung längst nicht mehr normal. Benutzer sind es gewohnt, „in einem Fenster“ zu arbeiten.

Besonders häufig sehen wir einen Modalitätsfehler bei den folgenden 1C-Methoden:

  • Frage;
  • Warnung;
  • OpenValue.

Mit der Veröffentlichung der neuen „Taxi“-Schnittstelle haben die Entwickler der 1C 8-Plattform die richtige Entscheidung getroffen – zu versuchen, Entwickler von Anwendungslösungen auf neue Weise umzuschulen. Sie haben eine Funktion in die neue Plattform integriert – den „Modalitätsmodus“.

Schnelle Lösung

Wenn Sie keine Zeit haben, es herauszufinden, und das Problem schnell lösen müssen, bieten wir eine einfache, aber nicht ganz richtige Lösung. Um den Fehler schnell zu beheben, ändern Sie einfach den Modalitätsmodus in den Konfigurationseigenschaften.

Melden Sie sich dazu im System im Modus an und öffnen Sie die Konfiguration:

Rufen Sie in einer geöffneten Konfiguration das Kontextmenü auf, indem Sie mit der rechten Maustaste auf das Konfigurationsstammverzeichnis klicken und „Eigenschaften“ auswählen:

Holen Sie sich 267 Video-Lektionen zu 1C kostenlos:

Die Konfigurationseigenschaften werden geöffnet. In der Fußzeile befindet sich die Eigenschaft, die uns interessiert – „Modalitätsnutzungsmodus“. Wählen Sie den Modus „Verwendung“ aus:

Speichern Sie anschließend die Änderungen und übernehmen Sie sie, indem Sie die Taste „F7“ drücken.

Richtige Lösung des Problems

Der richtige Weg, dieses Problem zu lösen, besteht darin, die Konfiguration oder externe Verarbeitung zu ändern, um den neuen Anforderungen gerecht zu werden.

Warnungen, Fragen, Dialogfelder und andere Modalitäten müssen alle auf eine neue Art und Weise umgeschrieben werden.

Die integrierten Operatoren, die modale Fenster aufgerufen haben, müssen durch doppelte Funktionen ersetzt werden.

Zum Beispiel:

  • Warnung – ShowWarning;
  • Frage – ShowQuestion (Details – );
  • – ShowInputNumbers.

Gleichzeitig erschien ein spezielles Objekt – Benachrichtigungsbeschreibung.

Ersatzbeispiel:

String = "" ; EnterString(String, „Geben Sie einen Zeichenfolgenwert ein“) Notify("Sie haben eingegeben " + String) ;

Muss ersetzt werden durch:

String = "" ; DescriptionAlerts = Neue DescriptionAlerts( „TestLineInput“, Diese Form) ; ShowLineInput(DescriptionAlerts, String, „Geben Sie einen Zeichenfolgenwert ein“) ;

Fügen Sie gleichzeitig eine ähnliche Prozedur auf dem Client hinzu, die funktioniert, wenn der Wert vom Benutzer eingegeben wird:

&Auf der Client-Prozedur TestInputString(ReceivedValue, PassedParameters) Export Notify("Sie haben eingegeben " + String) ; Ende des Verfahrens

Formulare, die innerhalb der Konfiguration entwickelt werden, werden auf die gleiche Weise geöffnet. Es genügt, die Methode „OpenFormModal“ durch „OpenForm“ zu ersetzen und dabei eine Beschreibung der Warnung und das dafür erforderliche neue Verfahren anzugeben.

Um den Zugriff auf das aufgerufene Formular durch das Öffnen eines Formulars zu blockieren, geben Sie einfach den Wert „Fenster des Eigentümers blockieren“ in der Eigenschaft „Fensteröffnungsmodus“ des Formulars an:

In den Konfigurationseigenschaften auf der 1C:Enterprise 8.3-Plattform gibt es einen Modus zur Verwendung der Modalität. Wenn der Wert dieses Felds „Nicht verwenden“ lautet, zeigt die Plattform beim Versuch, ein modales Fenster zu öffnen, die Meldung „Die Verwendung modaler Fenster in diesem Modus ist verboten“ an. In diesem Fall wird die Ausführung des Programmcodes gestoppt.

Dieser Artikel zeigt den Mechanismus zur Änderung des Programmcodes am Beispiel einer Frage an den Benutzer bei deaktiviertem modalen Modus.

Bei der Entwicklung eines Softwareprodukts besteht von Zeit zu Zeit die Notwendigkeit, den Benutzer nach den durchgeführten Aktionen zu fragen. Beispielsweise beim automatischen Ausfüllen tabellarischer Teile. Wenn es vor dem Nachfüllen des PM erforderlich ist, den Benutzer nach der Notwendigkeit zu fragen, dies zu tun. Und abhängig von seiner Antwort wird der PM gelöscht und neu aufgefüllt oder nicht.

Der Frageteil des Codes könnte etwa so aussehen:

Wenn PM. Menge()< >0 Dann Antwort = Frage(" // Diese Zeile zeigt ein modales Fenster mit einer Frage an und die Codeausführung wird angehalten, bis der Benutzer antwortet Wenn Antwort = DialogReturnCode. Nein, dann zurück; EndIf ; // Der Benutzer stimmt dem Fortfahren zu PN. Klar() ; EndIf ; // Weitere Aktionen ausführen // Das Programm springt hierher, wenn die PM leer war oder der Benutzer die Frage zum Nachfüllen positiv beantwortet hat Weitere Aktionen durchführen ();

Wenn der Modalmodus deaktiviert ist, tritt in der Fragezeile dieses Codes ein Fehler auf und die weitere Ausführung wird unterbrochen. Dies geschieht, weil die Fragefunktion ein modales Fenster verwendet.

In dieser Situation müssen Sie die ShowQuestion-Prozedur verwenden. Bei diesem Verfahren wird nicht auf den Abschluss der Antwort des Benutzers gewartet. Der erste Parameter dieses Verfahrens ist jedoch die Beschreibung der Warnung, die zur Verfolgung der Reaktion des Benutzers verwendet wird.

Wie sich der zuvor geschriebene Code ändern wird:

// Es ist notwendig, die PM-Daten auszufüllen //Überprüfung der PM auf Vollständigkeit Wenn PM. Menge()< >0 Dann // PM ist nicht leer, Sie müssen den Benutzer nach dem Nachfüllen fragen ShowQuestion(Neue BeschreibungAlerts(" TCCompletion auffüllen" , ThisObject, AdditionalParameters) , " Der PM wird wieder aufgefüllt. Weitermachen ?", DialogmodusFrage. JaNein) ; // Diese Zeile zeigt ein Fragefenster an, die Ausführung des Codes wird jedoch nicht gestoppt Ansonsten // Das Programm wird hierher springen, wenn die PM leer war Weitere Aktionen ausführen() ; EndIf ; // Das Programm kommt auf jeden Fall hierher, egal ob die PM leer war oder nicht // (es sei denn natürlich, es gab einen Fehler im vorherigen Code) . . . // Prozedur im selben Modul exportieren // Wird aufgerufen, nachdem der Benutzer die Frage beantwortet hat& Auf der Client-Prozedur TCCompletion auffüllen (Antwortergebnis, zusätzliche Parameter) Exportieren, wenn Antwortergebnis = Dialog-Rückgabecode. Dann nein // Der Benutzer weigerte sich fortzufahren Zurückkehren ; EndIf ; // Weitere Aktionen ausführen // Das Programm springt hierher, wenn die PM nicht leer war und der Benutzer die Frage zum Nachfüllen positiv beantwortet hat PN. Klar() ; Weitere Aktionen ausführen() ; Ende des Verfahrens

Da das Programm bei Ausführung der ShowQuestion-Prozedur nicht stoppt, müssen alle Ereignisse sorgfältig behandelt werden
Bei der Lösung dieses Problems können weitere Aktionen erfolgen, wenn zwei Ereignisse eintreten:
1. Wenn die PM leer war
2. Wenn der PM nicht leer war und der Benutzer positiv auf die Frage geantwortet hat, füllen Sie ihn auf

Und da das Programm nicht aufhört, auf die Antwort des Benutzers zu warten, muss der Aufruf dieser Ereignisse auf verschiedene Teile des Codes verteilt werden.
Daher werden in der Regel alle ausführbaren Methoden, die nach Prüfung des PM auf Vollständigkeit ausgeführt werden müssen, in einer separaten Prozedur abgelegt.

Ein ähnlicher Mechanismus wird für ähnliche Benutzerinteraktionsfunktionen (SelectValue, SelectFromList usw.) verwendet.

mob_info