1c départ de la modalité. Que faire si "l'utilisation de fenêtres modales dans ce mode est interdite"

L'introduction de la nouvelle interface de la plate-forme 1C 8.3 - "taxi" - a conduit au fait que les utilisateurs et les programmeurs ont été confrontés à l'erreur suivante : "L'utilisation de fenêtres modales dans ce mode est interdite".
Riz. 1

Les développeurs de la plateforme technologique 1C s'efforcent de suivre les tendances mondiales en alignant le logiciel sur les normes internationales. Cette dernière conduit inévitablement à une interface unique, proche des pages web.

Les fenêtres modales et pop-up, signe de mauvais goût, ont longtemps été considérées comme inacceptables dans le développement de logiciels. La nécessité de travailler « dans une seule fenêtre » est fermement ancrée dans l’esprit des utilisateurs.

Les développeurs de la plate-forme 1C ont tenté d'impliquer les développeurs de solutions d'application dans le travail d'une « nouvelle manière ». Avec l'introduction de la nouvelle interface « taxi », ils ont ajouté une nouvelle fonctionnalité à la nouvelle plateforme : le « mode utilisant la modalité ».

Solution rapide

En l'absence de temps, si vous avez besoin de résoudre rapidement le problème, vous pouvez recourir à une solution assez simple, mais pas très correcte : il vous suffit de changer le mode de modalité dans les propriétés de configuration.

Pour ce faire, connectez-vous au système en mode configurateur et ouvrez la configuration :

Après cela, en faisant un clic droit sur la racine de configuration, ouvrez le menu contextuel et sélectionnez « Propriétés » :


Riz. 3

Dans les propriétés de configuration qui s'ouvrent, dans les onglets, recherchez « Mode d'utilisation de la modalité », sélectionnez-y « Utiliser » :


Riz. 4

Enregistrez et appliquez vos modifications en appuyant sur la touche "F7".

Implémenté dans la version 8.3.3.641.

1C:Enterprise utilise des fenêtres modales dans les situations où l'utilisateur doit saisir des informations, sans lesquelles l'exécution ultérieure de l'algorithme est impossible. Dans ce cas, tout le reste de l'interface du programme est complètement bloqué et l'exécution du code du programme s'arrête jusqu'à ce que l'utilisateur ferme la fenêtre modale.

Avec l'avènement du client web et le passage de 1C:Enterprise vers les plateformes mobiles, les fenêtres modales se sont révélées être la source d'un grand nombre d'inconvénients et de problèmes, souvent insolubles.

En règle générale, les navigateurs « de bureau », meilleurs ou pires, prennent en charge les fenêtres modales et les ouvrent dans une nouvelle fenêtre de navigateur sous forme de « fenêtre contextuelle » :

Mais comme la technologie des fenêtres pop-up est massivement utilisée sur Internet à des fins publicitaires, presque tous les navigateurs ont des fenêtres pop-up désactivées par défaut. Dans la grande majorité des cas, sans modifier ce paramètre du navigateur, le client Web ne fonctionnera pas.

Un autre problème est que les navigateurs mobiles ne prennent pas du tout en charge les fenêtres modales. Et pour que 1C:Enterprise puisse y fonctionner, un mécanisme spécial a été implémenté dans le client Web. Il s’agit d’un mécanisme assez complexe qui ne couvre malheureusement pas toutes les situations nécessaires. De ce fait, les configurations sur iPad par exemple sont difficiles à maintenir.

Dans une telle situation, la possibilité d'utiliser l'interface 1C:Enterprise sans utiliser de fenêtres modales élimine tous les problèmes répertoriés ci-dessus.

Dans le même temps, il n'y a pas d'abandon des fonctionnalités précédemment fournies par les fenêtres modales. Mais cette fonctionnalité est implémentée par d'autres technologies qui n'interfèrent pas avec le fonctionnement de 1C:Enterprise dans les navigateurs.

Dans le nouveau mode de fonctionnement de l'interface, la fenêtre, qui auparavant était modale, est dessinée au sein de la fenêtre parent, et bloque de la même manière le reste de l'interface client web :

Par conséquent:

  • aucune nouvelle fenêtre de navigateur n'est ouverte, ce qui améliore les performances et la stabilité du client Web ;
  • dans de nombreux cas, des paramètres supplémentaires du navigateur deviennent inutiles, puisque 1C:Enterprise n'utilise plus de fenêtres contextuelles ;
  • toute configuration utilisant le client Web peut fonctionner sur iPad et autres appareils mobiles.

