Extensions de configuration - comment ajouter des fonctionnalités à une configuration typique sans la supprimer du support (20 minutes de vidéo). Modifier ou désactiver le mode de compatibilité Mettre à jour les formulaires dans une extension

Une nouvelle version de la plateforme 8.3.11 a été publiée, qui vous permet d'ajouter et de modifier des objets de métadonnées via une extension. Pouvons-nous vraiment implémenter des améliorations maintenant sans supprimer la configuration du support ? Vaut-il la peine de promettre des montagnes d’or à un client sans aucune conséquence ?

Tout d’abord, vous devez être conscient des limites des extensions.

Restriction sur les objets créés

Actuellement, vous pouvez créer :

  • Livres de référence
  • Documentation
  • Registres d'informations
  • Plans d'échange

Vous pouvez ajouter des détails à :

  • Livres de référence
  • Documentation

On se retrouve avec quoi ? Tous les types d'objets de métadonnées ne peuvent pas être ajoutés. Les plus courants et les plus populaires, mais pas tous. De plus, de nouvelles dimensions et ressources ne peuvent pas être ajoutées aux registres d’informations. Vous ne pouvez créer qu'un tout nouveau grand livre.

La fonctionnalité des extensions dépend du mode de compatibilité de la configuration à laquelle l'extension est appliquée.

Mode de compatibilité 8.3.8- vous pouvez uniquement modifier les formes des objets et leurs modules, ajouter vos propres rapports et traitements.

Mode de compatibilité 8.3.10- vous pouvez modifier les modules communs, les modules d'objet et de gestionnaire, les rôles, utiliser les directives "Avant", "Après", "À la place" pour tous les modules.

Mode de compatibilité "Ne pas utiliser"- vous pouvez utiliser toutes les fonctionnalités des extensions, y compris l'ajout de nouveaux objets.

À l'heure actuelle, l'UT 11.3 typique a le mode de compatibilité 8.3.8. Dans le mode de compatibilité UT 11.4 8.3.10, c'est-à-dire par exemple pour UT, la plupart des fonctionnalités des extensions ne sont pas disponibles, y compris la création d'objets de métadonnées.

Il semblerait que cela soulève la question : pourquoi ne pas simplement supprimer le support de la racine, définir le mode de compatibilité sur « Ne pas utiliser » et utiliser les extensions en toute sécurité ? Lorsque vous modifiez le mode de compatibilité, le comportement des formulaires, les résultats des requêtes, c'est-à-dire comportement du système dans son ensemble. Nous vous recommandons fortement de ne pas modifier le mode de compatibilité sans l'avoir testé au préalable. Mais il est évident qu’il est possible de tester complètement (ou du moins en partie sur les documents utilisés) une solution applicative entière. Cette option ne doit donc pas être utilisée.

Lors de la connexion d'une extension à une configuration type, en empruntant des objets typiques, l'extension contrôle le mode de compatibilité de la configuration principale et les types d'objets empruntés et leurs détails. Si les propriétés contrôlées ne correspondent pas, l'extension est désactivée et ne fonctionne pas tant que la cause n'est pas éliminée. Autrement dit, avec une mise à jour majeure, il existe une forte probabilité qu'au moins une des propriétés contrôlées change et que l'extension perde sa fonctionnalité.


De plus, si les améliorations sont significatives, de nombreuses procédures et fonctions de la configuration standard ont été remplacées, il faudra les contrôler soigneusement et, si nécessaire, les mettre en conformité avec la configuration standard, en conservant les modifications apportées précédemment.


Dans les cas ci-dessus, vous avez toujours besoin de l'aide d'un programmeur et, éventuellement, d'un temps de révision important (mais toujours moins que lors de la mise à jour d'une configuration qui a été retirée du support).

conclusions

  • La nouvelle version de la plateforme a offert de nouvelles opportunités d'utilisation d'extensions, il est devenu possible d'ajouter des objets de métadonnées, mais malgré cela, la fonctionnalité présente certaines limites.
  • Le mode de compatibilité de la configuration à laquelle l'extension est appliquée limite considérablement la portée de l'extension et il n'est pas recommandé de modifier le mode de compatibilité.
  • Les mises à jour importantes nécessitent toujours l'attention du développeur, car il existe une forte probabilité de modifications des propriétés contrôlées.

Salut tout le monde!

