Heim / Internet / Beheben von Problemen bei der Registrierung externer Komponenten im Terminal. Das Lösen von Problemen mit der Registrierung externer Komponenten in der 1c-Eeiner externen Komponente ist nicht abgeschlossen

Beheben von Problemen bei der Registrierung externer Komponenten im Terminal. Das Lösen von Problemen mit der Registrierung externer Komponenten in der 1c-Eeiner externen Komponente ist nicht abgeschlossen

Frage: Installieren einer externen Komponente


Bitte sagen Sie mir, wie man eine externe Komponente installiert. Beim Ausführen des folgenden Codes wird ein Fehler ausgegeben. Suchen Sie im Layout nach NameDecl.dll

Versuch, SetExternalComponent("GeneralLayout.Layout"); Ausnahme EndTry ;
Fehler: Plugin-Installation fehlgeschlagen!

Antworten: ()
ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) gibt FALSE zurück,
New("AddIn.NameDecl.CNameDecl", Undefined) = (()): Typ nicht definiert (AddIn.NameDecl.NameDecl)

Frage: Anschließen einer externen Komponente in 1s 8.3.6 und Win8


Es ist notwendig, die vk_rs232.dll ExternalComponent mit der selbst geschriebenen Konfiguration zu verbinden. Wie über regsvr32.exe registriert. "Es scheint", weil ich eine Meldung erhalten habe, dass "die Komponente registriert ist, aber etwas mit der Firewall nicht stimmt". Ausgehend von der ersten Hälfte der Nachricht schreibe ich den Code in Einsen
AfterConnection = New NotificationDescription("AfterConnectionVK",ThisForm); StartExternalComponentInstallation(,"C:\Controller\vk_rs232.dll"); StartConnectingExternalComponent(AfterConnecting,"C:\Controller\vk_rs232.dll","DLL_Scale");
und ich bekomme den Fehler, dass
"Installation der externen Komponente fehlgeschlagen! Möglicherweise fehlt die Komponente für die von Ihnen verwendete Client-Anwendung!".

Und jetzt verstehe ich nicht
1. Eventuell ist die Komponente nicht in der Registry registriert - wie kann ich das dort überprüfen?
2. Vielleicht funktioniert seine "Version" nicht unter Win8, obwohl ich es 32-Bit habe.
3. Vielleicht ist 1s selbst zu neu, d.h. kann dementsprechend nicht mit dieser dll arbeiten?
4. Nun, es ist banal - ich schreibe etwas falsch.

Antworten: Und all das führte mich zu nächstes Problem. VneshComp installiert, jetzt müssen Sie es verbinden. Und hier sind beide Optionen.
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Waagen")
ConnectExternalComponent("GeneralLayout.Layout","Scale")

gib FALSCH aus!!!

Frage: Externe Komponente.dll


Guten Tag allerseits.
Eine Frage.
dll-Komponente, die in 1C 7.7 einwandfrei funktioniert
in 1s 8.1 will überhaupt nicht booten ...
Habe es versucht und in C:\Program Files\1cv81\bin\cache1c.dll eingefügt
Ich habe versucht, mich mit regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll" zu registrieren
Registriert ohne Probleme.
Wenn ich versuche, darauf zuzugreifen, erhalte ich eine Fehlermeldung:

Fehler beim Laden der externen Komponente! cache1c.dll
Prozedur Ausführen ButtonClick(Button) Versuch externe Komponente zu laden( "C:\Programme\1cv81\bin\cache1c.dll"); Ausnahmebericht( "Fehler beim Laden der externen Komponente!"+ "cache1c.dll"); Ende des Versuchs; Versuch // Komponentenobjekt abrufen. // m = Neu ("cache1c.GTMcmd" ); m = Neues COMObject("cache1c.GTMcmd" ); Ausnahmebericht(); Ende des Versuchs; EndProzedur