Naturellement, les miracles ne se produisent pas et un nouveau mode de fonctionnement ne peut pas être activé « d’un coup de baguette magique ». Un changement dans la logique de travail avec de nouvelles fenêtres bloquantes est nécessaire. Mais la bonne nouvelle est que ces changements ne sont pas difficiles et qu'il est possible de surveiller tous les endroits « suspects » du programme. La plateforme implémente un mécanisme spécial qui permet de vérifier au stade du développement que l'ensemble de la configuration utilise de nouveaux mécanismes et fonctionnera sans fenêtres modales.

La nécessité de changer la logique de travail avec de telles fenêtres est due au fait que le nouveau mode de fonctionnement de l'interface fournit une modalité uniquement à l'utilisateur. Cependant, pour le développeur, l’exécution du code du programme ne s’arrête pas lorsque la fenêtre de blocage s’affiche.

Cela signifie que l’algorithme, qui formait auparavant un tout, devra désormais être divisé en deux parties. L'une, qui se termine par l'ouverture d'une fenêtre de blocage, et la seconde, qui sera exécutée lorsque l'utilisateur fermera cette fenêtre. Afin que le système sache où continuer l'exécution du code du programme, la fenêtre de blocage reçoit le nom de la procédure qui doit être exécutée lorsque l'utilisateur ferme cette fenêtre.

L’essence de ces changements est plus facile à comprendre à l’aide d’un exemple. Une ancienne procédure qui ouvrait une fenêtre modale et traitait les données reçues pourrait ressembler à ceci :

