Adatok fogadása com kapcsolaton keresztül 1s-től. V8: COM csatlakozás. Felsorolás fogadása és összehasonlítása COM kapcsolaton keresztül
Kérdés: Webhely elemzése COM IE 11 használatával
Válasz:
Kérdés: COM-kapcsolat 1C 8.3 - 1C 8.3 Lehetséges-e megadni a hibakeresőt a kapcsolaton
Meg akartam kérdezni a fórum tagjait, hogy lehetséges-e egyáltalán hibakeresés, amikor COM-kapcsolaton keresztül csatlakozom egy adatbázisból a 8.3.6-os platformon (BP 3.0) egy saját maga írt adatbázis külső kapcsolati moduljához (amely szintén fut) a 8.3.6) platformon, és feldolgozást használó exportálási eljárásokat hívjon le róla? Az adatbázisok jelenleg fájl alapúak és egy PC-n helyezkednek el, de tervezik a szerver verziót. Eddig az alábbi konstrukciókat használtam tetszőleges kód COM-kapcsolaton keresztüli végrehajtására, valamint a hibák naplózására. Íme az eljárások töredékei a külső csatlakozási modul önírt adatbázisában:
Funkció ExecuteIn(CodeExecute, segédparaméter = "") Export
Biztonsági ellenőrzés(); // Védelem a rosszindulatú kód futtatására irányuló kísérletek ellen, amikor egy másik felhasználó nevében csatlakozik külsőleg Válasz = "0" //Ha semmit nem kell visszaadni, akkor ha nincs hiba a kódban  //csak OK-t ad vissza  //Mert A továbbított kód hibákat tartalmazhat, akkor a végrehajtását egy kísérletbe csomagoljuk. Próbáld meg végrehajtani(CodeExecute); // A kód végrehajtása karakterláncként egy másik számítógépen COM-kapcsolaton keresztül (Libra Base külső csatlakozási modul) Kivétel   //ha hiba van, akkor adja vissza a szövegét Válasz = ErrorDetailView(ErrorInfo()); EndAttempt ; Válasz válasz; EndFunction Function TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Védelem a rosszindulatú kód futtatására irányuló kísérletek ellen, amikor egy másik felhasználó nevében csatlakozik külsőleg. OutParameter = "Van kapcsolat a skálabázissal COM-kapcsolaton keresztül!"; Return True ; EndFunction
A BP 3.0-ból a következő töredéket hajtom végre:
Kísérlet
Com = Új COMObject("V83.COMConnector"); Kapcsolat = Com.Connect ("Fájl=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Teszt sikeres! Van kapcsolat a skála adatbázissal"); Kivétel Error = ErrorDetailView(ErrorInfo()); TellUser("Nincs COM kapcsolat a Libra bázissal! Részletek"+Hiba); Com=Undefined ; Visszatérés ; EndAttempt ; Out = ""; In = "1"; If Connection.Communication Test(In, Out) Then TellUser("Kommunikációs teszt skálakonfigurációval sikeres! Válasz: "+Out); Ellenkező esetben TellUser("A kommunikációs teszt a skálakonfigurációval nem sikerült! Válasz: "+Out); EndIf ;
Természetesen megértem, hogy nem lehet majd megadni az Execute(CodeString1C8) operátort, de van-e ilyen lehetőség távoli modul eljárás hívásakor külső csatlakozás a Connection.TestConnections(In, Out) fő adatbázisból, hogy a kódját ugyanabban a hibakereső munkamenetben adja meg a hívási eljárás Security Check() funkciójában?
Már megnéztem a dokumentációt, amit ebben a kérdésben találtam. Mindkét konfigurációban mindenhol engedélyeztem a hibakeresést és a töréspontokat. Elindítottam mindkét konfigurátort.
Egyáltalán lehetséges ebben a helyzetben a Security Check() eljárás további hibakeresése a külső csatlakozási modul oldalán?
Kérdés: Rossz IP-cím a COM-kapcsolatban
Van olyan feldolgozás, amely a dokumentumokat a V83.ComConnector segítségével továbbítja a szerverek között. Az 1-es szerver (1C 8.2.19.90-es verzió) mindig csatlakozik a 2-es szerverhez (2033-as verzió 8.3.8.). A kapcsolati vonal a 2-es szerver IP-címét tartalmazta, és minden jól működött. Magán az 1-es szerveren is láttam a telepített platformot, mint a 2-es szerveren, a 8.3.9.2033 verziót (ha ez fontos).
A probléma az, hogy a Server 2-n megváltozott az IP cím, a feldolgozás természetesen leállt, és amikor új IP-t írtam be a csatlakozási sorba, a feldolgozás hibát generál, aminek a leírása továbbra is a régi IP (!) és a szöveg „A kapcsolat létrehozására tett kísérlet sikertelen volt, mert nem érkezett meg a kívánt válasz egy másik számítógépről a szükséges időn belül, vagy létrejött kapcsolat egy már csatlakoztatott számítógép helytelen válasza miatt."
Mindent újraindítottak, cache-eket töröltek stb., az adminok esküsznek rá, hogy minden oké a részükről, RDP-n keresztül lehet bejelentkezni egyik szerverről a másikra stb.
Mi lehet a baj, hogyan tudom megoldani? Átnéztem az egész internetet, de nem találtam ilyen helyzetet!
Válasz:() 100%-ig biztos! Második nap próbálkozom, ahogy írtam, debuggerrel megnézem, még egy hülye egycellás feldolgozást is csináltam kapcsolatteszthez, kiugrik az a hiba és ennyi
Kérdés: COM csatlakozás a különböző verziókhoz
Sziasztok.
Van egy „Consolidation” adatbázisom, amely különböző adatbázisokból különböző adatokat gyűjt össze, és mindent egy kupacba gyűjt. A probléma az, hogy ezekhez az adatbázisokhoz com-on keresztül kell csatlakozni, de ezek különböző verziók, így a végén olyan hibát kapok, mint pl.
Csatlakozási hiba!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Hiba a kontextus metódus hívásakor (Connect) : Kivétel történt (V83.COMConnector. 1 ) : Nem egyezik a kliens és a szerver verziója 1 C:Enterprise Client a verziók különböznek és a szerver (8.3. 8.1964 - 8.3. 6.2332), kliens alkalmazás: COM kapcsolat
Beállítok egy kapcsolatot, a másik megszakad...
Tudom, hogy valahogyan a komponens szolgáltatáson keresztül minden verzióhoz létre lehet hozni "saját osztályokat (összekötőket)", majd az osztály platformverziójának megfelelő New COM Object-et... lehet, hogy tévedek.
Segíts legyőzni ezt a problémát...
Válasz: Ennyi... törlöm a kérdést..
Kérdés: Com hiba a kitöltés feldolgozása közben
Helló.
8.2 Kiskereskedelem 1.
8.1-hez csatlakozom Nem tipikus konf.
com-on keresztül csatlakozom az adatbázishoz és megpróbálok létrehozni egy dokumentumot, de a "CreateDocument()" vagy a "GetObject()" meghívásakor hiba lép fel az eljárásban FeldolgozásKitöltés. lásd az ábrát.
Ugyanezt próbálom magában a 8.1-es adatbázisban, de nincs hiba, és nem lépek be a Filling Processing-ba.
Mi lehet a baj?
Válasz: turboq, egy ferdén megírt dokumentum modul!
5 perc után hozzáadva
Nem hívják! Megpróbál összeállítani! De mivel a ComConnectoron keresztüli csatlakozáskor a Dialog Mode probléma NEM LÉTEZIK, a dokumentummodult nem lehet lefordítani.
Ilyen esetekben, amikor párbeszédablakkal kell dolgozni egy objektummodulban, használjon utasításokat az előfeldolgozóhoz
Ez nem az Ön hibája, hanem az adatbázis dokumentummoduljának hibája, amelyhez csatlakozik.
Az adatbázisban a kód lefut a kliensen, és van párbeszéd mód, így minden hiba nélkül történik
Ne használja a ComConnector, V8.Application csatlakozást, akkor az interfész dolgok elérhetőek lesznek az Ön számára
5 perc után hozzáadva
=======================================================================================================================
a külső csatlakozás leírásából (SP) Félkövérrel kiemeltem, hogy mit érdemes olvasni a ComConnections-ről
Leírás:
Általánosságban elmondható, hogy az 1C:Enterprise 8 külső kapcsolaton keresztüli használata hasonló az 1C:Enterprise szerver automatizálási módban történő használatához. A fő különbségek a következők:
- Automation szerver esetén egy teljes értékű 1C:Enterprise 8 alkalmazás indul, külső kapcsolat esetén pedig egy viszonylag kis méretű folyamaton belüli COM szerver.
- Külső kapcsolaton keresztül történő munkavégzés esetén nem elérhető funkcionalitás, így vagy úgy, hogy az 1C:Enterprise 8 felhasználói felület megszervezésével kapcsolatos;
- Külső kapcsolat futtatásakor a felügyelt alkalmazásmodul (modul rendszeres alkalmazása) konfiguráció 1C:Enterprise 8. Külső kapcsolattal végzett munka során a külső csatlakozómodul szerepét tölti be.
- Gyorsabb kapcsolatbeállítás, mivel nem kell külön folyamatot létrehozni operációs rendszer, és minden művelet a hívási folyamaton belül történik;
- Gyorsabb hozzáférés az 1C:Enterprise objektumok tulajdonságaihoz és metódusaihoz, mivel a hozzáférés megszervezése nem igényel folyamatok közötti kommunikációt;
- Kevesebb operációs rendszer erőforrás-fogyasztás.
- létrejön egy COM kapcsolatkezelő, amelynek segítségével létrejön a kapcsolat;
- a COM kapcsolatkezelő Connect metódusának hívása történik. A Connect metódus egy külső kapcsolatot ad vissza információs bázis 1C: Enterprise 8;
- külső kapcsolaton keresztül hozzáférhet az infobázis érvényes metódusaihoz, tulajdonságaihoz és objektumaihoz, amellyel a kapcsolat létrejön.
A külső csatlakozás biztosítja teljes hozzáférés globális kontextusához. Ezért egy külső kapcsolat, mint metódusa rendelkezhet: rendszerállandókkal, a konfigurátorban megadott objektumok értékeivel, amelyek elérése kezelőkkel történik (például konstansok, felsorolások, könyvtárak, dokumentumok, dokumentumnaplók, jelentések , feldolgozás, jellemzőtípusok tervei, számlatáblázatok , számítási típusú tervek, regiszterek), valamint a külső kapcsolati modulban az Export kulcsszóval deklarált változók.
Elérhetőség:
Integráció.
Kérdés: COM csatlakozás, jellemzők típusterve
A feladat egy COM-kapcsolaton keresztül egy ismert, jellemző típusú tervben egy új elem programozása. A kapcsolat létrejött, itt minden rendben van.
így írom:
TypeDescriptionTech = New TypeDescription("DirectoryLink. Partnerek"); PurposeProperties = Kapcsolat. A jellemzők típusainak tervei. Az objektumkategóriák tulajdonságainak céljai. FindByName(„Magánszemélyek” címtár); NewElement = Kapcsolat. A jellemzők típusainak tervei. Objektum tulajdonságai. CreateItem(); NewElement. Név = Tulajdonnév; NewElement. PropertyAssignment = PropertyAssignment; NewElement. ValueType = DescriptionTypesTech;
Az utolsó sor nem működik. És ez érthető, talál egy ilyen típust az adatbázishoz, ahol az 1C fut, de a csatolt adatbázishoz kell egy típus. Hogyan lehet hozzájutni?
Az én verziómban egyszerűen létrejön egy „Egyéni lista” értéktípusú elem. Elvileg működik, de valahogy csúnya.
Platform 8.3. A COM kapcsolat előfeltétele. A felhasználása nélküli megoldások nem érdekesek.
Válasz:
Rolls. Köszönöm, sikerült.
Kérdés: COM csatlakozás. Lekérdezési paraméter probléma
Válasz:
Kérdés: Com kapcsolat a fájl adatbázisból a fájl adatbázisba
Válasz:
Nyomtatás (Ctrl+P)
Az 1C adatbázisok közötti adatcsere egyik lehetősége a COM-kapcsolaton keresztüli adatcsere. COM kapcsolat segítségével csatlakozhat egyik 1C adatbázishoz a másikhoz, és adatokat olvashat vagy írhat. Ez a módszer az adatbázisok kliens-szerver verzióiban és fájladatbázisokban egyaránt használható. Ez a cikk az ilyen típusú kapcsolatokat tárgyalja a 8.3-as platformon
com kapcsolat
Kétféle COM objektumot hozhat létre az 1C alkalmazáshoz. Ez az ole kapcsolatok V83.Alkalmazás és com kapcsolatokat V83.COM-csatlakozó . Esetében V83.Alkalmazás Elindul az 1C alkalmazás szinte teljes példánya. Használat esetén V83.COM-csatlakozó Elindul egy kis szerver rész. A működési sebesség ebben az esetben nagyobb, de előfordulhat, hogy egyes funkciók nem érhetők el. Különösen olyan űrlapokkal és közös modulokkal való munkavégzés, amelyeknél nincs beállítva a külső kapcsolatokkal való munka tulajdonsága. Leginkább használni kell V83.COM-csatlakozóés csak a funkcionalitás hiánya esetén V83.Alkalmazás. A működési sebesség különbsége különösen nagy volumenű adatbázisoknál lehet észrevehető. 8.2-es platformhoz használt V82.Application vagy V82.COMConnector
Hozzon létre egy OLE kapcsolatot
Kapcsolat = Új COMObject(“V83.Application” );
Hozzon létre egy COM-kapcsolatot
Kapcsolat = Új COMObject(“V83.COMConnector” );
Csatlakozási karakterlánc
//A kliens-szerver opcióhoz
Csatlakozási karakterlánc= "Srvr = ""Kiszolgálónév" ";Ref = " "Alapnév" ;
//A fájlmód opcióhoz:
Csatlakozási karakterlánc= "Fájl = ""PathKBase" “; Usr = Felhasználónév; Pwd = Jelszó”;
Kísérlet
Kapcsolat = Kapcsolat . Csatlakozás(ConnectionString) ;
Kivétel
Üzenet = New MessageToUser;
Üzenet . Szöveg =
„Nem sikerült csatlakozni az adatbázishoz” +
DescriptionErrors(); Üzenet . Jelenteni();
EndAttempt ;
Leválasztás
Kapcsolat = Undefined ;
Tárgyhoz V83.Alkalmazás A kapcsolatot meg kell szakítani, különben egy hiányos munkamenet marad, amelyet ezután manuálisan kell törölni. Esetében V83.COM-csatlakozó a kapcsolat automatikusan megszakad, amikor a kapcsolat létrejötte befejeződik, és van még egy apróság. Annak a felhasználónak, akivel a kapcsolat létrejön, a „Megerősítés kérése a program bezárásakor” jelölőnégyzetet ki kell tiltani a beállításainál.
NewObject() metódus
Új objektum létrehozásához használhatja a NewObject() metódust, például:
Mert V83.COM-csatlakozó
RequestCOM = Csatlakozás. NewObject( "Kérés ")
;
TableCOM = Csatlakozás. NewObject( „Értéktáblázat”)
;
ArrayCOM = Kapcsolat. NewObject(“Tömb”) ;
ViewCOM =Connection.NewObject
Mert V83.Alkalmazás
RequestOLE = Csatlakozás. NewObject(“ Kérés ")
;
TableOLE = Kapcsolat. NewObject(„Értéktáblázat”)
;
ArrayOLE = Connection.NewObject("Tömb") ;
ViewCOM =Connection.NewObject(„Egyedi azonosító”, StringUID);
RequestCOM . Szöveg ="VÁLASZT
| Szervezetek pozíciói. Kód,
| Szervezetek beosztásai.Név
|FROM | Címtár. Szervezetek pozíciói
SZERVEZETEK BEÁLLÍTÁSA”;
Eredmény = RequestCOM. Fuss();
Minta = Eredmény. Választ () ;
Viszlát választás. Következő()Ciklus
EndCycle ;
Konfigurációs objektumkezelőket is használhat:
DirectoryCOM = Kapcsolat. Könyvtárak. DirectoryName;
DocumentCOM = Csatlakozás. Dokumentáció. Dokumentumnév;
RegisterCOM = Kapcsolat. Információs nyilvántartások. RegisterName ;
Felsorolás fogadása és összehasonlítása COM kapcsolaton keresztül
A konfigurációban meghatározott felsorolási elemek értékeinek összehasonlításához ezeket az elemeket át kell alakítani a primitív típusok egyikébe, amelyek összehasonlítása egyszerű. Az ilyen típusok lehetnek numerikus vagy karakterlánc típusúak. A felsoroláselemek értékét a következőképpen konvertálhatja numerikus típussá:
Enum Item = Connection.Directories.Directory1.FindByCode(1).Props1;
PossibleValues = Enum Element.Metadata().Enum Values;
EnumerationElementNumber = LehetségesÉrtékek.Index(LehetségesÉrtékek.Find(Connection.XMLString(EnumerationElement)));
Ha EnumerationItemNumber = 0, akkor Report( „Enumer value1”);
ElseIfEnumerationItemNumber = 1 Akkor Jelentés("EnumerationValue2");
endIf;
Objektum lekérése COM-on keresztül azonosító alapján
A konfigurációs objektumkezelőkön keresztül kapunk egy com objektumot, például:
DocumentCOM = Csatlakozás. Dokumentáció. Dokumentumnév;
Ezután kapunk egy egyedi azonosító karakterláncot:
StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())
Azonosító = Új U egyedi azonosító (StringUID);
VAL VEL linkByIdentifier = Dokumentumok[Dokumentumnév].GetLink(Identifier);
Ha egy com objektumot dokumentumonként, azonosító alapján kell megtalálnia, akkor a következőképpen kell írnia:
WidCOM = Connection.NewObject(„Egyedi azonosító”, StringUID);
LinkByIdentifier = Connection.Documents[Dokumentumnév].GetLink(WidCOM);
Az adatok egyik 1C konfigurációból a másikba való átvitelének egyik módja a szoftveres kapcsolat COM használatával. Sok cég több különböző adatbázist használ, amelyek között bizonyos kapcsolatoknak és függőségeknek kell lenniük. Ha nem csak adatátvitelre van szükség, hanem bizonyos adatfeldolgozások végrehajtására is, akkor a COM kapcsolat lesz az optimális mechanizmus. Egy másik 1C adatbázisból származó adatok elemzésének képessége minden fejlesztő számára hasznos.
COM-on keresztül csatlakozunk az 1C adatbázishoz
A COM-kapcsolat megvalósításához az 1C-ben egy speciális, COMConnector nevű mechanizmust használnak. Ezt az objektumot a platformmal együtt telepítik, és információs bázisok összekapcsolására használják. Meg kell jegyezni, hogy a 8.2-es és 8.3-as verziókhoz különböző nevű objektumokat használnak - „V82.COMConnector” és „V83.COMConnector”.
Ne feledje, hogy az adatbázishoz való COM-kapcsolat időtartama licencbe kerül – ne ragadjon el több kapcsolat egyidejű végrehajtásával. Ez különösen fontos azon szervezetek számára, amelyek korlátozott számú licenccel rendelkeznek. Ez a probléma megoldható rutinfeladatok segítségével, amelyeket akkor hajtanak végre, amikor nincs aktív felhasználói kapcsolat az információs bázissal.
Ahhoz, hogy egy másik adatbázishoz kapcsolódhasson és a szükséges információkat lekérhesse, a következő adatokat kell ismernie:
- Milyen típusú ez - fájl vagy kliens-szerver;
- Hol található;
- Milyen névvel és jelszóval lehet bejelentkezni?
- Milyen adatok érdekelnek?
Az első három pontból a COM-kapcsolat megvalósításához létre kell hoznia egy paraméterláncot. Az információbiztonság típusától függően eltérő lehet kinézet. A kapott karakterlánc segítségével kapcsolat jön létre, melynek segítségével egy másik adatbázisból adatokat gyűjthet elemzés és feldolgozás céljából tetszőleges módszerrel.
Connection ParametersFileIB = "Fájl=""Adatbázis_útvonala""; Usr=""Felhasználónév"";Pwd=""Jelszó"""; Kapcsolati paraméterekClientServerIB = "Srvr=""Szerver_neve""; Ref=""Adatbázis_neve""; Usr=""Felhasználói_név""; Pwd=""Jelszó""";A csatlakozási funkció egyszerű, és nem vethet fel kérdéseket, ha minden paraméter helyesen van megadva. A hibakeresés és elemzés felgyorsítása érdekében lehetséges hibákat jobb, ha a csatlakozást a „Try” konstrukcióba zárjuk. A függvény egy „COM objektum” típusú értéket ad vissza, amellyel a szükséges adatok beszerzésén dolgozik.
&OnServer függvény ConnectToBase() exportConnectionIB Parameters = "Fájl=""E:\1c adatbázis\ERP""; Usr=""Rendszergazda"";Pwd=""1"""; V83COMCon= Új COMObject("V83.COMConnector"); Visszatérés kísérlete V83COMCon.Connect(IB csatlakozási paraméterek); Kivétel jelentés(ErrorDescription()); Return Undefined; EndAttempt; EndFunctionA COM-kapcsolaton keresztül nemcsak kiválaszthatja az adatokat, hanem hozzáadhatja azokat az adatbázishoz, amelyhez csatlakozik. Ne feledje, hogy 4 primitív adattípust tudunk átvinni egy COM objektumon keresztül. A többi típust a platform beépített keresési funkcióival kell megadni. Vegye figyelembe, hogy a globális platformfüggvények COM-kapcsolaton keresztül is meghívásra kerülnek.
Az 1C adatbázisból kapunk adatokat
Miután megkapta a kívánt objektumot, egy másik adatbázisból kell adatokat olvasnia. Ehhez egy COM-kapcsolaton keresztüli kérést használunk az 1C 8.3-ban a függvénytől kapott „COM objektum” típusú érték felhasználásával. Fontos, hogy először csatlakozzon az adatbázishoz, majd hajtsa végre a kérést. A végrehajtás a NewObject metóduson keresztül történik, paraméterként karakterlánc formában megadva az objektum típusát - „Kérés”.
&OnServer eljárás TestCOMOnServer() Connection = ConnectToBase(); Ha TypeValue(Kapcsolat) Type("Undefined") Then RequestBPZO = Connection.NewObject("Request"); RequestBPZO.Text = "KIVÁLASZTÁS az első 15 | DirectoryUser.Name AS név |FROM | Directory.users AS DirectoryUser"; Select = RequestBPZO.Execute().select(); While Selection.next() ciklus Report(Selection.Number); EndCycle; endIf; Az eljárás vége >Például, hogy információt szerezzünk egy bizonyos részleg felhasználóiról, paramétereken keresztül feltételt állítunk be a kérésben. Az egyik paraméter egyszerű típusú lesz - egy karakterlánc, a felosztás pedig egy hivatkozás lesz az "Enterprise Structure" címtárelemre. A lekérdezés eredménye egy tábla a felsorolt mezők típusával, amelyek abban az adatbázisban léteznek, amelyhez a COM-kapcsolat létrejött. Ha más típusokra kell konvertálnia, használja a szabványos platformfunkciókat:
- Vonal();
- Szám();
- Időpontja().
Ha egy tömböt kell átvinni az adatbázisba több paraméter, például osztályok alapján történő kiválasztáshoz, akkor a NewObject parancs is használatos. Hasonlóképpen átadhat egy értéklistát vagy -táblázatot, és egy kapcsolaton keresztül feltöltheti azokat egy másik adatbázis elemeivel. Mindegyik elérhető a kereséshez meglévő módszereket platform objektumok és mechanizmusok.
RequestBPZO = Connection.NewObject.("Kérés"); RequestBPZO.Text = "Válaszd ki az első 15-öt | DirectoryUser.Name AS név | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&NecessaryDepartment) | És DirectoryUser.Name, mint ""%"" + &NecessaryName+ ""%" " "; Osztályok tömbje = Connection.NewObject("Tömb"); Osztályok tömbje.Add(Kapcsolat.Könyvtárak.Vállalati struktúra.Kód szerinti keresés("00-000023")); Osztályok tömbje.Add(Kapcsolat.Könyvtárak.Vállalati szerkezet.Keresés kód szerint("00-000038")); Osztályok tömbje.Add(Kapcsolat.Könyvtárak.Vállalati struktúra.Kód szerinti keresés("00-000046")); Request BPZO.SetParameter("Szükséges részleg", Osztályok tömbje); RequestBPZO.SetParameter("SzükségesNév","Ekaterina"); Select = RequestBPZO.Execute().select(); While Selection.next() ciklus Report(Selection.Name); EndCycle;Dokumentumok vagy címtárelemek átvitelekor mindig felmerül egy adott objektum átvitelének ellenőrzése. A COM kapcsolatok segítségével az ilyen problémák egyedi azonosítón keresztül megoldhatók. Meg kell találni egy objektumot a plug-in adatbázisban az aktuális információbiztonságból származó azonosító alapján a „GetLink” funkció segítségével, az azonosítót karakterláncként használva. Ha nem található, létrehozhatja COM-kapcsolaton keresztül.
StrIdent = String(Directories.Users.FindByCode("00-0000313").EgyediIdentifier()); Ha NEM ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("EgyediIdentifier", StrIdent))), akkor NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Név; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Egyén; NewUser.Write(); endIf;Ezenkívül a COM-kapcsolatnak joga van az általános 1C modulokból származó eljárások és funkciók használatára, ha a „Külső kapcsolat” tulajdonság engedélyezve van. Ezen a feltételen kívül a hívott függvénynek vagy eljárásnak exportáltnak kell lennie, és nem tartalmazhat a kiszolgálón végrehajtott interaktív műveleteket. Ellenkező esetben hibaüzenetet fog látni a művelet érvénytelenségéről.
Összetett..; VariableFunction = Kapcsolat...; függvényhívás>általános modulnév>eljáráshívás>általános modulnév>Az 1C-ben egy másik adatbázishoz való külső kapcsolat lehetőségei meglehetősen kiterjedtek, és számos feladat elvégzését teszik lehetővé. Fontos az eszközök helyes értékelése és az optimális megoldás kiválasztása. A legtöbb esetben ez a készség csak tapasztalattal vagy tapasztalt szakemberek munkájának tanulmányozásával jelenik meg.
Kulcsszavak: COM, kapcsolat, külső, OLE, Automatizálás, Csatlakozás, ComConnector, Srvr
Ha 1C:Enterprise 8.0 COM-kapcsolatokat használ az adatok eléréséhez, a következő előnyökkel jár az automatizálási szerver használatához képest:
- Gyorsabb kapcsolatépítés, mivel nincs szükség külön operációs rendszer-folyamat létrehozására, és minden művelet a hívási folyamaton belül történik;
- Gyorsabb hozzáférés az 1C:Enterprise objektumok tulajdonságaihoz és metódusaihoz, mivel a hozzáférés megszervezése nem igényel folyamatok közötti kommunikációt;
- Kevesebb operációs rendszer erőforrás-fogyasztás.
Általánosságban elmondható, hogy az 1C:Enterprise 8.0 COM-kapcsolaton keresztüli használata hasonló az 1C:Enterprise kiszolgálóautomatizálási módban történő használatához. A fő különbségek a következők:
- Automation szerver esetén egy teljes értékű 1C:Enterprise 8.0 alkalmazás indul, COM kapcsolat esetén pedig egy viszonylag kis méretű folyamaton belüli COM szerver.
- Ha COM-kapcsolaton keresztül dolgozik, az 1C:Enterprise 8.0 felhasználói felület megszervezéséhez kapcsolódó funkciók ilyen vagy olyan módon nem érhetők el;
- COM-kapcsolat működtetésekor az 1C:Enterprise 8.0 konfigurációs alkalmazásmodul nincs használatban. A COM-kapcsolattal végzett munka során a szerepét a külső csatlakozómodul játssza.
1.1 COM-kapcsolat létrehozásának eljárása
Az 1C:Enterprise 8.0 adatokhoz való hozzáférés COM-kapcsolaton keresztül történő megszervezéséhez a következő műveletsort kell végrehajtani:
- létrejön egy COM objektum V8.COMConnector azonosítóval, melynek segítségével létrejön a kapcsolat;
- a korábban létrehozott V8.COMConnector objektum Connect metódusa hívódik meg. A Connect metódus egy hivatkozást ad vissza egy COM-kapcsolati objektumra az 1C:Enterprise 8.0 információs bázissal;
- A fogadott COM-kapcsolati objektumon keresztül elérhetők annak az infobázisnak az érvényes metódusai, tulajdonságai és objektumai, amellyel a kapcsolat létrejön.
Fontos! A felhasználói felület hiánya miatt a COM-kapcsolatban nem minden objektum, tulajdonság és metódus használható a COM-kapcsolatban.
1C: COM-kapcsolaton keresztül külsőleg elérhető vállalati objektumok:
- Exportált változók és eljárások/függvények a külső csatlakozási modulhoz
- Exportált változók és közös modulok eljárásai/funkciói
- Teljes modulok felvétele és kizárása a közös modulok tulajdonságainak beállításával
- Közös modulok töredékeinek felvétele és kizárása előfeldolgozó segítségével
- Globális környezet 1C:Enterprise 8.0, az ügyfélalkalmazáshoz szorosan kapcsolódó objektumok kivételével (TextDocument, TabularDocument, ...)
1.2 Külső csatlakozó modul
Mint már említettük, az alkalmazásmodul feladatait COM-kapcsolaton keresztül a külső csatlakozási modul látja el. Ez a modul tartalmazhat eseménykezelő eljárásokat When SystemStarts() és WhenSystemCompletes(), amelyek tartalmazhatják a kapcsolat inicializálásakor és befejezésekor végrehajtott műveleteket.
A külső csatlakozási modulban az Export kulcsszóval definiált eljárások, függvények és globális változók, akárcsak az alkalmazásmodulok esetében, a globális kontextus részévé válnak.
1.3 Közös modulok
A "Client", "Server" és "External Connection" tulajdonságok bevezetésre kerültek a gyakori modulokhoz. Céljuk, hogy meghatározzák a konfigurációban a modulok használatát kliens-szerver verzióban és COM kapcsolati módban.
1.4 "V8.COMConnector" objektum
A V8.COMConnector COM objektum által megoldott egyetlen feladat a COM kapcsolat létrehozása az 1C:Enterprise 8.0 információs bázissal. A V8.COMConnector objektum egy példányával korlátlan számú kapcsolat hozható létre. A V8.COMConnector objektum egyetlen Connect metódussal rendelkezik, amelyet arra terveztek, hogy COM kapcsolatot hozzon létre az 1C:Enterprise 8.0 információs bázissal.
<СтрокаСоединенияИБ>
Az információbiztonsági rendszerrel való kapcsolódási vonal Paraméter=Érték formájú töredékek lánca. A töredékeket ";" választja el egymástól. Ha az érték szóközt tartalmaz, akkor azt be kell zárni dupla idézőjelek (").
Általános paraméterek:
Usr - felhasználónév;
Pwd - jelszó.
A következő paraméter van megadva a fájl verziójához:
Fájl - infobázis könyvtár.
A következő paraméterek vannak megadva a kliens-szerver opcióhoz:
Srvr - 1C:Vállalati kiszolgáló neve;
Ref - az információs bázis neve a szerveren.
A Connect metódus COM-kapcsolatot hoz létre az 1C:Enterprise 8.0 információs bázissal, és visszaküldi a COM-kapcsolati objektumra mutató hivatkozást.
// Létrejön egy összekötő objektum
V8 = Új COMObject("V8.COMConnector");
// létrejön egy COM-kapcsolati objektum
Connection = V8.Connect("Fájl=""c:\InfoBases\Trade""; Usr=""Irgató"";")
1.5 COM csatlakozási objektum
A COM-kapcsolat az 1C:Enterprise információs bázissal teljes hozzáférést biztosít annak globális környezetéhez (lásd: „Programmodul végrehajtási környezet”). Ezért a COM-kapcsolat metódusai lehetnek: rendszerkonstansok, a kezelőkkel elérhető objektumok konfigurátorában megadott értékek (például konstansok, felsorolások, könyvtárak, dokumentumok, dokumentumnaplók, jelentések, feldolgozás, típustervek jellemzők, tervek számlák, számítási típusok tervei, regiszterek), valamint a külső kapcsolati modulban az Export kulcsszóval deklarált változók.
Ezenkívül a COM-kapcsolatnak van egy további NewObject metódusa is, amellyel bizonyos típusú értékeket lehet létrehozni.
tk = Kapcsolat. NewObject("Értéktábla");
String metódus Lehetővé teszi az 1C:Enterprise értékek karakterlánc-reprezentációinak beszerzését.
Nézet = Connection.String(Data.UniqueIdentifier());
1.6. A COM-kapcsolattal való munkavégzés jellemzői
Automatizálásban és COM-kapcsolatban az IGAZ és a HAMIS értéke a következő: -1 (mínusz egy) és 0.
Lehetőség van COM-kapcsolatok készletének megszervezésére. Ugyanakkor több COM-kapcsolati objektum ELŐRE jön létre a fogadó 1C:Enterprise szerveren, és még kevesebb időt vesz igénybe a kapcsolat létrehozása, mivel nincs szükség új objektum létrehozására.
Egy új Query Builder objektum került megvalósításra, amely a megadott beállítások alapján lekérdezési szövegeket generál. Ezt az objektumot támogatja a jelentéskészítő funkciót, amely nem kapcsolódik a jelentésnek egy táblázatkezelő dokumentumba történő kiadásához és más, a felhasználói felület. Ez az objektum használható az 1C:Enterprise szerveren és COM-kapcsolatban.
COM objektumokat használhat, amikor a beépített nyelvet futtatja az 1C:Enterprise szerveren.
A COM hibákat a rendszer beágyazott nyelvi kivételekké alakítja.
Ha a konfiguráció érvénytelen objektumot próbál létrehozni, pl. táblázatos dokumentum, egy külső csatlakozási modulban, egy megosztott modulban vagy egy objektummodulban előfordulhat, hogy a COM-kapcsolat nem jön létre, vagy kivételként megszakadhat.
Az 1C adatbázisok közötti adatcsere egyik lehetősége a COM-kapcsolaton keresztüli adatcsere.
COM kapcsolat segítségével csatlakozhat egyik 1C adatbázishoz a másikhoz, és adatokat olvashat vagy írhat. Ez a módszer az adatbázisok kliens-szerver verzióiban és fájladatbázisokban egyaránt használható. Ebben a cikkben példákat tekintünk meg az ilyen típusú kapcsolatokra. A példák a 8.2-es platformot használják.
Kétféle COM objektumot hozhat létre az 1C alkalmazáshoz. Ez V82.AlkalmazásÉs V82.COMConnector. Esetében V82.Alkalmazás Elindul az 1C alkalmazás szinte teljes példánya. használat esetén V82.COMConnector Elindul egy kis szerver rész.
A működési sebesség ebben az esetben nagyobb, de előfordulhat, hogy egyes funkciók nem érhetők el. Különösen olyan űrlapokkal és közös modulokkal való munkavégzés, amelyeknél nincs beállítva a külső kapcsolatokkal való munka tulajdonsága. Leginkább használni kell V82.COMConnectorés csak a funkcionalitás hiánya esetén V82.Alkalmazás. A működési sebesség különbsége különösen nagy volumenű adatbázisoknál lehet észrevehető.
Tehát kezdjük
- Hozzunk létre egy COM objektumot
- Mert V82.Alkalmazás Kapcsolat = New COMObject("V82.Application" ) ;
- Mert V82.COMConnector Kapcsolat = Új COMObject("V82.COMConnector" ) ;
- Hozzunk létre egy kapcsolati karakterláncot
- az adatbázis szerververziójához ConnectionString = "Srvr = " "Kiszolgálónév" ";Ref = " "Alapnév" ;
- az adatbázis fájlverziójához ConnectionString = "File = " "PathKBase" "; Usr = Felhasználónév; Pwd = Jelszó";
- Csatlakozás az adatbázishoz Kapcsolódási kísérlet = Kapcsolat. Connect(ConnectionString) ; Kivétel üzenet = New MessageToUser; Üzenet. Szöveg = + ErrorDescription() ; Üzenet. Jelenteni() ; EndAttempt ;
- Leválasztás az adatbázisról Kapcsolat = Undefined ;
Tárgyhoz V82.Alkalmazás A kapcsolatot meg kell szakítani, különben egy hiányos munkamenet marad, amelyet ezután manuálisan kell törölni. Esetében V82.COMConnector a kapcsolat automatikusan megszakad, amikor a kapcsolat létrejötte befejeződik, és van még egy apróság.
Annak a felhasználónak, akivel a kapcsolat létrejön, a „Megerősítés kérése a program bezárásakor” jelölőnégyzetet ki kell tiltani a beállításainál.
Most rakjuk össze az összes kódot
Kapcsolat = New COMObject("V82.Application" ) ; //Kapcsolat = Új COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Fájl = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Kapcsolódási kísérlet = Kapcsolat. Connect(ConnectionString) ; Kivétel üzenet = New MessageToUser; Üzenet. Szöveg = "Nem sikerült csatlakozni az adatbázishoz"+ DescriptionError() ; Üzenet. Jelenteni() ; EndAttempt ; Kapcsolat = Undefined ;
A csatlakozás típusához V82.Alkalmazás a metódust az eredetileg létrehozott COM objektumhoz és a V82.COMConnector módszert alkalmazzák a kapcsolatra. a kéréssel kapcsolatos további munka szabvány azt jelenti 1C. kódban így néz ki:
Kérelem = Kapcsolat. NewObject("Kérés" ) ; // Mert V82.COMConnector Kérelem = Kapcsolat. NewObject("Kérés" ) ; // Mert V82.Alkalmazás Kérés. Szöveg = "VÁLASZTÁS | Szervezetek pozíciói. Kód, | Szervezetek beosztásai.Név|FROM | Címtár. Szervezetek pozíciói AS Szervezetek pozíciói"; Eredmény = Kérelem. Fuss(); Minta = Eredmény. Választ() ; Viszlát választás. Következő() Loop EndLoop ;
Az 1C:Enterprise 8.3 verziónál minden változatlan marad, kivéve, hogy a COM objektumok létrehozásakor használni kell "V83.COMConnector" vagy "V83.Application".