Conexiune com într-o aplicație gestionată. Trei balene pentru lucrul cu obiecte COM. Lucrul printr-o conexiune COM este mai ușor decât ați putea crede. Ce s-a întâmplat

) Totul este corect

În același timp, am văzut de mai multe ori când publicațiile care nu au scos nici măcar cu 10 puncte pur și simplu „au decolat”.
De ce s-a întâmplat asta? Se pare că pentru cineva îi plăcea în mod clar.


Mă refer la asta și spun că ar fi frumos să nu citiți articolul despre rating pentru a înțelege cât de mult aveți nevoie de el sau să îl evaluați nu atât de primitiv +/-. Cât despre ceea ce mi-a plăcut, aș corecta așa: ea a marcat atât de mult datorită faptului că stelele s-au format în acest fel și o mulțime de oameni s-au adunat pe site și mulți le-au plăcut, tu înțelegi tu că este o chestiune de sansa, tk. de îndată ce articolul pleacă pagina principala atunci poate fi găsit deja doar la cerere, și astfel toți cei care trec prin vot. Și pentru a menține pe pagina principală, din câte am înțeles, doar comentariile constante = promovarea articolului permite.
Pentru aceasta, ei pun magazine pe străzi - la urma urmei, adesea nu este importantă calitatea și relevanța mărfurilor, ci permeabilitatea locului, oamenii care merg pe jos cumpără adesea ceea ce aruncă a doua zi, doar de dragul procesului. Aceasta este o boală cunoscută tuturor de mult timp - shopomania. Sau, pur și simplu creșterea fluxului crește probabilitatea cumpărătorului potrivit.

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


Acestea. minus este, de asemenea, considerat un „mulțumesc”? Așadar, am vrut să vă cunosc atitudinea dacă este necesar să o puneți în astfel de cazuri și cât de interesante cred alții? Dacă îl puneți atunci când articolul este dăunător / rău sau când este pur și simplu inutil / gol pentru dvs.
În opinia mea, articolul arată ca o simplă creștere a ratingului, deoarece:
1. Problema cu tipurile citate de mine a fost în general ignorată de autor, deși nu era prea leneș să scrie o grămadă de comentarii.
2. Există o inexactitate clară în articol: se spune că aceasta este singura cale

V82 = Obiect COM nou ("V82.ComConnector"); Cod = CounterpartySOM.Code;


dar o fac cu calm folosind astfel de procesări:

Raport (bază. Cărți de referință. Contractanți. FindByName („LLC”). Cod);


și totul este în regulă! Și aleg conexiunea V82.ComConnector
Este oarecum ciudat că autorului nu îi pasă deloc că articolul său conține astfel de probleme, așa cum s-a indicat, dar nu reacționează în niciun fel.
3. Dar există încă o problemă când apare eroarea „Clasa nu există”
4. Și există o problemă când este instalat 8.2 și apoi este instalat 8.1 - încercați să faceți schimb prin OLE / COM schimb tipic UT-BP!
5. Ați putea indica procesarea principală pe site care vă permite să vă conectați universal prin OLE / COM, astfel încât începătorii să nu piardă timpul, scrieți pentru ei! La fel și prin felul în care imaginea ei, dintr-un motiv oarecare, arată, de ce? Ca urmare, 2 cuvinte în esență și încă 6 în culise.

În general, nu stropesc cu noroi, ci indic lacunele specifice, dar reacțiile sunt zero. Dacă aceasta este experiența pe care o împărtășești, atunci este un fel de eronat și incomplet.
Adică, dacă autorul ar fi dorit să adune toate erorile, atunci ar putea cel puțin să asculte experiența altcuiva și să nu treacă la comentarii. Imediat, apare o situație când cel care a citit-o știe mai mult decât autorul, ei îi spun (uneori incorect), și el se luptă și înapoi. Drept urmare, toate informațiile nu se află în articol, ci în comentarii! E amuzant! Acest lucru se întâmplă adesea, dar în același timp nu este necesar să te bazezi pe ceea ce ai vrut să fii cel mai bun - eu îi arăt cel mai bine, iar alții arată! Includeți acest lucru în articol și va merita, nu toată lumea este interesată să citească această luptă.

