Cum se configurează smartphone-uri și PC-uri. Portal de informare

Conexiune com într-o aplicație gestionată. V8: conexiune COM

) Asta e corect

În același timp, am văzut de mai multe ori când publicațiile care nu atingeau nici măcar 10 puncte pur și simplu „au decolat”.
De ce sa întâmplat asta? Aparent pentru că cuiva i-au plăcut clar.


Acesta este ceea ce spun, că ar fi bine să înțelegeți cât de mult aveți nevoie de el fără să citiți articolul de rating sau să îl evaluați nu atât de primitiv +/-. Cât despre ceea ce mi-a plăcut, l-aș corecta astfel: a câștigat atât de mult datorită faptului că stelele s-au aliniat și multă lume s-a adunat pe site și multora le-a plăcut, chiar tu înțelegi că este o chestiune de întâmplare pentru că De îndată ce un articol părăsește pagina principală, acesta poate fi găsit doar la cerere și astfel toți trec prin voturi. Și, din câte am înțeles, comentariile constante = promovarea articolului vă permit să îl mențineți pe pagina principală.
Tocmai de aceea pun magazine pe străzile publice - până la urmă, ceea ce este deseori important nu este calitatea și relevanța mărfurilor, ci traficabilitatea locului cumpără de multe ori ceva pe care îl vor arunca a doua zi, doar; de dragul procesului. Aceasta este o boală cunoscută de multă vreme de toată lumea - dependența de cumpărături. Sau pur și simplu creșterea fluxului crește probabilitatea cumpărătorului potrivit.

Și argumentele pro și contra... - acesta este doar un fel de „mulțumesc” pentru timpul și munca petrecută


Aceste. Un minus contează și ca „mulțumesc”? Am vrut să știu părerea dumneavoastră dacă ar trebui folosit în astfel de cazuri și cât de interesanți cred alții? Ar trebui să-l pui atunci când articolul este dăunător/rău sau când este pur și simplu inutil/gol pentru tine?
În opinia mea, articolul arată ca o simplă creștere a ratingului, deoarece:
1. Problema tipurilor pe care le-am citat a fost complet ignorată de autor, deși nu i-a fost prea lene să scrie o grămadă de comentarii.
2. Există o inexactitate evidentă în articol: se spune că aceasta este singura cale

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


dar o pot face cu ușurință folosind o procesare ca aceasta:

Raport (bază. Directoare. Contrapărți. Căutare după nume ("LLC"). Cod);


si totul este bine! Și aleg conexiunea V82.ComConnector
Este cumva ciudat că autorului nu îi pasă deloc că articolul său conține problemele care au fost semnalate, dar nu reacționează în niciun fel.
3. Dar există încă o problemă când apare eroarea „Clasa nu există”.
4. Dar există o problemă când este instalat 8.2 și apoi este instalat 8.1 - încercați să faceți schimb prin OLE/COM cu un schimb standard UT-BP!
5. Ați putea indica principala procesare de pe site care vă permite să vă conectați universal prin OLE/COM pentru ca începătorii să nu piardă timpul, scrieți pentru ei! Apropo, dintr-un motiv oarecare, poza ei este pe ecranul tău, de ce? Și ca rezultat, 2 cuvinte pe fond și încă 6 în culise.

În general, nu arunc noroi, ci subliniez lacune specifice, dar nu există nicio reacție. Dacă aceasta este experiența pe care o împărtășiți, atunci este oarecum eronată și incompletă.
Ideea mea este că, dacă autorul ar fi dorit să colecteze toate erorile, ar putea măcar să asculte experiența altor oameni și să nu facă comentarii. Imediat apare o situație când cel care a citit-o știe mai multe decât autorul, îi spun (uneori greșit), și tot el ripostează. Ca urmare, toate informațiile nu sunt în articol, ci în comentarii! Amuzant! Acest lucru se întâmplă adesea, dar nu trebuie să vă concentrați asupra faptului că v-ați dorit ce este mai bun - eu arăt ce este mai bun, iar alții o arată! Includeți acest lucru în articol și va merita, nu toată lumea este interesată să citească această încăierare.