La merveilleuse configuration de 1C "BIT : Medical Center Management" jusqu'à la version 2.0.28.3 dans la logique de son travail présente quelques inexactitudes gênantes qui ne vous permettent pas de profiter pleinement de son utilisation.

Je donne ici deux options pour résoudre ces difficultés, à condition que je préfère personnellement celle associée au changement de configuration - les anciennes méthodes grand-père fonctionnent comme elles le devraient pour le moment. Et oui, c'est mon humble avis et ça marche.

Problème numéro 1. Les prix des travaux ne sont pas inscrits dans le document « Prestations de services ».

La violation dans la logique du programme est la suivante : le registre d'information « Prix des articles » a la dimension « Unité de mesure », et la section tabulaire « Travaux » du document ci-dessus n'a pas d'attribut approprié de sorte que lors du remplissage Tout au long de cette section tabulaire, il peut être facilement et librement remplacé par des demandes de prix. De plus, la fonction « GetPrice » du module général « Pricing » contient les lignes :

Si ValueFilled(Unit) Then FilterStructure.Insert("Unit",Unit); Sinon, sélection Structure.Insert("Unit of Measurement",Catalogs.Units of Measurement.EmptyReference()); Fin si;

Ici, à mon avis, une décision extrêmement erronée a été appliquée : dans des conditions normales, des références vides ne peuvent pas apparaître dans la dimension « Unité de mesure » du registre « Prix des articles ». Il y aura plutôt des liens vers les éléments du référentiel « Unités de mesure » à partir du détail de l'« Unité de marchandise » des nomenclatures correspondantes. Utilisons-les plutôt :

Si ValueFilled(Unit) Then FilterStructure.Insert("Unit",Unit); Sinon, si ValueType(Nomenclature) = Type("CatalogReference.Nomenclature") Then Selection Structure.Insert("Unit of Measurement",Nomenclature.Unit of Goods); Fin si; Fin si;

Options de solutions :
a) changer directement le code de configuration ;
b) créer une extension : on met la fonction problématique "à la place" de celle d'origine, on change le code.

Problème numéro 2. Les imprimables externes avec le type d'utilisation "ClientMethodCall" ne fonctionnent pas vraiment.

Tout d'abord, le formulaire de traitement externe doit être nommé « Form1 ». Oui. Exactement.

Deuxièmement, le module de l'objet de traitement doit contenir une fonction :

FunctionStartModeClient() Exporter Retour True ; Fonctions de fin

Cela doit également l’être.

Troisièmement, et ce qui est le plus désagréable, la configuration dans le formulaire d'ouverture ne transmet pas de lien vers le document à partir duquel ce formulaire est ouvert... Et, du coup, le formulaire d'impression externe ne sait pas quoi imprimer.

Options de solutions :
a) ajouter des lignes :

après la ligne

Form = GetForm("ExternalProcessing."+Res+".Form.Form1");

dans la fonction "PrintExternalFormWithCheckModeClient" du module général "PrintDocumentsClient"

b) déplacer le tout dans une extension.

Difficultés à utiliser les extensions.

Pour le moment, nous utilisons la plateforme 8.3.10.2505.

La configuration en question possède le mode de compatibilité « Version 8.3.6 ». Pas en vain, bien sûr.

La tâche principale est d'emprunter une certaine fonction d'un module commun dans une extension en mode "à la place" et, en y modifiant quelques lignes, de s'assurer que le code modifié est exécuté pendant le processus de configuration.

C'est là que commencent les pièges :

  • la directive &Instead("GetPrice"), supportée par la plateforme 8.3.10, ne permet pas d'utiliser le mode de compatibilité ;
  • la méthode "SetExecutionEventHandlers" de la plateforme 8.3.6 provoque une tempête de la plateforme 8.3.10 du type : "La redéfinition des propriétés des objets empruntés dans les extensions n'est pas autorisée en mode de compatibilité 8.3.8 et inférieur".

Il semble que vous deviez définir le mode de compatibilité de configuration sur « Ne pas utiliser » pour pouvoir utiliser les extensions. Cependant, cette solution introduit un certain nombre de problèmes supplémentaires et de situations « insolubles » dans notre configuration. Fondamentalement, les méthodes commencent à boiter quand et avant la fermeture des formulaires et du système lui-même. Ils sont partiellement résolus à l'aide des méthodes du document Transfert de configurations vers la plateforme 1C:Enterprise 8.3 sans mode de compatibilité avec la version 8.2, situé sur le site 1C ITS. Pourquoi partiellement - car tous les appels du serveur ne peuvent pas être convertis en appels clients et tous ne peuvent pas être abandonnés. Détails - dans l'extension ci-jointe "Shutdown".

