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


Dobar dan.
Imam konfiguraciju BP 3.0.50.12 i želju da u nju implementiram vaganje tvrtke Vesy-Soft koristeći UniServerAuto.
Programeri su kompajlirali komponentu u Native za Windows 32 i 64 i arhivirali je s maifest datotekom. Postoji i primjer za 1C kako se može izračunati težina. U njemu je, koristeći izgled s binarnim podacima, naznačena ova arhiva, koliko ja razumijem. U primjeru je sve u redu: komponenta je instalirana, spojena, zatim je uspostavljena veza i očitana težina.
Ali čim ga počnete prenositi u 1C, težina se ne očitava. Čini se da je sve jednostavno napisano, ali ne razumijem gdje je rake.
Tko ima malo vremena - pomozite, pogledajte jednim okom, možda je rješenje na površini, ali ja idem negdje na krivo mjesto i radim krivu stvar. Nikad prije nisam morao raditi s izvornom tehnologijom...

A u prilogu je moj tekst obrade

Greška: Instalacija vanjske komponente nije uspjela!

Pa, imam novosti...
Upravo sam počeo vidjeti korak po korak u kojem trenutku će početi padati. Da bih to učinio, stvorio sam praznu bazu podataka i obradio je naredbom. Po analogiji s primjerom dobavljača, prenio sam izgled u novu konfiguraciju - radi drugi put. one. prvi put ne, ali drugi put da. To je potaknulo ideju da će u našoj obradi ipak biti potrebno razdvojiti vezu komponente i objekta prema različitim postupcima.
Zatim sam to prebacio u svoju bazu podataka s vezom izgleda - radi. Fuj, to je dobro.... Ali htio bih bez promjena konfiguracije, pa idemo dalje

Pokušavam dodati izgled u obradu. Veličina mu se odmah povećava s 10kb na 3mb i primjećuje se značajno usporavanje rada - nije prikladno. Počinjem kopati po povezivanju komponenti preko dll-a. one. u biti isto kao i tamo gdje sam počeo. Ali postoji jedno "ALI": traži po dll ime Gledajući korisničku mapu, primijetio sam da se ovaj dll nalazi tamo gdje su (koliko sam shvatio) dodani dll-ovi registrirani u 1C:
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
Prema tome, nema potrebe koristiti puni put do dll-a, možete jednostavno unijeti njegovo ime:
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

Pokušavam... psuje kod registracije, ali vraća rezultat vaganja. Ispada da je dll već registriran i to znači da ga samo trebate spojiti. Skinem ga i sve radi.
Da sažmemo:
1. Kod obrade vaganja postupak AtOpening uključivao je povezivanje vanjske komponente i povezivanje s objektom.
2. Put do dll-a Nisam ga napisao, samo sam naveo njegovo ime.

Sada sjedim i razmišljam, kada je dll instaliran u 1C? U trenutku instalacije softvera? Jedva... U trenutku pokretanja razvojne konfiguracije ovog dll-a, gdje je instaliran kada se obrazac otvori? Ne znam, ali čini mi se blizu... Što mislite?
I drugo, na novom mjestu, kada postoji potreba za instaliranjem istog terminala, što treba učiniti da sve radi? Trebam li u potpunosti instalirati softver, pokrenuti konfiguraciju dobavljača da provjerim rad i tada (u teoriji) treba li moja obrada raditi? Nešto je nekako komplicirano... Ili bih trebao učiniti Install External Component jednom u obradi nakon instaliranja softvera?

Želio bih čuti vaše mišljenje o ovom pitanju...

Pitanje: Premještanje dijela koda na vanjsku komponentu


Mnogi članci o zaštiti obrade opisuju da se dio koda prenosi na vanjsku komponentu, ali nije jasno kako točno programer postupa u takvim slučajevima.
Svatko tko je ovo radio ili se susreo sa sličnim nalazima, neka objasni jednostavan primjer sam princip. Čini se da je sve jasno s povezivanjem vanjskih komponenti.