Salut Habravchans!

În acest articol, vreau să vorbesc despre modul în care este stabilită integrarea cu platforma 1C în organizația mea. Mi-a cerut să o fac practic absență completă informații tehnice pe această temă. Citind diverse articole și rapoarte cu privire la legătura dintre 1C și orice sistem informațional, ești mereu convins că toate sunt de marketing, demonstrative și niciodată tehnice, reflectând problema și esența soluției sale.

Vă avertizez că metoda nu pretinde în niciun caz că este universală. Deoarece există multe configurații 1C în sine și sisteme de informare, limbi și platforme - și mai mult, numărul combinațiilor posibile este imens. Scopul meu este să demonstrez una dintre soluțiile posibile.


Am ales Python ca limbaj care se va integra cu 1C. Este foarte potrivit pentru automatizarea proceselor. Acest lucru este facilitat de sintaxa minimalistă (codul este tastat foarte repede), biblioteca bogată standard (mai puțină nevoie de module terță parte), pe mai multe platforme - cel mai probabil, codul scris în sistemul de operare Linix va funcționa cu succes pe Windows.

Pentru început, voi schița datele cu care vom lucra. Organizația, o companie de vânzări de energie din regiunea Orientul Îndepărtat, deservește aproximativ 400 de mii de abonați, 1C pe o configurație auto-scrisă. Pentru fiecare abonat sunt stocate plățile, taxele, serviciile consumate și schemele de calcul, dispozitivele de măsurare, citirile și multe alte date.

Odată ajuns în organizație a existat un program scris în Delphi și care utilizează MSSQL / Firebird ca bază de date. În acele vremuri glorioase, era posibil să vă conectați la baza de date folosind orice limbă și să efectuați mai multe acțiuni - selectați abonații debitorilor, plățile postate primite, înregistrarea citirilor instrumentelor. În mod surprinzător, colecția de scripturi care automatizează rutina a crescut constant. Programatorii ar putea efectua orice acțiune fără a deschide programul în sine.

Din păcate, odată cu trecerea la 1C, freebie s-a încheiat - nu a mai fost posibil să vă conectați direct la bază. În general, platforma 1C în sine este indivizibilă și nu merge bine pentru integrarea cu alte sisteme. Ea, după cum se spune, este un lucru în sine. Când încărcați date în 1C, trebuie să vă amintiți că nu va fi atât de ușor să le extrageți de acolo. Dar având în vedere faptul că organizația trebuia să implementeze sisteme de plăți și Zona personală, a fost necesar să găsim un fel de soluție.

Principalele sarcini cu care m-am confruntat au fost abilitatea de a obține rapid date despre un anume cont personal- Numele complet, adresa, dispozitivele de măsurare, citirile instrumentelor, plăți, taxe. Plus formarea documentelor - un act de reconciliere, o chitanță de plată. Deci, nu există o conexiune directă la baza de date - toți cei care au analizat baza de date 1C de pe serverul SQL au văzut că este dificil să înțelegem masa tabelelor de forma aaa1, aaa2. Și crearea de interogări cu astfel de nume de tabele și câmpuri este pur și simplu nerealistă. În plus, multe tabele 1C (în special cele mai importante, cum ar fi o reducere a acestora din urmă, reziduuri și revoluții) sunt virtuale și sunt împrăștiate pe diferite tabele fizice, colectate de mai multe îmbinări. Această metodă nu este adecvată.

Platforma 1C oferă posibilitatea de a vă conecta la aceasta printr-o conexiune COM. La fel ca multe programe Windows, în timpul instalării 1C, două obiecte COM sunt înregistrate în sistem - Automation Server și COM Connector. Puteți lucra cu ambele obiecte folosind un limbaj care acceptă tehnologia COM.