Pentru schimbul de informații între două baze de informații fără încărcări străine și schimb de fișiere, nu există nimic mai bun decât o conexiune COM. Și este greu de argumentat cu acest lucru, deoarece utilizarea acestui tip de conexiune este destul de simplă și stabilă. Dar în acest mecanism există un blocaj și un loc neplăcut. Vorbim despre timpul necesar pentru a stabili o conexiune cu o altă bază. În unele cazuri poate atinge valori destul de mari, de ex. fi foarte lung.

Ce s-a întâmplat?

În momentul conectării printr-o conexiune COM, baza de date conectată încarcă complet configurația bazei de date la care ne conectăm. După ce am încercat, de exemplu, să vă conectați la baza de date Enterprise Accounting, timpul de așteptare ar fi durat destul de mult, deoarece volumul de configurare se ridică la sute de megaocteți. Devine clar că pentru o funcționare mai rapidă toate conexiunile trebuie să fie stocate în cache și menținute.

Analiza performanței

Să ne întrebăm dacă este necesar să memorăm conexiunile în cache și dacă acest lucru va da roade atunci când utilizatorul lucrează intens cu o conexiune COM. Să măsurăm timpul de conectare la o configurație de 20 kB.

Vedem că conectarea la o bază mică a durat 3,5 secunde. Când vă conectați la o bază de date mai mare, timpul va crește de câteva ori.

Când stocați o conexiune menținută, aceste acțiuni vor dura mai puțin timp de câteva ordine de mărime.

Cum putem menține conexiunea COM activă?

Problema este că platforma 1C nu oferă instrumente standard pentru stocarea conexiunilor COM în securitatea informațiilor. Nu are rost să salvezi conexiunea în directoare și documente, deoarece se poate schimba adesea. Cea mai promițătoare opțiune este stocarea conexiunii în parametrul de sesiune. Dar nici aici totul nu este atât de lin. La urma urmei, nu există un singur tip de date potrivit pentru stocarea unei conexiuni COM.

Aceste argumente duc la faptul că stocarea este posibilă doar pe client într-o variabilă. Să luăm în considerare opțiunea pentru un formular gestionat. Este necesar să inițializam o variabilă în forma cu directiva &OnClient, unde vom salva valorile conexiunii. În consecință, puteți apela această conexiune numai pe client, deoarece nu puteți transfera un obiect COM de la client la server. Pentru formularele obișnuite nu există nicio separare între server și client și acest mecanism devine și mai simplu. Nu uitați să închideți conexiunea înainte de a închide formularul pe care îl utilizați pentru a preveni scurgerile de memorie.

În loc de ieșire

Deși această schemă rezolvă unele probleme de performanță, este departe de a fi ideală. Fiecare formular în care va fi necesar să susțină o conexiune COM va crea o nouă sesiune în baza de informații a receptorului și, în consecință, vor fi necesare mai multe licențe. De asemenea, unul dintre principalele dezavantaje este excluderea suportului pentru conectarea la server

Următorul articol va lua în considerare o metodă mai avansată care elimină aceste probleme (conectarea prin servicii Web).


Cuvinte cheie: COM, conexiune, extern, OLE, Automatizare, Conectare, ComConnector, Srvr

Când utilizați conexiuni COM 1C:Enterprise 8.0 pentru a accesa date, există următoarele avantaje în comparație cu utilizarea unui server Automation:

  1. Stabilirea mai rapidă a conexiunii, deoarece nu este necesară crearea unui proces separat de sistem de operare și toate acțiunile sunt efectuate în cadrul procesului de apelare;

  2. Acces mai rapid la proprietățile și metodele obiectelor 1C:Enterprise, deoarece organizarea unui acces nu necesită comunicare între procese;
  3. Consum mai mic de resurse ale sistemului de operare.