Il y a trois extensions dans la liste des fichiers qui résolvent les problèmes avec le formulaire d'impression externe, les prix et les erreurs lors de la fermeture des formulaires et des applications dans la configuration 1C : "BIT : Medical Center Management" version 2.0.28.3.

Implémenté dans la version 8.3.6.1977.

Nous avons mis en œuvre un mécanisme fondamentalement nouveau pour adapter les solutions appliquées à un consommateur spécifique - le mécanisme d'extension.

Pourquoi les extensions sont-elles bonnes ?

Les extensions offrent une stratégie différente de celle existante pour modifier les configurations typiques. L'utilisation de cette nouvelle stratégie facilitera grandement la maintenance des solutions standards que vous souhaitez adapter aux besoins d'une implémentation spécifique, d'un client spécifique.

À quoi ressemble ce processus maintenant ? Il existe une configuration typique. Il bénéficie du support complet du fournisseur. Cela signifie qu'il ne peut pas être modifié. Périodiquement, le fournisseur publie de nouvelles versions (améliorées) de cette configuration. Dans une telle situation, la mise à jour de l'ancienne version de la configuration vers la nouvelle version s'effectue de manière entièrement automatique. C'est pratique et ne nécessite aucune compétence ou connaissance particulière de la part du client.

Mais souvent, le client souhaite ajouter ou modifier quelque chose dans une configuration typique « pour lui-même ». Pour ce faire, le mode de support est modifié, la configuration est supprimée du support complet. Le partenaire d'implémentation ou les spécialistes informatiques du client y apportent les modifications nécessaires. A partir de ce moment, une mise à jour entièrement automatique de la configuration typique vers la nouvelle version publiée par le fournisseur devient impossible.

Désormais, la mise à jour de la configuration nécessite la participation d'un spécialiste. De plus, si les modifications apportées au gré du client étaient importantes, alors le spécialiste effectuant la mise à jour de la configuration peut également prendre beaucoup de temps. Et souvent, une très bonne connaissance de la configuration type elle-même et des modifications apportées peut être requise.

La stratégie proposée par les extensions est la suivante. Si vous souhaitez modifier la configuration par défaut, vous ne touchez pas à la configuration elle-même. Toutes les modifications que vous apportez dans l'extension, qui, en fait, est aussi une configuration.

En mode 1C:Enterprise, vous connectez simplement votre extension à la configuration standard. La plateforme combine automatiquement, en mode 1C:Enterprise, votre extension avec une configuration type. Le client travaille ainsi avec une solution standard modifiée, selon ses souhaits.

Lorsqu'un fournisseur publie une nouvelle version de la configuration commune, une mise à jour automatique est effectuée car le mode de prise en charge de la configuration de type n'a pas changé. Elle restait au plein soutien du fournisseur. Et lorsque vous lancerez une solution d'application mise à jour, la plateforme fusionnera à nouveau automatiquement la configuration typique modifiée avec votre extension. Et le client continuera à travailler avec une solution standard modifiée, selon ses souhaits.

Quand faut-il utiliser les extensions ?

Le mécanisme d'extension séduit par sa polyvalence. Par conséquent, il est important d'avoir une idée correcte des tâches qu'il est censé résoudre.

Premièrement, les extensions sont indispensables lorsque la solution appliquée fonctionne en mode partage de données. Par exemple, dans le modèle de service. L'un des abonnés souhaite disposer de quelques rapports supplémentaires. Tandis que d'autres abonnés souhaitent travailler avec une configuration standard inchangée.

C'est alors pour cet abonné que vous pourrez développer une extension dans laquelle réaliser tous ses souhaits. L'abonné se connectera à cette extension et travaillera avec la configuration modifiée. Alors que pour les autres abonnés, aucun changement ne se produira. Parce que toutes les extensions sont connectées et lancées dans le contexte des valeurs de séparateur actuelles.

Une autre situation est la réalisation d'une configuration typique pour un client spécifique lors de sa mise en œuvre. Ou des améliorations de la configuration standard, qui sont réalisées par les informaticiens du client eux-mêmes. Si toutes ces améliorations sont apportées à l'extension, la configuration typique restera entièrement prise en charge, ce qui simplifiera grandement sa maintenance ultérieure.

