Maison / Skype / Comment créer un gestionnaire d'événements 1s. Affectation de gestionnaires d'événements à l'aide d'abonnements à des événements. Ajout automatique de points d'arrêt

Comment créer un gestionnaire d'événements 1s. Affectation de gestionnaires d'événements à l'aide d'abonnements à des événements. Ajout automatique de points d'arrêt

Au cours de la résolution de diverses tâches des utilisateurs, il devient parfois nécessaire de soumettre des mouvements de documents déjà formés (à savoir certains ensembles de registres) à une sorte d'ajustement.

À ces fins, l'objet « Abonnement à un événement » est très approprié, qui vous permet d'effectuer certaines actions lorsqu'un certain événement se produit pendant un grand nombre objets (par exemple, lors de l'enregistrement des documents de paiement ou lors de la définition d'un nouveau nombre de répertoires liés à la comptabilité fiscale).

De plus, s'abonner à un événement est pratique car cela vous permet de diverses activités sans changer les mécanismes typiques décrits dans les différents modules.

Par exemple, une tâche s'est posée - il est nécessaire d'enregistrer certaines données (informations sur les activités de l'entreprise) dans les documents de paiement après la formation des principaux mouvements du document (formés dans l'événement « Traitement »). La tâche sera implémentée sur la configuration "Manufacturing Enterprise Management" ed. 1.3.

Examinons la solution plus en détail :

Créons un nouvel abonnement à l'événement "Enregistrer la direction vers le paiement". Un abonnement possède un certain nombre de propriétés qui détermineront son comportement :

Source est un objet (par exemple, un document ou une liste de documents) pour lequel l'action sera appelée. Pour notre cas, nous choisissons Ordre de paiement sortant et ordre de paiement entrant

Événements- l'action elle-même, après laquelle notre code sera exécuté. Selon les conditions du problème, on choisit Traitement

Gestionnaire- une indication de la procédure dans laquelle le traitement aura lieu. A ces fins, nous choisissons le module général Usage général.

Après les objectifs ci-dessus, une procédure est créée dans laquelle il est nécessaire de placer un code pour remplir les données sur la direction (en supposant que ces informations soient déjà contenues dans les ordres de paiement).

Considérez ses paramètres :

Source- cet objet de type DirectoryObject ou DocumentObject pour lequel l'action a lieu.

Refus- un paramètre qui permet d'annuler la comptabilisation d'un document sous certaines conditions.

Mode de maintien- des options de conduite (opérationnelle ou non opérationnelle), permettant de construire des algorithmes de traitement de différentes manières.

Arrêtons-nous au paramètre Source. Pour notre tâche, le type de ce paramètre sera - DocumentObjet. Une collection est disponible pour ce type mouvements, qui contient tous les jeux d'enregistrements de registre pour lesquels ce document est un registraire.

Cette collection contient un ensemble d'enregistrements Règlements avec contrepartiesSetRecords qui nous intéresse. Supposons que la dimension Direction soit créée dans le registre, que nous devons remplir à partir du document.

Écrivons le code suivant :

Ensembles = Source. mouvements; Calculs = Ensembles. Règlements avec les entrepreneurs ; Pour chaque page de la page du cycle de calculs. Direction = Source. Direction; Fin si ;

Comme nous pouvons le voir, la mise en œuvre est assez simple, après avoir traité l'action pour écrire l'ensemble, vous n'avez pas besoin d'effectuer d'action supplémentaire - l'abonnement à l'événement est effectué dans le cadre de la transaction d'événement ProcessingPerforming, après son achèvement l'ensemble sera écrit automatiquement.

Les avantages de cette approche : traitement des données en dehors des algorithmes standard, réduction de la quantité de travail de recherche et de transfert des modifications lors des mises à jour, meilleure visibilité - tout le code en une seule procédure.

Inconvénient de cette approche : une augmentation du temps de conduite des documents et d'enregistrement des éléments des annuaires.