Antworten: Banal bis zur Unmöglichkeit...
Es ist notwendig, Pausen zwischen Anrufen (Millisekunden) aufrechtzuerhalten...
Prozedur ButtonExecuteClick(Button) Attempt // Ruft das Komponentenobjekt ab. m = Neues COMObject("cache1c.GTMcmd" ); Ausnahmebericht( "Externes Komponentenobjekt konnte nicht erstellt werden"); Ende des Versuchs; m.RemoteHost = "192.168.1.101" ; m.RemotePort = 6330; m.Connect(); m.Pause(100); ...... usw
Für 1s 7.7 - dies ist nicht erforderlich, es stellt sich heraus, dass die Zirkulation schneller ist.

Frage: Externe native API-Komponente in C++ für Linux (Ubuntu x64) auf 1C 8.3


Ich schreibe VK, ich kann keine Verbindung zu 1s auf Ubuntu herstellen. Auch das Beispiel von 1s ist nicht verbunden. Also eine Frage dazu:

1) Ich versuche, VK aus dem im Artikel angegebenen VNCOMPS-Beispiel zu verbinden

(den Link finden Sie ganz am Ende: "Kopieren").
Intern hat das NativeApi-Projekt ein Makefile. Damit baue ich die .so-Bibliothek auf Ununtu.
Aber bei "Connect the External Component" 1 hebt ab.
Ebenso, wenn ich mit "build.sh" (im Stammverzeichnis des Projekts) baue.

