Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • Shtëpi
  • Siguria
  • Lidhja Com në një aplikacion të menaxhuar. V8: Lidhja COM

Lidhja Com në një aplikacion të menaxhuar. V8: Lidhja COM

) Ashtu është

Në të njëjtën kohë, kam parë më shumë se një herë kur botimet që nuk arritën as 10 pikë thjesht "morën".
Pse ndodhi kjo? Me sa duket sepse dikujt i pëlqenin qartë.


Kjo është ajo që po them, se do të ishte mirë të kuptoni se sa shumë keni nevojë për të pa lexuar artikullin e vlerësimit, ose ta vlerësoni jo aq primitivisht +/-. Sa për atë që më pëlqeu, do ta korrigjoja në këtë mënyrë: fitoi shumë për faktin se yjet u rreshtuan dhe shumë njerëz u mblodhën në faqe dhe shumë e pëlqyen, ju vetë e kuptoni që kjo është çështje rastësie sepse Sapo një artikull del nga faqja kryesore, ai mund të gjendet vetëm me kërkesë, dhe kështu të gjithë kaluesit votojnë. Dhe, me sa kuptoj, komentet e vazhdueshme = promovimi i artikullit ju lejojnë ta mbani atë në faqen kryesore.
Kjo është pikërisht arsyeja pse ata vendosin dyqane në rrugët publike - në fund të fundit, ajo që është shpesh e rëndësishme nuk është cilësia dhe rëndësia e mallrave, por lëvizshmëria e vendit, njerëzit që ecin shpesh blejnë diçka që do ta hedhin të nesërmen; për hir të procesit. Kjo është një sëmundje që ka qenë prej kohësh e njohur për të gjithë - varësia ndaj blerjeve. Ose thjesht rritja e fluksit rrit gjasat e blerësit të duhur.

Dhe të mirat dhe të këqijat... - kjo është vetëm një lloj "faleminderit" për kohën dhe punën e shpenzuar


Ato. A llogaritet edhe një minus si "faleminderit"? Doja të dija mendimin tuaj nëse duhet përdorur në raste të tilla dhe sa interesante mendojnë të tjerët? A duhet ta vendosni kur artikulli është i dëmshëm/i keq apo kur është thjesht i padobishëm/bosh për ju?
Sipas mendimit tim, artikulli duket si një rritje e thjeshtë e vlerësimit, sepse:
1. Problemi me llojet që citova u injorua plotësisht nga autori, megjithëse ai nuk ishte shumë dembel të shkruante një mori komentesh.
2. Ka një pasaktësi të dukshme në artikull: thuhet se kjo është e vetmja rrugë

V82 = New COMObject ("V82.ComConnector"); Kodi = AccountCOM.Code;


por mund ta bëj lehtësisht duke përdorur përpunimin si ky:

Raporti (Baza. Drejtoritë. Kundërpartitë. Gjeni sipas Emrit ("LLC"). Kodi);


dhe gjithçka është në rregull! Dhe unë zgjedh lidhjen V82.ComConnector
Është disi e çuditshme që autorit nuk i intereson fare që artikulli i tij përmban problemet që janë vënë në dukje, por ai nuk reagon në asnjë mënyrë.
3. Por ka ende një problem kur shfaqet gabimi "Klasa nuk ekziston".
4. Por ka një problem kur instalohet 8.2, dhe më pas instalohet 8.1 - provoni të shkëmbeni nëpërmjet OLE/COM me një shkëmbim standard UT-BP!
5. A mund të tregoni përpunimin kryesor në faqe që ju lejon të lidheni në mënyrë universale nëpërmjet OLE/COM në mënyrë që fillestarët të mos humbin kohë, ju shkruani për ta! Nga rruga, për disa arsye fotografia e saj është në ekranin tuaj, pse? Dhe si rezultat, 2 fjalë për meritat, dhe 6 të tjera në prapaskenë.

