Maison / l'Internet / Résoudre les problèmes d'enregistrement des composants externes dans le terminal. La résolution des problèmes d'enregistrement des composants externes dans l'installation du terminal de vente au détail 1c d'un composant externe n'est pas terminée

Résoudre les problèmes d'enregistrement des composants externes dans le terminal. La résolution des problèmes d'enregistrement des composants externes dans l'installation du terminal de vente au détail 1c d'un composant externe n'est pas terminée

Question : Installer un composant externe


Veuillez me dire comment installer un composant externe. Lors de l'exécution du code suivant, une erreur est renvoyée. Trouver NameDecl.dll dans la mise en page

Tentative de SetExternalComponent("GeneralLayout.Layout"); ExceptionEndTry ;
Erreur : L'installation du plug-in a échoué !

Réponse: ()
ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) renvoie FALSE ,
New("AddIn.NameDecl.CNameDecl", Undefined) = (()) : Type non défini (AddIn.NameDecl.NameDecl)

Question : Connecter un composant externe en 1s 8.3.6 et Win8


Il est nécessaire de connecter le vk_rs232.dll ExternalComponent à la configuration auto-écrite. Comme enregistré via regsvr32.exe. "Il semble" parce que j'ai reçu un message indiquant que "le composant est enregistré, mais quelque chose ne va pas avec le pare-feu". En m'appuyant sur la première moitié du message, j'écris le code en 1s
AfterConnection = Nouvelle NotificationDescription("AfterConnectionVK",ThisForm); StartExternalComponentInstallation(,"C:\Controller\vk_rs232.dll"); StartConnectingExternalComponent(AfterConnecting,"C:\Controller\vk_rs232.dll","DLL_Scales");
et j'obtiens l'erreur que
"Échec de l'installation du composant externe ! Le composant de l'application cliente que vous utilisez est peut-être manquant !".

Et maintenant je ne comprends pas
1. Peut-être que le composant n'est pas enregistré dans le registre - comment puis-je le vérifier là-bas ?
2. Peut-être que sa "version" ne fonctionne pas sous Win8, même si je l'ai en 32 bits.
3. Peut-être que 1s lui-même est trop nouveau, c'est-à-dire en conséquence ne peut pas travailler avec cette dll?
4. Eh bien, c'est banal - j'écris quelque chose de mal.

Réponse: Et tout cela m'a conduit à problème suivant. VneshComp installé, vous devez maintenant le connecter. Et voici les deux options.
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Échelles")
ConnectExternalComponent("GeneralLayout.Layout","Echelles")

donner FAUX !!!

Question : External component.dll


Bonne journée tout le monde.
Une question.
composant dll qui fonctionne bien dans 1C 7.7
en 1s 8.1 ne veut pas démarrer du tout ...
J'ai essayé de le coller dans C:\Program Files\1cv81\bin\cache1c.dll
J'ai essayé de m'enregistrer en utilisant regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll"
Inscrit sans problème.
Lorsque j'essaie d'y accéder, j'obtiens un message d'erreur :

Erreur lors du chargement du composant externe ! cache1c.dll
Procédure Exécuter ButtonClick(Button) Tentative de chargement d'un composant externe( "C:\Program Files\1cv81\bin\cache1c.dll"); Rapport d'exception( "Erreur lors du chargement du composant externe !"+ "cache1c.dll"); fin de tentative ; Tentative // ​​Récupère l'objet composant. // m = Nouveau ("cache1c.GTMcmd" ); m = Nouveau COMObject("cache1c.GTMcmd" ); Rapport d'exception(); fin de tentative ; FinProcédure

Réponse: Banal jusqu'à l'impossible...
Il est nécessaire de maintenir des pauses entre les appels (millisecondes)...
Procedure ButtonExecuteClick(Button) Attempt // Récupère l'objet composant. m = Nouveau COMObject("cache1c.GTMcmd" ); Rapport d'exception( "Impossible de créer un objet de composant externe"); fin de tentative ; m.RemoteHost = "192.168.1.101" ; m.RemotePort = 6330 ; m.Connect(); m.Pause(100); ...... etc
Pour 1s 7.7 - ce n'est pas nécessaire, il s'avère que la circulation est plus rapide.