Obiectul Automation Server este o aplicație 1C care nu este aproape diferită de o aplicație client obișnuită. Diferența este că, în plus, devine posibilă controlarea programată a instanței aplicației. Când lucrați cu obiectul COM Connector, este lansată o versiune ușoară a aplicației 1C, în care se formează, precum și funcții și metode legate de interfață și efecte vizuale... Aplicația în sine este lansată în modul „Conexiune externă”. Inițializarea variabilelor globale (de exemplu, definirea utilizatorului curent și a setărilor acestuia) trebuie efectuată în modulul de conexiune externă 1C. Dacă în modul de conexiune externă din cod se apelează o funcție care nu este disponibilă în acest mod, atunci va fi ridicată o excepție (care va fi transmisă scriptului nostru python). Apelurile funcțiilor nesigure ar trebui să fie înconjurate de construcții precum

# Dacă NU OuterConnection, atunci Avertisment („Bună ziua!”); # EndIf

Deoarece lucrul cu obiecte COM este o tehnologie exclusiv Windows, nu este surprinzător faptul că este absent în pachetul standard Python. Va trebui să instalați o extensie - un set de module care oferă toate funcționalitățile necesare pentru programarea sub Windows în Python. Poate fi descărcat ca un exe-instalator deja asamblat. Extensia în sine oferă acces la registru, servicii, ODBC, obiecte COM etc. Alternativ, puteți instala imediat distribuția ActiveState Python, care vine cu extensia Win32 din cutie.

De ceva timp am experimentat conexiunea COM în dezvoltarea aplicațiilor web, în ​​special a contului meu personal. Au fost identificate următoarele dezavantaje:

Conexiunea COM este lentă. Performanța slabă este un dezavantaj bine cunoscut al tehnologiei COM.
- Procesul de stabilire a unei conexiuni cu 1C, în funcție de configurație, poate dura de la 1 la 8 secunde (în cazul meu, 6 secunde). Inutil să spun că stabilirea unei conexiuni pentru fiecare solicitare va duce la încărcarea fiecărei pagini în 8 secunde.
- Deoarece aplicațiile web din Python funcționează ca servere independente, punctul anterior poate fi compensat prin stocarea conexiunii într-o variabilă globală și, în caz de eroare, restaurarea acesteia. Pentru a fi sincer, nu m-am gândit la cum să mențin o conexiune în PHP.
- Funcționalitatea multiplataforma a aplicației web se pierde.

Pe baza punctelor enumerate mai sus, s-a decis schimbarea principiului interacțiunii, împărțindu-l în 2 părți - prima dependentă de platformă (Windows), descărcarea datelor 1C într-un format convenabil și a doua, independentă de platformă, capabilă să lucrul cu date fără a suspecta nimic despre 1C în principiu.

Strategia de acțiune este următoarea: scriptul python se conectează la 1C, execută interogările necesare și încarcă datele în baza de date SQLite. Vă puteți conecta la această bază de date din Python, PHP, Java. Majoritatea proiectelor noastre funcționează în python și, din moment ce nu suport să scriu interogări SQL brute de mână, toate lucrările cu baza de date SQLite se fac prin intermediul SQLAlchemy ORM. A fost necesar doar să descriem structura datelor bazei de date într-un stil declarativ:

Din sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, Numeric, DateTime, Unicode, Boolean, LargeB, ForeignKey Base = declarative_base () class Abonent (Base): __tablename__ = "abonents" id = Column (Integer, primary_key = Adevărat) cont = Coloană (Unicode (32), index = Adevărat) cod = Coloană (Unicode (32)) adresă = Coloană (Unicode (512)) fio = Coloană (Unicode (256)) sursă = Coloană (Unicode (16) ) psu = Column (Unicode (256)) tso = Column (Unicode (256)) np = Column (Unicode (256)) street = Column (Unicode (256)) house = Column (Integer) flat = Column (Integer) mro = Clasa Coloană (Unicode (256)) Plată (bază): __tablename__ = "plăți" # și așa mai departe ...

Acum este suficient să importați acest modul în orice proiect python și puteți lucra cu date.

