Prejemanje podatkov preko com povezave od 1s. V8: povezava COM. Prejem in primerjava enumeracije preko COM povezave
Vprašanje: Razčlenjevanje spletnega mesta z uporabo COM IE 11
odgovor:
Vprašanje: COM povezava 1C 8.3 - 1C 8.3 Ali je mogoče v povezavo vnesti razhroščevalnik
Člane foruma sem želel vprašati, ali je sploh mogoče razhroščevanje, ko se povežem prek povezave COM z uporabo obdelave iz ene baze podatkov na platformi 8.3.6 (BP 3.0) na zunanji povezovalni modul samonapisane baze podatkov (ki se tudi izvaja na platformi 8.3.6) in kliče izvoze iz nje postopke z uporabo obdelave? Baze podatkov trenutno temeljijo na datotekah in se nahajajo na enem osebnem računalniku, vendar je v načrtu strežniška različica. Do takrat sem uporabljal spodnje konstrukcije za prenos poljubne kode za izvajanje prek povezave COM, pa tudi za beleženje napak. Tukaj so fragmenti postopkov v sami napisani bazi podatkov v zunanjem povezovalnem modulu:
Funkcija ExecuteIn(CodeExecute, pomožni parameter = "") Izvoz
Varnostno preverjanje(); // Zaščita pred poskusi izvajanja zlonamerne kode pri zunanji povezavi v imenu drugega uporabnika Odgovor = "0" //Če ni treba ničesar vrniti, potem če v kodi ni napak  //vrne prav OK  //Ker Posredovana koda lahko vsebuje napake, nato pa bomo njeno izvedbo zaključili s poskusom. Poskusite izvesti (CodeExecute); // Izvedi kodo kot niz na drugem računalniku prek povezave COM (modul zunanje povezave Libra Base) Izjema   //če je napaka, vrni njeno besedilo Odgovor = ErrorDetailView(ErrorInfo()); EndAttempt ; Vrni odgovor; Funkcija EndFunction TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Zaščita pred poskusi izvajanja zlonamerne kode pri zunanji povezavi v imenu drugega uporabnika. OutParameter = "Obstaja povezava z bazo tehtnice preko COM povezave!"; Vrni True ; EndFunction
Iz BP 3.0 izvedem naslednji fragment:
Poskus
Com = New COMObject("V83.COMConnector"); Povezava = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Test opravljen! Obstaja povezava z bazo tehtnice"); Izjema Napaka = ErrorDetailView(ErrorInfo()); TellUser("Ni povezave COM z bazo Libra! Podrobnosti"+Napaka); Com=Nedefinirano ; Vrnitev ; EndAttempt ; Izhod = ""; In = "1"; If Connection.Communication Test(In, Out) Then TellUser("Komunikacijski test s konfiguracijo lestvice uspešen! Odgovor: "+Out); V nasprotnem primeru TellUser("Komunikacijski test s konfiguracijo tehtnice ni uspel! Odgovor: "+Izhod); EndIf ;
Seveda razumem, da ne bo mogoče vnesti operaterja Execute(CodeString1C8), vendar obstaja taka možnost pri klicu oddaljene procedure modula zunanjo povezavo iz glavne baze podatkov Connection.TestConnections(In, Out), da vnese svojo kodo v isti seji razhroščevalnika v funkciji Security Check() njihove klicne procedure?
O tej temi sem že pogledal dokumentacijo, ki sem jo našel. Nastavil sem možnosti za omogočanje odpravljanja napak in prekinitvenih točk povsod v obeh konfiguracijah. Zagnal sem oba konfiguratorja.
Ali je v tej situaciji sploh mogoče nadalje razhroščevati postopek varnostnega preverjanja() na strani zunanjega povezovalnega modula?
Vprašanje: Napačen IP naslov v COM povezavi
Obstaja obdelava, ki prenaša dokumente prek V83.ComConnector med strežniki. Strežnik 1 (1C različica 8.2.19.90) se vedno poveže s strežnikom 2 (različica 8.3.8.2033). Povezavna vrstica je vsebovala naslov IP strežnika 2 in vse je dobro delovalo. Na samem strežniku 1 sem videl tudi nameščeno platformo kot na strežniku 2, različica 8.3.9.2033 (če je to pomembno).
Težava je v tem, da se je na strežniku 2 IP naslov spremenil, obdelava je seveda prenehala delovati in ko sem v povezovalno vrstico vnesel nov IP, obdelava ustvari napako, katere opis je še vedno stari IP (!) in besedilo »Poskus vzpostavitve povezave je bil neuspešen, ker od drugega računalnika v zahtevanem času ni bil prejet zahtevani odgovor ali vzpostavljena povezava zaradi napačnega odziva že povezanega računalnika."
Vse so ponovno zagnali, počistili predpomnilnike itd., admini prisegajo, da je z njihove strani vse ok, preko RDP se lahko prijaviš iz enega strežnika na drugega itd.
Kaj bi lahko bilo narobe, kako naj to rešim? Iskal sem po vsem internetu in nisem našel takšne situacije!
odgovor:() 100% prepričan! Drugi dan poskusim, kot sem napisal, pogledam z debuggerjem, celo naredil sem neumno enocelično obdelavo za test povezave, pojavi se tista napaka in to je to
Vprašanje: COM povezava z različnimi različicami
Pozdravljeni vsi skupaj.
Imam bazo podatkov ala “Consolidation”, ki zbira različne podatke iz različnih baz in vse skupaj združi na en kup. Težava je v tem, da se morate na te baze podatkov povezati prek com, vendar gre za različne različice, tako da na koncu dobim napako, kot je
Napaka povezave!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Napaka pri klicu kontekstne metode (Connect) : Prišlo je do izjeme (V83.COMConnector. 1 ) : Neujemanje med različicama odjemalca in strežnika 1 C:Enterprise Client različice se razlikujejo in strežnik (8.3. 8.1964 - 8.3. 6.2332), odjemalska aplikacija: povezava COM
Eno povezavo vzpostavim, druga odpade...
Vem, da lahko prek storitve komponente nekako ustvarite »svoje lastne razrede (konektorje)« za vsako različico in nato ustvarite nov objekt COM, ki ustreza različici razreda na platformi ... morda se motim.
Pomagaj mi premagati to težavo ...
odgovor: To je to... bom odstranil vprašanje..
Vprašanje: Com Error in Processing Filling
Zdravo.
8.2 Maloprodaja 1.
Povezujem se z 8.1. Ni tipična konf.
Prek com se povežem z bazo podatkov in poskušam ustvariti dokument, vendar se pri klicu »CreateDocument()« ali »GetObject()« pojavi napaka v postopku Obdelava Polnjenje. glej sl.
Enako poskusim v sami bazi 8.1, pa ni nobene napake, prav tako ne vstopim v Filling Processing.
Kaj bi lahko bilo narobe?
odgovor: turboq, pokvarjeno napisan dokumentni modul!
Dodano po 5 minutah
Ni poklicana! Poskuša se sestaviti! Ker pa pri povezovanju prek ComConnectorja težava Dialog Mode NE OBSTAJA, modula dokumenta ni mogoče prevesti.
Za take primere, ko je potrebno izvesti delo z pogovornim oknom v objektnem modulu, uporabite navodila predprocesorju
To ni vaša napaka, ampak napaka v dokumentnem modulu v bazi podatkov, s katero se povezujete.
V bazi podatkov se koda izvaja na odjemalcu in obstaja Dialogue Mode, tako da se vse zgodi brez napak
Za povezavo ne uporabljajte aplikacije ComConnector, V8.Aplikacija, potem vam bodo na voljo vmesnikske stvari
Dodano po 5 minutah
=======================================================================================================================
iz opisa zunanjega priključka (SP) S krepkim tiskom sem poudaril, kaj morate prebrati o ComConnections
Opis:
Na splošno je delo z 1C:Enterprise 8 prek zunanje povezave podobno delu z 1C:Enterprise v načinu avtomatizacije strežnika. Glavne razlike so naslednje:
- V primeru strežnika za avtomatizacijo se zažene polna aplikacija 1C:Enterprise 8, v primeru zunanje povezave pa se zažene relativno majhen strežnik COM v procesu.
- Ni na voljo pri delu prek zunanje povezave funkcionalnost, tako ali drugače povezane z organizacijo uporabniškega vmesnika 1C:Enterprise 8;
- Pri izvajanju zunanje povezave modul upravljane aplikacije (modul redna uporaba) konfiguracija 1C:Enterprise 8. Njegovo vlogo pri delu z zunanjo povezavo igra zunanji priključni modul.
- Hitrejša nastavitev povezave, saj ni treba ustvariti ločenega procesa operacijski sistem, in vsa dejanja se izvajajo znotraj klicnega procesa;
- Hitrejši dostop do lastnosti in metod objektov 1C:Enterprise, saj organizacija dostopa ne zahteva medprocesne komunikacije;
- Manjša poraba virov operacijskega sistema.
- ustvari se upravljalnik povezav COM, s pomočjo katerega se vzpostavi povezava;
- izvede se klic metode Connect upravitelja povezav COM. Metoda Connect vrne zunanjo povezavo z informacijsko bazo 1C:Enterprise 8;
- preko zunanje povezave se izvede dostop do veljavnih metod, lastnosti in objektov informacijske baze, s katero je vzpostavljena povezava.
Zunanji spoj zagotavlja popoln dostop njenemu globalnemu kontekstu. Zato ima lahko zunanja povezava kot svoje metode: sistemske konstante, vrednosti objektov, določenih v konfiguratorju, do katerih se dostop izvaja z upravitelji (na primer konstante, oštevilčenja, imeniki, dokumenti, dnevniki dokumentov, poročila , obdelave, načrti tipov karakteristik, kontni načrti , plani kalkulacijskih tipov, registri), kot tudi spremenljivke, deklarirane v zunanjem povezovalnem modulu s ključno besedo Export.
Razpoložljivost:
Integracija.
Vprašanje: Povezava COM, načrt tipa značilnosti
Naloga je programska izdelava novega elementa v znanem načrtu značilnih tipov preko COM povezave. Povezava je vzpostavljena, tukaj je vse v redu.
Pišem takole:
TypeDescriptionTech = New TypeDescription("DirectoryLink. Nasprotne stranke"); PurposeProperties = Povezava. Načrti vrst značilnosti. Nameni lastnosti kategorij predmetov. FindByName(»Imenik »Posamezniki««); NewElement = Povezava. Načrti vrst značilnosti. Lastnosti predmeta. UstvariElement(); NewElement. Ime = ImeLastnosti; NewElement. PropertyAssignment = Dodelitev lastnosti; NewElement. ValueType = DescriptionTypesTech;
Zadnja vrstica ne deluje. In to je razumljivo, najde takšen tip za bazo podatkov, kjer se izvaja 1C, vendar potrebujem tip za priloženo bazo podatkov. Kako do njega?
V moji različici je preprosto ustvarjen element z vrsto vrednosti »Seznam po meri«. Načeloma deluje, vendar je nekako grdo.
Platforma 8.3. Povezava COM je predpogoj. Rešitve brez njegove uporabe niso zanimive.
odgovor:
Zvitki. Hvala, uspelo je.
Vprašanje: Povezava COM. Težava s parametrom poizvedbe
odgovor:
Vprašanje: Com povezava med podatkovno zbirko datotek
odgovor:
Natisni (Ctrl+P)
Ena od možnosti za izmenjavo podatkov med zbirkami podatkov 1C je izmenjava prek COM povezave. S povezavo COM se lahko povežete iz ene baze podatkov 1C v drugo in berete ali pišete podatke. Ta metoda se lahko uporablja tako v različicah baz podatkov odjemalec-strežnik kot tudi v datotečnih bazah podatkov. Ta članek obravnava te vrste povezav na platformi 8.3
com povezava
Za aplikacijo 1C lahko ustvarite dve vrsti objektov COM. To so stare povezave V83.Aplikacija in com povezave V83.COMConnector . V primeru V83.Aplikacija Zažene se skoraj popolna kopija aplikacije 1C. V primeru uporabe V83.COMConnector Zažene se majhen strežniški del. Hitrost delovanja je v tem primeru višja, vendar nekatere funkcije morda ne bodo na voljo. Predvsem delo z obrazci in skupnimi moduli, za katere lastnost dela z zunanjimi povezavami ni nastavljena. Večinoma bi morali uporabiti V83.COMConnector in samo v primeru pomanjkanja funkcionalnosti V83.Aplikacija. Razlika v hitrosti delovanja je lahko še posebej opazna pri bazah podatkov velikega obsega. Za platformo 8.2 uporabljeno V82.Application ali V82.COMConnector
Vzpostavite povezavo OLE
Connection = New COMObject(“V83.Application” ) ;
Vzpostavite povezavo COM
Connection = New COMObject(“V83.COMConnector” ) ;
Povezovalni niz
//Za možnost odjemalec-strežnik
Povezavni niz= “Srvr = ““ServerName” “;Ref = “ “BaseName” ;
//Za možnost datotečnega načina:
Povezavni niz= “Datoteka = ““PathKBase” “; Usr = uporabniško ime; Pwd = geslo”;
Poskus
Povezava = Povezava . Povežite se(ConnectionString) ;
Izjema
Sporočilo = Novo sporočiloUporabniku;
Sporočilo . Besedilo =
»Povezava z bazo podatkov ni uspela« +
DescriptionErrors(); Sporočilo . Poročati();
EndAttempt ;
Prekinitev povezave
Povezava = Nedefinirano;
Za objekt V83.Aplikacija Povezavo je treba prekiniti, sicer ostane nepopolna seja, ki jo je treba nato ročno izbrisati. V primeru V83.COMConnector povezava se samodejno prekine, ko je postopek, v katerem je bila vzpostavljena povezava, končan.In še ena malenkost. Za uporabnika, pod katerim se vzpostavlja povezava, mora biti v nastavitvah onemogočeno potrditveno polje »Zahtevaj potrditev ob zapiranju programa«.
Metoda NewObject().
Če želite ustvariti nov predmet, lahko uporabite metodo NewObject(), na primer:
Za V83.COMConnector
ZahtevaCOM = Povezava. NewObject( "Prošnja ")
;
TableCOM = Povezava. NewObject( "Tabela vrednosti")
;
ArrayCOM = Povezava. NewObject(“Matrika”);
ViewCOM = Connection.NewObject
Za V83.Aplikacija
ZahtevaOLE = Povezava. NewObject(" Prošnja ")
;
TableOLE = Povezava. NewObject("Tabela vrednosti")
;
ArrayOLE = Connection.NewObject("Matrika");
ViewCOM = Connection.NewObject(»UniqueIdentifier«, StringUID);
ZahtevaCOM . Besedilo ="IZBERI
| Položaji Organizacij Kodeks,
| Položaji organizacij. Ime
|OD | Imenik. Položaji organizacij
KAKO DO POLOŽAJEV ORGANIZACIJ”;
Rezultat = ZahtevaCOM. Zaženi();
Vzorec = Rezultat. Izberite ();
Adijo Izbor. Naslednji()Cikel
Končni cikel ;
Uporabite lahko tudi upravitelje konfiguracijskih objektov:
ImenikCOM = Povezava. Imeniki. ime imenika;
DokumentCOM = Povezava. Dokumentacija. ImeDokumenta;
RegisterCOM = Povezava. Informacijski registri. RegisterName ;
Prejem in primerjava enumeracije preko COM povezave
Za primerjavo vrednosti elementov oštevilčenja, definiranih v konfiguraciji, je potrebno te elemente pretvoriti v enega od primitivnih tipov, katerih primerjava je enostavna. Takšni tipi so lahko številski ali nizovni. Vrednost elementa oštevilčenja lahko pretvorite v številsko vrsto, kot je ta:
Enum Item = Connection.Directories.Directory1.FindByCode(1).Props1;
PossibleValues = Enum Element.Metadata().Enum Values;
EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));
If EnumerationItemNumber = 0 Then Report( “Enumer value1”);
ElseIfEnumerationItemNumber = 1 Potem Poročilo ("EnumerationValue2");
endIf;
Pridobivanje predmeta prek COM po identifikatorju
Preko upraviteljev konfiguracijskih objektov dobimo objekt com, na primer:
DokumentCOM = Povezava. Dokumentacija. ImeDokumenta;
Nato dobimo edinstven identifikatorski niz:
StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())
Identifikator = New U uniqueIdentifier(StringUID);
Z linkByIdentifier = Dokumenti[ImeDokumenta].GetLink(Identifikator);
Če morate poiskati predmet com po dokumentu po identifikatorju, morate napisati takole:
WidCOM = Connection.NewObject(»UniqueIdentifier«, StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);
Eden od načinov za prenos podatkov iz ene konfiguracije 1C v drugo je programska povezava z uporabo COM. Mnoga podjetja uporabljajo več različnih baz podatkov, med katerimi morajo obstajati določene povezave in odvisnosti. Če ni potrebno samo prenašati podatkov, ampak tudi izvajati določeno obdelavo podatkov, bo povezava COM optimalen mehanizem. Možnost analize podatkov iz druge baze podatkov 1C je koristna za vsakega razvijalca.
Povezujemo se preko COM z bazo podatkov 1C
Za izvedbo povezave COM v 1C se uporablja poseben mehanizem, imenovan COMConnector. Ta objekt je nameščen skupaj s platformo in se uporablja za povezovanje informacijskih baz. Upoštevati je treba, da se za različici 8.2 in 8.3 uporabljajo predmeti z različnimi imeni - "V82.COMConnector" oziroma "V83.COMConnector".
Ne pozabite, da trajanje povezave COM z bazo podatkov stane licenco - ne nasedajte hkratnemu izvajanju več povezav. To je še posebej pomembno za organizacije, ki imajo omejeno število licenc. To težavo je mogoče rešiti s pomočjo rutinskih nalog, ki se izvajajo, ko ni aktivnih uporabniških povezav z informacijsko bazo.
Da se lahko povežete z drugo bazo podatkov in zahtevate potrebne informacije, morate poznati naslednje podatke:
- Katere vrste je - datoteka ali odjemalec-strežnik;
- Kje je;
- Katero ime in geslo lahko uporabite za prijavo?
- Kateri podatki vas zanimajo?
Iz prvih treh točk morate za izvedbo povezave COM ustvariti niz parametrov. Glede na vrsto informacijske varnosti se bo razlikovala videz. Z uporabo prejetega niza se vzpostavi povezava, s pomočjo katere lahko zbirate podatke iz druge baze podatkov za analizo in obdelavo s poljubnimi metodami.
Parametri povezaveFileIB = "File=""Path_to_database""; Usr=""User_name"";Pwd=""Password"""; Parametri povezaveClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Password""";Funkcija povezave je preprosta in ne bi smela povzročati vprašanj, če so vsi parametri pravilno določeni. Za pospešitev odpravljanja napak in analize možne napake bolje je povezavo zapreti v konstrukcijo “Poskusi”. Funkcija bo vrnila vrednost tipa "COM object", s katero boste delali za pridobitev potrebnih podatkov.
Funkcija &OnServer ConnectToBase() exportConnectionIB Parameters = "File=""E:\1c database\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= Nov COMObject("V83.COMConnector"); Poskus vrnitve V83COMCon.Connect(Parametri povezave IB); Poročilo o izjemi (Opis napake ()); Vrni Nedefinirano; EndAttempt; EndFunctionPrek povezave COM ne morete samo izbrati podatkov, ampak jih tudi dodati v bazo podatkov, s katero se povezujete. Ne pozabite, da lahko prek objekta COM prenesemo 4 primitivne vrste podatkov. Druge vrste bo treba določiti z uporabo vgrajenih iskalnih funkcij platforme. Upoštevajte, da se funkcije globalne platforme kličejo tudi prek povezave COM.
Podatke prejemamo iz baze podatkov 1C
Ko prejmete želeni objekt, morate prebrati podatke iz druge baze podatkov. Za to uporabimo zahtevo prek povezave COM v 1C 8.3 z uporabo prejete vrednosti tipa "COM object" iz funkcije. Pomembno je, da se najprej povežete z bazo podatkov in nato izvedete zahtevo. Izvedba se izvede z metodo NewObject, pri čemer se kot parameter določi vrsta objekta v obliki niza - "Zahteva".
&OnServer postopek TestCOMOnServer() Connection = ConnectToBase(); If TypeValue(Connection) Type("Undefined") Then RequestBPZO = Connection.NewObject("Request"); RequestBPZO.Text = "IZBERI prvih 15 | DirectoryUser.Name AS Ime |FROM | Directory.users AS DirectoryUser"; Izberite = RequestBPZO.Execute().select(); Medtem ko Selection.next() zanka Report(Selection.Number); EndCycle; endIf; Konec postopka >Na primer, za pridobitev podatkov o uporabnikih določenega oddelka bomo v zahtevku postavili pogoj preko parametrov. En parameter bo preproste vrste - niz, delitev pa bo povezava do elementa imenika "Struktura podjetja". Rezultat poizvedbe je tabela z navedenimi polji vrste, ki obstaja v bazi podatkov, s katero je prišlo do povezave COM. Če jih morate pretvoriti v druge vrste, uporabite standardne funkcije platforme:
- Črta();
- Število ();
- Datum().
Če morate prenesti matriko v bazo podatkov za izbiro na podlagi več parametrov, na primer oddelkov, se uporabi tudi ukaz NewObject. Podobno lahko posredujete seznam ali tabelo vrednosti in jih napolnite z elementi druge zbirke podatkov prek povezave. Vsi so na voljo za iskanje obstoječe metode predmeti in mehanizmi platforme.
RequestBPZO = Connection.NewObject.("Request"); RequestBPZO.Text = "IZBERITE prvih 15 | DirectoryUser.Name AS Ime | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&NecessaryDepartment) | In DirectoryUser.Name kot ""%"" + &NecessaryName+ ""%" " "; Niz oddelkov = Connection.NewObject("Array"); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000023")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000038")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000046")); Zahteva BPZO.SetParameter("Zahtevan oddelek", niz oddelkov); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Izberite = RequestBPZO.Execute().select(); Medtem ko Selection.next() zanka Report(Selection.Name); EndCycle;Pri prenosu dokumentov ali elementov imenika se vedno pojavi vprašanje kontrole prenosa določenega objekta. S pomočjo povezav COM je takšne težave mogoče rešiti z enoličnim identifikatorjem. Predmet v bazi podatkov vtičnikov morate poiskati po identifikatorju iz trenutne informacijske varnosti s funkcijo »GetLink«, pri čemer uporabite identifikator kot niz. Če ga ne najdete, ga lahko ustvarite s povezavo COM.
StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Če NI ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) potem NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Ime; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Individual; NewUser.Write(); endIf;Poleg tega ima povezava COM pravico do uporabe postopkov in funkcij iz običajnih modulov 1C z omogočeno lastnostjo »Zunanja povezava«. Poleg tega pogoja mora biti klicana funkcija ali postopek izvoz in ne sme vključevati interaktivnih dejanj, izvedenih na strežniku. V nasprotnem primeru boste videli napako o neveljavni operaciji.
Spojina..; VariableFunction = Povezava..; klic funkcije>splošno ime modula>klic postopka>splošno ime modula>Možnosti zunanje povezave z drugo bazo podatkov v 1C so precej obsežne in vam lahko omogočajo opravljanje številnih nalog. Pomembno je, da znamo pravilno ovrednotiti orodja in izbrati optimalno rešitev. V večini primerov se ta veščina pojavi šele z izkušnjami ali s preučevanjem primerov dela izkušenih strokovnjakov.
Ključne besede: COM, povezava, zunanji, OLE, avtomatizacija, povezava, ComConnector, Srvr
Pri uporabi 1C:Enterprise 8.0 COM povezav za dostop do podatkov so v primerjavi z uporabo strežnika Automation naslednje prednosti:
- Hitrejša vzpostavitev povezave, saj ni treba ustvariti ločenega procesa operacijskega sistema in se vsa dejanja izvajajo znotraj klicnega procesa;
- Hitrejši dostop do lastnosti in metod objektov 1C:Enterprise, saj organizacija dostopa ne zahteva medprocesne komunikacije;
- Manjša poraba virov operacijskega sistema.
Na splošno je delo z 1C:Enterprise 8.0 prek povezave COM podobno delu z 1C:Enterprise v načinu avtomatizacije strežnika. Glavne razlike so naslednje:
- V primeru strežnika Automation se zažene polna aplikacija 1C:Enterprise 8.0, v primeru COM povezave pa se zažene relativno majhen strežnik COM v procesu.
- Pri delu prek povezave COM funkcionalnosti, tako ali drugače povezane z organizacijo uporabniškega vmesnika 1C:Enterprise 8.0, niso na voljo;
- Pri delovanju COM povezave se konfiguracijski aplikacijski modul 1C:Enterprise 8.0 ne uporablja. Njegovo vlogo pri delu s povezavo COM igra zunanji priključni modul.
1.1 Postopek za vzpostavitev COM povezave
Za organizacijo dostopa do podatkov 1C:Enterprise 8.0 prek povezave COM se izvede naslednje zaporedje dejanj:
- ustvari se COM objekt z identifikatorjem V8.COMConnector, s pomočjo katerega se vzpostavi povezava;
- pokliče se metoda Connect predhodno ustvarjenega objekta V8.COMConnector. Metoda Connect vrne povezavo do objekta povezave COM z informacijsko bazo 1C:Enterprise 8.0;
- Preko prejetega objekta COM povezave se dostopa do veljavnih metod, lastnosti in objektov informacijske baze, s katero je vzpostavljena povezava.
Pomembno! Zaradi pomanjkanja uporabniškega vmesnika v povezavi COM ni mogoče uporabiti vseh objektov, lastnosti in metod v povezavi COM.
Objekti 1C:Enterprise, dostopni od zunaj preko COM povezave:
- Izvožene spremenljivke in postopki/funkcije zunanjega modula za združevanje
- Izvožene spremenljivke in postopki/funkcije skupnih modulov
- Vključevanje in izključevanje celotnih modulov z nastavitvijo lastnosti skupnih modulov
- Vključevanje in izključevanje fragmentov skupnih modulov z uporabo predprocesorja
- Globalni kontekst 1C:Enterprise 8.0, z izjemo objektov, tesno povezanih z odjemalsko aplikacijo (TextDocument, TabularDocument, ...)
1.2 Zunanji priključni modul
Kot smo že omenili, naloge aplikacijskega modula pri delu prek povezave COM opravlja zunanji povezovalni modul. Ta modul ima lahko procedure za obravnavo dogodkov When SystemStarts() in WhenSystemCompletes(), ki lahko vsebujejo dejanja, izvedena ob inicializaciji oziroma prekinitvi povezave.
Postopki, funkcije in globalne spremenljivke, definirane v zunanjem spojnem modulu s ključno besedo Export, postanejo, tako kot v primeru aplikacijskega modula, del globalnega konteksta.
1.3 Skupni moduli
Za običajne module so bile uvedene lastnosti »Odjemalec«, »Strežnik« in »Zunanja povezava«. Namenjeni so določanju v konfiguraciji uporabe modulov v različici odjemalec - strežnik in v načinu povezave COM.
1.4 Objekt "V8.COMConnector"
Edina naloga, ki jo rešuje COM objekt V8.COMConnector, je vzpostavitev COM povezave z informacijsko bazo 1C:Enterprise 8.0. Z enim primerkom objekta V8.COMConnector je mogoče vzpostaviti neomejeno število povezav. Objekt V8.COMConnector ima eno samo metodo Connect, namenjeno vzpostavitvi COM povezave z informacijsko bazo 1C:Enterprise 8.0.
<СтрокаСоединенияИБ>
Povezava s sistemom informacijske varnosti je veriga fragmentov oblike Parameter=Vrednost. Fragmenti so med seboj ločeni z ";". Če vrednost vsebuje presledke, mora biti priložena dvojni narekovaji (").
Skupni parametri:
Usr - uporabniško ime;
Pwd - geslo.
Za različico datoteke je definiran naslednji parameter:
Datoteka - imenik informacijske baze.
Za možnost odjemalec-strežnik so določeni naslednji parametri:
Srvr - ime strežnika 1C:Enterprise;
Ref - ime informacijske baze na strežniku.
Metoda Connect vzpostavi povezavo COM z informacijsko bazo 1C:Enterprise 8.0 in vrne povezavo do objekta povezave COM.
// Objekt konektorja je ustvarjen
V8 = Nov COMObject("V8.COMConnector");
// ustvarjen je objekt povezave COM
Povezava = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")
1.5 Objekt povezave COM
Povezava COM z informacijsko bazo 1C:Enterprise omogoča popoln dostop do njenega globalnega konteksta (glejte »Kontekst izvajanja programskega modula«). Zato ima lahko povezava COM kot metode: sistemske konstante, vrednosti, določene v konfiguratorju objektov, do katerih dostopate z upravitelji (na primer konstante, oštevilčenja, imeniki, dokumenti, dnevniki dokumentov, poročila, obdelave, načrti za vrste karakteristik, načrti kontov, načrti kalkulacijskih tipov, registri), kot tudi spremenljivke, deklarirane v zunanjem povezovalnem modulu s ključno besedo Export.
Poleg tega ima povezava COM dodatno metodo NewObject, ki jo je mogoče uporabiti za ustvarjanje vrednosti določenih vrst.
tk = Povezava. NewObject("Vrednostna tabela");
String method Omogoča pridobitev nizovnih predstavitev vrednosti 1C:Enterprise.
Pogled = Connection.String(Data.UniqueIdentifier());
1.6. Značilnosti dela s povezavo COM
V avtomatizaciji in v povezavi COM imata TRUE in FALSE naslednje vrednosti: -1 (minus ena) in 0.
Možno je organizirati bazen COM povezav. Hkrati se na sprejemnem strežniku 1C:Enterprise VNAPREJ ustvari več objektov povezave COM, vzpostavljanje povezave pa traja še manj časa, saj ni treba ustvarjati novega objekta.
Implementiran je bil nov objekt Query Builder, zasnovan za ustvarjanje besedil poizvedb na podlagi podanih nastavitev. Ta predmet podpira funkcijo graditelja poročil, ki ni povezana z izpisom poročila v dokument preglednice in drugimi opravili, povezanimi z Uporabniški vmesnik. Ta objekt se lahko uporablja na strežniku 1C:Enterprise in v COM povezavi.
Objekte COM lahko uporabljate pri izvajanju vgrajenega jezika na strežniku 1C:Enterprise.
Napake COM se pretvorijo v izjeme vdelanega jezika.
Če konfiguracija poskuša ustvariti neveljaven objekt, npr. dokument s preglednico, v zunanjem povezovalnem modulu, v skupnem modulu ali v objektnem modulu, povezava COM morda ne bo vzpostavljena ali pa bo izjemoma prekinjena.
Ena od možnosti za izmenjavo podatkov med zbirkami podatkov 1C je izmenjava prek COM povezave.
S povezavo COM se lahko povežete iz ene baze podatkov 1C v drugo in berete ali pišete podatke. Ta metoda se lahko uporablja tako v različicah baz podatkov odjemalec-strežnik kot tudi v datotečnih bazah podatkov. V tem članku si bomo ogledali primere te vrste povezave. Primeri uporabljajo platformo 8.2.
Za aplikacijo 1C lahko ustvarite dve vrsti objektov COM. to V82.Aplikacija in V82.COMConnector. V primeru V82.Aplikacija Zažene se skoraj popolna kopija aplikacije 1C. v primeru uporabe V82.COMConnector Zažene se majhen strežniški del.
Hitrost delovanja je v tem primeru višja, vendar nekatere funkcije morda ne bodo na voljo. Predvsem delo z obrazci in skupnimi moduli, za katere lastnost dela z zunanjimi povezavami ni nastavljena. Večinoma bi morali uporabiti V82.COMConnector in samo v primeru pomanjkanja funkcionalnosti V82.Aplikacija. Razlika v hitrosti delovanja je lahko še posebej opazna pri bazah podatkov velikega obsega.
Pa začnimo
- Ustvarimo objekt COM
- Za V82.Aplikacija Connection = New COMObject("V82.Application" ) ;
- Za V82.COMConnector Connection = New COMObject("V82.COMConnector" ) ;
- Ustvarimo povezovalni niz
- za strežniško različico baze ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
- za različico datoteke baze podatkov ConnectionString = "File = " "PathKBase" "; Usr = uporabniško ime; Pwd = geslo";
- Povezovanje z bazo podatkov Poskus povezave = Povezava. Connect(ConnectionString) ; Sporočilo o izjemi = Novo sporočiloUporabniku; Sporočilo. Text = + ErrorDescription() ; Sporočilo. Poročati() ; EndAttempt ;
- Prekinitev povezave z bazo podatkov Povezava = Nedefinirano;
Za objekt V82.Aplikacija Povezavo je treba prekiniti, sicer ostane nepopolna seja, ki jo je treba nato ročno izbrisati. V primeru V82.COMConnector povezava se samodejno prekine, ko je postopek, v katerem je bila vzpostavljena povezava, končan.In še ena malenkost.
Za uporabnika, pod katerim se vzpostavlja povezava, mora biti v nastavitvah onemogočeno potrditveno polje »Zahtevaj potrditev ob zapiranju programa«.
Zdaj pa sestavimo vso kodo
Connection = New COMObject("V82.Application" ) ; //Povezava = Nov COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" "; Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Datoteka = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Poskus povezave = Povezava. Connect(ConnectionString) ; Sporočilo o izjemi = Novo sporočiloUporabniku; Sporočilo. Besedilo = "Ni bilo mogoče vzpostaviti povezave z bazo podatkov"+ DescriptionError() ; Sporočilo. Poročati() ; EndAttempt ; Povezava = Nedefinirano;
Za vrsto povezave V82.Aplikacija metoda se uporablja za objekt COM, ki je bil prvotno ustvarjen, in za V82.COMConnector metoda se uporabi za povezavo. nadaljnje delo z zahtevo poteka standardna sredstva 1C. v kodi je videti takole:
Zahteva = Povezava. NewObject("Zahteva"); // Za V82.COMConnector Zahteva = Povezava. NewObject("Zahteva"); // Za V82.Aplikacija Prošnja. Besedilo = "IZBERI | Položaji Organizacij Kodeks, | Položaji organizacij. Ime|OD | Imenik. Položaji organizacij AS Položaji organizacij"; Rezultat = Zahteva. Zaženi(); Vzorec = rezultat. Izberite(); Adijo Izbor. Next() Loop EndLoop ;
Za različico 1C:Enterprise 8.3 vse ostane nespremenjeno, razen da morate pri ustvarjanju objektov COM uporabiti "V83.COMConnector" oz "V83.Aplikacija".