Në përgjithësi, unë nuk hedh baltë, por theksoj boshllëqe specifike, por ka zero reagim. Nëse kjo është përvoja që po ndani, atëherë është disi e gabuar dhe e paplotë.
Mendimi im është se nëse autori do të kishte një dëshirë për të mbledhur të gjitha defektet, atëherë ai të paktën mund të dëgjonte përvojën e njerëzve të tjerë dhe të mos bënte komente. Menjëherë krijohet një situatë kur ai që e lexon di më shumë se autori, ia thonë (ndonjëherë gabimisht), e edhe ai kundërpërgjigjet. Si rezultat, të gjitha informacionet nuk janë në artikull, por në komente! Qesharak! Kjo ndodh shpesh, por nuk keni nevojë të përqendroheni në faktin se keni dashur më të mirën - unë tregoj atë që është më e mira, dhe të tjerët e tregojnë atë! Përfshijeni këtë në artikull dhe do të jetë e vlefshme jo të gjithë janë të interesuar ta lexojnë këtë përleshje.

Për shkëmbimin e informacionit midis dy bazave të informacionit pa ngarkime të jashtme dhe skedarë shkëmbimi, nuk ka asgjë më të mirë se një lidhje COM. Dhe është e vështirë të debatosh me këtë, sepse përdorimi i këtij lloji të lidhjes është mjaft i thjeshtë dhe i qëndrueshëm. Por në këtë mekanizëm ka një pengesë dhe vend të pakëndshëm. Ne po flasim për kohën që duhet për të krijuar një lidhje me një bazë tjetër. Në disa raste mund të arrijë vlera mjaft të mëdha, d.m.th. jetë shumë e gjatë.

Çfarë është puna?

Në momentin e lidhjes nëpërmjet një lidhjeje COM, baza e të dhënave e lidhur ngarkon plotësisht konfigurimin e bazës së të dhënave me të cilën po lidhemi. Duke u përpjekur, për shembull, të lidheni me bazën e të dhënave të Kontabilitetit të Ndërmarrjeve, koha e pritjes do të kishte zgjatur mjaft gjatë, pasi vëllimi i konfigurimit arrin në qindra megabajt. Bëhet e qartë se për funksionim më të shpejtë, të gjitha lidhjet duhet të ruhen dhe të mirëmbahen.

Analiza e Performancës

Le të pyesim veten nëse është e nevojshme të ruhen fare lidhjet në cache dhe nëse kjo do të japë fryte kur përdoruesi punon intensivisht me një lidhje COM. Le të matim kohën e lidhjes me një konfigurim 20 kB.

Shohim që lidhja me një bazë të vogël zgjati 3.5 sekonda. Kur lidheni me një bazë të dhënash më të madhe, koha do të rritet disa herë.

Kur ruani një lidhje të mirëmbajtur, këto veprime do të marrin disa rend të madhësisë më pak kohë.

Si mund ta mbajmë lidhjen tonë COM aktive?

Problemi është se platforma 1C nuk ofron mjete standarde për ruajtjen e lidhjeve COM në sigurinë e informacionit. Nuk ka kuptim të ruani lidhjen në drejtori dhe dokumente, pasi shpesh mund të ndryshojë. Opsioni më premtues është ruajtja e lidhjes në parametrin e sesionit. Por edhe këtu gjithçka nuk është aq e qetë. Në fund të fundit, nuk ka një lloj të vetëm të përshtatshëm të të dhënave për ruajtjen e një lidhjeje COM.

Këto argumente çojnë në faktin se ruajtja është e mundur vetëm për klientin në disa ndryshore. Le të shqyrtojmë opsionin për një formë të menaxhuar. Është e nevojshme të inicializojmë një variabël në formën me direktivën &OnClient, ku do të ruajmë vlerat e lidhjes. Prandaj, ju gjithashtu mund ta telefononi këtë lidhje vetëm në klient, pasi nuk mund të transferoni një objekt COM nga klienti në server. Për format e rregullta nuk ka ndarje ndërmjet serverit dhe klientit dhe ky mekanizëm bëhet edhe më i thjeshtë. Mos harroni të mbyllni lidhjen përpara se të mbyllni formularin që po përdorni për të parandaluar rrjedhjet e kujtesës.

