Rješavanje problema s registracijom vanjskih komponenti u terminalu. Instalacija vanjskih komponenti i proširenja 1c platforme nije uspjela
Programeri često imaju problema s povezivanjem vanjskih komponenti (na primjer, upravljačkih programa za komercijalnu opremu) kada korisnici rade s 1C, povezujući se s poslužiteljem putem terminala.
To je zbog nekih osobitosti funkcije globalnog konteksta ConnectExternalComponent().
U tom slučaju korisnici vide, na primjer, sliku predstavljenu u najavi članka.
Dok pri radu sa lokalna računala Nema problema sa spajanjem vanjskih komponenti.
s čime je ovo povezano? To je zato što kada korisnici rade preko terminalskog poslužitelja, imaju manje prava nego kada rade na lokalnom računalu.
To možete lako provjeriti ako odete na terminalski poslužitelj ispod račun s administrativnim pravima.
Razlog za ovu razliku je taj što 1C ne može registrirati vanjsku komponentu u registru kada korisnik radi na terminalu pod normalnim pravima, jer obični korisnik nema dopuštenje za pisanje podružnice registar sustava HKEY_CLASSES_ROOT.
Publikacije na temu povezivanja vanjskih komponenti u terminalu nude različite metode za rješavanje ovog problema.
Na primjer, ove:
1. Pokrenite 1C prvi put pod administratorskim pravima.
Ova opcija ne radi uvijek. U nastavku ću objasniti zašto.
2. Dajte običnim korisnicima terminala dozvolu za pisanje u granu registra sustava HKEY_CLASSES_ROOT.
Nedovoljno napredni korisnici to ne bi trebali činiti, inače može doći do problema.
3. Koristeći razne gadgete, registrirajte VK u ime korisnika s punim pravima.
Nije ni dobro.
Dakle, koji je najbolji način da se izvučete iz ove situacije?
Nudim svoje rješenje za ovaj problem. Po mom mišljenju, jednostavan je i lijep, prije nije bio u ponudi na Lanceru.
Dok sam istraživao ovaj problem, postavio sam si pitanje: zašto 1C uopće pokušava registrirati VK koristeći novi put? Uostalom, ona je već registrirana u sustavu.
Ispostavilo se da se u tipičnim konfiguracijama 1C (na primjer, "Upravljanje trgovinom") koristi sljedeća sintaksa metode globalnog konteksta ConnectExternalComponent():
ConnectExternalComponent("Directory.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");
Kao što možete vidjeti, upravljački program VC povezan je iz izgleda "ATOLBarcode Scanner Driver" u direktoriju "Connected Equipment".
Što se tada događa?
1C sprema komponentu u privremenu mapu korisnika, na primjer "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"
i pokušava ga registrirati u ključu registra HKEY_CLASSES_ROOT na ovoj stazi.
Na terminalu, obični korisnici nemaju prava mijenjati ovu granu registra, tako da se komponenta ne povezuje s njima.
Sada razgovarajmo o tome kako izaći iz ove situacije.
Metoda globalnog konteksta ConnectExternalComponent() ima nekoliko opcija sintakse. Ovo ćemo mi koristiti.
Dakle, korak po korak:
1. Registrirajte vanjsku komponentu pomoću uslužnog programa regsvr32.exe na terminalskom poslužitelju u mapi C:\WINDOWS\SYSTEM32 za 32-bitni OS ili u mapi C:\WINDOWS\SYSWOW64 za 64-bitni OS.
2. Koristite jedno od to dvoje dodatne opcije sintaksa metode ConnectExternalComponent():
Opcija 1:
ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);
DriverObject = New("AddIn.ATOLScanner.Scaner45");
Opcija 2:
ProgID = "AddIn.Scaner45";
ConnectExternalComponent(ProgID);
DriverObject = New(ProgID);
Po mom mišljenju, opcija broj 2 je bolja.
Istodobno, 1C ne pokušava ponovno registrirati VK koristeći novi put u registru i time su svi problemi riješeni.
Pa, to je sve. Sretno u radu!
Pitanje: Instaliranje vanjske komponente
Recite mi kako instalirati vanjsku komponentu. Prilikom izvođenja sljedećeg koda javlja se pogreška. U izgledu pronađite NameDecl.dll
Pokušavam SetExternalComponent("GeneralLayout.Layout");
Iznimka EndTry ;
Greška: Instalacija vanjske komponente nije uspjela! ()
Odgovor:
ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) vraća FALSE.
New("AddIn.NameDecl.CNameDecl", Undefined) = (()): Vrsta nedefinirana (AddIn.NameDecl.NameDecl)
Pitanje: Spajanje vanjske komponente u 1s 8.3.6 i Win8
Trebate spojiti vanjsku komponentu vk_rs232.dll na konfiguraciju koju ste sami napisali. Čini se da je registriran putem regsvr32.exe. “Čini se” jer sam primio poruku da je “komponenta registrirana, ali nešto nije u redu s vatrozidom.” Oslanjajući se na prvu polovicu poruke, pišem kod u 1C
AfterConnecting = Novi opis upozorenja("AfterConnectingVK", ThisForm);
"Instalacija vanjske komponente nije uspjela! Možda nedostaje komponenta za klijentsku aplikaciju koju koristite!".
I sad mi nije jasno:
1. Možda komponenta nije registrirana u registru - kako to tamo mogu provjeriti?
2. Možda njegova “verzija” ne radi pod Win8, iako je imam 32-bitnu.
3. Možda je sam 1C previše nov, tj. Prema tome, ne može raditi s ovom dll?
4. Pa, trivijalno je - nešto krivo pišem.
Greška: Instalacija vanjske komponente nije uspjela! I sve me to dovelo do sljedećeg problema. VneshComp je instaliran, sada ga morate spojiti. I ovdje su obje opcije
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Libra")
ConnectExternalComponent("GeneralLayout.Layout","Libra")
daj LAŽ!!!
Pitanje: Vanjska komponenta.dll
Dobar dan svima.
Takvo pitanje.
Dll komponenta koja odlično radi u 1C 7.7
1s 8.1 nikako se ne želi dignuti...
Pokušao sam ga zalijepiti u C:\Program Files\1cv81\bin\cache1c.dll
Pokušao sam se registrirati pomoću regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll"
Registrira se bez problema.
Kada mu želim pristupiti, dobivam poruku o pogrešci:
Pogreška pri učitavanju vanjske komponente! cache1c.dll
Procedura ButtonExecutePress(Button) Pokušaj učitavanja vanjske komponente( "C:\Programske datoteke\1cv81\bin\cache1c.dll"); Izvješće o iznimci ( "Pogreška pri učitavanju vanjske komponente!"+ "cache1c.dll" ); EndAttempt; Pokušaj // Dobivanje objekta komponente.
Greška: Instalacija vanjske komponente nije uspjela!// m = Novo ("cache1c.GTMcmd" );
m = Novi COMObject("cache1c.GTMcmd" ); Izvješće o iznimkama(); EndAttempt; Kraj postupka
Banalno do nemoguceg... Morate napraviti pauzu između poziva (milisekunde)... Procedura ButtonExecutePress(Button) Attempt // Dobivanje objekta komponente.
m = Novi COMObject("cache1c.GTMcmd" ); Izvješće o iznimci (
"Nije uspjelo stvaranje objekta vanjske komponente"
); EndAttempt;
m.RemoteHost = "192.168.1.101" ;
m.RemotePort = 6330;
m.Poveži();
m.Pauza(100);
......itd
U samom makefileu mijenjam zastavu sa m32 na m64, jer 1c i sam x64 sustav. (s parametrom m32 ionako se ne povezuje)
Evo primjera pozivanja VK iz 1C 8.3:
Veza završena = ConnectExternalComponent("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native);
Postoji članak samo na ovu temu.
Ali, koliko vidim, sve ove točke su već uzete u obzir i ispravljene u VNCOMPS primjeru.
Ali u biti to je stvar kompilacijskih parametara. MB 32-bitna vanjska komponenta povezuje se na 32-bitni 1c normalno, ali ja sam je postavio na Ubuntu x64 1c enterprise83 8.3.5-1486 amd64. I želim se spojiti s njom na VK.
Ima li netko kakvu ideju kako riješiti ovaj problem?)
Greška: Instalacija vanjske komponente nije uspjela! VNCOMPS primjer bi trebao raditi, ali je potrebno prilagoditi parametre izrade ili sama platforma na kojoj testiram nije ispravna.
Pitam se je li moguće napisati vanjsku komponentu u Javi?
Pitanje: Rad s vanjskom komponentom s 1C poslužiteljem...
Dobar dan, Postoji vanjska komponenta napisana u C++ čija je zadaća dobivanje informacija iz vanjska baza
podatke i vratiti rezultat upita u obliku tablice vrijednosti u 1C.
Za generiranje tablice vrijednosti u trenutnom trenutku koristi se sučelje IDispatch* pBackConnection, primljeno kao parametar u funkciji Init(). Zatim jednostavno koristim 1C funkcije za stvaranje tablice vrijednosti, ispunjavam je i vraćam na drugi parametar u CallAsFunc(...).
Problemi su počeli s prelaskom na 1C tanke klijente. Na strani poslužitelja, vanjska komponenta se zapravo ne pokreće. Možete ga pokrenuti na strani klijenta, ali sve to izgleda kao štake i ispada iz opće logike "klijent-poslužitelj" u 1C. Na primjer, klijent ne razumije što je tablica vrijednosti, problemi s "globalnim" varijablama, sesije itd.
NativeAPI je još ograničeniji u tom pogledu.
Ples s tamburinom doveo je do činjenice da sam uspio pokrenuti vanjsku komponentu pod 1C poslužiteljem, ALI rad se nastavlja sve dok se ne pokuša pozvati Invoke na pBackConnection. 64-bitna verzija 8.2 servera pokušava učiniti nešto dok ne istekne vrijeme, 32-bitna verzija (VK je naravno također 32-bitna) jednostavno pada odmah.
Pretpostavljam da 1C poslužitelj ne podržava ovaj način rada. Sukladno tome, postavljaju se pitanja: je li to privremeno ili se logika 1C svodi na otkazivanje ove sheme rada? Ako stvarate 1C (tablica vrijednosti) nije moguća na ovaj način, postoji li u principu opis što je tablica vrijednosti na razini sustava kako bi se pokušalo napraviti u C++-u, ispuniti i onda jednostavno ubaciti 1C kao povratni parametar? Volio bih barem dobiti smjernicu u kojem smjeru kopati.
Hvala.
Greška: Instalacija vanjske komponente nije uspjela!
Pišeš jedno, a misliš drugo.
U 1C okruženju sada nije nemoguće deklarirati varijable koje će biti vidljive u različitim sesijama, a prije nije bilo takve mogućnosti. Druga sesija je fizički drugačiji proces.
Sesija je sesija koja se povezuje s bazom podataka, tj. korisnička sesija. Ili stavljate nešto svoje u ovaj koncept?
Unutar jedne sesije bilo je moguće, a sada je moguće, deklarirati varijable u modulu sesije koje će živjeti i biti vidljive unutar sesije s različitih mjesta... zapravo, ima ih 4.
- Modul sesije;
- Redovni aplikacijski modul;
- Modul upravljane aplikacije;
- Vanjski priključni modul.
Pa, naravno, morate zapamtiti kontekst. Kontekst poslužitelja nije izravno dostupan na strani klijenta i obrnuto.
Zapravo, arhitektura 1C predviđa da će razmjena podataka ići na sljedeći način:
- pomoću parametara/povrata procedura/funkcija;
- pomoću tzv. parametara sesije (ne mogu biti objekti, ali zapravo vidljivi u paleti).
Tablica na obrascu... je li povezana s nekom objektnom tablicom (procesiranje npr.)? ili ne. Ako da, onda je dostupan na poslužitelju (&OnServer) i uredite ga tamo....
Pa ipak, da, tablica vrijednosti nije dostupna u UV-u na strani klijenta. Pa, tako je odlučio 1C.
hajde Radi s Excelom, radi s FSO i hrpom drugih stvari, ali ovdje ne radi. Uhvatite grešku i analizirajte....
Pokušaj
...
tvoji postupci
...
Iznimka
str = Opis greške();
EndAttempt;
S modernim hardverskim mogućnostima to uopće nije argument.
Čisto vaše osobno mišljenje. Nema veze sa stvarnošću. Ni na koji način. Još jednom ponavljam, 1C odlično radi s COM-om. I s in-proc i out-proc.
Unesite kod koji koristite za preuzimanje i kontaktirajte VK.
Usput, VK... u tvom slučaju, je li to COM ili Native API?
Ako je COM, onda ga registrirate kao... putem regsvr32... kako onda "riješiti" problem dubine bita?
Pitanje: 1C8 i vanjska komponenta s izvornim tipom