Dans une nouvelle version pour le formulaire EntréeTexteFormulaire (qui s'ouvrira dans une fenêtre de blocage) vous devez définir la propriété Mode d'ouverture de la fenêtre dans le sens BloquerToutInterface . Cela fournira une modalité à l'utilisateur :

Et le code du programme, au lieu d'une procédure, comme auparavant, contiendra deux procédures :

Dans la première procédure, ouvrez le formulaire. Dans ce cas, dans le dernier paramètre nous lui transmettons l'emplacement de la deuxième procédure, qui sera exécutée après que l'utilisateur ferme la fenêtre. Dans ce cas, cette procédure se situe dans le même module, mais en général elle peut se situer dans un autre.

Lorsque l'utilisateur saisit des données et ferme le formulaire, celles-ci seront traitées dans la deuxième procédure que nous avons spécifiée, dans laquelle nous avons simplement transféré « l'ancien » code qui traite les données reçues.

En plus des formulaires que le développeur peut ouvrir en mode modal (à volonté), il existe des méthodes de langage intégrées qui, quel que soit le désir du développeur, ouvrent toujours des formulaires modaux pour saisir ou sélectionner des données. Par exemple, la méthode EntrerValeur() .

Utiliser de telles méthodes en mode non modal est encore plus simple. Pour toutes ces méthodes, la plateforme a des méthodes en double, lors de leur appel, vous devez également indiquer l'emplacement de la procédure qui sera exécutée après que l'utilisateur ferme la fenêtre.

Par exemple, ci-dessous est illustré en utilisant l'ancienne méthode EntrerValeur() et sa nouvelle méthode de sauvegarde ShowInputValue() :

Il faut dire qu'en plus des cas listés, certains mécanismes de plateforme utilisent également des fenêtres modales pour interagir avec l'utilisateur. Et cela ne dépend plus des actions du développeur.

Par conséquent, tous ces dialogues système de la plate-forme ont également été transférés vers un mode de fonctionnement non modal.

Il est prévu d'éliminer progressivement l'utilisation des fenêtres modales dans les solutions applicatives. Ainsi, pour des raisons de compatibilité avec les solutions applicatives écrites précédemment, la plateforme conserve la possibilité de travailler dans l'ancienne version de l'interface, en utilisant des fenêtres modales.

Si vous rencontrez une telle erreur lors de la fin des leçons, il est très simple de la corriger.

Revenez au configurateur et sélectionnez l'élément de menu "Configuration" -> "Ouvrir la configuration" :

Dans la fenêtre qui s'ouvre, faites un clic droit sur l'élément « Configuration » et sélectionnez « Propriétés » dans le menu qui s'ouvre :

Une fenêtre avec les propriétés de configuration s'ouvrira (à droite) :

Faites défiler vers le bas et recherchez-y l'élément « Mode de modalité » :

Fixez sa valeur à "Utiliser":

Attention! Veuillez noter que si vous utilisez une plateforme 1C différente de celle que nous avons téléchargée dans la première leçon (version ultérieure), vous disposerez également du champ « Mode d'utilisation des appels synchrones... ». Il doit également être défini sur « Utiliser ».

Enfin, sélectionnez l'élément de menu "Configuration" -> "Enregistrer la configuration" :

Prêt! Désormais, l'erreur ne se produira plus.

Explications ci-dessous - pour ceux qui sont intéressés par ce que nous avons fait.

Nous avons activé le mode modalité dans notre configuration. Par défaut, ce mode est désactivé et cela ne nous permet pas d'utiliser des commandes telles que EnterNumber, EnterString, EnterDate, OpenValue.

Le fait est que ces commandes sont modales. Leur appel entraîne l'apparition d'une fenêtre devant l'utilisateur (par exemple, pour saisir des informations), ce qui bloque la possibilité de travailler avec le programme jusqu'à la fermeture de la fenêtre.

Et comme la présence de telles fenêtres est extrêmement indésirable lorsque l'on travaille avec 1C via un navigateur Web, lors du développement de nouvelles configurations, le mode modalité est désactivé par défaut.

Nous pouvons l'inclure en toute sécurité, puisque nous écrivons des exemples pédagogiques qui ne sont pas conçus pour travailler sur Internet.

Dans les propriétés de configuration de la plateforme 1C:Enterprise 8.3, il existe un mode d'utilisation de la modalité. Si la valeur de ce champ est "Ne pas utiliser", alors lorsque vous tenterez d'ouvrir une fenêtre modale, la plateforme affichera le message "L'utilisation des fenêtres modales dans ce mode est interdite". Dans ce cas, l'exécution du code du programme s'arrête.

Cet article présente le mécanisme de modification du code du programme, en utilisant l'exemple d'une question à l'utilisateur lorsque le mode modal est désactivé.

De temps en temps, lors du développement d'un produit logiciel, il est nécessaire d'interroger l'utilisateur sur les actions effectuées. Par exemple, lors du remplissage automatique de parties tabulaires. Quand, avant de recharger le PM, il est nécessaire d'interroger l'utilisateur sur la nécessité de le faire. Et en fonction de sa réponse, le MP sera effacé et réapprovisionné ou non.

La partie question du code pourrait ressembler à ceci :

Si MP. Quantité()< >0 Alors Réponse = Question(" // Cette ligne affichera une fenêtre modale avec une question et l'exécution du code s'arrêtera jusqu'à ce que l'utilisateur réponde Si Réponse = DialogReturnCode. Non, alors reviens ; Fin si ; // L'utilisateur accepte de continuer PM. Clair() ; Fin si ; // Effectuer d'autres actions // Le programme ira ici si le MP était vide ou si l'utilisateur a répondu positivement à la question sur le remplissage Effectuer d'autres actions () ;

Lorsque le mode modal est désactivé, une erreur se produira dans la ligne de question de ce code et la poursuite de l'exécution sera interrompue. Cela se produira car la fonction Question utilise une fenêtre modale.

Dans cette situation, vous devez utiliser la procédure ShowQuestion. Cette procédure n'attend pas la réponse de l'utilisateur. Mais le premier paramètre de cette procédure est la description de l'alerte, qui permet de suivre la réponse de l'utilisateur.

Comment le code précédemment écrit va changer :

// Il faut renseigner les données PM // Vérification de la plénitude du PM Si MP. Quantité()< >0 Alors // Le PM n'est pas vide, vous devez demander à l'utilisateur de le remplir ShowQuestion(Nouvelles alertes de description(" Recharge TCCompletion" , CetObjet, Paramètres Supplémentaires) , " Le PM sera réapprovisionné. Continuer ?", Mode DialogueQuestion. OuiNon) ; // Cette ligne affichera une fenêtre de questions, mais le code ne cessera pas de s'exécuter Sinon // Le programme ira ici si le MP était vide Effectuer d'autres actions() ; Fin si ; // Le programme arrivera ici dans tous les cas, que le MP soit vide ou non // (sauf bien sûr s'il y a une erreur dans le code précédent) . . . // Procédure d'export dans le même module // Appelé après que l'utilisateur ait répondu à la question& Sur la procédure client Recharge TCCompletion (Résultat de la réponse, Paramètres supplémentaires) Exporter Si Résultat de la réponse = Code retour du dialogue. Non, alors // L'utilisateur a refusé de continuer Retour ; Fin si ; // Effectuer d'autres actions // Le programme ira ici si le MP n'était pas vide et que l'utilisateur a répondu positivement à la question sur le remplissage PM. Clair() ; Effectuer d'autres actions() ; Fin de la procédure

Ainsi, puisque le programme ne s'arrêtera pas lors de l'exécution de la procédure ShowQuestion, il est nécessaire de gérer soigneusement tous les événements.
Lors de la résolution de ce problème, d'autres actions peuvent se produire lorsque deux événements se produisent :
1. Si le MP était vide
2. Si le MP n'était pas vide et que l'utilisateur a répondu positivement à la question, remplissez-le

Et, par conséquent, puisque le programme n’arrête pas d’attendre la réponse de l’utilisateur, l’appel de ces événements doit être réparti dans différentes parties du code.
Par conséquent, en règle générale, toutes les méthodes exécutables qui doivent être exécutées après avoir vérifié l'exhaustivité du PM sont placées dans une procédure distincte.

Un mécanisme similaire est utilisé pour des fonctions d'interaction utilisateur similaires (SelectValue, SelectFromList, etc.)

L'assistant de syntaxe de ces commandes indique que si la propriété de configuration Mode d'utilisationModalités installé dans Ne pas utiliser, vous devez alors utiliser d'autres commandes dans le code de votre programme, telles que AfficherQuestion(), AfficherAvertissement(), ShowNumberInput() :

Pour travailler avec ces situations, le programme 1C 8.3 fournit un nouvel objet système "Description des alertes", qui est utilisé pour décrire l'appel d'une procédure de module de programme lorsqu'un événement attendu se produit, comme la fermeture d'un formulaire ou d'une boîte de dialogue non modale. :

Il s’agit d’un aperçu du problème pour ceux qui souhaitent en découvrir la cause profonde. Tout d'abord, pour les programmeurs 1C. Dans cette situation, comment les utilisateurs ordinaires peuvent-ils corriger l’erreur sans travailler sur le code du programme ? Il existe une méthode très simple.

Instructions pour corriger l'erreur pour les utilisateurs ordinaires

Étape 1 : Terminer :

Étape 2. Revenez au menu Démarrer pour démarrer la configuration. Sélectionnez l'élément de menu « Configuration » :

Étape 3. Ouvrez le « Configurateur » : sur le panneau supérieur nous trouvons le bouton « Configuration », et dans la liste proposée sélectionnez le menu « Ouvrir la configuration » :

Étape 4. Placez le curseur sur Configuration et faites un clic droit pour appeler le menu contextuel, dans lequel nous sélectionnons l'élément « Propriétés » :

Étape 5. Ouvrez le formulaire « Propriétés » :

Étape 6. Recherchez la ligne « Mode d'utilisation de la modalité » (en bas de la liste) :

Par défaut dans le programme 1C 8.3, la valeur est « Ne pas utiliser ». Convertissez la valeur « Ne pas utiliser » en valeur « Utiliser » :

Résultat:

Si l'erreur « L'utilisation de fenêtres modales dans ce mode est interdite » dans 1C 8.3 a disparu, vous pouvez alors continuer à travailler. C'est généralement ce qui se passe.

Mais si l'erreur de modalité dans 1C persiste après avoir effectué toutes ces étapes, vous devez alors contacter les programmeurs qui entretiennent et prennent en charge votre programme 1C.

Comment travailler dans l'interface « Taxi », comment personnaliser le lieu de travail, personnaliser la barre de navigation Favoris, comment effectuer une recherche en texte intégral, techniques de travail avec les journaux, le bouton « sélectionner » dans les documents, l'envoi de liens vers des documents, la vérification et d'autres fonctionnalités de la nouvelle interface - vous pouvez apprendre tout cela dans notre vidéo :

Plus de détails sur la façon d'organiser correctement et rapidement la navigation dans le programme 1C 8.3 à l'aide de la nouvelle interface TAXI, sur les nouvelles opportunités d'utilisation d'outils familiers tels qu'une calculatrice intégrée, un calendrier, une comparaison de fichiers, le transfert de liens vers des documents à des collègues sont discutés dans notre cours ""


Veuillez noter cet article :