Im Makefile selbst ändere ich das Flag von m32 auf m64, weil 1c und das x64-System selbst. (Mit dem m32-Parameter wird es sowieso nicht abgeholt)
Hier ist ein Beispiel für den Aufruf von VK von 1C 8.3:
ConnectionDone = Schließen Sie eine externe Komponente an("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native); Es gibt einen Artikel nur zu diesem Thema.
Aber, soweit ich sehen kann, wurden alle diese Punkte bereits im VNCOMPS-Beispiel berücksichtigt und korrigiert.

Aber eigentlich geht es um die Parameter der Zusammenstellung. Die externe 32-Bit-MB-Komponente verbindet sich normalerweise mit 32-Bit 1c, aber ich habe sie auf Ubuntu x64 1c enterprise83 8.3.5-1486 amd64 bereitgestellt. Und ich möchte VK zu ihr abholen.

Hat jemand eine Idee, wie man dieses Problem lösen kann?
Das VNCOMPS-Beispiel sollte funktionieren, aber die Build-Parameter müssen korrigiert werden, oder die Plattform selbst, auf der ich teste, ist falsch.

Antworten: Ist es interessanterweise möglich, eine externe Komponente in Java zu schreiben?

Frage: Die Arbeit einer externen Komponente mit dem 1C-Server ...


Guten Tag,

Es gibt eine in C++ geschriebene externe Komponente, deren Aufgabe es ist, Informationen von zu erhalten externe Basis Daten und geben das Abfrageergebnis in Form einer Wertetabelle in 1C zurück.
Um im aktuellen Moment eine Wertetabelle zu bilden, wird die Schnittstelle IDispatch* pBackConnection verwendet, die als Parameter in der Funktion Init() empfangen wird. Außerdem bilde ich einfach mit den 1C-Funktionen eine Wertetabelle, fülle sie aus und gebe sie an den zweiten Parameter in CallAsFunc (...) zurück.
Probleme begannen mit dem Übergang zu Thin-Clients 1C. Serverseitig startet die externe Komponente nicht wirklich. Sie können es auf der Clientseite ausführen, aber es sieht alles wie Krücken aus und fällt aus der allgemeinen "Client-Server" -Logik in 1C heraus. Beispielsweise versteht der Client nicht, was eine Wertetabelle ist, Probleme mit "globalen" Variablen, Sitzungen usw.
NativeAPI ist in dieser Hinsicht noch stärker verkürzt.
Das Tanzen mit einem Tamburin führte dazu, dass ich eine externe Komponente unter dem 1C-Server starten konnte, ABER die Arbeit passiert, bis versucht wird, Invoke auf pBackConnection aufzurufen. Die 64-Bit-Version des 8.2-Servers versucht etwas zu tun, bis es aufgrund eines Timeouts fehlschlägt, die 32-Bit-Version (natürlich ist VC auch 32-Bit) fällt einfach sofort ab.
Ich gehe davon aus, dass der 1C-Server diese Betriebsart nicht bedient.
Dementsprechend stellen sich Fragen, ist es vorübergehend oder reduziert sich die Logik von 1C auf die Abschaffung dieses Arbeitsschemas? Wenn es unmöglich ist, interne 1C-Strukturen (Wertetabelle) auf diese Weise zu erstellen, gibt es im Prinzip eine Beschreibung, was eine Wertetabelle auf Systemebene ist, um zu versuchen, sie in C ++ zu erstellen , füllen Sie es aus und geben Sie dann einfach 1C als Rückgabeparameter ein? Ich möchte zumindest eine Richtung bekommen, in die ich graben muss.

Vielen Dank.

Antworten:

Du schreibst das eine und meinst das andere.
In der 1C-Umgebung ist das Deklarieren von Variablen, die in verschiedenen Sitzungen sichtbar sind, jetzt nicht unmöglich und war vorher nicht möglich. Eine andere Sitzung ist ein physikalisch anderer Prozess.
Sitzung ist eine Datenbankverbindungssitzung, d. h. Benutzersitzung. Oder setzen Sie etwas Eigenes und dieses Konzept um?

Innerhalb einer Sitzung war es möglich, und es ist jetzt möglich, Variablen im Sitzungsmodul zu deklarieren, die innerhalb der Sitzung von verschiedenen Stellen leben und sichtbar sein werden ... eigentlich gibt es 4 davon.
- Sitzungsmodul;
- Reguläres Bewerbungsmodul;
- Verwaltetes Anwendungsmodul;
- Externes Anschlussmodul.

Und natürlich müssen Sie sich an den Kontext erinnern. Der Serverkontext ist auf der Clientseite nicht direkt zugänglich und umgekehrt.

Im Allgemeinen sieht die 1C-Architektur vor, dass der Datenaustausch fortgesetzt wird:
- durch Parameter/Rückgaben von Prozeduren/Funktionen;
- mittels der sogenannten Session-Parameter (das können keine Objekte sein, man kann es tatsächlich in der Palette sehen).

Die Tabelle auf dem Formular... und sie ist mit irgendeiner Objekttabelle verbunden (zum Beispiel Verarbeitungen)? oder nicht. Wenn ja, dann ist es auch auf dem Server (&AtServer) verfügbar und dort editierbar....

Und ja, die ValueTable ist clientseitig nicht in UV verfügbar. Nun, 1C hat sich so entschieden.

Nun ja! Hier funktioniert es mit Excel, es funktioniert mit FSO und allem anderen, aber hier funktioniert es nicht. Fehler abfangen und analysieren....

Versuchen
...
eure Aktionen
...
Ausnahme
str = Beschreibungsfehler ();
Ende des Versuchs;

Mit modernen Hardware-Fähigkeiten ist dies überhaupt kein Argument.

Rein Ihre persönliche Meinung. Hat nichts mit der Realität zu tun. In keiner Weise. Ich wiederhole noch einmal, 1C funktioniert hervorragend mit COM. Sowohl mit In-Proc als auch Out-Proc.

Geben Sie den Code ein, den Sie hochladen, und bewerben Sie sich bei VK.

Übrigens, VK ... ist es in Ihrem Fall COM oder Native API?
Wenn COM, dann registrieren Sie es als ... über regsvr32 ... wie "lösen" Sie dann das Bittiefenproblem?

Frage: 1C8 und eine externe Komponente vom Typ Native


Guten Tag.
Es besteht eine Konfiguration von BP 3.0.50.12 und der Wunsch, Wägungen der Firma Scales-Soft mit UniServerAuto zu implementieren.
Die Entwickler haben die Native-Komponente für Windows 32 und 64 kompiliert und mit der maifest-Datei in ein Archiv gelegt. Es gibt auch ein Beispiel für 1C, wie das Gewicht berechnet werden kann. Darin wird mit Hilfe eines Layouts mit binären Daten dieses Archiv angezeigt, wie ich es verstehe. Im Beispiel ist alles in Ordnung: Die Komponente wird eingebaut, angeschlossen, dann wird die Verbindung hergestellt und das Gewicht abgelesen.
Aber sobald Sie beginnen, sich auf 1C zu übertragen, wird das Gewicht nicht gelesen. Es scheint, dass alles einfach geschrieben ist, aber ich verstehe nicht, wo der Rechen ist.
Wer ein wenig Zeit hat - Hilfe, schaut mit einem Auge hin, vielleicht liegt die Lösung an der Oberfläche, aber ich laufe irgendwo am falschen Ort und mache etwas falsch. Ich habe noch nie mit nativer Technologie gearbeitet...

Und im Anhang ist mein Bearbeitungstext

Antworten:

Nun, ich habe Neuigkeiten...
Ich habe gerade angefangen, mir Schritt für Schritt anzusehen, ab wann es anfängt zu scheitern. Dazu habe ich eine leere Datenbank erstellt und mit dem Befehl verarbeitet. Analog zum Beispiel des Anbieters habe ich das Layout auf eine neue conf übertragen - beim zweiten Mal funktioniert es. Diese. Beim ersten Mal nein, beim zweiten Mal ja. Daraus entstand die Überlegung, dass es bei der Verarbeitung noch notwendig wäre, die Verbindung von Bauteil und Objekt nach unterschiedlichen Verfahren zu trennen.
Dann habe ich es mit einer Anlagenverbindung in meine Datenbank übertragen - es funktioniert. Puh, es ist schon gut .... Aber ich möchte es ohne Änderungen an der Konfiguration vornehmen, also lass uns weitermachen

Ich versuche, ein Layout zur Verarbeitung hinzuzufügen. Seine Größe steigt sofort von 10 KB auf 3 MB und es wird eine erhebliche Verlangsamung festgestellt - es passt nicht. Ich fange an, in Richtung Verbindung einer Komponente durch DLL zu graben. Diese. im Grunde dasselbe, wo Sie angefangen haben. Aber hier gibt es ein "ABER": Als ich nach dem Namen der DLL im Ordner des Benutzers suchte, bemerkte ich, dass diese DLL dort liegt, wo (so wie ich es verstehe) die in 1C registrierten DLLs hinzugefügt werden:
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
Dementsprechend ist es nicht erforderlich, den vollständigen Pfad zur DLL zu verwenden, Sie können einfach ihren Namen schreiben:
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

Ich versuche ... schwört auf die Registrierung, gibt aber das Ergebnis des Wiegens zurück. Es stellt sich heraus, dass die DLL bereits registriert ist, was bedeutet, dass Sie sie nur verbinden müssen. Ich entferne es und alles funktioniert.
Ich fasse zusammen:
1. In der Verarbeitung des Wiegens in der Prozedur Beim Öffnen habe ich die Verbindung einer externen Komponente und die Verbindung zum Objekt hinzugefügt.
2. Den Pfad zur DLL habe ich nicht geschrieben, ich habe nur ihren Namen angegeben.

Jetzt sitze ich und denke, wann wurde die DLL in 1C installiert? Zum Zeitpunkt der Softwareinstallation? Wohl kaum... Wo wird diese DLL zum Zeitpunkt der Ausführung der Entwicklerkonfiguration beim Öffnen des Formulars eingestellt? Ich weiß es nicht, aber es kommt mir nahe... Was denkst du?
Und zweitens, wenn an einem neuen Ort dasselbe Terminal installiert werden muss, was muss getan werden, damit alles funktioniert? Die Software komplett installieren, die Konfiguration des Anbieters ausführen, um die Arbeit zu überprüfen, und dann sollte (theoretisch) meine Verarbeitung funktionieren? Etwas kompliziert ... Oder nach der Installation der Software in meiner Verarbeitung InstallExternalComponent einmal ausführen?

Ich würde gerne eure Meinung dazu hören...

Frage: Verschieben eines Teils des Codes in eine externe Komponente


Viele Artikel zum Verarbeitungsschutz beschreiben, dass ein Teil des Codes an eine externe Komponente ausgelagert wird, aber es ist nicht klar, wie der Programmierer in solchen Fällen genau vorgeht.
Jeder, der dies getan hat oder ähnliche Probleme hatte, bitte erklären. einfaches Beispiel das Prinzip selbst. Mit dem Anschluss externer Komponenten scheint alles klar zu sein.

// Ein Beispiel für das Füllen der Wertetabelle TK.Clear(); Anfrage = Neue Anfrage; Abfrage.Text = "AUSWÄHLEN | Nomenklatur Link WIE Nomenklatur |VON | Directory.Nomenclature AS Nomenclature"; QueryResult = Query.Execute(); Sampling = QueryResult.Select(); While Sampling.Next() Loop Str = TK.Add(); FillPropertyValues(Pr, Sampling); EndCycle;
Können Sie anhand dieses Beispiels erklären, welcher Teil des Codes normalerweise herausgenommen wird? Es wäre logisch, den Teil mit der Anfrage herauszunehmen, aber wie können wir dann von der externen Komponente aus auf die Datenbank zugreifen und die Plattform umgehen? Der Text ist sinnlos. Oder nehmen Sie die Bildung des tabellarischen Teils heraus. Bitte teilen Sie Ihre Erfahrungen damit.

Antworten: Und dass das Wort "Inkompatibel" immer das Wort "Schlecht" bedeutet? Ja, es scheint mir, dass, wenn ich meinen Stil „1C: Die schlechteste Programmierung auf dieser Skript-Engine, die in der Natur existiert (übersetzt in eine Literatursprache)!“ nenne. und dann wird es bestimmt diejenigen geben, die sich dieses Biest ansehen wollen. Und es sieht aus wie ein Klassiker: „Ich habe Pasternak nicht gelesen, aber ich bin völlig anderer Meinung!“ :)