Question : Composant externe Native Api en C++ pour Linux (Ubuntu x64) sur 1C 8.3


J'écris VK, je ne peux pas me connecter aux 1 sur Ubuntu. Même l'exemple de 1s n'est pas connecté. Alors une question à ce sujet :

1) J'essaie de connecter VK à partir de l'exemple VNCOMPS donné dans l'article

(le lien se trouve à la toute fin : "Copie").
En interne, le projet NativeApi a un makefile. Avec lui, je construis la bibliothèque .so sur Ununtu.
Mais à "Connect the External Component" 1 décolle.
De même, si je construis en utilisant "build.sh" (à la racine du projet).

Dans le makefile lui-même, je change le drapeau de m32 à m64, car 1c et le système x64 lui-même. (avec le paramètre m32, il ne capte pas de toute façon)
Voici un exemple d'appel de VK depuis 1C 8.3 :
ConnectionDone = Connecter un composant externe("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native); Il y a un article justement sur ce sujet.
Mais, à ma connaissance, tous ces points ont déjà été pris en compte et corrigés dans l'exemple VNCOMPS.

Mais en fait affaire de paramètres de compilation. Le composant externe MB 32 bits se connecte normalement à 32 bits 1c, mais j'ai déployé sur Ubuntu x64 1c enterprise83 8.3.5-1486 amd64. Et je veux lui rapporter VK.

Est-ce que quelqu'un a une idée de comment résoudre ce problème?
L'exemple VNCOMPS devrait fonctionner, mais les paramètres de construction doivent être corrigés, ou la plate-forme elle-même sur laquelle je teste est incorrecte.

Réponse: Fait intéressant, est-il possible d'écrire un composant externe en Java ?

Question : Le travail d'un composant externe avec le serveur 1C...


Bon après-midi,

Il existe un composant externe écrit en C ++, dont la tâche est de recevoir des informations de embase externe données et renvoyer le résultat de la requête sous la forme d'un tableau de valeurs en 1C.
Pour former une table de valeurs à l'instant courant, on utilise l'interface IDispatch* pBackConnection, qui est reçue en paramètre dans la fonction Init(). De plus, je forme simplement, en utilisant les fonctions 1C, un tableau de valeurs, le remplis et le renvoie au deuxième paramètre dans CallAsFunc (...).
Les problèmes ont commencé avec la transition vers clients légers 1C. Côté serveur, le composant externe ne démarre pas vraiment. Vous pouvez l'exécuter côté client, mais tout cela ressemble à des béquilles et tombe hors de la logique générale "client-serveur" en 1C. Par exemple, le client ne comprend pas ce qu'est un tableau de valeurs, des problèmes avec des variables "globales", des sessions, etc.
NativeAPI est encore plus tronqué à cet égard.
Danser avec un tambourin a conduit au fait que j'ai pu lancer un composant externe sous le serveur 1C, MAIS le travail se produit jusqu'à ce qu'une tentative soit faite pour appeler Invoke sur pBackConnection. La version 64 bits du serveur 8.2 essaie de faire quelque chose jusqu'à ce qu'il tombe sur un délai d'attente, la version 32 bits (VK est naturellement aussi 32 bits) tombe tout de suite.
Je suppose que le serveur 1C ne sert pas ce mode de fonctionnement.
Dès lors, des questions se posent, est-ce temporaire ou la logique de 1C se réduit-elle à l'abolition de ce régime de travail ? S'il est impossible de créer des structures internes de 1C (table de valeurs) de cette manière, existe-t-il, en principe, une description de ce qu'est une table de valeurs au niveau du système afin d'essayer de la créer en C + +, remplissez-le, puis glissez simplement 1C comme paramètre de retour ? Je voudrais au moins avoir une direction dans quelle direction creuser.

Merci.

Réponse:

Vous écrivez une chose et en pensez une autre.
Dans l'environnement 1C, déclarer des variables qui seront visibles dans différentes sessions n'est pas impossible maintenant, et ce n'était pas possible auparavant. Une session différente est un processus physiquement différent.
Session est une session de connexion à la base de données, c'est-à-dire séance utilisateur. Ou mettez-vous quelque chose à vous et ce concept ?

Au sein d'une session, il était possible, et il est possible maintenant, de déclarer des variables dans le module de session, qui vivront et seront visibles dans la session à partir de différents endroits ... en fait, il y en a 4.
-Module de session ;
- Module d'application régulier ;
- Module d'application géré ;
- Module de connexion externe.

Et bien sûr, vous devez vous souvenir du contexte. Le contexte serveur n'est pas directement accessible côté client et inversement.

En général, l'architecture 1C prévoit que l'échange de données se poursuivra :
- au moyen de paramètres/retours de procédures/fonctions ;
- au moyen des soi-disant paramètres de session (ils ne peuvent pas être des objets, vous pouvez en fait le voir dans la palette).

La table sur le formulaire... et elle s'apparente à n'importe quelle table d'objet (traitements, par exemple) ? ou non. Si oui, alors il est également disponible sur le serveur (&AtServer) et modifiez-le ici....

Et oui, la ValueTable n'est pas disponible en UV côté client. Eh bien, 1C en a décidé ainsi.

Allez! Ici ça marche avec Excel, ça marche avec FSO et un tas de tout le reste, mais ici ça ne marche pas. Attrapez l'erreur et analysez....

Tentative
...
vos actions
...
Exception
str = DescriptionErreur();
fin de tentative ;

Avec les capacités matérielles modernes, ce n'est pas du tout un argument.

Purement votre opinion personnelle. N'a rien à voir avec la réalité. En aucun cas. Je le répète encore une fois, 1C fonctionne très bien avec COM. À la fois avec in-proc et out-proc.

Donnez le code que vous téléchargez et appliquez à VK.

Au fait, VK... dans votre cas, est-ce COM ou Native API ?
Si COM, alors vous l'enregistrez comme... via regsvr32... alors comment "résolvez-vous" le problème de profondeur de bits ?

Question : 1C8 et un composant externe de type Native


Bon après-midi.
Il y a une configuration de BP 3.0.50.12 et une volonté d'implémenter le pesage de la société Scales-Soft en utilisant UniServerAuto.
Les développeurs ont compilé le composant natif pour Windows 32 et 64 et l'ont placé dans une archive avec le fichier maifest. Il y a aussi un exemple pour 1C, comment vous pouvez calculer le poids. Dans celui-ci, à l'aide d'une mise en page avec des données binaires, cette archive est indiquée, si je comprends bien. Dans l'exemple, tout va bien : le composant est installé, connecté, puis la connexion est établie et le poids est lu.
Mais dès que vous commencez à vous transférer à 1C, le poids n'est pas lu. Il semble que tout soit simplement écrit, mais je ne comprends pas où est le râteau.
Qui aura un peu de temps - aide, regarde d'un œil, peut-être que la solution est en surface, mais je marche quelque part au mauvais endroit et je fais quelque chose de mal. Je n'ai jamais eu à travailler avec la technologie Native auparavant...

Et dans la pièce jointe est mon texte de traitement

Réponse:

Bon, j'ai des nouvelles...
Je viens de commencer à regarder étape par étape à quel moment cela commence à échouer. Pour ce faire, j'ai créé une base de données vide et le traitement avec la commande. Par analogie avec l'exemple du fournisseur, j'ai transféré la mise en page dans une nouvelle conf - cela fonctionne la deuxième fois. Ceux. la première fois non, mais la deuxième fois oui. Cela a fait naître l'idée qu'il faudrait encore dans son traitement séparer la connexion du composant et de l'objet selon des procédures différentes.
Ensuite, je l'ai transféré dans ma base de données avec une connexion de mise en page - cela fonctionne. Fuh, c'est déjà bien.... Mais je l'aimerais sans faire de modifications de configuration, alors passons à autre chose

J'essaie d'ajouter une mise en page au traitement. Sa taille passe immédiatement de 10kb à 3mb et un ralentissement important est constaté - il ne rentre pas. Je commence à creuser dans le sens de la connexion du composant via dll. Ceux. fondamentalement le même que celui où vous avez commencé. Mais il y a un "MAIS": en cherchant par le nom de la dll dans le dossier de l'utilisateur, j'ai remarqué que cette dll se trouve là où (si je comprends bien) les dll enregistrées dans 1C sont ajoutées:
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
en conséquence, il n'est pas nécessaire d'utiliser le chemin complet vers la dll, vous pouvez simplement écrire son nom :
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

J'essaie... jure à l'inscription, mais renvoie le résultat de la pesée. Il s'avère que la dll est déjà enregistrée, ce qui signifie qu'il vous suffit de la connecter. Je l'enlève et tout fonctionne.
je résume :
1. Dans le traitement de la pesée dans la procédure Lors de l'ouverture, j'ai ajouté la connexion d'un composant externe et la connexion à l'objet.
2. Le chemin vers la dll je n'ai pas écrit, j'ai juste indiqué son nom.

Maintenant, je m'assois et je pense, quand la dll s'est-elle installée dans 1C? Au moment de l'installation du logiciel ? À peine... Lors de l'exécution de la configuration développeur de cette dll, où est-elle définie à l'ouverture du formulaire ? Je ne sais pas, mais ça me semble proche... Qu'en pensez-vous ?
Et deuxièmement, dans un nouveau lieu, lorsqu'il est nécessaire d'installer le même terminal, que faut-il faire pour que tout fonctionne ? Installez complètement le logiciel, lancez la config du fournisseur pour vérifier le travail et ensuite (en théorie) mon traitement devrait fonctionner ? Quelque chose d'un peu compliqué... Ou après avoir installé le logiciel dans mon traitement, faire InstallExternalComponent une fois ?

J'aimerais entendre vos pensées à ce sujet...

Question : Déplacer une partie du code dans un composant externe


De nombreux articles sur la protection du traitement décrivent qu'une partie du code est transférée vers un composant externe, mais on ne sait pas exactement comment le programmeur agit dans de tels cas.
Quiconque a déjà fait cela ou a rencontré des problèmes similaires, veuillez expliquer. exemple simple le principe lui-même. Il semble que tout soit clair avec la connexion des composants externes.

// Un exemple de remplissage du tableau des valeurs TK.Clear(); Demande = Nouvelle demande ; Requête.Texte = "SELECT | Nomenclature Lien COMMENT Nomenclature | Directory.Nomenclature AS Nomenclature" ; QueryResult = Query.Execute(); Sampling = QueryResult.Select(); While Sampling.Next() Loop Str = TK.Add(); FillPropertyValues(Pr, Sampling); EndCycle ;
Pourriez-vous expliquer avec cet exemple quelle partie du code est généralement retirée. Il serait logique de sortir la partie avec la requête, mais alors comment accéder à la base de données depuis le composant externe depuis le composant externe, en contournant la plateforme ? Le texte est inutile. Ou supprimez la formation même de la partie tabulaire. S'il vous plaît partagez votre expérience avec cela.

Réponse: Et que le mot « Incompatible » signifie toujours le mot « Mauvais » ? Oui, il me semble que si j'appelle mon style « 1C : La pire programmation sur ce moteur de script qui existe dans la nature (traduite dans un langage littéraire) ! et puis à coup sûr il y aura ceux qui voudront vérifier cette bête. Et ça ressemble à un classique : "Je n'ai pas lu Pasternak, mais je suis complètement en désaccord avec lui !" :)

Question : Composant externe sur Delphi Impossible de connecter r 1C


Compilation de l'exemple de projet de composant externe

J'ai la DLL.
Enregistré dans le système (Regsvr32 testvk.dll)
Maintenant, vous devez l'utiliser en 1C. Pour ce faire, j'ai écrit external processing et dedans :

&ChezClient
Procédure Commande1(Commande)
path="C:\1\VK Template\TestVK\DLL\testvk.dll" ;
a=IncludeExternalComponent(PATH);
LoadExternalComponent(Path);
À PROPOS = Nouveau ("Addln.TestVK" ); Question : Composants externes pour 1s 7.7


Bonjour. J'écris un composant pour 1c7.7 en c#, je le connecte à 1c tout va bien, mais quand je veux appeler des méthodes ou des propriétés pour 1c, il dit "champ d'objet agrégé introuvable", via le débogueur j'ai découvert que les méthodes de l'interface ILanguageExtender ne sont pas appelées, après l'implémentation de l'interface IInitDone, on l'appelle à nouveau les composants des classes constructeurs, selon la théorie de l'écriture des composants externes 1C, VK devrait implémenter au moins deux interfaces - IInitDone et ILanguageExtender, I les mettre en œuvre, mais je ne comprends pas quel est le problème.Peut-être que quelqu'un a des idées ???

Réponse: Sujet clos, problème résolu.

Question : v7 : composant externe pour 1С7 en C#


Où puis-je regarder un exemple simple pour créer un composant pour 1C7 en C# à partir de Visual studio 2010 ??

Réponse:

Voir
Création rapide de composants externes en C#. Exemples de contexte global, IAsyncEvent, IExtWndsSupport, WinForms et WPF

/
Développement d'interfaces utilisateurs

Installation de composants externes et d'extensions de plate-forme

1.1. L'installation des composants externes de la plateforme et des extensions doit être interactive. L'utilisateur doit prendre sa propre décision concernant l'installation. La boîte de dialogue d'installation doit indiquer à quoi sert le composant (extension) et ce qui ne fonctionnera pas s'il n'est pas installé.

Par exemple, il est faux d'utiliser des constructions de la forme

Sinon ConnectExternalComponent(…) Alors SetExternalComponent(…)

Il est correct de poser explicitement une question à l'utilisateur :

Vous devez installer un composant externe pour continuer à travailler. Un composant externe vous permettra de travailler avec le reporting. Cliquez sur "Installer" pour installer le composant. Une fois l'installation terminée, cliquez sur Continuer.

  • L'utilisateur a utilisé la commande Envoyer le rapport
  • Cette configuration nécessite l'installation d'un composant externe.
  • La configuration vérifie si le composant est installé.
  • Si le composant n'est pas installé, affiche à l'utilisateur les informations indiquant que le composant doit être installé pour envoyer le rapport, ainsi qu'un bouton qui provoque l'installation du composant.
  • L'utilisateur clique sur le bouton, l'installation est effectuée.
  • Après l'installation, l'utilisateur clique sur le bouton "Continuer l'envoi du rapport"
  • Le programme continue d'envoyer un rapport.

Un tel scénario garantira que les composants (extensions) sont installés sans problème sur tous les navigateurs pris en charge, y compris le navigateur Firefox.

2. La solution d'application doit fournir des outils permettant à l'utilisateur d'installer des composants externes et des extensions à tout moment du travail. Ainsi, ils peuvent être installés non seulement au cours de la résolution d'une tâche, mais également en tant qu'action distincte (à partir d'un mode administratif).