Il est tentant d'utiliser des extensions pour créer des solutions d'applications répliquées, mais vous ne devez pas le faire. Premièrement, parce que les extensions n’ont pas été conçues pour de telles tâches. Et deuxièmement, parce que les autres mécanismes de la plateforme, tels que les mécanismes de livraison et de support, ne connaissent rien aux extensions.

Si vous regardez un peu l’histoire de l’émergence des extensions, alors, bien sûr, nous avons vu auparavant, et nous voyons maintenant, que les configurations deviennent plus complexes. Nous voyons qu’un support supplémentaire est nécessaire à différents niveaux de développement : bibliothèque, modulaire et industrie, etc. Nous avons analysé toutes ces tâches et sommes arrivés à la conclusion que la priorité absolue à l'heure actuelle est l'adaptation des configurations aux souhaits des utilisateurs lors de la mise en œuvre.

C'est pour cette tâche que nous avons créé le mécanisme d'extension. Bien sûr, vous pouvez y remarquer différentes caractéristiques des autres domaines de développement répertoriés. Mais ils ne constituent pas son objectif principal et ne doivent pas vous dérouter.

Que peut-on déjà changer à l’aide d’extensions ?

Jusqu’à présent, peu de choses ont été faites par rapport à ce qui est prévu. Bien entendu, le mécanisme va évoluer. Mais ce qui a déjà été fait peut être utile dans de nombreux cas dans les implémentations. Maintenant:

  • Peut être changé formulaires gérés, existant dans une configuration typique ;
  • Vous pouvez ajouter de nouveaux sous-systèmes. Vous pouvez modifier la composition des sous-systèmes disponibles dans une configuration typique ;
  • Peut être changé les rôles une configuration typique en leur ajoutant des objets créés dans l'extension ;
  • Peut être changé interface de commande configuration typique (partition principale, sous-systèmes) ;
  • Vous pouvez ajouter de nouveaux rapports Et traitement.

À l'avenir, nous prévoyons d'augmenter progressivement les fonctionnalités des extensions et serons heureux de connaître votre avis sur les fonctionnalités les plus demandées pour les implémentations avec des modifications mineures.

Comment est structurée l’extension ?

L'extension est très similaire à la configuration normale. Il est également représenté sous la forme d'un arbre d'objets. Pour travailler avec l'extension, les mêmes méthodes de travail sont utilisées qu'avec la configuration habituelle.

Une caractéristique importante de l'extension est la présence objets empruntés. Vous pouvez emprunter n'importe quel objet d'une configuration typique à l'aide de la commande du menu contextuel :

Les objets empruntés ne sont pas toujours nécessaires. La meilleure façon d’expliquer cela est de prendre l’exemple du « ménage », si l’on fait une analogie avec un déjeuner au restaurant.

La première situation est celle où des objets empruntés sont nécessaires.

Vous avez l'habitude de déjeuner dans le même restaurant. Vous commandez toujours du steak et du thé. Par exemple parce qu’ils sont très bons dans ce restaurant. Ou pour une autre raison. Cela n'a pas d'importance. La seule chose importante est que vous les mangiez, et rien d'autre.

Ensuite, le restaurant est une base d'informations typique. Vous êtes une extension. La carte du restaurant est une configuration standard extensible. Le steak et le thé sont des objets empruntés. Vous les avez empruntés (n'oubliez pas qu'ils sont au menu).

Comment l'extension se connecte-t-elle à la configuration et fonctionne-t-elle ? Vous allez au restaurant et demandez un menu. Au menu, vous voyez qu'il y a un steak et du thé. C'est-à-dire que vous établissez une correspondance entre les objets empruntés et les objets d'une configuration typique. Naturellement, vous correspondez par votre nom :). Ils vous apportent un steak et du thé, vous les mangez. Autrement dit, l'extension est connectée et fonctionne.

Une semaine plus tard vous venez, mais la carte du restaurant a changé (la configuration standard a été mise à jour). Cependant, le menu comprend toujours du steak et du thé. Ils sont exactement ce dont vous avez besoin. Ils vous les apportent, vous les mangez. Autrement dit, l'extension continue de fonctionner avec la configuration typique mise à jour.