Frage: Externe Komponente in Delphi Kann r 1C nicht verbinden


Das Beispielprojekt für externe Komponenten wurde kompiliert

Habe die DLL.
Im System registriert (Regsvr32 testvk.dll)
Jetzt müssen Sie es in 1C verwenden. Dazu habe ich externe Verarbeitung geschrieben und darin:

&BeiKunde
Prozedur Befehl1(Befehl)
path="C:\1\VK Template\TestVK\DLL\testvk.dll";
a=IncludeExternalComponent(PATH);
LoadExternalComponent(Pfad);
ABOUT = Neu ("Addln.TestVK") Frage: Externe Komponenten für 1s 7.7


Guten Tag. Ich schreibe eine Komponente für 1c7.7 in c#, ich verbinde sie mit 1c, alles ist in Ordnung, aber wenn ich Methoden oder Eigenschaften für 1c aufrufen möchte, heißt es „Aggregate-Objektfeld nicht gefunden“, durch den Debugger habe ich es herausgefunden dass die Methoden der ILanguageExtender-Schnittstelle nicht aufgerufen werden, nach der Implementierung der IInitDone-Schnittstelle wird sie erneut als Konstruktorklassenkomponenten bezeichnet. Gemäß der Theorie zum Schreiben einer externen Komponente 1C sollte VK mindestens zwei Schnittstellen implementieren - IInitDone und ILanguageExtender. Ich setze sie um, aber ich verstehe nicht, wo das Problem liegt. Vielleicht hat jemand eine Idee ???