Lorsqu'il est utilisé dans la configuration Bibliothèques de sous-systèmes standards installer l'extension pour travailler avec des fichiers est destiné commandement général InstallExtensionWorkingFiles, qu'il est recommandé de placer dans le formulaire de paramètres personnels de l'utilisateur (voir le formulaire général _DemoMySettings dans la configuration de démonstration). Dans le même formulaire, il est recommandé de placer les commandes d'installation des composants externes dont l'utilisateur peut avoir besoin pendant son travail.


Cela est dû à certaines particularités de la fonction contextuelle globale ConnectExternalComponent() .

Souvent, les programmeurs ont des problèmes pour connecter des composants externes (par exemple, des pilotes équipement commercial), lorsque les utilisateurs travaillent avec 1C, se connectant au serveur via le terminal.

Dans ce cas, les utilisateurs voient, par exemple, l'image suivante :

Tout en travaillant avec ordinateurs locaux Il n'y a aucun problème avec la connexion de composants externes.

A quoi est-ce lié ? En effet, lorsque les utilisateurs utilisent Terminal Server, ils disposent de moins de droits que lorsqu'ils travaillent sur l'ordinateur local.

Ceci est facile à vérifier si vous accédez au serveur de terminaux sous Compte avec des droits administratifs.

La raison de cette différence est que 1C ne peut pas enregistrer un composant externe dans le registre lorsque l'utilisateur travaille dans le terminal avec des droits normaux, car l'utilisateur normal n'a pas la permission d'écrire dans la branche registre système HKEY_CLASSES_ROOT.