Në vend të prodhimit

Edhe pse kjo skemë zgjidh disa probleme të performancës, ajo nuk është aspak ideale. Çdo formë ku do të jetë e nevojshme të mbështetet një lidhje COM do të krijojë një sesion të ri në bazën e informacionit të marrësit, dhe në përputhje me rrethanat do të kërkohet një numër më i madh licencash. Gjithashtu një nga disavantazhet kryesore është përjashtimi i mbështetjes për t'u lidhur me serverin

Artikulli vijues do të shqyrtojë një metodë më të avancuar që eliminon këto probleme (lidhja përmes shërbimeve të internetit).


Fjalët kyçe: COM, lidhje, e jashtme, OLE, Automatizim, Connect, ComConnector, Srvr

Kur përdorni lidhjet 1C:Enterprise 8.0 COM për të hyrë në të dhëna, ka përparësitë e mëposhtme në krahasim me përdorimin e një serveri Automatizimi:

  1. Vendosja më e shpejtë e lidhjes, pasi nuk ka nevojë të krijohet një proces i veçantë i sistemit operativ dhe të gjitha veprimet kryhen brenda procesit të thirrjes;

  2. Qasje më e shpejtë në vetitë dhe metodat e objekteve 1C: Enterprise, pasi organizimi i një aksesi nuk kërkon komunikim ndërprocesor;
  3. Më pak konsum i burimeve të sistemit operativ.

Në përgjithësi, puna me 1C:Enterprise 8.0 nëpërmjet një lidhjeje COM është e ngjashme me punën me 1C:Enterprise në modalitetin e automatizimit të serverit. Dallimet kryesore janë si më poshtë:

  1. Në rastin e një serveri Automatizimi, lëshohet një aplikacion i plotë 1C: Enterprise 8.0, dhe në rastin e një lidhjeje COM, lëshohet një server COM relativisht i vogël në proces.

  2. Kur punoni përmes një lidhjeje COM, funksionaliteti në një mënyrë ose në një tjetër që lidhet me organizimin e ndërfaqes së përdoruesit 1C:Enterprise 8.0 nuk është i disponueshëm;
  3. Kur përdorni një lidhje COM, moduli i aplikacionit të konfigurimit 1C:Enterprise 8.0 nuk përdoret. Roli i tij kur punoni me një lidhje COM luhet nga moduli i lidhjes së jashtme.

1.1 Procedura për vendosjen e një lidhjeje COM

Për të organizuar aksesin në të dhënat 1C:Enterprise 8.0 nëpërmjet një lidhjeje COM, kryhet sekuenca e mëposhtme e veprimeve:

  1. krijohet një objekt COM me identifikuesin V8.COMConnector, me ndihmën e të cilit vendoset lidhja;

  2. thirret metoda Connect e objektit të krijuar më parë V8.COMConnector. Metoda Connect kthen një lidhje me një objekt lidhjeje COM me bazën e informacionit 1C:Enterprise 8.0;
  3. Nëpërmjet objektit të marrë të lidhjes COM, aksesohen metodat, vetitë dhe objektet e vlefshme të infobazës me të cilën është krijuar lidhja.

E rëndësishme! Për shkak të mungesës së ndërfaqes së përdoruesit në një lidhje COM, jo të gjitha objektet, vetitë dhe metodat mund të përdoren në një lidhje COM.

1C: Objektet e ndërmarrjes të aksesueshme nga jashtë nëpërmjet një lidhjeje COM:

  1. Variablat dhe procedurat/funksionet e eksportuara të modulit të bashkimit të jashtëm

  2. Variabla të eksportuara dhe procedura/funksione të moduleve të zakonshme
  3. Përfshirja dhe përjashtimi i moduleve të tëra duke vendosur vetitë e moduleve të zakonshme

  4. Përfshirja dhe përjashtimi i fragmenteve të moduleve të zakonshme duke përdorur një paraprocesor
  5. Konteksti global 1C: Enterprise 8.0, me përjashtim të objekteve të lidhura ngushtë me aplikacionin e klientit (TextDocument, TabularDocument, ...)

