Adesea, programatorii au probleme cu conectarea componentelor externe (de exemplu, driverele pentru echipamente de cumpărături) atunci când utilizatorii lucrează cu 1C, conectându-se la server prin terminal.
Acest lucru se datorează faptului că unele funcții ale funcției Contextul global se conectează la Componenta externă ().
În acest caz, utilizatorii văd, de exemplu, imaginea prezentată în anunțul articolului.
În timp ce lucrați cu computerele locale, nu există probleme cu conectarea componentelor externe.
Care este motivul pentru aceasta? Acest lucru se datorează faptului că, atunci când utilizatorii lucrează prin serverul terminal, aceștia au mai puține drepturi decât atunci când lucrează la computerul local.
Acest lucru este ușor de verificat dacă accesați serverul de terminal sub un cont cu drepturi administrative.
Motivul pentru această diferență este că 1C nu poate înregistra o componentă externă în registru atunci când utilizatorul lucrează în terminal sub drepturile obișnuite, deoarece un utilizator normal nu are acces de scriere la cheia de registry HKEY_CLASSES_ROOT.
În publicațiile privind conectarea componentelor externe din terminal, se oferă o varietate de metode de rezolvare a acestei probleme.
1. Executați prima dată 1C sub drepturi administrative.
Această opțiune nu funcționează întotdeauna. Mai jos voi explica de ce.
2. Oferiți utilizatorilor obișnuiți ai terminalului dreptul de a scrie în cheia de registry HKEY_CLASSES_ROOT.
Nu este suficient ca utilizatorii "avansați" să o facă mai bine, altfel pot apărea probleme.
3. Utilizarea diferitelor "loțiuni" pentru a înregistra VC în numele utilizatorului cu drepturi depline.
Nu prea mananca bine.
Deci, cum este mai bine să ieșiți din această situație?
Propun propria soluție pentru această problemă. În opinia mea - simplă și frumoasă, care nu a fost oferită la lancere mai devreme.
Investigând această problemă, m-am întrebat - de ce 1C încearcă în general să înregistreze VC pe o cale nouă? La urma urmei, este deja înregistrată în sistem.
Sa constatat că în configurațiile tipice ale 1C (de exemplu, "Trade Management"), se folosește următoarea sintaxă pentru metoda context globală: Conectare componentă externă ():
Obiectul Driver = nou ("AddIn.ATOLScaner.Scaner45");
După cum puteți vedea, VK-ul șoferului este conectat la structura "DriversTOLSkanerStrihkoda" a manualului "ConnectedEquipment".
Ce se întâmplă în acest caz?
1C salvează componenta în dosarul temporar al utilizatorului, de exemplu "C: \ Documents and Settings \ User \ Local Settings \ Temp \ 1032 \ v8_4_12.tmp"
și încearcă să-l înregistreze în ramura de registru HKEY_CLASSES_ROOT pe această cale.
Pe terminal, utilizatorii obișnuiți nu au dreptul de a modifica această ramură de registru, astfel încât aceștia să nu se conecteze la componentă.
Acum despre cum să ieșiți din această situație.
Metoda Contextul global Conectarea componentei externe () are mai multe opțiuni de sintaxă. Aceasta este ceea ce vom folosi.
1. Înregistrați extern utilitate component regsvr32.exe pe directorul serverului terminal din C: \ WINDOWS \ System32 pentru folderul sistem de operare pe 32 de biți sau C: \ WINDOWS \ SysWOW64 sistem de operare pe 64 de biți.
2. Folosim una din cele două variante de sintaxă suplimentare ale metodei Conectarea componentei externe ():
Conectați componenta externă ("C: \ WINDOWS \ SysWOW64 \ Scaner1C.dll", "ATOLScaner", TypeExternalComponents.COM);
Obiectul Driver = nou ("AddIn.ATOLScaner.Scaner45");
Obiectul driverului = nou (ProgID);
În opinia mea, opțiunea numărul 2 este de preferat.
În același timp, 1C nu încearcă să reînregistreze VC pe o nouă cale în registru și astfel toate problemele sunt rezolvate.
Ei bine, asta e tot. Mult noroc în munca ta!