Une semaine plus tard, vous arrivez dans un restaurant et constatez que le steak et le thé ont disparu de la carte. Vous vous levez et partez (message d'erreur de connexion au poste). Parce que tu les voulais. Et vous n'avez aucune idée des autres plats (objets). Le développeur ne vous a pas appris à bien manger des escargots ou des homards.

Encore une situation où l’on peut se passer d’objets empruntés.

Vous allez au restaurant, mais la disponibilité de plats spécifiques ne vous intéresse pas. Parce que tu ne vas pas les manger de toute façon. Vous voulez seulement les photographier. Et vous savez photographier n'importe quel plat. Ensuite, vous vous connectez simplement à la configuration et dites d'apporter toutes les collations que vous avez au menu (récupérez la collection de documents à partir des métadonnées). Je vais les envoyer (prendre des photos).

Si vous décrivez cela dans le langage sec des développeurs, il s'avère que vous devez emprunter des objets :

  • Lorsqu’ils sont nécessaires à la conception visuelle. Par exemple, vous étendez un formulaire et ajoutez des accessoires de formulaire tels que RéférenceCurrency.Link. Alors bien sûr, vous devriez emprunter un manuel Devises, de sorte que lors de la connexion à une configuration typique, vous puissiez être sûr qu'un tel répertoire existe toujours.
  • Quand ils sont nécessaires au fonctionnement du code. Par exemple, dans le code d'extension, vous faites référence à l'attribut référence Nomenclature - Importateur. Ensuite cet attribut doit également être emprunté afin d'être sûr lors de la connexion que dans la configuration typique un tel attribut existe toujours dans l'annuaire Nomenclature.

Connecter une extension

Vous créez une extension dans le configurateur. Une fois débogué et testé, vous pouvez le rejeter en enregistrant l'extension dans un fichier *.cfe.

Vous pouvez envoyer ce fichier au client. Le client le téléchargera indépendamment sur son infobase en mode 1C:Entreprise à l'aide de la fonction standard Gestion des extensions de configuration.

Travailler avec des extensions est disponible à partir du langage intégré, donc dans la solution appliquée, vous pouvez créer votre propre traitement qui chargera les extensions. Pour empêcher tout le monde de « jouer » avec les extensions, nous avons ajouté un nouveau droit : Administration des extensions de configuration.

Lors du chargement d'une extension à partir d'un fichier, celle-ci est stockée dans l'infobase. De plus, il est enregistré dans le contexte des valeurs actuelles des séparateurs utilisés dans cette session.

Pour que l'extension "fonctionne", la session doit être redémarrée. Au début de la session, juste avant l'appel de l'événement SettingSessionParameters, toutes les extensions stockées dans l'infobase et correspondant aux valeurs actuelles du délimiteur de session seront incluses.

Par conséquent, lorsque vous travaillez en mode partage de données, l'extension ne sera appliquée qu'aux utilisateurs de cet abonné particulier. Et si la séparation des données n'est pas utilisée, l'extension fonctionnera pour tous les utilisateurs de l'infobase.

Lors de la connexion d'une extension, comme nous l'avons déjà dit, il est contrôlé qu'il y a des objets empruntés dans une configuration typique. Les objets sont mis en correspondance par leur nom.

De plus, un contrôle plus fin est également possible. Vous pouvez contrôler non seulement l'existence même des objets, mais également l'état de leurs propriétés individuelles. Autrement dit, si vous pensez à un restaurant et à un steak, cela peut être important pour vous non seulement la présence d'un steak cuit d'une manière ou d'une autre, mais précisément le fait qu'ici il est cuit cru, « avec du sang ».

Pour en revenir à l'extension, par défaut elle ne contrôle pas les propriétés des objets empruntés. Mais si vous en avez besoin, vous pouvez rendre certaines propriétés contrôlables. Par exemple, il est important pour votre algorithme qu'il n'y ait pas seulement un répertoire Nomenclature, mais aussi que son code est de type Doubler.

Ensuite si dans une configuration typique le fournisseur change le type de code de ce répertoire en Nombre, votre extension le détectera au moment de la connexion et signalera une erreur.

Un point intéressant est lié au renommage des objets de configuration typiques. Par exemple, vous êtes venu dans un restaurant, et au lieu du menu Steakécrit Steak. Autrement dit, lors de la connexion à la configuration, l'extension n'y trouve pas de répertoire. Nomenclature, car le fournisseur l'a renommé Marchandises.

Désormais, cette situation ne vous pose plus de problème. Et vous n'avez pas besoin de « pelleter » tout le code d'extension pour qu'au lieu de Nomenclatureécrire Marchandises. Fonctionne et. Il vous suffit donc de changer le nom de l'objet emprunté en Marchandises, et la plateforme effectuera le reste des modifications dans l’extension elle-même. Ou avec votre aide minimale.

Travaux d'agrandissement

Vous pouvez parler longtemps des caractéristiques de l'extension de différents objets, des caractéristiques du travail des extensions elles-mêmes. Mais nous sommes limités par la portée de cet article de synthèse, nous n'aborderons donc que les points clés et les plus révélateurs.

Le principal "charme" des extensions n'est bien sûr pas que vous puissiez ajouter quelque chose à la configuration typique qui n'y figure pas. Et le fait que dans l'extension, vous pouvez modifier ce qui est déjà dans la configuration typique. Autrement dit, vous pouvez modifier les propriétés des objets empruntés.

Le concept de base utilisé lorsque la configuration et l'extension fonctionnent ensemble peut être décrit comme suit. Aux endroits où ils « ne se croisent pas », l'extension complète la configuration. Aux endroits où ils "se croisent" - l'extension est appliquée.

Vous pouvez voir cela plus en détail sur l’exemple des formulaires gérés. Vous pouvez emprunter un formulaire à la configuration principale et le modifier dans l'extension sans restrictions. Pour la partie visuelle du formulaire et pour son module, deux stratégies de fusion différentes sont utilisées.

La partie visuelle du formulaire est fixée dans l'extension au moment de son emprunt. Et en mode 1C:Entreprise, pour chaque élément du formulaire, les modifications sont analysées par rapport à cet état dans la configuration standard et dans l'extension.

S'il n'y a eu aucun changement ou s'il s'agit uniquement de la configuration typique, la valeur de la configuration typique est appliquée. Sinon, la valeur de l'extension est utilisée.

Ainsi, si vous avez ajouté une nouvelle commande au formulaire dans l'extension, vous la verrez avec le reste des commandes du formulaire. Et si vous avez modifié le titre d'un groupe existant, vous verrez votre titre même si le fournisseur modifie le titre de ce groupe dans une configuration typique.

Les modules de formulaire adoptent une approche différente. Pour un formulaire emprunté, l'extension crée son propre module avec ses propres gestionnaires pour tous les événements. En mode 1C:Enterprise, les deux modules de formulaire (de la configuration standard et de l'extension) sont combinés dans un seul contexte. Pour cette raison, chaque extension possède son propre préfixe, qui est ajouté aux gestionnaires de tous les événements du module de formulaire. Pour qu'il n'y ait aucune correspondance avec les gestionnaires de la configuration typique. Après cela, les gestionnaires d’événements et de commandes sont appelés de manière séquentielle et synchrone. Tout d’abord, le gestionnaire de l’extension. Puis à partir de la configuration typique. Vous pouvez modifier cette séquence ou interdire complètement l'exécution du gestionnaire à partir de la configuration typique.