Espoir, cette information sera utile aussi bien aux programmeurs débutants qu'à leurs collègues plus expérimentés dans le cadre d'une extension de leurs horizons.

Nous avons cliqué sur un bouton, une certaine action commence immédiatement à être effectuée - le formulaire est fermé ou ouvert, le document est enregistré ou lu - l'événement correspondant se produit. Pour tout événement, le programmeur a la possibilité d'attribuer une fonction spéciale, qui est écrite dans le langage 1C intégré et sera en mesure d'effectuer les actions spécifiées pour celle-ci lorsque l'événement se produit.

Très souvent, il est nécessaire d'attribuer un gestionnaire à un document entier ou à plusieurs documents distincts à la fois. Par exemple, chacun des documents contient l'attribut « Utilisateur ». Ou nous avons simplement ajouté un accessoire aussi commun. Si cette condition est remplie, nous ne pouvons le savoir qu'en contrôlant nous-mêmes l'ensemble du processus. Mais comment pouvons-nous le faire ?

Abonnements aux événements en 1C

Un abonnement événementiel en 1C est un objet qui se trouve dans la configuration correspondante des abonnements Général/Événements. Cet abonnement vous permet d'attribuer un gestionnaire pour les cas où certains événements se produisent pour plusieurs objets à la fois.

Définissez le nom et ajoutez un nouvel abonnement à l'événement 1C

Il faut sélectionner plusieurs ou un document spécifique dans les propriétés de l'abonnement, répertoire sur lequel on met le handler. Par conséquent, vous devez sélectionner l'un des événements standard pouvant se produire avec l'objet sélectionné dans les propriétés de l'abonnement.

En disant « documents et ouvrages de référence » on simplifie beaucoup les choses, car en réalité on peut utiliser beaucoup d'objets différents. Un inconvénient est que vous ne pouvez pas vous abonner aux événements de formulaire.

Le nombre d'événements que vous pouvez sélectionner dépend de l'objet lui-même. Vous devez être très prudent, car si vous sélectionnez un grand nombre d'objets, la liste n'affichera que les événements que chacun des objets sélectionnés peut avoir. (Événements communs à tous les objets sélectionnés).


Après avoir terminé toutes ces étapes, il ne reste plus qu'à créer une fonction de gestionnaire. Pour ce faire, vous devez disposer d'un module commun dans la configuration, où une coche est placée à côté de l'élément "Nord". Lorsque vous cliquez sur le bouton de la loupe, une fonction de gestionnaire sera créée.

Nous avons pu souscrire pour tous les documents à l'événement "Before Write". Désormais, la fonction sera exécutée lors de la rédaction de tout document dans lequel le chèque est enregistré. Si le contrôle s'est avéré négatif, alors pour refuser de rédiger le document, vous devez définir le paramètre de fonction
Rejet = Vrai.

Lorsque l'utilisateur clique sur un bouton particulier, le formulaire s'ouvre ou se ferme, un document est rédigé - un événement se produit.

Avant d'écrire chaque document, nous souhaitons vérifier que cet attribut est renseigné.

Comment faire?

Abonnements aux événements 1C

Un abonnement aux événements 1C existe, il se situe dans la branche de configuration Général / Abonnements aux événements 1C.

L'abonnement à un événement 1C permet d'attribuer un gestionnaire lorsqu'un événement se produit pour plusieurs objets (répertoires, documents).

Ajoutons un nouvel abonnement à l'événement 1C, définissons le nom.

Dans la propriété d'abonnement aux événements 1C Source - vous devez sélectionner un ou plusieurs documents, répertoires - objets sur lesquels nous plaçons le gestionnaire.

Dans la propriété d'abonnement aux événements 1C Événement - vous devez sélectionner l'une des options pour les événements standard pouvant survenir avec les documents et répertoires sélectionnés.