Antworten: Thema geschlossen, Problem gelöst.

Frage: v7: Externe Komponente für 1С7 in C#


Wo kann ich mir ein einfaches Beispiel zum Erstellen einer Komponente für 1C7 in C# ab Visual Studio 2010 ansehen?

Antworten:

Aussehen
Schnelle Erstellung externer Komponenten in C#. Beispiele für globalen Kontext, IAsyncEvent, IExtWndsSupport, WinForms und WPF

/
Entwicklung von Benutzeroberflächen

Installieren externer Komponenten und Plattformerweiterungen

1.1. Die Installation von plattformexternen Komponenten und Erweiterungen muss interaktiv sein. Der Benutzer muss seine eigene Entscheidung über die Installation treffen. Der Installationsdialog sollte anzeigen, wozu die Komponente (Erweiterung) dient und was nicht funktioniert, wenn sie nicht installiert ist.

Zum Beispiel ist es falsch, Konstruktionen der Form zu verwenden

Wenn nicht ConnectExternalComponent(…) Then SetExternalComponent(…)

Es ist richtig, dem Benutzer explizit eine Frage zu stellen:

Sie müssen eine externe Komponente installieren, um weiterarbeiten zu können. Eine externe Komponente ermöglicht es Ihnen, mit Berichten zu arbeiten. Klicken Sie auf „Installieren“, um die Komponente zu installieren. Klicken Sie nach Abschluss der Installation auf Weiter.

  • Der Benutzer hat den Befehl Bericht senden verwendet
  • Diese Konfiguration erfordert die Installation einer externen Komponente.
  • Die Konfiguration prüft, ob die Komponente installiert ist.
  • Wenn die Komponente nicht installiert ist, werden dem Benutzer Informationen angezeigt, dass die Komponente installiert werden muss, um den Bericht zu senden, sowie eine Schaltfläche, die bewirkt, dass die Komponente installiert wird.
  • Der Benutzer klickt auf die Schaltfläche, die Installation wird durchgeführt.
  • Nach der Installation klickt der Benutzer auf die Schaltfläche „Mit dem Senden des Berichts fortfahren“
  • Das Programm sendet weiterhin einen Bericht.