În general, lucrul cu 1C:Enterprise 8.0 printr-o conexiune COM este similar cu lucrul cu 1C:Enterprise în modul de automatizare a serverului. Principalele diferențe sunt următoarele:

  1. În cazul unui server Automation, este lansată o aplicație completă 1C:Enterprise 8.0, iar în cazul unei conexiuni COM, este lansat un server COM în proces relativ mic.

  2. Când lucrați printr-o conexiune COM, funcționalitatea într-un fel sau altul legată de organizarea interfeței de utilizator 1C:Enterprise 8.0 nu este disponibilă;
  3. Când se operează o conexiune COM, modulul aplicației de configurare 1C:Enterprise 8.0 nu este utilizat. Rolul său atunci când lucrați cu o conexiune COM este jucat de modulul de conectare extern.

1.1 Procedura pentru stabilirea unei conexiuni COM

Pentru a organiza accesul la datele 1C:Enterprise 8.0 printr-o conexiune COM, se efectuează următoarea secvență de acțiuni:

  1. se creează un obiect COM cu identificatorul V8.COMConnector, cu ajutorul căruia se stabilește conexiunea;

  2. este apelată metoda Connect a obiectului V8.COMConnector creat anterior. Metoda Connect returnează o legătură către un obiect de conexiune COM cu baza de informații 1C:Enterprise 8.0;
  3. Prin obiectul de conexiune COM primit se accesează metodele, proprietățile și obiectele valide ale infobazei cu care se stabilește conexiunea.

Important! Din cauza lipsei unei interfețe cu utilizatorul într-o conexiune COM, nu toate obiectele, proprietățile și metodele pot fi utilizate într-o conexiune COM.

1C:Obiecte Enterprise accesibile extern printr-o conexiune COM:

  1. Variabilele și procedurile/funcțiile exportate ale modulului de unire extern

  2. Variabilele exportate și procedurile/funcțiile modulelor comune
  3. Includerea și excluderea modulelor întregi prin setarea proprietăților modulelor comune

  4. Includerea și excluderea fragmentelor de module comune folosind un preprocesor
  5. Context global 1C: Enterprise 8.0, cu excepția obiectelor strâns legate de aplicația client (TextDocument, TabularDocument, ...)

1.2 Modul de conectare extern

După cum sa menționat deja, responsabilitățile modulului de aplicație atunci când lucrează printr-o conexiune COM sunt îndeplinite de modulul de conexiune extern. Acest modul poate avea proceduri de gestionare a evenimentelor When SystemStarts() și WhenSystemCompletes(), care pot conține acțiuni efectuate la inițializarea și, respectiv, la terminarea conexiunii.

Procedurile, funcțiile și variabilele globale definite într-un modul de unire extern cu cuvântul cheie Export devin, ca și în cazul unui modul de aplicație, parte a contextului global.

1.3 Module comune

Proprietățile „Client”, „Server” și „Conexiune externă” au fost introduse pentru modulele comune. Acestea sunt destinate să determine în configurare utilizarea modulelor în versiunea client - server și în modul de conectare COM.

1.4 Obiect „V8.COMConnector”

Singura sarcină rezolvată de obiectul COM V8.COMConnector este stabilirea unei conexiuni COM cu baza de informații 1C:Enterprise 8.0. Un număr nelimitat de conexiuni poate fi stabilit folosind o instanță a obiectului V8.COMConnector. Obiectul V8.COMConnector are o singură metodă Connect, concepută pentru a stabili o conexiune COM cu baza de informații 1C:Enterprise 8.0.

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