Nous simplifions en disant « documents et répertoires » - en fait, de nombreux objets 1C peuvent être utilisés. Malheureusement, vous ne pouvez pas vous abonner aux événements du formulaire 1C - par exemple, lors de l'ouverture d'un formulaire, ce que regrettent de nombreux programmeurs.

L'ensemble des événements possibles dépend de l'objet. Soyez prudent, car si vous sélectionnez plusieurs (nombreux) objets, alors la liste des événements ne contiendra que les événements que chacun des objets sélectionnés peut avoir (c'est-à-dire des événements communs à tous les objets sélectionnés).

Après cela, il reste à créer une fonction de gestionnaire. Pour ce faire, la configuration doit avoir la case Serveur cochée dans les propriétés. Lorsque vous cliquez sur le bouton de la loupe, une fonction sera créée - un gestionnaire.

Tous! Nous venons de souscrire à l'événement 1C PreWrite pour tous les documents. Désormais, lors de l'écriture d'un document, notre fonction sera exécutée dans laquelle le chèque est écrit.

Afin de refuser de rédiger le document si le contrôle s'est avéré négatif, vous devez définir le paramètre de fonction

Lorsque vous travaillez avec base d'informations 1C, il devient souvent nécessaire de lier un nouvel algorithme à un événement associé à une modification d'un objet. Dans la version 7 du programme, pour exécuter le gestionnaire, il était nécessaire de réécrire le code source du programme, ce qui entraînait des problèmes lors de la mise à jour de la configuration.

Après avoir analysé les retours des utilisateurs, les développeurs du G8 ont implémenté un nouvel objet appelé « Event Subscription ». Dans cet article, nous allons essayer de révéler :

  • Paramètres d'abonnement ;
  • Création;
  • Caractéristiques de fonctionnement.

Créer un nouvel abonnement

Comme tout autre objet de métadonnées, un abonnement à un événement en 1C est ajouté depuis le configurateur.

Ces éléments sont situés dans la branche de l'arbre « Général » (Fig. 1).

Pour ajouter un nouveau gestionnaire :


Figure 3

Pour éviter les problèmes de mises à jour, il est préférable que vos propres développements disposent de leur propre module commun, qui contiendra uniquement vos procédures et fonctions.

Caractéristiques du fonctionnement des abonnements

L'une des principales questions qui se posent aux utilisateurs qui commencent à travailler avec l'objet Event Subscription est la question de l'ordre dans lequel les procédures sont appelées. C'est souvent là que résident les erreurs dues au fait que la procédure ne fonctionne pas ou fonctionne une fois sur deux.

Sur l'exemple de la procédure OnRecord() pour n'importe quel document, vous pouvez voir l'ordre dans lequel les gestionnaires sont appelés.

Ainsi, s'il y a cette procédure dans le module objet document, et qu'en parallèle il y a un traitement appelé depuis l'abonnement et traitant le même événement, le module document sera traité en premier. Si, lors de l'exécution de OnWrite() dans le module document, le paramètre Rejected for some Reason est défini sur True, l'abonnement est garanti de ne pas fonctionner.

Dans le cas où il existe plusieurs objets d'abonnement identiques pour une source et un événement, il est très difficile de suivre l'ordre d'exécution. Et si lors de l'exécution d'au moins un gestionnaire une exception est levée, certaines procédures resteront inexécutées.

Ainsi, la séquence de traitement peut être spécifiée par le schéma suivant :

  1. Les événements du module objet sont traités ;
  2. Les souscriptions associées directement au type de données courant sont traitées ;
  3. Le code lié à un type générique est traité.

Il est très important de se rappeler qu'en aucun cas du code modifiant les données de l'objet source ne doit être inséré dans des procédures exécutées en écriture, cela peut conduire à des boucles inutiles. Il est préférable d'utiliser un code similaire dans les procédures BeforeWrite.

Gestionnaire d'événements d'ouverture de formulaire

Une popularité croissante formulaires gérés, utilisé dans la version 8 du programme, ainsi que les problèmes liés à la mise à jour de ces objets lors de l'enregistrement de leurs propres modifications, ont conduit au fait qu'à partir de la plateforme 8.2.15, l'événement ProcessingFormReceive est apparu dans le programme. C'est ici que vous pouvez insérer du code qui modifie et remplace les formulaires standards.

Quelques fonctionnalités de ce gestionnaire :

  • L'événement ne fonctionnera pas si la configuration en cours d'ouverture taper le formulaireénoncé strictement ;
  • L'événement ne peut être implémenté que pour les formulaires gérés ;
  • Module général Le , contenant ce gestionnaire, doit non seulement avoir l'attribut "Serveur", mais également contenir une case cochée dans le champ "Appel au serveur".

Il est important de considérer que cet abonnement n'est pas appelé pour un objet précis, mais pour son gestionnaire, c'est-à-dire que le champ source doit contenir ce mot (Fig. 4)

Figure 4

En résumant ce qui précède, je voudrais dire que "Event Subscription" est un outil extrêmement utile et nécessaire pour le développeur, qui vous permet de mettre en œuvre vos propres buts et objectifs sans interventions sérieuses dans la configuration.

Cet article est une annonce de nouvelles fonctionnalités.
Il n'est pas recommandé d'utiliser le contenu de cet article pour découvrir de nouvelles fonctionnalités.
Description complète les nouvelles fonctionnalités seront fournies dans la documentation de la version respective.
Liste complète changements dans nouvelle version est fourni dans le fichier v8Update.htm.

Implémenté dans la version EDT 1.7.0.567.

Dans 1C:Enterprise Development Tools (EDT), nous avons implémenté un prototype d'un nouvel outil. Le titre provisoire de cet outil est Editor Tous les abonnements événementiels. Cela vous aidera à analyser facilement les abonnements à tous les événements qui existent dans la solution appliquée.

Abonnements aux événements

La plateforme 1C:Enterprise permet de créer des abonnements aux événements d'objets de configuration dans une solution applicative. Un abonnement est une procédure qui sera exécutée après l'exécution du gestionnaire d'événements d'origine. L'avantage des abonnements réside dans le fait qu'une procédure peut être « souscrite » à un événement appartenant à différents objets de configuration. Ainsi, s'il existe un algorithme qui doit être exécuté à la fois lors de l'enregistrement d'une organisation et lors de l'enregistrement d'un service, il peut être placé dans un abonnement, et vous n'avez alors même pas besoin de modifier les gestionnaires de cet événement dans les objets eux-mêmes. .

Il s’avère que l’abonnement est un mécanisme pratique et universel. Mais dans les solutions applicatives à grande échelle, le nombre d’abonnements à des événements peut atteindre plusieurs centaines. Il devient gênant de les analyser dans l'arborescence de configuration, dans une liste linéaire. Par exemple, dans la solution appliquée 1C : Gestion d'entreprise (ERP) plus de 340 abonnements à des événements.

EDT facilite un peu le travail avec les abonnements en les affichant dans le panneau Schème lorsque le module d’un objet d’application est ouvert.


Cet affichage des abonnements est pratique pour un certain nombre de tâches liées à l'édition des modules. Mais cela n'est toujours pas adapté lorsque vous devez trouver et analyser rapidement tous les algorithmes exécutés dans les abonnements lorsqu'un événement se produit.

Tous les abonnements événementiels

Pour nous débarrasser des inconvénients énumérés ci-dessus, nous avons mis en œuvre voie universelle représentations d'abonnements, d'événements, d'objets de configuration et de procédures qui implémentent des algorithmes d'abonnement.


En conséquence, vous pouvez appeler l'éditeur Tous les abonnements événementiels pour toute la configuration, ou seulement pour un objet - la différence ne résidera que dans la composition des données filtrées d'une manière ou d'une autre.


Sur le côté gauche, l'éditeur affiche tous les événements, et pour chaque événement, tous ses abonnements. Lorsqu'un abonnement spécifique est sélectionné, la liste des objets de configuration auxquels l'abonnement est « abonné » s'affiche en haut à droite. Et en bas à droite, sont affichés le module et la procédure dans laquelle se trouve l'algorithme de souscription. En double-cliquant sur une procédure, vous pouvez l'ouvrir dans l'éditeur de langage intégré.

Dans l'éditeur, vous pouvez analyser non seulement les abonnements individuels, mais également tous les abonnements liés au même événement. Si vous sélectionnez un événement, l'éditeur affichera tous les modules et toutes les procédures souscrites pour gérer cet événement.


Si vous appelez l'éditeur sur un objet de configuration, seuls les événements et abonnements de cet objet seront affichés, et l'objet lui-même sera toujours surligné en rouge dans la liste source. Ainsi, vous pouvez vérifier rapidement, par exemple, que l'abonnement que vous choisissez fonctionne pour tous les objets de configuration qui en ont besoin.


L'appel de l'éditeur avec une commande contextuelle (sur l'objet de configuration) permet de réduire immédiatement le nombre d'abonnements affichés dans l'éditeur. Par exemple, vous pouvez afficher les abonnements uniquement pour les événements traités dans le module objet ou dans le module gestionnaire.


De plus, l'éditeur contient un filtre universel avec lequel vous pouvez personnaliser arbitrairement la composition des objets, des événements et des procédures.


Notez qu'avec ce filtre, vous pouvez sélectionner non seulement des objets spécifiques qui sont la source des événements, mais également des ensembles de types, tels que ObjetAnnuaire, DocumentObjet et d'autres. Ces jeux de types incluent tous les répertoires ou tous les documents contenus dans la configuration.

Avec une recherche par chaîne, vous pouvez trouver rapidement uniquement les abonnements qui s'appliquent au moteur qui vous intéresse.


À tout moment, vous pouvez filtrer rapidement le contenu en fonction de l'événement ou de la source affiché dans l'éditeur. Par exemple, vous avez trouvé un abonnement Vérifier le calcul de la formule. Sa source est le plan des types de calcul Détient.


A l'aide de la commande contextuelle sur le plan des types de calcul, vous pouvez visualiser rapidement uniquement les abonnements associés à ses événements.


Ajout automatique de points d'arrêt

Une méthode courante pour analyser les abonnements aux événements consiste à afficher séquentiellement toutes les procédures appelées dans le débogueur dans l'ordre dans lequel elles ont été exécutées. Pour ce faire, l'éditeur fournit un outil pratique permettant d'ajouter automatiquement des points d'arrêt aux gestionnaires.

Tout d'abord, vous pouvez appeler cet outil directement dans l'éditeur.


Vous pouvez rechercher et sélectionner l'objet qui vous intéresse, sélectionner l'un de ses événements et marquer, par exemple, tous les gestionnaires. Après avoir appuyé sur D'ACCORD les points d'arrêt seront ajoutés à la première ligne exécutable de chaque gestionnaire coché, et tous ces points d'arrêt apparaîtront dans le panneau Points d'arrêt En perspective Débogage.


Une autre façon d'ajouter des points d'arrêt est pratique lorsque vous avez déjà trouvé l'objet ou l'événement qui vous intéresse dans l'éditeur. Dans ce cas, à partir de menu contextuel vous pouvez appeler la commande qui vous convient.


Et enfin, la troisième méthode que vous pouvez utiliser consiste à ajouter automatiquement des points d'arrêt déjà en cours de débogage. Dans ce cas, vous n'avez pas besoin d'ouvrir l'éditeur, car la commande add se trouve directement dans le panneau Points d'arrêt.


Alors l'éditeur Tous les abonnements événementiels est un outil polyvalent qui vous permet d'utiliser une variété de scénarios d'analyse. Il sera utile non seulement aux développeurs qui connaissent bien la solution appliquée, mais également aux spécialistes de la mise en œuvre ou aux informaticiens qui doivent gérer des fonctionnalités inconnues.