// Primjer popunjavanja tablice vrijednosti TK.Očisti(); Zahtjev = Novi zahtjev;
Query.Text = "SELECT |

Greška: Instalacija vanjske komponente nije uspjela! Nomenklatura.Link KAKO Nomenklatura |OD | Imenik.Nomenklatura AS Nomenklatura"; Request Result = Request.Execute(); Selection = Request Result.Select(); While Selection.Next() Cycle Page = TK.Add(); Fill inPropertyValues(Page, Selection); EndCycle;

Možete li upotrijebiti ovaj primjer da objasnite koji se dio koda obično izbacuje? Bilo bi logično ukloniti dio sa zahtjevom, ali kako onda možemo pristupiti bazi podataka iz vanjske komponente, zaobilazeći platformu? Nema smisla iznositi tekst. Ili izvadite samu formaciju tabličnog dijela. Podijelite svoje iskustvo sa svima koji su se susreli s ovim.


I da riječ “Nekompatibilno” uvijek znači riječ “Loše”? Da, čini mi se da kad bih svoj stil nazvao "1C: Najgore programiranje na ovoj skriptnoj mašini koje postoji u prirodi (prevedeno na književni jezik)!" a onda će vjerojatno biti ljudi koji će htjeti provjeriti ovu zvijer. I izgleda kao klasika: "Nisam čitao Pasternaka, ali se s njim potpuno ne slažem!"

Pitanje: Vanjska komponenta u Delphiju Ne mogu spojiti r 1C
Sastavio primjer projekta vanjske komponente
Dobio sam DLL. Registrirao ga u sustavu (Regsvr32 testvk.dll) Sada ga trebate koristiti u 1C. Za ovo sam napisao

vanjska obrada
i u njemu:
&NaKlijentu
Procedura Naredba1(Naredba)
put="C:\1\VK predložak\TestVK\DLL\testvk.dll";
a=ConnectExternalComponent(PATH);


Zdravo. Pišem komponentu za 1c7.7 u c#, povežem je s 1c, sve je u redu, ali kada želim pozvati metode ili svojstva za 1c, kaže mi "polje agregatnog objekta nije pronađeno", kroz program za ispravljanje pogrešaka Saznao sam da se metode sučelja ILanguageExtender ne pozivaju, nakon implementacije sučelja IInitDone ponovno se pozivaju komponente klasa konstruktora, prema teoriji pisanja vanjskih komponenti 1C, VK mora implementirati najmanje dva sučelja - IInitDone i ILanguageExtender, Provodim ih, ali ne mogu shvatiti u čemu je problem. Možda netko ima kakvu ideju???

Greška: Instalacija vanjske komponente nije uspjela! Tema zatvorena, problem riješen.

Pitanje: v7: Vanjska komponenta za 1C7 u C#


Gdje mogu pogledati jednostavan primjer za stvaranje komponenti za 1C7 u C# počevši od Visual studija 2010??

Greška: Instalacija vanjske komponente nije uspjela!

Izgled
Brzo izradite vanjske komponente u C#. Primjeri korištenja Globalnog konteksta, IAsyncEvent, IExtWndsSupport, WinForms i WPF


To je zbog nekih osobitosti funkcije globalnog konteksta ConnectExternalComponent() .

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.

U ovom slučaju korisnici vide, na primjer, ovu sliku:

Dok pri radu s lokalnih računala nema problema s povezivanjem 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 se prijavite na terminalski poslužitelj pod računom s administratorskim 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čan korisnik nema dopuštenje za pisanje u ogranak registra 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 - jednostavno i lijepo.

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") sljedeća sintaksa koristi za metodu globalnog konteksta Connect External Component():

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"

te ga pokušava upisati u matičnu podružnicu HKEY_CLASSES_ROOT upravo ovom stazom.

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. To je ono što ćemo 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 jednu od dvije dodatne opcije sintakse za ConnectExternalComponent() metodu:

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!

[morate se registrirati da vidite link]