Vă prevăd întrebarea - „de ce SQLite”? Motivul principal este că baza de date este doar în citire, astfel încât problemele legate de scrierea în SQLite nu ar trebui să ne îngrijoreze. În al doilea rând, formatul acestui SGBD este convenabil - este mai convenabil să-l vizualizați (există multe utilități gratuite, inclusiv o super-extensie pentru FireFox). În al treilea rând, în unele cazuri a fost necesar să obțineți acces la abonați de la acele mașini care nu au o conexiune la serverul MySQL. În acest caz, este suficient să copiați fișierul bazei de date SQLite, iar această mașină va avea acces la toate informațiile.

Descărcarea are loc o dată pe zi noaptea. Introducerea datelor în 1C poate fi automatizată în același mod. De exemplu, este necesar să înregistrați lecturile lăsate de abonați pe site-ul web al contului lor personal. În acest caz, ne conectăm din nou la 1C și, folosind metoda software, creăm și executăm documentul „Actul de a lua citiri”. Voi da codul de mai jos.

Lucrul cu obiecte COM în Python este cam neobișnuit. În primul rând, „pitonicitatea” codului se pierde - regulile pentru numirea variabilelor și funcțiilor în 1C, ca să spunem ușor, nu corespund Zen-ului Python. În al doilea rând, toată lumea știe că obiectele 1C sunt deseori numite caractere chirilice, ceea ce va cauza probleme atunci când se dezvoltă în Python ... dar pot fi rezolvate. Vă sugerez să vă familiarizați cu codul:

Import pythoncom import win32com.client V82_CONN_STRING = "Srvr = v8_server; Ref = v8_db; Usr = nume de utilizator; Pwd = megapass;" pythoncom.CoInitialize () V82 = win32com.client.Dispatch ("V82.COMConnector"). Conectare (V82_CONN_STRING)

După cum puteți vedea din cod, clientul este inițializat să funcționeze cu 1C. Obiectul COM este definit de numele „V82.COMConnector”. Vă rugăm să rețineți că acest nume este valid pentru platforma V8.2, dacă aveți versiunea 8.1, numele va fi „V81.COMConnector”.

La un client inițializat, numim metoda Connect (), trecându-i un șir de conexiune. Șirul este format din numele serverului, baza, utilizatorul și parola. Obiectul V82 rezultat stochează conexiunea cu aplicația 1C. Nu are o metodă Disconnect () sau ceva de genul acesta. Pentru a vă deconecta de la bază, este suficient să ștergeți obiectul din memorie cu funcția del () sau să atribuiți variabila None.

Având un obiect, puteți accesa orice câmpuri și metode ale contextului global 1C, puteți opera cu obiecte universale precum TabularDocument, TableValues ​​etc. Este important să se țină cont de faptul că, atunci când se lucrează printr-o conexiune COM, 1C funcționează în modul „Conexiune externă”. Nu oferă nicio funcționalitate interactivă, cum ar fi ferestre de dialog pop-up, notificări și, cel mai important, formulare. Sunt sigur că veți blestema dezvoltatorii de configurații de mai multe ori, care includ cea mai importantă funcționalitate în procedura Button1Click () în modulul formular de document.

Să vorbim despre un lucru atât de important precum Atributele chirilice. În ciuda faptului că 1C este un mediu bilingv și pentru fiecare metodă rusă există un analog în limba engleză, mai devreme sau mai târziu va fi necesar să apelăm la atributul chirilic. Dacă în limbile PHP sau VBSCript acest lucru nu cauzează probleme,

Set Con = CreateObject ("v81.COMConnector") Set v8 = Con.Connect ("ConnectionString") Set AccountsManager = v8.Documents.Invoices .... Set AccountsRecord = AccountsManager.CreateElement () AccountsRecord.Contractor = .... .... AccountsWrite.Write ()

Apoi, codul Python se va prăbuși pur și simplu cu o eroare de sintaxă. Ce sa fac? Editați configurația? Nu, este suficient să folosiți metodele getattr și setattr. Trecând obiectul COM și numele chirilic al atributului la aceste funcții, puteți obține și seta valorile în consecință:

# coding = cp1251 catalog = getattr (V82.Cataloguri, „Conturi personale”)

Următorul este important: numele atributelor, precum și parametrii funcțiilor și metodelor trebuie transmise în codificarea cp1251. Prin urmare, pentru a evita calea de codificare în prealabil, este logic să o declarați la începutul fișierului: # coding = cp1251. După aceea, puteți transfera șiruri fără să vă faceți griji cu privire la codificarea lor. Dar! Toate șirurile primite de la 1C (rezultatele apelurilor de funcții, solicitări) vor fi codate în UTF-8.

Un exemplu de cod care execută o interogare într-un mediu 1C, repetă rezultatul și salvează baza de date în SQLite:

# coding = cp1251 q = "" "SELECTAȚI conturi personale. Cod AS cod, Conturi personale.Structure.PopulatedPart.Name +", "+ Conturi personale. Adresă scurtă AS Adresă, Conturi personale. Abonat.Nume AS fio, Conturi personale.CA Division psu.Number EXPRESS (CharacteristicsPersonalAccountsSliceLast.Value AS Directory.TerritoriallyNetworkOrganizations) .Nume AS tso, PersonalAccounts.Structure.PopulatedPart.Name AS np, PersonalAccounts.Street.Room.Room.Number.AS. Street, Face.Accs. Division.Parent.Name AS mro FROM Directory.PersonalAccounts AS PersonalAccounts LEFT JOIN Data Register.CharacteristicsPersonalAccounts.SliceLast (, TypeCharacteristics = VALUE (Directory.TypesCharacteristics. = V82.NewObject ( „Interogare”, q) selection = query.Execute (). Alegeți () CONN = db.connect () CONN.query (models.Abonent) .delete () în timp ce selection.Next (): abonent = models.Abonent () abonent.account = selection.code.strip () abonent.code = selection.code abonent.fio = selection.fio abonent.address = selection.address abonent.psu = selection.psu abonent.tso = selection.tso abonent.source = u "ASRN" abonent.np = selection.np abonent.street = selection.street abonent.house = selection.house abonent.flat = selection.flat abonent.mro = selection.mro CONN.add (abonent) CONN.commit ()

Aici CONN este o sesiune pentru conectarea la baza de date SQLite. Obiectul de interogare este creat, textul său este completat. După cum sa menționat mai sus, textul cererii trebuie să fie în cp1251, pentru care codificarea este declarată pentru prima dată. După executarea cererii, toți abonații sunt șterse în baza de date pentru a nu adăuga duplicate, apoi sunt adăugați într-o buclă și urmează confirmarea finală.

Când am lucrat cu interogări, am găsit următoarele reguli.

Atunci când alegeți câmpuri, atribuiți-le nume cu litere latine, va fi mult mai convenabil să vă referiți la ele printr-un selector (punct), în loc de getattr ().
- Alegeți doar tipuri de date primitive: șiruri, numere, dată și boolean. Nu selectați niciodată referințe la un obiect (document, referință)! În acest context, legăturile sunt absolut inutile pentru dvs. și chiar dăunătoare, deoarece orice apel către o recuzită sau o metodă de legătură va duce la o cerere printr-o conexiune COM. Dacă accesați atributele link-ului într-o buclă, acesta va fi extrem de lent.
- Dacă selectați un câmp Data, acesta va fi returnat ca obiect PyTime. Acesta este un tip de date special pentru trecerea datei / orei într-o conexiune COM. Nu este la fel de convenabil să lucrați cu el ca la data-oră obișnuită. Dacă treceți acest obiect către int (), timestamp-ul va fi returnat, de unde puteți obține apoi data și ora folosind metoda fromtimestamp ().

Acum să vedem cum sunt formate documentele tipărite. Faptul este că consumatorului trebuie să i se ofere posibilitatea de a descărca documente pre-pregătite, de exemplu, o chitanță de plată sau o declarație de reconciliere. Aceste documente sunt generate în 1C în conformitate cu cerințele stabilite, implementarea lor în Python va dura mult timp. Prin urmare, este mai bine să generați documente în 1C și să le salvați în format Excel.