De manière générale, en ce qui concerne le travail conjoint de configuration et d'extension en mode 1C:Entreprise, ils existent dans un espace de noms commun. Cela s'applique non seulement aux modules individuels, mais également aux arborescences de métadonnées elles-mêmes. Il n'y a donc aucun moyen en mode 1C:Entreprise de déterminer si cet objet est « natif » pour une configuration type, ou s'il provient d'une extension.

Quant au reste des objets que vous pouvez utiliser dans l’extension, tout semble beaucoup plus simple pour eux.

Dans l'extension, vous pouvez créer vos propres sous-systèmes. A l'aide d'objets empruntés, vous pouvez étendre des sous-systèmes existants : ajoutez-y des objets et sous-systèmes qui sont déjà dans la configuration standard, ou ceux que vous avez créés dans l'extension. Vous ne pouvez pas supprimer quelque chose d'un sous-système existant.

Vous ne pouvez étendre les rôles qu'en leur ajoutant des objets créés dans l'extension. Vous ne pouvez pas non plus supprimer quoi que ce soit d'un rôle existant. La même chose s'applique à l'interface de commande.

Une extension est presque une configuration

Nous disions au début qu'une extension s'apparente à une configuration normale. Par conséquent, en conclusion, je voudrais dire quelques mots sur la manière dont les extensions sont intégrées aux autres mécanismes de la plateforme.

Une extension (comme une configuration normale) a une configuration principale et une configuration de base de données. Le mécanisme de comparaison et de fusion des configurations fonctionne avec les extensions de la même manière qu'avec les configurations classiques.