Linia de legătură cu sistemul de securitate a informațiilor este un lanț de fragmente de forma Parametru=Valoare. Fragmentele sunt separate unele de altele prin „;”. Dacă o valoare conține spații albe, aceasta trebuie să fie cuprinsă între ghilimele duble (").

Parametri generali:

Usr - nume de utilizator;
Pwd - parola.

Următorul parametru este definit pentru versiunea fișierului:

Fișier - directorul bazei de informații.

Următorii parametri sunt definiți pentru opțiunea client-server:

Srvr - 1C:Nume server Enterprise;
Ref - numele bazei de informații de pe server.

Metoda Connect stabilește o conexiune COM la baza de informații 1C:Enterprise 8.0 și returnează un link către obiectul de conexiune COM.

// Este creat un obiect conector
V8 = New COMObject("V8.COMConnector");
// este creat un obiect de conexiune COM
Conexiune = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")

1.5 Obiect de conexiune COM

O conexiune COM la baza de informații 1C:Enterprise oferă acces deplin la contextul său global (consultați „Contextul de execuție al modulelor de program”). Prin urmare, o conexiune COM poate avea ca metode: constante de sistem, valori specificate în configuratorul de obiecte care sunt accesate folosind manageri (de exemplu, constante, enumerari, directoare, documente, jurnalele de documente, rapoarte, procesări, planuri pentru tipuri). de caracteristici, planuri conturi, planuri de tipuri de calcul, registre), precum și variabile declarate în modulul de conectare externă cu cuvântul cheie Export.

În plus, conexiunea COM are o metodă suplimentară NewObject care poate fi folosită pentru a crea valori de anumite tipuri.

tk = Conexiune. NewObject(„Tabel de valori”);

Metoda String Vă permite să obțineți reprezentări șir ale valorilor 1C:Enterprise.

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

1.6. Caracteristici de lucru cu o conexiune COM

În automatizare și într-o conexiune COM, TRUE și FALSE au următoarele valori: -1 (minus unu) și 0.

Este posibil să se organizeze un grup de conexiuni COM. În același timp, mai multe obiecte de conexiune COM sunt create ÎN AVANS pe serverul de recepție 1C:Enterprise și este nevoie de și mai puțin timp pentru a stabili o conexiune, deoarece nu este nevoie să creați un nou obiect.

A fost implementat un nou obiect Query Builder, conceput pentru a genera texte de interogare pe baza setărilor specificate. Acest obiect acceptă funcționalitatea generatorului de rapoarte care nu este legată de transmiterea raportului într-un document de foaie de calcul sau de alte sarcini legate de interfața cu utilizatorul. Acest obiect poate fi folosit pe serverul 1C:Enterprise și într-o conexiune COM.

Puteți utiliza obiecte COM când rulați limbajul încorporat pe serverul 1C:Enterprise.

Erorile COM sunt convertite în excepții de limbă încorporată.

Dacă configurația încearcă să creeze un obiect nevalid, cum ar fi un document de foaie de calcul, într-un modul de alăturare extern, într-un modul partajat sau într-un modul obiect, conexiunea COM poate să nu fie stabilită sau poate fi încheiată ca excepție.

Imprimare (Ctrl+P)

Una dintre opțiunile pentru schimbul de date între bazele de date 1C este schimbul printr-o conexiune COM. Folosind o conexiune COM, vă puteți conecta de la o bază de date 1C la alta și puteți citi sau scrie date. Această metodă poate fi utilizată atât în ​​versiunile client-server ale bazelor de date, cât și în bazele de date de fișiere. Acest articol discută aceste tipuri de conexiuni pe platforma 8.3

conexiune com

Puteți crea două tipuri de obiecte COM pentru aplicația 1C. Acestea sunt conexiuni vechi V83.Aplicație și conexiuni com V83.COMConector . În cazul în care V83.Aplicație Este lansată o copie aproape completă a aplicației 1C. În caz de utilizare V83.COMConector Este lansată o mică parte de server. Viteza de funcționare în acest caz este mai mare, dar este posibil ca unele funcții să nu fie disponibile. În special, lucrul cu formulare și module comune pentru care nu este setată proprietatea de a lucra cu conexiuni externe. În cea mai mare parte, ar trebui să utilizați V83.COMConectorși numai în caz de lipsă de funcționalitate V83.Aplicație. Diferența de viteză de operare poate fi vizibilă în special pe bazele de date cu volum mare. Pentru platforma 8.2 utilizată V82.Application sau V82.COMConnector