Deci, documentul actului de reconciliere este generat de un special prelucrare externă... Pentru cei care nu sunt familiarizați cu terminologia 1C: procesarea este un program autonom care are propriul modul, formulare, șabloane, conceput pentru a rula într-un mediu 1C. Este necesar să inițializăm procesarea, să completăm detaliile și să apelăm la o funcție care ne va returna document foaie de calcul conceput pentru vizualizare în 1C. Acest document trebuie salvat în format Excel și copiat pe server sau scris în baza de date.

Link = getattr (V82.Catalogs, "SystemReports"). FindByDescription ("Elaine Reconciliation Act") nav_url = V82.GetURL (link, "Report") name = V82.ExternalReports.Connect (nav_url) ExternalReport = V82.ExternalReports.Creport (nume) setattr (ExternalReport, "Cont personal", referință) table_doc = ExternalReport.GetDoc () cale = V82.GetTempFileName ("xls") table_doc.Write (cale, V82 .SpreadsheetDocumentFileType.XLS) raport = modele.Report () report .account = reference.Code.strip () report.type = u "act" report.document = deschis (cale, "rb"). read () CONN.add (report)

Fragmentul de mai sus face următoarele. Procesarea care formează documentul este conectată. Procesarea poate fi integrată în configurație, stocată pe disc sau în baza de date 1C (într-un fel de carte de referință). Deoarece tratamentele se schimbă frecvent, astfel încât de fiecare dată când configurația nu este actualizată, cele mai frecvent modificate tratamente sunt stocate în directorul „Rapoarte de sistem”, în atributul tipului „depozit de valori” denumit Raport. Procesarea poate fi inițializată descărcându-l din baza de date pe disc și încărcându-l sau utilizând metoda GetURL (), în care trebuie să treceți un link către un articol din catalog și numele unui atribut. Atribuim valorile atributelor obiectului de procesare primit, apelăm funcția exportată GetDoc (), obținem un document de foaie de calcul care este salvat într-un fișier Excel temporar. Conținutul acestui fișier este scris în baza de date SQlite.

Ultimul lucru care rămâne de luat în considerare este introducerea software-ului de date în 1C. Să presupunem că doriți să introduceți lecturi de la abonați. Pentru a face acest lucru, este suficient să creați și să efectuați documentul „Actul de a face lecturi”:

# coding = cp1251 actes = getattr (V82.Documents, "ActCreateDocument") act = acts.CreateDocument () setattr (act, "Indication", 1024.23) setattr (act, "Subscriber", "Ivanov") # Completarea altor detalii . .. act.Write ()
Acum, introducerea datelor este automatizată.

Așadar, am prezentat o metodă care se bazează pe descărcarea și încărcarea programelor a datelor folosind o conexiune COM. Această metodă funcționează cu succes în organizația mea de aproape un an. Baza, formată din 1C, servește 3 sisteme de plată, achiziționarea de Internet (plata prin carduri prin Internet), precum și un cont personal. În plus, baza de date este conectată diverse scenarii pentru a automatiza rutina.

În ciuda neajunsurilor metodei (viteza mică a conexiunii COM), în general funcționează stabil. Avem date într-o formă independentă de platformă (SQLite) cu care se poate lucra din orice limbă. Iar partea principală a codului este scrisă în Python, ceea ce înseamnă că există multe instrumente și tehnici disponibile care nu pot fi nici măcar visate în 1C.

Acesta este unul dintre căi posibile interacțiunea cu 1C. Sunt sigur că nu este nou și probabil că a fost deja testat și optimizat de cineva. Cu toate acestea, am încercat să precizez cât mai multe detalii ale procesului pentru a te salva de capcanele pe care am călcat-o eu.

Vă doresc mult noroc și amintiți-vă că 1C nu este atât de cumplit pe cât este pictat!

Una dintre opțiunile pentru schimbul de date între bazele 1C este schimbul printr-o conexiune COM.

