itthon / Internet / Külső komponensek terminálon történő regisztrálásával kapcsolatos problémák megoldása. A külső összetevők regisztrálásával kapcsolatos problémák megoldása az 1c kiskereskedelmi terminálban egy külső összetevő telepítése nem fejeződött be

Külső komponensek terminálon történő regisztrálásával kapcsolatos problémák megoldása. A külső összetevők regisztrálásával kapcsolatos problémák megoldása az 1c kiskereskedelmi terminálban egy külső összetevő telepítése nem fejeződött be

Kérdés: Külső komponens beszerelése


Kérem, mondja meg, hogyan telepíthet egy külső összetevőt. A következő kód végrehajtásakor hibaüzenet jelenik meg. Keresse meg a NameDecl.dll fájlt az elrendezésben

SetExternalComponent("GeneralLayout.Layout") kísérlet; Kivétel EndTry ;
Hiba: A beépülő modul telepítése nem sikerült!

Válasz: ()
A ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) FALSE értéket ad vissza,
New("AddIn.NameDecl.CNameDecl", Undefined) = (()): Típus nincs megadva (AddIn.NameDecl.NameDecl)

Kérdés: Külső összetevő csatlakoztatása az 1s 8.3.6-ban és a Win8-ban


A vk_rs232.dll ExternalComponentet csatlakoztatni kell a saját maga által írt konfigurációhoz. Mint regsvr32.exe-n keresztül regisztrálva. "Úgy tűnik", mert olyan üzenetet kaptam, hogy "az összetevő regisztrálva van, de valami nem stimmel a tűzfallal." Az üzenet első felére támaszkodva 1s alatt írom le a kódot
AfterConnection = Új értesítésleírás("AfterConnectionVK",Ez az űrlap); StartExternalComponentInstallation(,"C:\Controller\vk_rs232.dll"); StartConnectingExternalComponent(AfterConnecting,"C:\Controller\vk_rs232.dll","DLL_Scales");
és azt a hibát kapom
"A külső összetevő telepítése sikertelen! Lehet, hogy az Ön által használt ügyfélalkalmazás összetevője hiányzik!".

És most nem értem
1. Lehet, hogy az összetevő nincs bejegyezve a registry-be – hogyan tudom ott ellenőrizni?
2. Lehet, hogy a "verziója" nem működik Win8 alatt, bár nálam 32 bites.
3. Talán maga az 1s túl új, pl. ennek megfelelően nem működik ezzel a dll-vel?
4. Nos, ez banális – valamit rosszul írok.

Válasz:És mindez oda vezetett következő probléma. A VneshComp telepítve van, most csatlakoztatnia kell. És itt van mindkét lehetőség.
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Scales")
ConnectExternalComponent("GeneralLayout.Layout","Scales")

add ki HAMIS!!!

Kérdés: Külső komponens.dll


Jó napot mindenkinek.
Kérdés.
dll összetevő, amely jól működik az 1C 7.7-ben
1s-ben a 8.1 egyáltalán nem akar elindulni...
Megpróbálta beilleszteni a C:\Program Files\1cv81\bin\cache1c.dll fájlba
Megpróbáltam regisztrálni a regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll" segítségével
Probléma nélkül regisztrálva.
Amikor megpróbálom elérni, hibaüzenetet kapok:

Hiba a külső komponens betöltésekor! cache1c.dll
Eljárás Execute ButtonClick(Button) Kísérlet a külső komponens( "C:\Program Files\1cv81\bin\cache1c.dll"); Kivétel jelentés( "Hiba a külső komponens betöltésekor!"+ "cache1c.dll"); A kísérlet vége; Kísérlet // Összetevő objektum beszerzése. // m = Új ("cache1c.GTMcmd" ); m = Új COMObject("cache1c.GTMcmd" ); Kivétel jelentés(); A kísérlet vége; Vége eljárás

Válasz: A lehetetlenségig banális...
A hívások között szüneteket kell fenntartani (ezredmásodperc)...
Procedure ButtonExecuteClick(Button) Attempt // Szerezze be az összetevő objektumot. m = Új COMObject("cache1c.GTMcmd" ); Kivétel jelentés( "Nem sikerült létrehozni a külső komponens objektumot"); A kísérlet vége; m.RemoteHost = "192.168.1.101" ; m.RemotePort = 6330; m.Connect(); m.Szünet(100); ...... stb
1s 7,7-re - ez nem szükséges, kiderül, hogy a keringés gyorsabb.

