Attention sans mode modalité. Pourquoi l'erreur « L'utilisation de fenêtres modales dans ce mode est interdite » se produit-elle ? Instructions pour corriger l'erreur pour les utilisateurs ordinaires

L'article abordera les principales raisons de l'abandon de la modalité dans la plateforme 1C:Enterprise et les principales méthodes de conversion des sections de code vers un nouveau modèle asynchrone.

Applicabilité

L'article traite du modèle asynchrone pour la construction de la logique métier, la plate-forme ajoutée « 1C:Enterprise » édition 8.3. Les informations présentées sont pertinentes pour les versions actuelles de la plateforme.

Refus d'utiliser les fenêtres modales dans la plateforme 1C:Enterprise 8.3

Lors du développement d'une configuration sur la plate-forme 1C:Enterprise 8, il est périodiquement nécessaire de suspendre le programme jusqu'à ce que l'utilisateur prenne une décision ou effectue une action.

Par exemple, lorsqu'il clique sur le bouton Remplir la section tabulaire, il convient de demander à l'utilisateur si la section tabulaire doit être effacée afin que les données saisies précédemment ne soient pas perdues.

Ce comportement peut être obtenu, par exemple, par le code suivant :

&SurClient
Procédure Remplir les produits(Équipe )
Réponse = Question (« La partie du tableau sera effacée. Continuer ? », Mode DialogueQuestion.OuiNon);
Si Réponse = Code de retour de dialogue.Oui Alors
//algorithme de remplissage
Fin si ;
Fin de la procédure

À la suite de ce fragment de code, l'exécution du code du programme sera suspendue, une question s'affichera à l'écran, l'interface de l'application, à l'exception du dialogue avec la question, deviendra indisponible, le système attend que l'utilisateur fasse une décision, et l’exécution du code ne continuera qu’après avoir répondu à la question.

L'ouverture de fenêtres modales en appelant la méthode OpenModal() provoque également des pauses dans l'exécution du code et un blocage de l'interface.

Lorsque vous travaillez avec la configuration en mode client Web via un navigateur, dans ce cas, une nouvelle fenêtre s'ouvrira - une fenêtre contextuelle qui bloquera non seulement l'onglet actuel, mais également toute l'interface du navigateur, y compris les autres fenêtres et onglets ouverts.

Les fenêtres pop-up sur Internet sont souvent utilisées pour diffuser de manière malveillante des publicités indésirables, c'est pourquoi les navigateurs contiennent des fonctionnalités de blocage des pop-up.

Dans ce cas, pour travailler avec les configurations 1C:Enterprise 8 via un navigateur, vous devez désactiver le blocage des pop-ups.

Des problèmes surviennent également lorsque vous travaillez sur des appareils mobiles. Par exemple, les fenêtres modales ne sont pas prises en charge sur iPad.

Pour résoudre ces problèmes, vous devez utiliser des fenêtres bloquantes plutôt que des fenêtres modales. Pour l'utilisateur, visuellement tout se ressemble : la fenêtre bloque l'interface client web.

Cependant, la fenêtre de blocage est « dessinée » au-dessus de la fenêtre principale, et seul l'onglet actuel du navigateur dans lequel la configuration est ouverte est bloqué, vous permettant de basculer vers d'autres onglets, puisque les fenêtres modales du navigateur ne sont pas utilisées.

Ainsi, les fenêtres contextuelles ne s'ouvrent pas dans le navigateur et le travail via le client Web sur les appareils mobiles est assuré.

L'élément racine de la configuration possède une propriété « Mode de modalité », qui détermine si les fenêtres modales peuvent être ouvertes dans la configuration.

Si l'option « Utiliser » est sélectionnée, les fenêtres modales peuvent être ouvertes. Si l'option « Ne pas utiliser » est sélectionnée, les fenêtres modales ne sont pas autorisées. Lorsque vous essayez d'appeler une méthode qui ouvre une fenêtre modale, le système affiche un message d'erreur :