Vous pouvez décharger l'extension dans un fichier (toutefois, avec une extension *.cfe différente) et la charger à partir d'un fichier. Les extensions peuvent être déchargées/chargées en XML.

Les mécanismes de recherche globale, de remplacement et d'édition des textes d'interface fonctionnent également avec les extensions.

Il existe de nouvelles options de ligne de commande pour travailler avec des extensions, ainsi que de nouveaux événements dans le journal.

Dans le langage intégré, l'objet principal pour travailler avec des extensions est Configuration du gestionnaire d'extensions.

Dans cet article, je propose de réfléchir à ce qu'est une « extension de configuration », comment ajouter une extension ou la désactiver. À partir de la version 1C Le 8.3.6.1977, un nouveau mécanisme a été introduit dans la plate-forme : les extensions de configuration. Tout d’abord, un peu de théorie.

Les extensions dans 1C ressemblent à des configurations parallèles qui sont automatiquement fusionnées avec la configuration principale du fournisseur. De plus, dans les extensions, vous pouvez à la fois ajouter vos propres objets et emprunter des objets à la configuration principale.

A quoi servent les extensions ?

Tout d'abord, des extensions sont créées pour faciliter la modification du programme. Autrement dit, si les utilisateurs demandent à ajouter des fonctionnalités, alors avant l'avènement des extensions, les programmeurs devaient supprimer la configuration du support complet et modifier la configuration typique.

La suppression du support complet entraîne un certain nombre d'inconvénients :

  • la possibilité de mise à jour automatique disparaît, ce qui entraîne au moins une augmentation du délai de mise à jour ;
  • un spécialiste hautement qualifié au service du programme est requis ;
  • si des modifications ont été apportées aux objets standard d'une configuration typique, elles peuvent disparaître lors de la mise à jour, c'est-à-dire qu'elles peuvent être à nouveau remplacées par des objets standard du fournisseur.

Lors de l'utilisation d'extensions, lors des modifications, le programmeur ne touchera pas à la configuration standard. Toutes les modifications seront apportées à l'aide d'extensions qui (comme je l'ai écrit ci-dessus) sont également des configurations. Ainsi, la configuration principale restera avec un support complet.

Après la mise à jour de la configuration principale, s'il y a des modifications dans la nouvelle version avec un objet qui a été précédemment modifié par l'extension, les modifications seront toujours prises en compte dans l'extension. Autrement dit, les extensions ont priorité sur la configuration principale.

Vidéo - extensions en 1C en 45 minutes

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

Un exemple d'ajout d'une extension à 1C

Pour montrer ce qu'est une extension, mieux vaut donner un exemple de sa création dans le configurateur 1C.

Dans le configurateur, allez dans le menu "Configuration" et sélectionnez la rubrique "Extensions de configuration". Une fenêtre s'ouvrira avec une liste d'extensions (le cas échéant). Cliquez sur le bouton "Ajouter" et ajoutez une nouvelle extension. Vous pouvez maintenant ouvrir la configuration de l'extension :

Comme vous pouvez le constater, la configuration de l’extension a exactement la même structure que la configuration principale. Seulement, il est au départ complètement pur, sans objets.

J'ai récemment écrit un article sur la façon de créer le vôtre. En utilisant son exemple, je souhaite le rendre en ligne à l'aide d'une extension.

En traitement, j'ai un champ avec un lien vers le répertoire "Organisations". C'est pourquoi j'ai besoin de ce guide. Mais nous ne créerons pas de nouvel annuaire des Organisations, d’autant que la plateforme ne le permettra pas. Vous ne pouvez pas avoir d'objets dans la configuration d'extension portant le même nom que les objets de la configuration principale.

Nous emprunterons donc le répertoire à la configuration principale :

Nous allons maintenant faire un clic droit sur "Traitement" et sélectionner "Insérer un traitement externe, rapport..." Ainsi, nous ajouterons un nouveau traitement à la configuration de l'extension. Si vous utilisez mon traitement, renommez-le immédiatement, car la configuration principale possède déjà un traitement portant ce nom.

Eh bien, la touche finale. Je souhaite que mon traitement soit reflété dans le menu "Administration". Pour ce faire, nous emprunterons le sous-système de la configuration principale du même nom. N'oubliez pas d'indiquer dans le traitement qu'il appartient à ce sous-système.

Voici la structure que j'ai obtenue :

Voyons ce que nous avons. Nous mettons à jour la configuration de la base de données et exécutons le programme en 1C : mode Entreprise, puis allons dans le menu "Administration". Oui, j'ai failli oublier, la configuration de l'extension doit être fermée, sinon le programme ne démarrera pas :

Nous avons publié une nouvelle version du panneau de téléphonie pour 1C.

  • version 1.2.24.10 Pour ordinaire applications
  • version 1.4.26.17 Pour géré applications

Dans la version finale d'une application gérée, il est devenu possible d'embarquer un panneau de téléphonie avec modifications minimes configuration de base avec mécanisme d'expansion configuration.

Avantages de l'utilisation de l'extension

L'extension est très similaire à la configuration normale. Pour travailler avec, les mêmes méthodes de travail sont utilisées qu'avec la configuration habituelle. Les extensions sont créées principalement pour faciliter la modification du programme. Désormais, vous n'avez plus besoin d'insérer des "morceaux de code" dans certains modules et d'ajouter de nouveaux objets de métadonnées, ajoutez simplement une extension à la configuration.

Le grand avantage de l’utilisation d’extensions est mise à jour automatique configuration principale. Il n'est désormais plus nécessaire de modifier les paramètres de prise en charge pour une configuration typique.

Caractéristiques de l'intégration d'un panneau de téléphonie pour 1C

De telles fonctionnalités sont devenues disponibles pour les extensions de la plateforme, à partir de la version 8.3.9.1818 . Par conséquent, pour en profiter, nous avons désactivé le mode de compatibilité de l'extension, puisque la version 8.3.9 pas encore pris en charge. En conséquence, il devient nécessaire de désactiver le mode de compatibilité pour la configuration principale, sinon une erreur se produira : " Le mode de compatibilité de l'extension de configuration est supérieur au mode de compatibilité de la configuration principale".

2) Dans la configuration principale, on ajoute le rôle MIKO_Softphone, pour lequel nous supprimons tous les droits.