Kérdés: Külső natív api összetevő a C++ for Linuxban (Ubuntu x64) 1С 8.3 rendszeren


VK-t írok, nem tudok csatlakozni az 1s-hez ubuntu-n. Még az 1s exapl sem kapcsolódik. Szóval egy kérdés ezzel kapcsolatban:

1) Megpróbálom csatlakoztatni a VK-t a cikkben szereplő VNCOMPS példából

(a link a legvégén található: "Másolás").
Belsőleg a NativeApi projektnek van makefile. Ezzel felépítem a .so könyvtárat az Ununtun.
De a "Csatlakoztassa a külső alkatrészt" 1 felszáll.
Hasonlóképpen, ha a "build.sh" használatával építek (a projekt gyökerében).

Magában a makefile-ben lecserélem a zászlót m32-ről m64-re, mert 1c és maga az x64 rendszer. (m32 paraméterrel úgysem veszi fel)
Íme egy példa a VK hívására az 1C 8.3-ból:
ConnectionDone = Csatlakoztasson egy külső alkatrészt("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native); Csak ebben a témában van egy cikk.
De amennyire én látom, ezeket a pontokat már figyelembe vették és kijavították a VNCOMPS példában.

De ami azt illeti, üzlet az összeállítás paramétereiben. Az MB 32 bites külső komponens normál esetben a 32 bites 1c-hez kapcsolódik, de az Ubuntu x64 1c enterprise83 8.3.5-1486 amd64-en telepítettem. És fel akarom vinni neki VK-t.

Van valakinek ötlete, hogyan lehetne megoldani ezt a problémát?
A VNCOMPS példának működnie kell, de az összeállítási paramétereket javítani kell, vagy maga a platform, amelyen tesztelek, nem megfelelő.

Válasz:Érdekes módon lehet Java-ban külső komponenst írni?

Kérdés: Egy külső komponens munkája az 1C szerverrel ...


Jó napot,

Létezik egy C ++ nyelven írt külső komponens, aminek az a feladata, hogy információt fogadjon külső alap adatokat, és adja vissza a lekérdezés eredményét értéktáblázat formájában az 1C-ben.
Az aktuális pillanatban lévő értéktáblázat létrehozásához az IDispatch* pBackConnection interfészt használjuk, amelyet az Init() függvény paramétereként kap. Továbbá egyszerűen, az 1C függvények segítségével létrehozok egy értéktáblázatot, kitöltöm és visszaküldöm a CallAsFunc második paraméterére (...).
A problémák az átállással kezdődtek vékony kliensek 1C. Szerver oldalon a külső komponens nem igazán indul el. Futtathatja a kliens oldalon, de az egész úgy néz ki, mint a mankó, és kiesik az általános "kliens-szerver" logikából az 1C-ben. Például az ügyfél nem érti, mi az értéktáblázat, problémák a "globális" változókkal, munkamenetekkel stb.
A NativeAPI e tekintetben még csonkoltabb.
A tamburával táncolás oda vezetett, hogy el tudtam indítani egy külső komponenst az 1C szerver alatt, DE a munka addig megy, amíg meg nem próbálják hívni az Invoke-ot a pBackConnectionen. A 8.2-es szerver 64 bites verziója addig próbál valamit csinálni, amíg le nem esik egy időtúllépéskor, a 32 bites verzió (a VK természetesen 32 bites is) azonnal leesik.
Feltételezem, hogy az 1C szerver nem szolgálja ki ezt a működési módot.
Ennek megfelelően kérdések merülnek fel, hogy ez ideiglenes, vagy az 1C logikája ennek a munkarendszernek a megszüntetésére korlátozódik? Ha lehetetlen ilyen módon létrehozni az 1C (értéktáblázat) belső struktúráit, akkor elvileg van-e leírás arról, hogy mi az értéktábla rendszerszinten, hogy megpróbáljuk létrehozni C +-ban +, töltse ki, majd csak 1C-t csúsztassa vissza visszatérési paraméterként? Szeretnék legalább egy irányt kapni, hogy merre kell ásni.

Köszönöm.

Válasz:

Egyet írsz és mást értesz.
Az 1C környezetben a különböző munkamenetekben látható változók deklarálása most sem lehetetlen, és korábban sem. Egy másik munkamenet fizikailag más folyamat.
A Session egy adatbázis-kapcsolati munkamenet, azaz. felhasználói munkamenet. Vagy beletesz valamit a sajátból és ebből a koncepcióból?

Egy munkameneten belül lehetett és most is lehetséges olyan változókat deklarálni a session modulban, amelyek a munkameneten belül különböző helyekről élnek és láthatók... valójában 4 db van belőlük.
- Session modul;
- Rendszeres alkalmazás modul;
- Felügyelt alkalmazás modul;
- Külső csatlakozó modul.

És természetesen emlékeznie kell a kontextusra. A kiszolgálókontextus nem érhető el közvetlenül a kliens oldalon, és fordítva.

Általában az 1C architektúra előírja, hogy az adatcsere folytatódik:
- paraméterek/eljárások/függvények visszaadásai révén;
- az ún. session paraméterekkel (nem lehetnek objektumok, valójában a palettán látható).

A táblázat az űrlapon... és bármilyen objektumtáblázathoz kapcsolódik (például feldolgozások)? vagy nem. Ha igen, akkor a szerveren (&AtServer) is elérhető és ott szerkeszthető....

És igen, a ValueTable nem érhető el UV-ben a kliens oldalon. Nos, az 1C így döntött.

Na gyere! Itt működik az Excel, működik az FSO és egy csomó minden más, de itt nem működik. Fogja meg a hibát és elemezze....

Kísérlet
...
a tetteid
...
Kivétel
str = DescriptionError();
A kísérlet vége;

A modern hardverképességek mellett ez egyáltalán nem érv.

Pusztán a személyes véleményed. Semmi köze a valósághoz. Semmiképpen sem. Még egyszer megismétlem, az 1C remekül működik COM-mal. In-proc és out-proc esetén egyaránt.

Adja meg a feltöltött kódot, és alkalmazza a VK-hoz.

Egyébként VK... a te esetedben COM vagy Native API?
Ha COM, akkor regsvr32-n keresztül regisztrálod... akkor hogyan "oldod meg" a bitmélység problémát?

Kérdés: 1C8 és egy külső komponens Native típussal


Jó napot.
Van egy BP 3.0.50.12 konfiguráció, és a Scales-Soft cég mérlegelési szándéka az UniServerAuto segítségével.
A fejlesztők összeállították a natív összetevőt a Windows 32 és 64 rendszerhez, és a maifest fájllal együtt archívumba helyezték. Van egy példa az 1C-re is, hogyan lehet súlyt számítani. Ebben a bináris adatokkal ellátott elrendezés segítségével ez az archívum van feltüntetve, ahogy én értem. A példában minden rendben van: az alkatrész be van szerelve, bekötve, majd létrejön a kapcsolat és leolvassák a súlyt.
De amint elkezdi átvinni magát 1C-ra, a súly nem kerül leolvasásra. Úgy tűnik, minden egyszerűen le van írva, de nem értem, hol van a gereblye.
Akinek lesz egy kis ideje - segítsen, nézze meg fél szemmel, talán a felszínen van a megoldás, de én valahol rossz helyen járok és valamit rosszul csinálok. Még soha nem dolgoztam natív technológiával...

A mellékletben pedig az én feldolgozó szövegem

Válasz:

Nos, van egy hírem...
Most kezdtem el lépésről lépésre nézni, hogy mikor kezd el kudarcot vallani. Ehhez létrehoztam egy üres adatbázist és feldolgozást a paranccsal. A szállító példájával analóg módon átvittem az elrendezést egy új konf-ra - ez másodszorra működik. Azok. Első alkalommal nem, másodszor igen. Ebből fakadt az a gondolat, hogy a feldolgozás során továbbra is szükséges lenne a komponens és az objektum összekapcsolását különböző eljárások szerint elkülöníteni.
Aztán layout kapcsolattal átvittem az adatbázisomba - működik. Fuh, ez már jó .... De szeretném anélkül, hogy módosítanám a konfigurációt, úgyhogy menjünk tovább

Megpróbálok egy elrendezést hozzáadni a feldolgozáshoz. A mérete azonnal 10 kb-ról 3 mb-ra nő, és jelentős lassulás észlelhető - nem fér bele. Elkezdek ásni egy komponens csatlakoztatása felé a dll-en keresztül. Azok. lényegében ugyanaz, mint ahol elkezdted. De van egy "DE": a felhasználó mappájában a dll neve alapján keresve észrevettem, hogy ez a dll ott van, ahol (ahogy én értem) az 1C-ben regisztrált dll-ek hozzáadva vannak:
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
ennek megfelelően nem szükséges a dll teljes elérési útját használni, egyszerűen beírhatja a nevét:
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

Megpróbálok... káromkodni a regisztrációnál, de visszaadja a mérlegelés eredményét. Kiderült, hogy a dll már regisztrálva van, ami azt jelenti, hogy csak csatlakoztatnia kell. Kiveszem és minden működik.
Összefoglalom:
1. A mérlegelés feldolgozásánál a Megnyitáskor eljárásban egy külső komponens csatlakoztatását és az objektumhoz való csatlakozást adtam hozzá.
2. A dll elérési útját nem én írtam, csak a nevét adtam meg.

Most ülök és azon gondolkodom, hogy mikor települt a dll 1C-ben? Szoftvertelepítéskor? Aligha... Ennek a dll-nek a fejlesztői konfigurációja futtatásakor hol van beállítva az űrlap megnyitásakor? Nem tudom, de közel áll hozzám... Mit gondolsz?
Másodszor, új helyen, amikor ugyanazt a terminált kell telepíteni, mit kell tenni, hogy minden működjön? Telepítse teljesen a szoftvert, futtassa a szállító konfigurációját, hogy ellenőrizze a munkát, és akkor (elméletileg) működnie kell a feldolgozásomnak? Valami kicsit bonyolult... Vagy miután telepítettem a szoftvert a feldolgozásomba, egyszer telepítsem az ExternalComponentet?

Szeretném hallani a véleményeteket erről...

Kérdés: A kód egy részének áthelyezése egy külső komponensbe


Sok feldolgozásvédelemmel foglalkozó cikk leírja, hogy a kód egy része kikerül egy külső komponensbe, de nem világos, hogy a programozó pontosan hogyan jár el ilyen esetekben.
Aki csinált már ilyet, vagy tapasztalt hasonló problémát, kérem magyarázza el. egyszerű példa maga az elv. Úgy tűnik, hogy a külső alkatrészek csatlakoztatásával minden világos.

// Példa az értéktáblázat kitöltésére TK.Clear(); Request = Új kérés; Query.Text = "KIVÁLASZT | Nómenklatúra Link HOGYAN Nómenklatúra | Directory.Nomenclature AS Nomenclature"; QueryResult = Query.Execute(); Mintavétel = QueryResult.Select(); While Sampling.Next() Loop Str = TK.Add(); FillPropertyValues(Pr, Sampling); EndCycle;
Ezzel a példával meg tudnád magyarázni, hogy a kód melyik részét szokták kivenni? Logikus lenne a kéréssel ellátott alkatrészt kivenni, de akkor hogyan tudjuk a külső komponensből a platformot megkerülve elérni az adatbázist a külső komponensről? A szöveg értelmetlen. Vagy vegyük ki a táblázatos rész formáját. Kérjük, ossza meg ezzel kapcsolatos tapasztalatait.

Válasz:És hogy az "összeférhetetlen" szó mindig a "rossz" szót jelenti? Igen, úgy tűnik számomra, hogy ha a stílusomat „1C: A természetben létező legrosszabb programozás ezen a szkriptmotoron (irodalmi nyelvre lefordítva)” nevezem! és akkor biztosan lesz, aki meg akarja nézni ezt a fenevadat. És úgy néz ki, mint egy klasszikus: "Nem olvastam Pasternakot, de teljesen nem értek vele egyet!" :)

Kérdés: Külső komponens a Delphi-n Nem lehet csatlakoztatni az r 1C-t


Összeállította a Külső komponens mintaprojektet

Megvan a DLL.
Regisztrálta a rendszerben (Regsvr32 testvk.dll)
Most 1C-ben kell használni. Ehhez a külső feldolgozást írtam, és benne:

&AtClient
Eljárási parancs1 (parancs)
path="C:\1\VK Template\TestVK\DLL\testvk.dll";
a=IncludeExternalComponent(PATH);
LoadExternalComponent(Path);
ABOUT = Új ("Addln.TestVK"); Kérdés: Külső összetevők 1s 7.7-hez


Szia. 1c7.7-hez írok egy komponenst c#-ban, csatlakoztatom az 1c-hez minden rendben van, de amikor metódusokat vagy tulajdonságokat akarok hívni az 1c-hez, akkor azt írja ki, hogy "aggregate object field not found", a debuggeren keresztül rájöttem hogy az ILanguageExtender interfész metódusait nem hívják meg, az IInitDone interfész megvalósítása után ismét konstruktor osztályok komponenseknek nevezzük, az 1C külső komponensek íráselmélete szerint a VK-nak legalább két interfészt kell megvalósítania - IInitDone és ILanguageExtender, I. megvalósítani, de nem értem mi a probléma.Talán valakinek van ötlete ???

Válasz: Téma lezárva, probléma megoldva.

Kérdés: v7: Külső komponens 1С7-hez C#-ban


Hol nézhetek meg egy egyszerű példát 1C7 komponens létrehozására C # nyelven a Visual Studio 2010-től kezdve?

Válasz:

Néz
Külső komponensek gyors létrehozása C#-ban. Globális kontextus, IAsyncEvent, IExtWndsSupport, WinForms és WPF példák

/
Felhasználói felületek fejlesztése

Külső összetevők és platformbővítmények telepítése

1.1. A platform külső összetevőinek és bővítményeinek telepítésének interaktívnak kell lennie. A felhasználónak saját döntést kell hoznia a telepítésről. A telepítési párbeszédpanelnek jeleznie kell, hogy mire való az összetevő (bővítmény), és mi nem fog működni, ha nincs telepítve.

Például helytelen az űrlap konstrukcióit használni

Ha nem csatlakozikKülsőkomponens(…), akkor SetExternalComponent(…)

Helyes, ha kifejezetten kérdést teszünk fel a felhasználónak:

A munka folytatásához telepítenie kell egy külső összetevőt. Egy külső összetevő lehetővé teszi a jelentéskészítést. Kattintson a "Telepítés" gombra az összetevő telepítéséhez. A telepítés befejezése után kattintson a Folytatás gombra.

  • A felhasználó a Jelentés küldése parancsot használta
  • Ehhez a konfigurációhoz valamilyen külső komponens telepítése szükséges.
  • A konfiguráció ellenőrzi, hogy az összetevő telepítve van-e.
  • Ha az összetevő nincs telepítve, megjeleníti a felhasználó számára, hogy az összetevőt telepíteni kell a jelentés elküldéséhez, valamint egy gombot, amely az összetevő telepítését indítja el.
  • A felhasználó rákattint a gombra, a telepítés megtörténik.
  • A telepítés után a felhasználó a "Jelentés küldésének folytatása" gombra kattint.
  • A program továbbra is jelentést küld.

Egy ilyen forgatókönyv biztosítja, hogy az összetevők (bővítmények) problémamentesen telepítve legyenek az összes támogatott böngészőn, beleértve a böngészőt is. firefox.

2. Az alkalmazásmegoldásnak eszközöket kell biztosítania a felhasználó számára a külső összetevők és bővítmények telepítéséhez a munka bármely szakaszában. Így nem csak valamilyen feladat megoldása során, hanem külön akcióként (valamilyen adminisztrációs módból) is telepíthetők.

Ha konfigurációban használják Szabványos alrendszerek könyvtárai telepíteni a kiterjesztést a fájlokkal való munkavégzéshez általános parancs InstallExtensionWorkingFiles, amelyet javasolt a felhasználó személyes beállítások űrlapján elhelyezni (lásd az általános űrlapot _DemoMySettings demó konfigurációban). Ugyanebben a formában ajánlott olyan parancsokat elhelyezni, amelyekre a felhasználónak munkája során szüksége lehet külső komponensek telepítésére.


Ennek oka a ConnectExternalComponent() globális kontextusfüggvény néhány sajátossága.

A programozóknak gyakran problémái vannak a külső összetevők (például illesztőprogramok) csatlakoztatásával kereskedelmi berendezések), amikor a felhasználók az 1C-vel dolgoznak, a terminálon keresztül csatlakoznak a szerverhez.

Ebben az esetben a felhasználók például a következő képet látják:

Munka közben helyi számítógépek Nincs probléma a külső alkatrészek csatlakoztatásával.

Mihez kapcsolódik? Ennek az az oka, hogy amikor a felhasználók a terminálkiszolgálón keresztül dolgoznak, kevesebb joguk van, mint amikor a helyi számítógépen dolgoznak.

Ez könnyen ellenőrizhető, ha a terminálkiszolgálóra lép fiókot adminisztratív jogokkal.

Ennek az eltérésnek az az oka, hogy az 1C nem tud külső komponenst regisztrálni a registry-ben, amikor a felhasználó normál jogokkal dolgozik a terminálban, mert normál felhasználónak nincs engedélye az ágnak való írásra rendszerleíró adatbázis HKEY_CLASSES_ROOT.

A külső alkatrészek terminálba történő csatlakoztatásával foglalkozó publikációkban a legtöbb különböző módszerek megoldásokat erre a problémára.

Például ezek:

1. Futtassa először az 1C-t rendszergazdai jogokkal.

Ez a lehetőség nem mindig működik. Az alábbiakban elmagyarázom, miért.

2. Adja meg a terminál közönséges felhasználóinak a rendszerleíró adatbázisba való írási jogot HKEY_CLASSES_ROOT.

Nem kellően "haladó" felhasználók ezt nem tehetik meg, különben problémák adódhatnak.

3. Különféle "kütyük" segítségével regisztrálja a VK-t egy teljes jogú felhasználó nevében.

Enni sem jó.

Tehát mi a legjobb módja annak, hogy kilábaljunk ebből a helyzetből?

Megoldásomat ajánlom erre a problémára. Véleményem szerint - egyszerű és szép.

Ennek a problémának a vizsgálata során azon tűnődtem, hogy az 1C miért próbálja meg regisztrálni a VK-t egy új úton? Hiszen már regisztrálva van a rendszerben.

A dolog úgy alakult, hogy a tipikus 1C konfigurációkban (például "Trade Management") a ConnectExternalComponent() globális kontextus metódusának következő szintaxisa használatos:

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

Amint láthatja, a VK illesztőprogram a "Connected Equipment" könyvtár "DriverATOLScannerBarcode" elrendezéséből csatlakozik.

Akkor mi történik?

Az 1C a komponenst a felhasználó ideiglenes mappájába menti, például "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

és megpróbálja regisztrálni az anyakönyvi ágban HKEY_CLASSES_ROOT pontosan ezen az úton.

A terminálon a közönséges felhasználóknak nincs joguk megváltoztatni ezt a rendszerleíró ágat, így az összetevő nincs csatlakoztatva számukra.

Most arról, hogyan lehet kilábalni ebből a helyzetből.

A ConnectExternalComponent() globális környezeti metódus számos szintaktikai beállítással rendelkezik. Ezt fogjuk használni.

Tehát lépésről lépésre:

1. Regisztrálja a külső összetevőt a regsvr32.exe segédprogrammal a terminálkiszolgálón a C:\WINDOWS\SYSTEM32 mappában 32 bites operációs rendszer esetén vagy a C:\WINDOWS\SYSWOW64 mappában 64 bites operációs rendszer esetén.

2. Használja a két további szintaktikai beállítás egyikét a ConnectExternalComponent() metódushoz:

1.opció:

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

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

2. lehetőség:

ProgID = "AddIn.Scanner45";

Csatlakoztassa a külső komponenst (ProgID);

DriverObject = Új(ProgID);

Véleményem szerint a 2. lehetőség előnyösebb.

Ugyanakkor az 1C nem próbálja meg újra regisztrálni a VC-t egy új útvonalon a rendszerleíró adatbázisban, és így minden probléma megoldódik.

Nos, ez minden. Sok sikert a munkához!

[a link megtekintéséhez regisztrálnod kell]

A programozóknak gyakran problémái vannak a külső komponensek (például kereskedelmi berendezés-illesztőprogramok) csatlakoztatásával, amikor a felhasználók úgy dolgoznak az 1C-vel, hogy a terminálon keresztül csatlakoznak a szerverhez.

Ennek oka a ConnectExternalComponent() globális kontextusfüggvény néhány sajátossága.

Ugyanakkor a felhasználók látják például a cikk közleményében bemutatott képet.

Ha helyi számítógépről dolgozik, akkor nincs probléma a külső összetevők csatlakoztatásával.

Mihez kapcsolódik? Ennek az az oka, hogy amikor a felhasználók a terminálkiszolgálón keresztül dolgoznak, kevesebb joguk van, mint amikor a helyi számítógépen dolgoznak.

Ez könnyen ellenőrizhető, ha rendszergazdai jogokkal rendelkező fiókkal jelentkezik be a terminálkiszolgálóra.

Ennek az eltérésnek az az oka, hogy az 1C nem tud külső összetevőt regisztrálni a registry-ben, amikor a felhasználó normál jogokkal dolgozik a terminálban, mert egy normál felhasználónak nincs írási jogosultsága a rendszerleíró adatbázishoz HKEY_CLASSES_ROOT.

A terminál külső komponenseinek csatlakoztatásával foglalkozó publikációkban számos módszert kínálnak ennek a problémának a megoldására.

Például ezek:

1. Futtassa először az 1C-t rendszergazdai jogokkal.

Ez a lehetőség nem mindig működik. Az alábbiakban elmagyarázom, miért.

2. Adja meg a terminál közönséges felhasználóinak a rendszerleíró adatbázisba való írási jogot HKEY_CLASSES_ROOT.

Nem kellően "haladó" felhasználók ezt nem tehetik meg, különben problémák adódhatnak.

3. Különféle "kütyük" segítségével regisztrálja a VK-t egy teljes jogú felhasználó nevében.

Enni sem jó.

Tehát mi a legjobb módja annak, hogy kilábaljunk ebből a helyzetből?

Megoldásomat ajánlom erre a problémára. Véleményem szerint - egyszerű és gyönyörű, korábban nem kínálták a Lanceren.

Ennek a problémának a vizsgálata során azon tűnődtem, hogy az 1C miért próbálja meg regisztrálni a VK-t egy új úton? Hiszen már regisztrálva van a rendszerben.

A dolog úgy alakult, hogy a tipikus 1C konfigurációkban (például "Trade Management") a globális kontextus metódusának következő szintaxisát használják ConnectExternalComponent():

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

Amint láthatja, a VK illesztőprogram a "Connected Equipment" könyvtár "DriverATOLScannerBarcode" elrendezéséből csatlakozik.

Akkor mi történik?

Az 1C a komponenst a felhasználó ideiglenes mappájába menti, például "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

és megpróbálja regisztrálni a HKEY_CLASSES_ROOT rendszerleíró ágban ezen az útvonalon.

A terminálon a közönséges felhasználóknak nincs joguk megváltoztatni ezt a rendszerleíró ágat, így az összetevő nincs csatlakoztatva számukra.

Most arról, hogyan lehet kilábalni ebből a helyzetből.

Globális kontextus módszer A ConnectExternalComponent() számos szintaktikai beállítással rendelkezik. Ezt fogjuk használni.

Tehát lépésről lépésre:

1. Regisztrálja a külső összetevőt a regsvr32.exe segédprogrammal a terminálkiszolgálón a C:\WINDOWS\SYSTEM32 mappában 32 bites operációs rendszer esetén vagy a C:\WINDOWS\SYSWOW64 mappában 64 bites operációs rendszer esetén.

2. Használja a két további szintaktikai beállítás egyikét a ConnectExternalComponent() metódushoz:

1.opció:

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

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

2. lehetőség:

ProgID = "AddIn.Scanner45";

Csatlakoztassa a külső komponenst (ProgID);

DriverObject = Új(ProgID);

Véleményem szerint a 2. lehetőség előnyösebb.

Ugyanakkor az 1C nem próbálja meg újra regisztrálni a VC-t egy új útvonalon a rendszerleíró adatbázisban, és így minden probléma megoldódik.

Nos, ez minden. Sok sikert a munkához!