Avec cette valeur de la propriété « Mode d'utilisation de la modalité », seules les fenêtres bloquantes sont autorisées.

Si l'option « Utiliser avec des avertissements » est sélectionnée, alors lorsque les fenêtres modales sont ouvertes, le texte suivant s'affiche dans la fenêtre de message :

Cette option de travail peut être utilisée comme intermédiaire lors de la refonte de la configuration afin d'abandonner l'utilisation des fenêtres modales.

La principale différence entre les fenêtres de blocage et les fenêtres modales est que l'ouverture d'une fenêtre de blocage ne met pas en pause l'exécution du code.

Par conséquent, les développeurs devront réécrire le code du programme qui utilise les fenêtres modales pour prendre en compte cette fonctionnalité.

Le code doit être divisé en deux parties :

  • ouvrir une fenêtre de blocage ;
  • traiter la sélection de l'utilisateur.

Le fragment de code donné au début de l'article doit être réécrit comme suit :

&SurClient
Procédure Remplir les produits(Équipe )
Alerte = Nouveau DescriptionAlertes(, CetObjet );

Mode DialogueQuestion.OuiNon);
Fin de la procédure
&SurClient
Procédure (Résultat, Options supplémentaires) Exporter
Si Résultat = Code de retour de dialogue.Oui Alors
//algorithme de remplissage
Fin si ;
Fin de la procédure

Après l'exécution de la procédure ShowQuestion(), le système ne s'arrête pas, attendant la réponse de l'utilisateur, l'exécution du code continue.

L'utilisateur ne pourra faire un choix qu'une fois toute la procédure terminée. Dans ce cas, la procédure d'export FillItemsQuestionComplete() sera appelée. Nous avons transmis son nom au constructeur de l'objet DescriptionAlerts.

La procédure qui sera appelée après avoir effectué une sélection peut se situer dans un module de formulaire, un module de commande ou un module général non global.

Dans l'exemple considéré, la procédure appelée se trouve dans un module de formulaire géré, nous avons donc passé le paramètre ThisObject.

Considérons l'appel d'une procédure située dans un module commun. Pour ce faire, ajoutez un nouveau module commun Traitement des notifications, définissez l'indicateur « Client (application gérée) » pour celui-ci et ne définissez pas l'indicateur « Global ». Plaçons la procédure Fill in Products Question Completion () dans ce module.

Ensuite, le gestionnaire de commandes fill ressemblera à ceci :

&SurClient
Procédure Remplir les produits(Équipe )
Alerte = Nouveau DescriptionAlertes(« Remplir la question sur les produits »,
Traitement des alertes);
Texte de la question = « La partie tabulaire sera effacée. Continuer?" ;
ShowQuestion (Alerte, Texte de la question, Mode DialogueQuestion.OuiNon);
Fin de la procédure

Après avoir appelé une méthode qui ouvre une fenêtre de blocage, la procédure doit se terminer et le code qui s'exécute ensuite doit être placé dans une procédure qui sera appelée après la fermeture de la fenêtre.

Pour transférer le contexte (données auxiliaires, certains paramètres, valeurs des variables) de la procédure qui ouvre la fenêtre modale vers la procédure appelée lors de sa fermeture, un troisième paramètre optionnel du constructeur d'objet est fourni : DescriptionAlerts – Paramètres supplémentaires.