Ein solches Szenario stellt sicher, dass die Komponenten (Erweiterungen) auf allen unterstützten Browsern, einschließlich des Browsers, problemlos installiert werden Feuerfuchs.

2. Die Anwendungslösung muss dem Benutzer Werkzeuge zur Verfügung stellen, um externe Komponenten und Erweiterungen zu jedem Zeitpunkt der Arbeit zu installieren. Daher können sie nicht nur im Zuge der Lösung einer Aufgabe, sondern auch als separate Aktion (aus einem Verwaltungsmodus) installiert werden.

Bei Verwendung in der Konfiguration Bibliotheken von Standardsubsystemen Es ist beabsichtigt, die Erweiterung zum Arbeiten mit Dateien zu installieren Allgemeine Mannschaft InstallExtensionWorkingFiles, die in das persönliche Einstellungsformular des Benutzers eingefügt werden sollte (siehe allgemeines Formular _DemoMySettings in der Demokonfiguration). In gleicher Form wird empfohlen, Befehle zum Installieren externer Komponenten zu platzieren, die der Benutzer möglicherweise während seiner Arbeit benötigt.


Dies liegt an einigen Besonderheiten der globalen Kontextfunktion ConnectExternalComponent() .

Programmierer haben oft Probleme beim Anschließen externer Komponenten (z. B. Treiber kommerzielle Ausrüstung), wenn Benutzer mit 1C arbeiten und über das Terminal eine Verbindung zum Server herstellen.

In diesem Fall sehen Benutzer beispielsweise das folgende Bild:

Während der Arbeit mit lokale Computer Es gibt keine Probleme beim Anschluss externer Komponenten.

Womit ist es verbunden? Dies liegt daran, dass Benutzer, wenn sie über den Terminalserver arbeiten, weniger Rechte haben, als wenn sie auf dem lokalen Computer arbeiten.

Dies ist leicht zu überprüfen, wenn Sie auf den Terminalserver unter gehen Konto mit administrativen Rechten.