Prin utilizarea Conexiuni COM vă puteți conecta la altul dintr-o bază de date 1C ș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. În acest articol, vom analiza exemple de acest tip de conexiuni. Exemplele folosesc platforma 8.2.

Puteți crea două tipuri de obiecte COM pentru o aplicație 1C. aceasta V82.Aplicareși V82.COMConnector... In caz de V82.Aplicare aproape o instanță completă a aplicației 1C este lansată. în caz de utilizare V82.COMConnector pornește o mică parte de server.
În acest caz, viteza de funcționare este mai mare, dar este posibil ca unele funcții să nu fie disponibile. În special, lucrul cu formularele și cu module comune pentru care nu este stabilită proprietatea de a lucra cu îmbinări exterioare. Mai ales trebuie să utilizați V82.COMConnectorși numai în caz de lipsă de funcționalitate V82.Aplicare... Diferența de viteză poate fi vizibilă în special pe bazele de date mari.

Deci sa începem

  1. Să creăm un obiect COM
    • pentru V82.Aplicare Conexiune = New COMObject ("V82.Application");
    • pentru V82.COMConnector Conexiune = COMObject nou ("V82.COMConnector");
  2. Să formăm un șir de conexiune
    • pentru versiunea de server a bazei de date ConnectionString = "Srvr =" "ServerName" "; Ref =" "BaseName";
    • pentru versiunea de fișier a bazei de date ConnectionString = "Fișier =" "PathKBase" "; Usr = UserName; Pwd = Password";
  3. Ne conectăm la bazăÎncercare de conectare = Conectare. Conectare (ConnectionString); Mesaj de excepție = Mesaj nou către utilizator; Mesaj. Text = + Descriere Erori (); Mesaj. A raporta() ; Sfârșitul încercărilor;
  4. Rupem conexiunea la bază Conexiune = Nedefinit;

    Pentru obiect V82.Aplicare este imperativ să încheiem conexiunea, altfel va rămâne suspendată o sesiune neterminată, care va trebui apoi ștearsă manual. In caz de V82.COMConnector conexiunea se termină automat la sfârșitul procedurii în care a fost realizată conexiunea. Și mai există un moment mic.

    Pentru utilizatorul sub care se face conexiunea, caseta de selectare „Solicitați confirmarea la închiderea programului” din setările sale trebuie să fie dezactivată.

Acum, să punem tot codul împreună.

Conexiune = New COMObject ("V82.Application"); // Conexiune = COMObject nou („V82.COMConnector”); ConnectionString = "Srvr =" "Server1C" "; Ref =" "MyBase" "; Usr = Petya; Pwd = 123"; // ConnectionString = "File =" "С: \ MyBase" "; Usr = Petya; Pwd = 123";Încercare de conectare = Conectare. Conectare (ConnectionString); Mesaj de excepție = Mesaj nou către utilizator; Mesaj. Text = „Conectarea la baza de date nu a reușit”+ Descriere Erori (); Mesaj. A raporta() ; Sfârșitul încercărilor; Conexiune = Nedefinit;

Pentru tipul de conexiune V82.Aplicare metoda este utilizată pentru un obiect COM care a fost creat inițial și pentru V82.COMConnector metoda se aplică conexiunii. se continuă lucrul cu cererea prin mijloace standard 1C. în cod arată așa:

Cerere = Conexiune. NewObject („Cerere”); // pentru V82.COMConnector Cerere = Conexiune. NewObject („Cerere”); // pentru V82.Aplicare Anchetă. Text = "SELECT | Pozițiile organizațiilor. Cod, | Pozițiile organizațiilor.| FROM | Director. Poziții ale organizațiilor AS Poziții ale organizațiilor "; Rezultat = Cerere. Alerga (); Eșantion = Rezultat. Selectați() ; În timp ce prelevarea de probe. Next () Buclă Sfârșitul buclei;

Pentru versiunea 1C: Enterprise 8.3, totul rămâne neschimbat, cu excepția faptului că atunci când creați obiecte COM, trebuie să utilizați „V83.COMConnector” sau „V83.Application”.