Stabiliți o conexiune OLE

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

Stabiliți o conexiune COM

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

Șir de conexiune

//Pentru opțiunea client-server
Șirul de conexiune= „Srvr = „“ServerName” „;Ref = „ „BaseName” ;
//Pentru opțiunea mod fișier:
Șirul de conexiune= „Fișier = „“PathKBase” „; Usr = Nume de utilizator; Pwd = Parolă”;
Încercare
Connection = Conexiune . Conectați-vă(ConnectionString) ;
Excepţie
Mesaj = New MessageToUser;
Mesaj . Text = „Nu s-a putut conecta la baza de date” + DescriereErori(); Mesaj;
. Raport()

EndTempt ;

Deconectare
Conexiune = nedefinit ; V83.Aplicație Pentru obiect V83.COMConector Este necesar să opriți conexiunea, altfel o sesiune incompletă va rămâne suspendată, care va trebui apoi ștearsă manual. În cazul în care

conexiunea se întrerupe automat când se încheie procedura în care s-a făcut conexiunea Și mai este un punct mic. Pentru utilizatorul sub care se realizează conexiunea, caseta de selectare „Solicitare confirmare la închiderea programului” trebuie să fie dezactivată în setările acestuia.

Metoda NewObject().

Pentru a crea un obiect nou, puteți utiliza metoda NewObject(), de exemplu: V83.COMConector

Pentru SolicitațiCOM = Conexiune. NewObject() ;
"Solicitare" SolicitațiCOM TableCOM) ;
„Tabelul valorilor”

ArrayCOM = Conexiune. NewObject(„Matrice”);

ViewCOM =Conection.NewObject V83.Aplicație

Pentru RequestOLE = Conexiune. NewObject(“) ;
Cerere "(TableCOM) ;
TableOLE = Conexiune. NewObject ArrayOLE = Connection.NewObject
(„Matrice”); ViewCOM =Conection.NewObject

(„UniqueIdentifier”, StringUID); SolicitațiCOM. Text =
"ALEGE
| Pozițiile organizațiilor.
| Funcțiile organizațiilor.Nume |DIN
| Director.Pozițiile organizațiilor;

CUM PENTRU POZIȚII ALE ORGANIZAȚILOR” Rezultat = SolicitareCOM.
Run(); Eşantion = Rezultat.
Alegeți () ;Pa selecție. Următorul()
Ciclu
EndCycle ;
De asemenea, puteți utiliza manageri de obiecte de configurare:
DirectoryCOM = Conexiune. Directoare. DirectoryName; DocumentCOM
= Conexiune. Documente. DocumentName; RegisterCOM = Conexiune. Registre de informații

. RegisterName;

Primirea și compararea enumerației prin conexiune COM

Pentru a compara valorile elementelor de enumerare definite în configurație, este necesar să convertiți aceste elemente într-unul dintre tipurile primitive, a căror comparație este ușoară. Astfel de tipuri pot fi fie de tip numeric, fie de tip șir. Puteți converti valoarea unui element de enumerare într-un tip numeric astfel: Enum Item =

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

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

EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement))); Dacă EnumerationItemNumber = 0, atunci Raportați();

„Valoarea numărului 1” ElseIfEnumerationItemNumber = 1 Raport ("Valoarea Enumerării2");

endIf;

Preluarea unui obiect prin COM prin identificator

Prin managerii de obiecte de configurare obținem un obiect com, de exemplu:
DocumentCOM = Conexiune. Documente. DocumentName;

Apoi obținem un șir de identificare unic:

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

Identificator = U nou unicIdentifier(StringUID);
CU linkByIdentifier = Documente[DocumentName].GetLink(Identifier);

Dacă trebuie să găsiți un obiect com după document prin identificator, atunci trebuie să scrieți astfel:

WidCOM = Connection.NewObject(„UniqueIdentifier”, StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

Cele mai bune articole pe această temă