Der Grund für diesen Unterschied ist, dass 1C keine externe Komponente in der Registrierung registrieren kann, wenn der Benutzer mit normalen Rechten im Terminal arbeitet, weil normaler Benutzer hat keine Berechtigung, in den Zweig zu schreiben Systemregistrierung HKEY_CLASSES_ROOT.

In Veröffentlichungen zum Thema Anschluss externer Komponenten im Terminal am meisten verschiedene Methoden Lösungen für dieses Problem.

Zum Beispiel diese:

1. Führen Sie 1C zum ersten Mal mit Administratorrechten aus.

Diese Option funktioniert nicht immer. Warum, erkläre ich weiter unten.

2. Geben Sie normalen Benutzern des Terminals das Recht, in den Zweig der Systemregistrierung zu schreiben HKEY_CLASSES_ROOT.

Unzureichend "fortgeschrittene" Benutzer sollten dies nicht tun, da es sonst zu Problemen kommen kann.

3. Mit verschiedenen "Gadgets" registrieren Sie VK im Namen eines Benutzers mit vollen Rechten.

Es ist auch nicht gut zu essen.

Was ist also der beste Weg, um aus dieser Situation herauszukommen?

Ich biete meine Lösung für dieses Problem an. Meiner Meinung nach - einfach und schön.

Bei der Untersuchung dieses Problems fragte ich mich: Warum versucht 1C überhaupt, VK auf einem neuen Weg zu registrieren? Schließlich ist es bereits im System registriert.

Es stellte sich heraus, dass in typischen 1C-Konfigurationen (z. B. „Trade Management“) die folgende Syntax der globalen Kontextmethode ConnectExternalComponent() verwendet wird:

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

Wie Sie sehen können, ist der VK-Treiber über das Layout „DriverATOLScannerBarcode“ des Verzeichnisses „Connected Equipment“ verbunden.

Was passiert dann?

1C speichert die Komponente im temporären Ordner des Benutzers, zum Beispiel „C:\Dokumente und Einstellungen\Benutzer\Lokale Einstellungen\Temp\1032\v8_4_12.tmp“

und versucht, es im Registrierungszweig zu registrieren HKEY_CLASSES_ROOT genau auf diesem Weg.

Auf dem Terminal haben normale Benutzer keine Rechte, diesen Registrierungszweig zu ändern, daher wird die Komponente für sie nicht verbunden.

Jetzt geht es darum, wie man aus dieser Situation herauskommt.

Die globale Kontextmethode ConnectExternalComponent() hat mehrere Syntaxoptionen. Das werden wir verwenden.

Also Schritt für Schritt:

1. Registrieren Sie die externe Komponente mit dem Dienstprogramm regsvr32.exe auf dem Terminalserver im Ordner C:\WINDOWS\SYSTEM32 für ein 32-Bit-Betriebssystem oder im Ordner C:\WINDOWS\SYSWOW64 für ein 64-Bit-Betriebssystem.

2. Verwenden Sie eine von zwei zusätzlichen Syntaxoptionen für die Methode ConnectExternalComponent():

Variante 1:

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

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

Option 2:

ProgID = "AddIn.Scanner45";

Externe Komponente verbinden (ProgID);

DriverObject = Neu (ProgID);

Meiner Meinung nach ist Option 2 vorzuziehen.

Gleichzeitig versucht 1C nicht, den VC entlang eines neuen Pfads in der Registrierung neu zu registrieren, und somit sind alle Probleme gelöst.

Nun, das ist alles. Viel Glück im Job!

[Sie müssen sich registrieren, um den Link anzuzeigen]

Programmierer haben häufig Probleme beim Anschließen externer Komponenten (z. B. Treiber für kommerzielle Geräte), wenn Benutzer mit 1C arbeiten, indem sie über das Terminal eine Verbindung zum Server herstellen.

Dies liegt an einigen Besonderheiten der globalen Kontextfunktion ConnectExternalComponent().

Gleichzeitig sehen Nutzer beispielsweise das in der Ankündigung des Artikels präsentierte Bild.