Lors de l'ajout d'un nouvel objet de métadonnées, en l'occurrence un rôle, il est nécessaire de mettre à jour le répertoire Identificateurs d'objets de métadonnées. Lorsque nous avons ajouté ce rôle à l'extension, les configurations typiques l'ont ignoré, c'est-à-dire que lors de la mise à jour du répertoire MetadataObjectIdentifiers, le rôle n'y figurait pas. De ce fait, le mécanisme de profil des paramètres du panneau de téléphonie n'a pas fonctionné correctement, une erreur s'est produite : " Identificateur d'objet de métadonnées introuvable pour le rôle MIKO_Softphone".

De plus, cette situation ne s’est pas produite dans toutes les configurations, comme dans "Gestion commerciale, 11.2.3.218" Et "Automatisation intégrée, 2.0.3.222" il n'y a eu aucun problème avec le rôle lorsqu'il a été ajouté à l'extension elle-même. Pour apporter une certaine polyvalence à notre solution et garantir un fonctionnement fluide dans la plupart des configurations que nous prenons en charge, nous avons décidé d'ajouter le rôle MIKO_softphone dans la configuration principale et empruntez-le dans l'extension, puis implémentez les paramètres pour ce rôle dans l'extension.

Une caractéristique très importante est le fait que si une fois que vous avez intégré notre extension, vous souhaitez intégrer le panneau selon nos anciennes instructions, vous devez désactiver l'extension et supprimer le rôle MIKO_softphone. Si vous souhaitez réutiliser l'extension, vous devez d'abord ajouter le rôle, puis ajouter l'extension.

Résumer

Même en incluant la possibilité de modifier la configuration principale et d'apporter des modifications minimes à la configuration, nous avons rendu le processus d'intégration d'un panneau téléphonique beaucoup plus facile. Désormais, vous n'avez plus besoin de modifier les modules de l'application gérée, d'ajouter des traitements et des sous-systèmes à la configuration ou de configurer des rôles. L'extension fera tout cela pour vous ! Nous continuerons d'améliorer le processus d'intégration d'un panneau de téléphonie pour 1C !

Les instructions pour intégrer un panneau téléphonique pour 1C à l'aide du mécanisme d'extension se trouvent.

Posez vos questions via le formulaire de commentaires.

© 2019. MIKO LLC Tous droits réservés.

Vous avez aimé l'article ? Partager avec des amis: