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


Jó nap.!
A kérdés fájdalmasan közismert, az oldalról kell átvenni az információkat. De vannak árnyalatok:
1. Nincs lehetőség közvetlenül az engedélyezési oldalra lépni (először lépjen a kezdőlapra, kattintson a Bejelentkezés linkre, szerezze be az engedélyezési űrlapot, és csak ezután jelentkezzen be).
2. Meg kell látogatnia a webhelyet a következőn keresztül kereső sáv keresse meg az adatokat, majd olvassa el és keressen újra (az adatok lehetnek oroszul és angolul is, azaz ha a kereséshez orosz nyelvűek, akkor az oldal „orosz verziójában” kell keresni, és ez egy másik hivatkozás másik oldalra. Ugyanez a probléma az angollal).

Végül is:
- menjen a kezdőlapra - jelentkezzen be - keressen adatokat - (szükség esetén lépjen az oldal másik verziójára) - vigye el.

Probléma:
Az adatok nem kerülnek beolvasásra a "dokumentum" tulajdonságba hivatkozás követésekor.
Két ponton fordul elő:
- amikor a linket követjük a bejelentkezéshez (ez nem egy gomb, hanem csak egy hivatkozás);
- amikor megváltoztatjuk a nyelvet az oldalon (hivatkozás is).

jegyzet
Ha egy hivatkozás követése előtt az engedélyezési szakaszban kap egy hivatkozást, zárja be a com-ot, és nyissa meg újra az IE.navigate("link") metóduson keresztüli átmenettel, akkor a "document" tulajdonságban lévő adatok normálisan mennek. De ugyanezt nem fogja tudni megtenni a webhely nyelvének megváltoztatásakor, mert... Újra be kell jelentkeznem, és nem szeretném pontosan így megoldani ezt a problémát.

Íme a kód:

&A kliens eljárásban SetWaitingIE(IE, SecondCall=False) Ha NEM IE.Busy, akkor D = CurrentDate() + 3; While D >= CurrentDate() Loop If IE.Busy then Abort; endIf; EndCycle; endIf; Míg IE.Busy Loop EndLoop; Míg az IE.ReadyState< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"teljes" Ciklus EndCycle; Kivétel, ha SecondCall then Return; Else Link = IE.LocationURL; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Navigate(Link); SetExpectIE(IE, True); endIf; EndAttempt; EndProcedure &OnClient függvény PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Kísérletelemek = IE.Document.GetElementsByName("felhasználónév"); Ha Elements.Length = 1, akkor minden El Of Elements ciklushoz El.Érték = Bejelentkezés; EndCycle; endIf; Elements = IE.Document.GetElementsByName("jelszó"); Ha Elements.Length = 1, akkor minden El Of Elements ciklushoz El.Érték = Jelszó; EndCycle; endIf; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Engedélyezett = Igaz; Kivétel, ha CN > 3, akkor visszatér hamis; endIf; IE.Quit(); IE.Navigate(Link); SetWaitingIE(IE); MF = MF + 1; Ha PerformUserAuthorization(IE, Link, Login, Password, SCH) akkor Reture; endIf; EndAttempt; Visszaküldés engedélyezett; EndFunction &OnClient Procedure Upload(Command) SpTables = GetListTablesForUpload(); Ha SpTables = False, akkor visszatér; endIf; IE = GetCOM("InternetExplorer.Application"); Az SpTable.SOURCE_LIST minden sorához Ciklus RA = Sor.ID; Erőforrás = String.RESOURCE; IE.Navigate(Resource); SetWaitingIE(IE); Próbáld ki: If Line.NEW_PAGE_IN_LOGIN = 1 Then Classes = IE.Document.GetElementsByClassName("Osztálynév"); Ha Osztályok.Hossz = 1, akkor Minden osztályhoz Osztályokból Loop Resource = Class.All(0).Href; Elvetél; EndCycle; IE.Quit(); IE = IE.Navigate(Resource); SetWaitingIE(IE); Kivétel jelentés("A "" +String.NAME + "" webhelyhez való csatlakozás sikertelen!"); Elvetél; EndAttempt; Ellenkező esetben Report("Sikertelen kapcsolat a "" +String.NAME + "" webhelyhez!"); Elvetél; endIf; endIf; Ha NEM PerformUserAuthorization(IE, Resource, String.LOGIN, String.PASSWORD) Akkor Report("A felhasználói jogosultság a "" + String.NAME + "" webhelyen nem fejeződött be!"); Elvetél; endIf; Erőforrás = IE.LocationURL; Személyek listája = SpTable.FACE_CODES.FindLines(New Structure("FORRÁS", RA)); ListNotFound = Új tömb; A személyek listájáról minden egyes személyre Ciklus: PersonName = Person.NAME_IN_SITE; Ez orosz = Karakterkód(Személynév, 1) >= 1040; TechResource = ?(Ez orosz, StrReplace(Resource, "en_US", "ru_RU"), StrReplace(Resource, "ru_RU", "en_US")); Ha TekResurs<>IE.LocationURL Akkor RootClasses = IE.Document.GetElementsByClassName("ClassName"); Ha RootClasses.Length = 1, akkor minden RootClass-re a RootClasses-ból Loop Classes = RootClass.Children; Elvetél; EndCycle; AmGroup = hamis; RuGroup = False; Minden osztályhoz Osztályokból Loop Ha HPreg(Osztály.Osztálynév) = "legördülő fejléc" Akkor AmGroup = Find(Class.InnerText, "Amerikaiak") > 0; RuGroup = Find(Osztály.BelsőSzöveg, "Európa") > 0; ElseIf HPreg(Osztály.Osztálynév)<>"selected" Then If AmGroup And Find(Class.All(0).InnerText, "English") > 0 VAGY RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Akkor IE.Navigate(Class .All(1).Href); SetWaitingIE(IE); Elvetél; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Érték = Személynév; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); SetExpect(IE) próbálkozás; //A kapott adatok körbekapcsolása ExceptionListNotFound.Add(Person); Folytatni; EndAttempt; EndCycle; Kivétel jelentés("Hiba:" + Symbols.PS + ErrorDescription()); Elvetél; EndAttempt; EndCycle; IE.Quit(); Az eljárás vége

Válasz:

A téma nagyon érdekes, de személy szerint sajnos nincs se tapasztalatom, se lehetőségem valahogy megérteni ezt a problémát. Ha találsz információt ebben a témában, kérlek oszd meg.
--- Egy egyesületüzenetek, 2016. április 29 ---

Ha jól értem, nincs hozzáférés az SQL adatbázishoz?

--- Üzenetegyesítés, 2016. április 29 ---

Nos, ha elemzés, akkor milyen hozzáférés?

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.
Külső kapcsolat használata esetén a következő előnyökkel jár az automatizálási szerver használatához képest:
  • 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.
Az 1C:Enterprise 8 adatokhoz való hozzáférés külső kapcsolaton keresztül történő megszervezéséhez a következő műveletsort kell végrehajtani:
  • 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.
Fontos! A felhasználói felület hiánya miatt nem minden objektum, tulajdonság és metódus használható külső kapcsolaton.
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


Jó nap.
Probléma a COM-kapcsolaton keresztüli kéréssel.

Perem TK; ArrayItems = COM.NewObject("Tömb"); A TZNomenclature ciklus minden egyes sorához Nomenclature = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Nomenclature Array.Add(Nómenklatúra); EndCycle; Ha ArrayItems.Quantity()<>0 Akkor Request = COM.NewObject("Request"); Request.Text = "SELECT |PricesItemsSliceLast.Commodities AS Item, |PricesItemsSliceLast.VacationPrice AS Price, |PricesItemsSliceLast.RateÁFA, |PricesItemsSliceLast.RateNP |FROM |RegisterInformation.PricesSlicePriceAventoc, &| ory B ( &Array of Nómenklatúra) |És Készlet és anyagok.ThisGroup = HAMIS |És Regisztrátor LINK-dokumentum.Értékesítési árak beállítása) AS NomenklatúraÁrakSliceLast"; Request.SetParameter("Tételtömb", Item Array); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Értéktábla"); TK = Request.Run().Feltöltés(); Egyébként TK = Új értéktábla; TK.Columns.Add("Nómenklatúra"); TK.Columns.Add("Ár"); TK.Columns.Add("százalék"); TK.Columns.Add("áfakulcs"); endIf;

A probléma pontosan a cikkel vagy cikkek tömbjével van, ha ezeket paraméterként állítja be, akkor a kérés üres árakat ad vissza, ha pedig egyáltalán nem adja meg ezt a paramétert, akkor a kérés a megfelelő adatokat adja vissza.
Ugyanennek a külső adatbázisnak a lekérdező konzoljában minden probléma nélkül feldolgozódik.
Mi lehet a baj?

Válasz:

Próbáld meg a VremTable-en keresztül. Készítsen értéktáblázatot oszlopokkal ill. tetszik, töltse ki, húzza be a kérésbe, majd alkalmazza belső kapcsolattal.

Kérdés: Com kapcsolat a fájl adatbázisból a fájl adatbázisba


Jó reggelt kívánok. Van egy 8.3-as fájladatbázisom, amelyből egy másik fájladatbázishoz próbálok csatlakozni com kapcsolaton keresztül:

Directory = "C:\Users\1C\Workflow (teszt)"; User = "Rendszergazda"; Jelszó = ""; Connection Parameters = "Fájl="+Könyvtár+";Usr="+Felhasználó+";Pwd="+Jelszó+";"; V83 = Új COMObject("V83.COMConnector"); Csatlakozási kísérlet = V83.Connect(Kapcsolatparaméterek); Kivétel jelentés("Nem sikerült csatlakozni a dokumentumfolyamhoz!"); EndAttempt;


Kivételt dob, hibaleírás nélkül.
Mindkét adatbázist a 8.3-ban kell elindítani. A címtár és a felhasználó helyesen van megadva. Mi lehet az oka?

Válasz:

Beírom a V82 kód sorát = New COMObject(" V83.COMConnector"); a kód többi része pedig az alábbi, változtatás nélkül.

Ha a forrás- és a célplatform verziója eltérő, hiba történik.

Nem világos, hogy a könyvtár melyik verzióját kell regisztrálni, és hol kell regisztrálni?

Azt hiszem, regisztrálnom kell a könyvtárat, a 8.2.18.61-es verziót, és ezt egy bat fájlon keresztül teszem meg

regsvr32 /n /i:user "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
szünet

msk-test1c:1641 -- ez a 8.3.5.1098 szerver
V82 = Új COMObject("V82. COMConnector"); Jelentés ("Csatlakozás a Számvitel 3.0-hoz..."); Csatlakozási kísérlet = V82. Connect("srvr = ""msk-test1c:1641""; ref = ""db_teszt""; usr = ""Rendszergazda""; pwd = ""123"""); Értesítés ("Hurrá kapcsolat létrejött!"); Exception Report("Nincs kapcsolat az adatbázissal!"); Jelentés(Hibaleírás()); // Info = InformationAboutError(); // Jelentés("Leírás= "" + Info.Leírás + """); // Jelentés ("ModuleName= "" + Info.Modulnév + """); // Jelentés ("LineNumber=" + Info.LineNumber); // Jelentés ("SourceLine= "" + Info.SourceString + """); Return; EndAttempt;

Hol kell regisztrálni a könyvtárat, a kliensen, a 8.2-es szerveren, a 8.3-as szerveren? ábra lent.
(a kliens-szerver verzióhoz és az 1C adatbázis fájlverziójához)

Válasz: Feladat volt kommunikálni egy terminállal egy webszolgáltatáson keresztül. Az alap, mondjuk könnyű. Szintén 0,5 vagy gyorsabb?

Nehéz megmondani – nincs elég adatom. 0,5 másodpercnek örültünk, mínusz a felesleges 1C kliens egy külső gépen, mínusz a könyvtári verziók szinkronizálása az 1C motor frissítése után, mínusz az istenverte comsafearray, normális nevek és mezőtípusok... a másik oldal (az 1C-vel integrálódó rendszer) „nem fogják megérteni”, amikor kiderül, hogy át kell írniuk az 1C hívásaikat egy új „rendszerkommunikációs modellre”. Ám miután egyszer kipróbáltunk egy funkciót a tesztadatbázisban, most azzal csúfoltak minket, hogy „váltsunk mihamarabb a szolgáltatásra”.

Kérdés: Hogyan használható a TypeContains Com objektumokhoz?


Ha Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) then There IsNomenclature = True; endIf;

A "Props" érkezett egy másik 1c adatbázissal való com kapcsolatról. Hiba történik az összehasonlítás során:

(Külső feldolgozás.Együttható újrakalkuláció.Form.Form.Form(183)): Hiba a kontextus metódus (ContainsType) meghívásakor.
Ha Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) akkor
mert:
Kivétel történt (1C:Enterprise 8.3.8.1964): Típuseltérés ("1" paraméterszám)

Gyanítom, hogy össze kell hasonlítani a com-ban található típussal? Hogyan ellenőrizhető helyesen a típus?

Válasz:

Nem gurul. A problémát így oldottam meg:
A vevő adatbázisban az általános modulban a külső kapcsolat jelölőnégyzet bejelölésével a kód:

Funkció CheckAttributeType(Attribútum, Type) Export Return Attribute.Type.ContainsType(Típus(Típus)); EndFunction

Az adatbázisban, ahonnan csatlakozom, a Com-on keresztül hívom meg az eljárást:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Attribútum, "DirectoryLink.Nomenclature")

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:

  1. Milyen típusú ez - fájl vagy kliens-szerver;
  2. Hol található;
  3. Milyen névvel és jelszóval lehet bejelentkezni?
  4. 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; EndFunction

A 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().
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 = &RequiredDepartment | És DirectoryUser.Name, mint ""%"" + &RequiredName+ ""%""" ; Request BPZO.SetParameter("Szükséges részleg", Kapcsolat. Könyvtárak. Vállalati struktúra. Keresés kód szerint("00-000023")); RequestBPZO.SetParameter("SzükségesNév","Ekaterina"); Select = RequestBPZO.Execute().select(); While Selection.next() ciklus Report(Selection.Name); EndCycle;

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:

  1. 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;

  2. 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;
  3. 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:

  1. 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.

  2. 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;
  3. 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:

  1. létrejön egy COM objektum V8.COMConnector azonosítóval, melynek segítségével létrejön a kapcsolat;

  2. 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;
  3. 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:

  1. Exportált változók és eljárások/függvények a külső csatlakozási modulhoz

  2. Exportált változók és közös modulok eljárásai/funkciói
  3. Teljes modulok felvétele és kizárása a közös modulok tulajdonságainak beállításával

  4. Közös modulok töredékeinek felvétele és kizárása előfeldolgozó segítségével
  5. 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

  1. Hozzunk létre egy COM objektumot
    • Mert V82.Alkalmazás Kapcsolat = New COMObject("V82.Application" ) ;
    • Mert V82.COMConnector Kapcsolat = Új COMObject("V82.COMConnector" ) ;
  2. 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ó";
  3. 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 ;
  4. 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".




Top