1.2 Moduli i lidhjes së jashtme

Siç është përmendur tashmë, përgjegjësitë e modulit të aplikacionit kur punoni përmes një lidhjeje COM kryhen nga moduli i lidhjes së jashtme. Ky modul mund të ketë procedurat e mbajtësit të ngjarjeve When SystemStarts() dhe WhenSystemCompletes(), të cilat mund të përmbajnë respektivisht veprimet e kryera pas inicializimit dhe përfundimit të lidhjes.

Procedurat, funksionet dhe variablat globale të përcaktuara në një modul bashkimi të jashtëm me fjalën kyçe Export bëhen, si në rastin e një moduli aplikacioni, pjesë e kontekstit global.

1.3 Modulet e zakonshme

Vetitë "Klient", "Server" dhe "Lidhja e jashtme" janë prezantuar për modulet e zakonshme. Ato synojnë të përcaktojnë në konfigurim përdorimin e moduleve në versionin klient - server dhe në modalitetin e lidhjes COM.

1.4 Objekti "V8.COMConnector"

E vetmja detyrë e zgjidhur nga objekti COM V8.COMConnector është krijimi i një lidhjeje COM me bazën e informacionit 1C:Enterprise 8.0. Një numër i pakufizuar lidhjesh mund të krijohet duke përdorur një shembull të objektit V8.COMConnector. Objekti V8.COMConnector ka një metodë të vetme Connect, e krijuar për të krijuar një lidhje COM me bazën e informacionit 1C:Enterprise 8.0.

<СтрокаСоединенияИБ>