Dans les publications sur le sujet de la connexion de composants externes dans le terminal, le plus différentes méthodes solutions à ce problème.

Par exemple, ceux-ci :

1. Exécutez 1C pour la première fois avec des droits d'administration.

Cette option ne fonctionne pas toujours. Je vais vous expliquer pourquoi ci-dessous.

2. Donnez aux utilisateurs ordinaires du terminal le droit d'écrire dans la branche de registre du système HKEY_CLASSES_ROOT.

Les utilisateurs insuffisamment "avancés" ne devraient pas le faire, sinon il pourrait y avoir des problèmes.

3. À l'aide de divers "gadgets", enregistrez VK au nom d'un utilisateur disposant de tous les droits.

Ce n'est pas bon à manger non plus.

Alors, quelle est la meilleure façon de sortir de cette situation ?

Je propose ma solution à ce problème. À mon avis - simple et beau.

En enquêtant sur ce problème, je me suis demandé - pourquoi 1C essaie-t-il même d'enregistrer VK le long d'un nouveau chemin ? Après tout, il est déjà enregistré dans le système.

Il s'est avéré que dans les configurations 1C typiques (par exemple, "Trade Management"), la syntaxe suivante de la méthode de contexte globale ConnectExternalComponent() est utilisée :

ConnectExternalComponent("Reference.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");