Cet objet (de n'importe quel type) sera transmis à la procédure décrite dans Description de l'alerte en tant que dernier paramètre.

En utilisant l'exemple de la section de code discutée ci-dessus, cela peut être fait comme ceci :

&SurClient
Procédure Remplir les produits(Équipe )
Paramètre1 = 0 ;
Paramètre2 = 0 ;
Liste des paramètres= Nouvelle structure (« Paramètre1, Paramètre2″, Paramètre1, Paramètre2) ;
Alerte = Nouveau DescriptionAlertes(« Remplir la question sur les produits », CetObjet ,
Liste des paramètres);
ShowQuestion (Alerte : "La partie du tableau sera effacée. Continuer ?",
Mode DialogueQuestion.OuiNon);
Fin de la procédure
&SurClient
Procédure RemplirProduitsQuestionAchèvement(Résultat , Options supplémentaires) Exporter
Si Résultat = Code de retour de dialogue.Oui Alors
//analyser les paramètres supplémentaires.Paramètre1
//analyser des paramètres supplémentaires.Paramètre2
Fin si ;
Fin de la procédure

Si vous ne devez transmettre qu'une seule valeur, vous ne pouvez pas utiliser la structure, mais attribuer cette valeur au paramètre Paramètres supplémentaires du constructeur de l'objet DescriptionAlerts.

Examinons quelques exemples de travail avec des fenêtres bloquantes.

Tâche 1 : Ouvrir un autre formulaire

Depuis le formulaire du document, en cliquant sur le bouton « Ouvrir les paramètres », vous devez ouvrir un formulaire sur lequel se trouvent deux cases à cocher Paramètre1 et Paramètre2, que l'utilisateur doit cocher. Après avoir fermé le formulaire, affichez les valeurs des paramètres dans la ligne de message.

Nous créons un formulaire général « ParametersForm », sur lequel nous plaçons les détails Parameter1 et Parameter2, ainsi que la commande CloseForm :

Le gestionnaire de commandes ressemble à ceci :

Le gestionnaire de commandes ressemble à ceci : &OnClient
Procédure CloseForm (Commande)
Liste des paramètres= Nouvelle structure ( "Paramètre1, Paramètre2", Paramètre1 , Paramètre2 );
Fermer ( Liste des paramètres); Fin de la procédure

Pour le formulaire, définissez la propriété WindowOpenMode sur « Bloquer toute l'interface » :

Sur le formulaire du document, nous plaçons la commande OpenParameters, dont le gestionnaire est décrit comme suit :

&SurClient
Procédure Options ouvertes(Équipe )
Alerte = Nouveau DescriptionAlertes(« Ouvrir les options de finition », CetObjet );
OuvrirFormulaire ( « GeneralForm.FormParameters », , , , , , Notification);
Fin de la procédure
&SurClient
Procédure OuvrirOptionsComplète(Résultat , Options supplémentaires) Exporter
Si TypeValue (Result) = Type (« Structure ») Alors
Pour chaque KeyValue de la boucle de résultat
Message = Nouveau Message à l'utilisateur;
Message.Text = « Clé : « » " + KeyValue.Key + " " ", valeur = ”
+ CléValeur.Valeur;
Message.Rapport();
Fin du cycle ;
Fin si ;
Fin de la procédure

En mode utilisateur, en exécutant la configuration sous le client web, nous obtenons les résultats suivants :

Pour agrandir, cliquez sur l'image.

Le mode d'ouverture de la fenêtre peut également être précisé dans le dernier paramètre de la procédure OpenForm.

&SurClient
Procédure Options ouvertes(Équipe )
Alerte = Nouveau DescriptionAlertes(« Ouvrir les options de finition », CetObjet );
OuvrirFormulaire ( « GeneralForm.FormParameters », , , , , , Alerte
FormWindowOpenMode.LockEntireInterface
);
Fin de la procédure

Tâche 2. Question lors de la fermeture du formulaire

Lors de la fermeture d'une fenêtre de traitement, demander à l'utilisateur s'il souhaite réellement fermer la fenêtre.

Ce problème peut être résolu à l'aide du code suivant situé dans le module du formulaire de traitement :

&SurClient
Perem Besoin de fermer le formulaire;
&SurClient
Procédure avant clôture (panne, Traitement standard)
Sinon Besoin de fermer le formulaire= Vrai alors
Échec = Vrai ;
Alerte = Nouveau DescriptionAlertes(« Avant la clôture », CetObjet );
ShowQuestion (Alerte : "Êtes-vous sûr de vouloir fermer la fenêtre ?",
Mode DialogueQuestion.OuiNon
);
Fin si ;
Fin de la procédure
&SurClient
Procédure Avant la clôture(Résultat , Options supplémentaires) Exporter
Si Résultat = Code de retour de dialogue.Oui Alors
Besoin de fermer le formulaire= Vrai ;
Fermer();
Sinon
Besoin de fermer le formulaire= Indéfini ;
Fin si ;
Fin de la procédure

Dans la procédure du formulaire BeforeClosing, une question est posée à l'utilisateur, l'indicateur Refus est défini sur True et la fermeture du formulaire est annulée.

Après une réponse affirmative à la question, la variable Need toCloseForm est définie sur True et le formulaire est à nouveau fermé.

Tâche 3 : Saisie d'une valeur numérique

Lorsque vous cliquez sur le bouton du formulaire de traitement, ouvrez une boîte de dialogue standard de saisie de numéro.

Pour ce faire, vous devez utiliser la méthode ShowNumberInput() au lieu de EnterNumber(), qui ouvre une fenêtre de blocage au lieu d'une fenêtre modale.

&SurClient
Procédure Saisie de numéros (commande)
Alerte = Nouveau DescriptionAlertes(« Entrer le numéro terminé », CetObjet );
AfficherEnterNumbers(Alerte, 0, « Entrer la quantité », 15, 3 );
Fin de la procédure
&SurClient
Procédure Saisir des nombresTerminer(Résultat , Options supplémentaires) Exporter

Message = Nouveau Message à l'utilisateur;
Message.Text = « Vous avez renseigné une quantité » + Résultat ;
Message.Rapport();
Fin si ;
Fin de la procédure

Après avoir fermé la fenêtre de saisie du numéro, une procédure sera appelée dont le premier paramètre sera le numéro saisi ou la valeur Indéfini si l'utilisateur a refusé de saisir.

Tâche 4. Choisir une couleur

Lorsque vous cliquez sur le bouton du formulaire de traitement, à l'aide de la boîte de dialogue de sélection de couleur standard, l'utilisateur spécifie la couleur requise. Définissez cette couleur pour l'arrière-plan du bouton cliqué.

Ajoutez la commande SelectColor au formulaire avec le gestionnaire suivant :

&SurClient
Procédure Sélection des couleurs (commande)
Boîte de dialogue de sélection des couleurs= Nouveau Boîte de dialogue de sélection des couleurs;
Alerte = Nouveau DescriptionAlertes(« Sélection des couleurs terminée », CetObjet );
Boîte de dialogue de sélection des couleurs. Afficher (Alerte);
Fin de la procédure
&SurClient
Procédure ChoixCouleursAchèvement(Résultat , Options supplémentaires) Exporter
Si PAS Résultat = Indéfini Alors
Éléments.Sélection de couleurs.Couleur d'arrière-plan= Résultat ;
Fin si ;
Fin de la procédure

Pour les objets de la boîte de dialogue de sélection de couleur (ainsi que la boîte de dialogue d'édition de période standard, le constructeur de ligne de format, la boîte de dialogue de planification de tâches régulière, la boîte de dialogue de sélection de police), la méthode Show() ouvre une fenêtre de blocage.

Après fermeture de la fenêtre, une procédure sera appelée dont le premier paramètre se verra transmettre la valeur sélectionnée (couleur, police, etc.) ou la valeur Indéfini si l'utilisateur a refusé le choix.

Il convient de noter que l'objet FileSelectionDialog ne possède pas de méthode Show(), contrairement aux boîtes de dialogue de sélection de couleurs ou de polices, car l'implémentation de ces boîtes de dialogue est sensiblement différente.

Pour utiliser la boîte de dialogue de sélection de fichier sur le client Web, vous devez d'abord activer l'extension de fichier.

Les boîtes de dialogue implémentées via l'extension de fichier ne créent pas les mêmes problèmes opérationnels que les fenêtres de navigateur modal, donc l'ouverture de fenêtres bloquantes pour l'objet FileSelectionDialog n'a pas été implémentée.

En conclusion, notons qu'à partir de la version 8.3.10, le support des fenêtres modales a été interrompu dans le client Web. Dans ce cas, si une méthode modale est appelée dans la configuration, une exception est générée. De plus, la prise en charge du mode interface a été interrompue dans le client Web. Dans des fenêtres séparées. De plus, tant dans le client léger que dans le client Web, il n'est plus possible d'ouvrir un formulaire dans une fenêtre séparée (lorsque vous travaillez en mode interface Favoris). Des mesures aussi drastiques ont permis d'abandonner le mode interface, qui n'est plus supporté par tous les navigateurs modernes.

Quelle conclusion pratique peut-on tirer de ces informations ? Et la conclusion est assez simple - si, pour une raison quelconque, votre configuration contient encore des appels modaux, alors à ces endroits du client Web, une fenêtre avec un message d'erreur s'affichera. Je voudrais mettre en garde contre toute tentative de « Google » pour trouver une solution rapide à ce problème, car... La plupart des conseils se résument à cette recette : dans le configurateur au niveau configuration, définissez la propriété « Mode d'utilisation des modalités » sur « Utiliser ». Naturellement, pour le moment, cela ne fonctionnera pas uniquement parce que les navigateurs modernes eux-mêmes ne prennent plus en charge les appels modaux.

Et vous n'avez que deux façons de résoudre le problème décrit ci-dessus :

  1. Mettez à jour la plateforme vers la version 8.3.10+ (8.3.11), définissez la propriété de configuration « Mode de compatibilité » sur « Ne pas utiliser » et réécrivez les fragments de code qui utilisent des méthodes modales dans un modèle de logique métier asynchrone.
  2. Recommandez à vos clients d'utiliser des navigateurs plus anciens qui prenaient toujours en charge les appels modaux (Mozilla Firefox versions 37 et inférieures, versions Chrome inférieures à 37, etc.).

À propos, à partir de la version 8.3.11, les versions 8 et 9 des navigateurs Web Microsoft Internet Explorer ne sont plus prises en charge.

Nous avons traité des navigateurs Web à la lumière des modalités, il est maintenant temps de clarifier la situation avec les autres clients.

À partir de la version 8.3.5, la propriété Modality Usage Mode dans les clients légers et lourds est respectée uniquement si l'option de ligne de commande /EnableCheckModal est spécifiée. Ce paramètre est automatiquement inséré dans la ligne de commande uniquement au lancement de l'application depuis le configurateur. Si ce paramètre n'est pas spécifié, aucune exception n'est générée et les avertissements correspondants ne sont pas affichés. Ceux. en pratique, lors de l'utilisation d'un client lourd et léger, aucun changement fondamental de fonctionnement n'est observé lors de l'utilisation du mode modal - les appels modaux fonctionneront de la même manière qu'auparavant, sans produire d'avertissements, comme dans le client Web.

Pour mettre les points sur les i, notons qu'à partir de la version 8.3.9, le client lourd ignore la propriété de configuration « Mode d'utilisation des appels synchrones aux extensions de plateforme et aux composants externes », alors que les méthodes synchrones correspondantes fonctionnent sans générer d'exceptions et afficher des avertissements. La propriété ignorée spécifiée a été ajoutée dans la version 8.3.5 pour prendre en charge le travail asynchrone avec des composants externes, la cryptographie et les extensions permettant de travailler avec des fichiers dans le navigateur Web Google Chrome. Il est clair que cela n'a rien à voir avec le client lourd, et donc ignorer « discrètement » cette propriété a simplement éliminé les vérifications inutiles pour l'utilisation de méthodes synchrones lors de l'utilisation de la configuration.

D'ailleurs! Étant donné que la plate-forme s'oriente avec confiance vers le Web, avec la version 8.3.8, les développeurs ont introduit certaines restrictions sur le code du programme associé à la logique de fermeture d'un formulaire ou d'une application exécutée dans des clients lourds et légers. Assurez-vous de lire notre article traitant de cette nuance en détail. De plus, dans le cours « Développement professionnel d'interfaces et de formulaires dans 1C : Entreprise 8.3 », il y a un chapitre dédié à l'abandon de modalité, et vous pourrez glaner de nombreuses informations utiles et pertinentes sur ce sujet.

Chers collègues, il y a deux choses que vous pouvez lire à l'infini : le fil VKontakte et la liste des changements dans la prochaine version de la plateforme, résumons donc les résultats finaux ;)

En examinant des exemples qui vous permettent de passer d'éléments d'un modèle synchrone à un modèle asynchrone, vous avez probablement déjà remarqué que dans le cas général, il y a plus de code de programme. Plus il y a de code, plus la complexité de sa maintenance et de son débogage augmente.

De plus, la quantité de code augmentera encore plus si nous utilisons davantage de boîtes de dialogue pendant le processus de développement. Par conséquent, lors du développement de solutions d'application axées sur le travail dans un client Web, vous devez vous rappeler le paradigme de travail actuellement utilisé dans les applications Web modernes. Par conséquent, si votre configuration comporte de nombreux dialogues interactifs avec l'utilisateur et des avertissements, il est alors logique de reconsidérer cette fonctionnalité en faveur d'autres approches pour organiser l'interaction utilisateur.

Au lieu d'une conclusion

Notre cycle « Premiers pas dans le développement 1C » est terminé. Si vous le lisez dans son intégralité, vous avez probablement déjà remarqué à quel point la plate-forme s'est développée à pas de géant ces derniers temps. Le matériel de cette série a été écrit relativement récemment, mais nous avons été obligés de le mettre à jour sérieusement, car... Même en si peu de temps, de nombreuses nouvelles fonctionnalités et modifications importantes sont apparues. De tels changements majeurs peuvent être quelque peu déroutants pour un programmeur 1C s'il n'a pas grandi et développé professionnellement avec la plate-forme pendant tout ce temps.

Sur les ressources Internet spécialisées, vous pouvez souvent lire les demandes de programmeurs débutants et de leurs collègues plus matures recommandant du matériel qui les aiderait à comprendre les capacités étendues et parfois apparemment infinies de la plate-forme 1C. Nous vous recommandons traditionnellement de prêter attention à nos cours de programmation

14
Pour forcer un lancement entreprise dans une application Ordinaire ou Gérée, utilisez les clés suivantes : /RunModeOrdinaryApplication lance le client lourd en mode normal, malgré les paramètres de configuration et... 3
Il faut que les utilisateurs ne puissent pas changer l'interface configurée pour eux ! Solution : Pour le désactiver, vous devez supprimer le droit « Enregistrer les données utilisateur » des droits d'accès de l'élément de configuration racine. ... 2
Dans les travaux actuels, l'utilisateur ouvre généralement plusieurs objets. Il peut s'agir d'un document, d'un ouvrage de référence, d'un rapport, etc. Dans l'interface précédente, il n'y avait aucun problème pour trouver rapidement un objet ouvert et le mettre à jour pour... 2
Dans l'article précédent : Installation d'un classificateur d'adresses (KLADR) dans 1C, je vous ai expliqué ce qu'est KLADR et comment le charger dans les formulaires standards 1C (8.0-8.2). Dans cet article, je vais vous expliquer comment charger le classificateur d'adresses (KLADR) dans... 2
Souvent, lors du développement d'une certaine configuration, les utilisateurs souhaitent joindre des photos à un élément du répertoire et les stocker dans la base de données. Dans cet article je vais vous expliquer comment connecter des objets de construction au répertoire...

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 manière 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 :

"L'utilisation de fenêtres modales dans ce mode est interdite" - cette erreur commence désormais à déranger les utilisateurs et programmeurs 1C avec l'arrivée de la nouvelle interface de la plateforme 1C 8.3 - " ".

Les développeurs de la plate-forme technologique 1C s'adaptent à leur temps en standardisant leur solution selon les normes internationales de développement de logiciels. Tous les standards se résument d’une manière ou d’une autre à une seule interface, proche des pages Web.

Les fenêtres modales et pop-up sont considérées comme de mauvaise qualité et ont depuis longtemps cessé d'être normales dans le développement de logiciels. Les utilisateurs sont habitués à travailler « dans une seule fenêtre ».

On constate particulièrement souvent une erreur de modalité dans les méthodes 1C suivantes :

  • Question;
  • Avertissement;
  • Valeur Ouverte.

Avec la sortie de la nouvelle interface « taxi », les développeurs de la plate-forme 1C 8 ont pris la bonne décision : essayer de recycler les développeurs de solutions applicatives d'une nouvelle manière. Ils ont inclus une fonctionnalité dans la nouvelle plateforme : le « mode modalité ».

Solution rapide

Si vous n'avez pas le temps de le comprendre et que vous avez besoin de résoudre rapidement le problème, nous vous proposons une solution simple, mais pas entièrement correcte. Pour corriger rapidement l'erreur, changez simplement le mode de modalité dans les propriétés de configuration.

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

Dans une configuration ouverte, appelez le menu contextuel en faisant un clic droit sur la racine de la configuration et en sélectionnant « Propriétés » :

Obtenez 267 leçons vidéo sur 1C gratuitement :

Les propriétés de configuration s'ouvriront, où dans le pied de page se trouve la propriété qui nous intéresse - « Mode d'utilisation des modalités », sélectionnez le mode « Utilisation » :

Après cela, enregistrez et appliquez les modifications en appuyant sur la touche « F7 ».

Solution correcte au problème

La bonne façon de résoudre ce problème consiste à modifier la configuration ou le traitement externe pour répondre aux nouvelles exigences.

Les avertissements, questions, boîtes de dialogue et autres modaux doivent tous être réécrits d'une nouvelle manière.

Les opérateurs intégrés qui appellent les fenêtres modales doivent être remplacés par des fonctions en double.

Par exemple:

  • Avertissement - ShowWarning ;
  • Question - ShowQuestion (détails - );
  • - Afficher les numéros d'entrée.

Dans le même temps, un objet spécialisé est apparu - Description de la notification.

Exemple de remplacement :

Chaîne = "" ; EntréeChaîne(Chaîne, "Entrez une valeur de chaîne") Notify("Vous avez entré " + String) ;

Doit être remplacé par :

Chaîne = "" ; DescriptionAlerts = Nouvelles alertes de description ( "TestLineEntrée", Ce formulaire) ; ShowLineInput(DescriptionAlerts, String, "Entrez une valeur de chaîne") ;

En parallèle, ajoutez une procédure similaire sur le client qui fonctionnera lorsque la valeur sera saisie par l'utilisateur :

&Sur la procédure client TestInputString(ReceivedValue, PassedParameters) Export Notify("Vous avez entré " + String) ; Fin de la procédure

Les formulaires développés dans la configuration s'ouvrent de la même manière. Il suffit de remplacer la méthode « OpenFormModal » par « OpenForm », en précisant une description de l'alerte et la nouvelle procédure nécessaire pour celle-ci.

Pour bloquer l'accès au formulaire appelé en ouvrant un formulaire, il suffit de préciser la valeur « Bloquer la fenêtre propriétaire » dans la propriété « Mode d'ouverture de la fenêtre » du formulaire :

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 de demander à l'utilisateur 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.)

mob_info