Linja e lidhjes me sistemin e sigurisë së informacionit është një zinxhir fragmentesh të formës Parameter=Vlera. Fragmentet ndahen nga njëri-tjetri me ";". Nëse një vlerë përmban hapësirë ​​të bardhë, ajo duhet të mbyllet në thonjëza të dyfishta (").

Parametrat e përgjithshëm:

Usr - emri i përdoruesit;
Pwd - fjalëkalimi.

Parametri i mëposhtëm është përcaktuar për versionin e skedarit:

Dosja - drejtoria e bazës së informacionit.

Parametrat e mëposhtëm janë përcaktuar për opsionin klient-server:

Srvr - 1C: Emri i serverit të ndërmarrjes;
Ref - emri i bazës së informacionit në server.

Metoda Connect krijon një lidhje COM me bazën e informacionit 1C:Enterprise 8.0 dhe kthen një lidhje me objektin e lidhjes COM.

// Krijohet një objekt lidhës
V8 = New COMObject ("V8.COMConnector");
// krijohet një objekt lidhjeje COM
Lidhja = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Drejtori"";")

1.5 Objekti i lidhjes COM

Një lidhje COM me bazën e informacionit 1C:Enterprise ofron akses të plotë në kontekstin e saj global (shih "Konteksti i ekzekutimit të modulit të programit"). Prandaj, një lidhje COM mund të ketë si metodat e saj: konstantet e sistemit, vlerat e specifikuara në konfiguruesin e objekteve që arrihen duke përdorur menaxherët (për shembull, konstantet, numërimet, drejtoritë, dokumentet, regjistrat e dokumenteve, raportet, përpunimin, planet për llojet të karakteristikave, llogarive të planeve, planeve të llojeve të llogaritjes, regjistrave), si dhe variablave të deklaruar në modulin e lidhjes së jashtme me fjalën kyçe Export.

Për më tepër, lidhja COM ka një metodë shtesë NewObject që mund të përdoret për të krijuar vlera të llojeve të caktuara.

tz = Lidhja. NewObject ("Tabela e vlerave");

Metoda e vargut Ju lejon të merrni paraqitje të vargut të vlerave 1C:Enterprise.

Pamja = Connection.String(Data.UniqueIdentifier());

1.6. Karakteristikat e punës me një lidhje COM

Në Automatizimi dhe në një lidhje COM, TRUE dhe FALSE kanë vlerat e mëposhtme: -1 (minus një) dhe 0.

Është e mundur të organizohet një grup lidhjesh COM. Në të njëjtën kohë, disa objekte të lidhjes COM krijohen paraprakisht në serverin marrës 1C: Enterprise dhe kërkon edhe më pak kohë për të krijuar një lidhje, pasi nuk ka nevojë të krijoni një objekt të ri.

Është implementuar një objekt i ri Query Builder, i projektuar për të gjeneruar tekste pyetjesh bazuar në cilësimet e specifikuara. Ky objekt mbështet funksionalitetin e ndërtuesit të raporteve që nuk lidhet me daljen e raportit në një dokument fletëllogaritëse ose detyra të tjera të ndërfaqes së përdoruesit. Ky objekt mund të përdoret në serverin 1C:Enterprise dhe në një lidhje COM.

Mund të përdorni objekte COM kur përdorni gjuhën e integruar në serverin 1C:Enterprise.

Gabimet COM konvertohen në përjashtime të gjuhës së integruar.

Nëse konfigurimi përpiqet të krijojë një objekt të pavlefshëm, si një dokument spreadsheet, në një modul bashkimi të jashtëm, në një modul të përbashkët ose në një modul objekti, lidhja COM mund të mos vendoset ose mund të ndërpritet si përjashtim.

Print (Ctrl+P)

Një nga opsionet për shkëmbimin e të dhënave midis bazave të të dhënave 1C është shkëmbimi përmes një lidhjeje COM. Duke përdorur një lidhje COM, mund të lidheni nga një bazë të dhënash 1C në tjetrën dhe të lexoni ose shkruani të dhëna. Kjo metodë mund të përdoret si në versionet klient-server të bazave të të dhënave ashtu edhe në bazat e të dhënave të skedarëve. Ky artikull diskuton këto lloje lidhjesh në platformën 8.3

lidhje com

Ju mund të krijoni dy lloje të objekteve COM për aplikacionin 1C. Këto janë lidhje ole V83.Aplikimi dhe lidhjet com V83. COMConnector . Në rastin e V83.Aplikimi Nis një kopje pothuajse e plotë e aplikacionit 1C. Në rast përdorimi V83. COMConnector Një pjesë e vogël e serverit është nisur. Shpejtësia e funksionimit në këtë rast është më e lartë, por disa funksione mund të mos jenë të disponueshme. Në veçanti, puna me forma dhe module të zakonshme për të cilat nuk është vendosur vetia e punës me lidhje të jashtme. Kryesisht duhet të përdorni V83. COMConnector dhe vetëm në rast të mungesës së funksionalitetit V83.Aplikimi. Dallimi në shpejtësinë e funksionimit mund të jetë veçanërisht i dukshëm në bazat e të dhënave me vëllim të madh. Përdoret për platformën 8.2 V82.Application ose V82.COMConnector

Krijoni një lidhje OLE

Lidhja = New COMObject(“V83.Application”);

Krijoni një lidhje COM

Lidhja = New COMObject (“V83.COMConnector”);

Vargu i lidhjes

//Për opsionin klient-server
Vargu i lidhjes= “Srvr = ““Emri i Serverit” “;Ref = “ “Emri bazë” ;
/Opsioni /Për modalitetin e skedarit:
Vargu i lidhjes= "File = ""PathKBase" “; Usr = Emri i Përdoruesit; Pwd = Fjalëkalimi”;
Përpjekje
Lidhje = Lidhje . Lidheni(ConnectionString) ;
Përjashtim
Message = New MessageToUser;
Mesazh . Teksti = "Dështoi të lidhej me bazën e të dhënave" + Përshkrimi Gabimet (); Mesazh;
. Raporti ()

Përpjekja e Fundit;

Shkyçja
Lidhja = E pacaktuar ; V83.Aplikimi Për objekt V83. COMConnectorËshtë e nevojshme të ndërpritet lidhja, përndryshe një seancë jo e plotë do të mbetet e varur, e cila më pas do të duhet të fshihet manualisht. Në rastin e

lidhja prishet automatikisht kur të përfundojë procedura në të cilën është bërë lidhja dhe ka edhe një pikë të vogël. Për përdoruesin nën të cilin po bëhet lidhja, kutia e kontrollit "Kërkoni konfirmim kur mbyllni programin" duhet të çaktivizohet në cilësimet e tij.

Metoda NewObject().

Për të krijuar një objekt të ri, mund të përdorni metodën NewObject(), për shembull: V83. COMConnector

Për RequestCOM = Lidhja. Objekti i ri() ;
"Kërkesë" RequestCOM TableCOM) ;
"Tabela e vlerave"