Comme vous pouvez le voir, le pilote VK est connecté à partir de la disposition "DriverATOLScannerBarcode" du répertoire "Connected Equipment".

Que se passe-t-il alors ?

1C enregistre le composant dans le dossier temporaire de l'utilisateur, par exemple "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

et essaie de l'enregistrer dans la branche de registre HKEY_CLASSES_ROOT exactement le long de ce chemin.

Sur le terminal, les utilisateurs ordinaires n'ont pas le droit de modifier cette branche de registre, le composant n'est donc pas connecté pour eux.

Maintenant, comment sortir de cette situation.

La méthode contextuelle globale ConnectExternalComponent() a plusieurs options de syntaxe. C'est ce que nous allons utiliser.

Alors, étape par étape :

1. Enregistrez le composant externe à l'aide de l'utilitaire regsvr32.exe sur le serveur Terminal Server dans le dossier C:\WINDOWS\SYSTEM32 pour un système d'exploitation 32 bits ou dans le dossier C:\WINDOWS\SYSWOW64 pour un système d'exploitation 64 bits.

2. Utilisez l'une des deux options de syntaxe supplémentaires pour la méthode ConnectExternalComponent() :

Option 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);

DriverObject = New("AddIn.ATOLScanner.Scanner45");

Option 2:

ProgID = "AddIn.Scanner45" ;

Connecter le composant externe (ProgID) ;

DriverObject = Nouveau (ProgID);

À mon avis, l'option #2 est préférable.

Dans le même temps, 1C n'essaie pas de réenregistrer le VC le long d'un nouveau chemin dans le registre, et ainsi, tous les problèmes sont résolus.

Eh bien voilà tout. Bonne chance au travail!

[vous devez vous inscrire pour voir le lien]

Souvent, les programmeurs ont des problèmes pour connecter des composants externes (par exemple, des pilotes d'équipements commerciaux) lorsque les utilisateurs travaillent avec 1C en se connectant au serveur via le terminal.

Cela est dû à certaines particularités de la fonction contextuelle globale ConnectExternalComponent().

Dans le même temps, les utilisateurs voient, par exemple, l'image présentée dans l'annonce de l'article.

Lorsque vous travaillez à partir d'ordinateurs locaux, la connexion de composants externes ne pose aucun problème.

A quoi est-ce lié ? En effet, lorsque les utilisateurs utilisent Terminal Server, ils disposent de moins de droits que lorsqu'ils travaillent sur l'ordinateur local.

Ceci est facile à vérifier si vous vous connectez au serveur Terminal Server sous un compte avec des droits d'administration.

La raison de cette différence est que 1C ne peut pas enregistrer un composant externe dans le registre lorsque l'utilisateur travaille dans le terminal avec des droits normaux, car un utilisateur normal ne dispose pas d'autorisations d'écriture sur la branche de registre du système HKEY_CLASSES_ROOT.

Dans les publications sur le thème de la connexion de composants externes dans le terminal, diverses méthodes pour résoudre ce problème sont proposées.

Par exemple, ceux-ci :

1. Exécutez 1C pour la première fois avec des droits d'administration.

Cette option ne fonctionne pas toujours. Je vais vous expliquer pourquoi ci-dessous.

2. Donnez aux utilisateurs ordinaires du terminal le droit d'écrire dans la branche de registre du système HKEY_CLASSES_ROOT.

Les utilisateurs insuffisamment "avancés" ne devraient pas le faire, sinon il pourrait y avoir des problèmes.

3. À l'aide de divers "gadgets", enregistrez VK au nom d'un utilisateur disposant de tous les droits.

Ce n'est pas bon à manger non plus.

Alors, quelle est la meilleure façon de sortir de cette situation ?

Je propose ma solution à ce problème. À mon avis - simple et beau, jamais proposé auparavant sur la Lancer.

En enquêtant sur ce problème, je me suis demandé - pourquoi 1C essaie-t-il même d'enregistrer VK le long d'un nouveau chemin ? Après tout, il est déjà enregistré dans le système.

Il s'est avéré que dans les configurations 1C typiques (par exemple, "Trade Management"), la syntaxe suivante de la méthode de contexte global est utilisée ConnectExternalComponent():

ConnectExternalComponent("Reference.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");

Comme vous pouvez le voir, le pilote VK est connecté à partir de la disposition "DriverATOLScannerBarcode" du répertoire "Connected Equipment".

Que se passe-t-il alors ?

1C enregistre le composant dans le dossier temporaire de l'utilisateur, par exemple "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

et essaie de l'enregistrer dans la branche de registre HKEY_CLASSES_ROOT exactement le long de ce chemin.

Sur le terminal, les utilisateurs ordinaires n'ont pas le droit de modifier cette branche de registre, le composant n'est donc pas connecté pour eux.

Maintenant, comment sortir de cette situation.

Méthode de contexte global ConnectExternalComponent() a plusieurs options de syntaxe. C'est ce que nous allons utiliser.

Alors, étape par étape :

1. Enregistrez le composant externe à l'aide de l'utilitaire regsvr32.exe sur le serveur Terminal Server dans le dossier C:\WINDOWS\SYSTEM32 pour un système d'exploitation 32 bits ou dans le dossier C:\WINDOWS\SYSWOW64 pour un système d'exploitation 64 bits.

2. Utilisez l'une des deux options de syntaxe supplémentaires pour la méthode ConnectExternalComponent() :

Option 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);

DriverObject = New("AddIn.ATOLScanner.Scanner45");

Option 2:

ProgID = "AddIn.Scanner45" ;

Connecter le composant externe (ProgID) ;

DriverObject = Nouveau (ProgID);

À mon avis, l'option #2 est préférable.

Dans le même temps, 1C n'essaie pas de réenregistrer le VC le long d'un nouveau chemin dans le registre, et ainsi, tous les problèmes sont résolus.

Eh bien voilà tout. Bonne chance au travail!