Während Sie von lokalen Computern aus arbeiten, gibt es keine Probleme beim Anschluss externer Komponenten.

Womit ist es verbunden? Dies liegt daran, dass Benutzer, wenn sie über den Terminalserver arbeiten, weniger Rechte haben, als wenn sie auf dem lokalen Computer arbeiten.

Dies lässt sich leicht überprüfen, wenn Sie sich unter einem Konto mit Administratorrechten am Terminalserver anmelden.

Der Grund für diesen Unterschied ist, dass 1C keine externe Komponente in der Registrierung registrieren kann, wenn der Benutzer mit normalen Rechten im Terminal arbeitet, weil Ein normaler Benutzer hat keine Schreibberechtigung für den Zweig der Systemregistrierung HKEY_CLASSES_ROOT.

In Veröffentlichungen zum Thema Anschluss externer Komponenten im Endgerät werden verschiedene Methoden zur Lösung dieses Problems angeboten.

Zum Beispiel diese:

1. Führen Sie 1C zum ersten Mal mit Administratorrechten aus.

Diese Option funktioniert nicht immer. Warum, erkläre ich weiter unten.

2. Geben Sie normalen Benutzern des Terminals das Recht, in den Zweig der Systemregistrierung zu schreiben HKEY_CLASSES_ROOT.

Unzureichend "fortgeschrittene" Benutzer sollten dies nicht tun, da es sonst zu Problemen kommen kann.

3. Mit verschiedenen "Gadgets" registrieren Sie VK im Namen eines Benutzers mit vollen Rechten.

Es ist auch nicht gut zu essen.

Was ist also der beste Weg, um aus dieser Situation herauszukommen?

Ich biete meine Lösung für dieses Problem an. Meiner Meinung nach - einfach und schön, bisher nicht auf dem Lancer angeboten.

Bei der Untersuchung dieses Problems fragte ich mich: Warum versucht 1C überhaupt, VK auf einem neuen Weg zu registrieren? Schließlich ist es bereits im System registriert.

Es stellte sich heraus, dass in typischen 1C-Konfigurationen (z. B. "Trade Management") die folgende Syntax der globalen Kontextmethode verwendet wird ConnectExternalComponent():

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

Wie Sie sehen können, ist der VK-Treiber über das Layout „DriverATOLScannerBarcode“ des Verzeichnisses „Connected Equipment“ verbunden.

Was passiert dann?

1C speichert die Komponente im temporären Ordner des Benutzers, zum Beispiel „C:\Dokumente und Einstellungen\Benutzer\Lokale Einstellungen\Temp\1032\v8_4_12.tmp“

und versucht, es im HKEY_CLASSES_ROOT-Registrierungszweig entlang dieses Pfads zu registrieren.

Auf dem Terminal haben normale Benutzer keine Rechte, diesen Registrierungszweig zu ändern, daher wird die Komponente für sie nicht verbunden.

Jetzt geht es darum, wie man aus dieser Situation herauskommt.

Globale Kontextmethode ConnectExternalComponent() hat mehrere Syntaxoptionen. Das werden wir verwenden.

Also Schritt für Schritt:

1. Registrieren Sie die externe Komponente mit dem Dienstprogramm regsvr32.exe auf dem Terminalserver im Ordner C:\WINDOWS\SYSTEM32 für ein 32-Bit-Betriebssystem oder im Ordner C:\WINDOWS\SYSWOW64 für ein 64-Bit-Betriebssystem.

2. Verwenden Sie eine von zwei zusätzlichen Syntaxoptionen für die Methode ConnectExternalComponent():

Variante 1:

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

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

Option 2:

ProgID = "AddIn.Scanner45";

Externe Komponente verbinden (ProgID);

DriverObject = Neu (ProgID);

Meiner Meinung nach ist Option 2 vorzuziehen.

Gleichzeitig versucht 1C nicht, den VC entlang eines neuen Pfads in der Registrierung neu zu registrieren, und somit sind alle Probleme gelöst.

Nun, das ist alles. Viel Glück im Job!