ArrayCOM = Lidhja. NewObject(“Array”);

ViewCOM =Lidhja.NewObject V83.Aplikimi

Për KërkesaOLE = Lidhja. Objekti i ri (") ;
kerkese"(TableCOM) ;
TableOLE = Lidhja. Objekt i Ri ArrayOLE = Lidhja.NewObject
(“Array”); ViewCOM =Lidhja.NewObject

(“UniqueIdentifier”, StringUID); RequestCOM. Teksti =
"ZGJIDH
| Kodi i pozicioneve të organizatave,
| Pozicionet e Organizatave.Emri |NGA
| Drejtoria.Pozicionet e Organizatave;

SI TË POZICIONET E ORGANIZATAVE” Rezultati = RequestCOM.
Run(); Mostra = Rezultati.
Zgjidhni ();Mirupafshim Përzgjedhja. Tjetra ()
Cikli
Cikli i Fundit ;
Ju gjithashtu mund të përdorni menaxherët e objekteve të konfigurimit:
DirectoryCOM = Lidhja. Drejtoritë. Emri i Drejtorisë; DocumentCOM
= Lidhja. Dokumentet. Emri i Dokumentit; RegisterCOM = Lidhja. Regjistrat e Informacionit

. Emri i Regjistrit;

Marrja dhe krahasimi i numërimit nëpërmjet lidhjes COM

Për të krahasuar vlerat e elementeve të numërimit të përcaktuara në konfigurim, është e nevojshme të konvertohen këto elemente në një nga llojet primitive, krahasimi i të cilave është i lehtë. Lloje të tilla mund të jenë ose një lloj numerik ose një lloj vargu. Ju mund të konvertoni vlerën e një elementi numërues në një lloj numerik si kjo: Enum Artikull =

Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues ​​= Enum Element.Metadata().Enum Values;

EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement))); Nëse EnumerationItemNumber = 0 Pastaj Raporto();

"Vlera e numërimit 1" ElseIfEnumerationItemNumber = 1 Raporti ("EnumerationValue2");

fundNëse;

Marrja e një objekti përmes COM nga identifikuesi

Nëpërmjet menaxherëve të objekteve të konfigurimit ne marrim një objekt com, për shembull:
DocumentCOM = Lidhja. Dokumentet. Emri i Dokumentit;

Pastaj marrim një varg unik identifikues:

StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())

Identifikuesi = U i ri Identifikuesi unik (StringUID);
ME linkByIdentifier = Dokumentet[Emri i Dokumentit].GetLink(Identifikuesi);

Nëse keni nevojë të gjeni një objekt com sipas dokumentit sipas identifikuesit, atëherë duhet të shkruani si kjo:

WidCOM = Lidhja.NewObject(“UniqueIdentifier”, StringUID);
LinkByIdentifier = Lidhja.Dokumentet[Emri i Dokumentit].GetLink(WidCOM);

Artikujt më të mirë mbi këtë temë