Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 8
  • Niz povezivanja na 1c 8.3. Tri stuba rada sa COM objektima

Niz povezivanja na 1c 8.3. Tri stuba rada sa COM objektima

Hello Habravchans!

U ovom članku želim govoriti o tome kako je uspostavljena integracija sa 1C platformom u mojoj organizaciji. Gotovo potpuni nedostatak tehničkih informacija o ovoj temi potaknuo me je na ovo. Čitajući razne članke i izvještaje na temu povezivanja 1C sa bilo kojim informacionim sistemom, iznova se uvjeravate da su svi marketinški, demonstracioni, a nikada tehnički, koji odražavaju problem i suštinu njegovog rješenja.

Upozoravam vas da metoda ni na koji način ne tvrdi da je univerzalna. Budući da postoji mnogo samih 1C konfiguracija, a postoji još više informacijskih sustava, jezika i platformi, broj mogućih kombinacija je ogroman. Cilj mi je pokazati jedno od mogućih rješenja.


Odabrao sam Python kao jezik koji će se integrirati sa 1C. Vrlo je pogodan za automatizaciju procesa. Ovo je olakšano minimalističkom sintaksom (kod se kuca vrlo brzo), bogatom standardnom bibliotekom (manje potrebe za modulima trećih strana), cross-platformom - s velikom vjerovatnoćom, kod napisan u Linix OS-u će uspješno raditi na Windows.

Za početak ću iznijeti podatke sa kojima ćemo raditi. Organizacija - kompanija za prodaju energije u regiji Dalekog istoka - opslužuje oko 400 hiljada pretplatnika, 1C bazi na samopisnoj konfiguraciji. Za svakog pretplatnika pohranjuju se njegova plaćanja, naknade, potrošene usluge i šeme obračuna, mjerni uređaji, očitanja i mnogi drugi podaci.

Jednom u organizaciji postojao je program napisan u Delphiju i koji koristi MSSQL/Firebird kao bazu podataka. U tim slavnim vremenima bilo je moguće spojiti se na bazu podataka koristeći bilo koji jezik i izvršiti mnoge radnje - birati pretplatnike dužnika, primati uplate, snimati očitanja instrumenta. Nije iznenađujuće da je kolekcija skripti koje automatizuju rutinu stalno rasla. Programeri su mogli izvršiti bilo koju radnju bez otvaranja samog programa.

Nažalost, s prelaskom na 1C, freebie je završio - više se nije bilo moguće izravno povezati s bazom. Općenito, sama 1C platforma je nedjeljiva i ne ide dobro za integraciju s drugim sistemima. Ona je, kako kažu, stvar za sebe. Prilikom učitavanja podataka u 1C, treba imati na umu da ih odatle neće biti tako lako izdvojiti. Ali s obzirom na činjenicu da je organizacija trebala implementirati sisteme plaćanja i lični račun, bilo je neophodno pronaći neko rješenje.

Glavni zadaci sa kojima sam se suočio bili su mogućnost brzog dobijanja podataka o određenom ličnom računu - ime, adresa, mjerni uređaji, očitanja instrumenata, plaćanja, naknade. Plus formiranje dokumenata - akt pomirenja, potvrda o uplati. Dakle, nema direktne veze s bazom podataka - svi koji su pogledali 1C bazu podataka na SQL serveru vidjeli su da je teško razumjeti masu tabela poput aaa1, aaa2. A pravljenje upita sa takvim imenima tabela i polja jednostavno je nerealno. Osim toga, mnoge 1C tablice (posebno one najvažnije, kao što su rezovi potonjeg, reziduali i okretaji) su virtualni i razbacani po različitim fizičkim tablicama, prikupljeni višestrukim spajanjima. Ova metoda nije prikladna.

1C platforma pruža mogućnost povezivanja na nju putem COM veze. Kao i mnogi Windows programi, tokom instalacije 1C, dva COM objekta se registruju u sistemu - Automation Server i COM Connector. Možete raditi sa oba objekta koristeći jezik koji podržava COM tehnologiju.

Objekt Automation Server je 1C aplikacija koja se gotovo ne razlikuje od obične klijentske aplikacije. Razlika je u tome što dodatno postaje moguće programski kontrolirati instancu aplikacije. Prilikom rada s objektom COM Connector, pokreće se lagana verzija 1C aplikacije u kojoj nisu dostupni oblici, kao i funkcije i metode koje se odnose na sučelje i vizualne efekte. Sama aplikacija se pokreće u režimu "Spoljna veza". Inicijalizaciju globalnih varijabli (na primjer, definiranje trenutnog korisnika i njegovih postavki) treba izvršiti u 1C eksternom veznom modulu. Ako se u načinu eksterne veze u kodu pozove funkcija koja nije dostupna u ovom modu, biće podignut izuzetak (koji će biti proslijeđen našoj python skripti). Pozivi nesigurnih funkcija trebali bi biti okruženi konstrukcijama poput

# Ako NIJE vanjska konekcija, onda upozorenje ("Zdravo!"); #EndIf

Budući da je rad sa COM objektima isključivo Windows tehnologija, nije iznenađujuće što je nema u standardnom Python paketu. Morat ćete instalirati ekstenziju - skup modula koji pružaju svu potrebnu funkcionalnost za programiranje pod Windowsom u Pythonu. Može se preuzeti kao već sastavljen exe-instalater. Samo proširenje omogućava pristup registru, uslugama, ODBC, COM objektima, itd. Alternativno, možete odmah instalirati ActiveState Python distribuciju, koja dolazi sa Win32 ekstenzijom iz kutije.

Neko vrijeme sam eksperimentisao sa COM vezom u razvoju web aplikacija, posebno mog ličnog naloga. Identificirani su sljedeći nedostaci:

COM veza je spora. Loše performanse su poznati nedostatak COM tehnologije.
- Proces uspostavljanja veze sa 1C, ovisno o konfiguraciji, može trajati od 1 do 8 sekundi (u mom slučaju 6 sekundi). Nepotrebno je reći da će uspostavljanje veze za svaki zahtjev rezultirati učitavanjem svake stranice 8 sekundi.
- Pošto web aplikacije u Pythonu rade kao nezavisni serveri, prethodna tačka se može nadoknaditi pohranjivanjem veze u neku globalnu varijablu i, u slučaju greške, vratiti je. Da budem iskren, nisam razmišljao o tome kako održati vezu u PHP-u.
- Višeplatformska funkcionalnost web aplikacije je izgubljena.

Na osnovu gore navedenih tačaka, odlučeno je da se promijeni princip interakcije, podijelivši ga na 2 dijela - prvi zavisan od platforme (Windows), istovar podataka 1C u nekom prikladnom formatu, a drugi, nezavisan od platforme, sposoban za rad sa podacima bez sumnje u 1C u principu.

Strategija akcije je sljedeća: python skripta se povezuje na 1C, izvršava potrebne upite i prenosi podatke u SQLite bazu podataka. Možete se povezati na ovu bazu podataka iz Python, PHP, Java. Većina naših projekata radi na Python-u, a pošto mrzim pisati sirove SQL upite ručno, sav rad sa SQLite bazom podataka obavlja se preko SQLAlchemy ORM. Bilo je potrebno samo opisati strukturu podataka baze podataka u deklarativnom stilu:

Iz sqlalchemy.ext.declarative import declarative_base iz sqlalchemy import Column, Integer, Numeric, DateTime, Unicode, Boolean, LargeB, ForeignKey Base = declarative_base () class Abonent (Base): __tablename__ = "abonuments" ike = "abonuments" i Tačno) račun = Kolona (Unicode (32), indeks = Tačno) kod = Kolona (Unicode (32)) adresa = Kolona (Unicode (512)) fio = Kolona (Unicode (256)) izvor = Kolona (Unicode (16) ) psu = Stupac (Unicode (256)) tso = Stupac (Unicode (256)) np = Kolona (Unicode (256)) street = Kolona (Unicode (256)) house = Stupac (Integer) stan = Stupac (Integer) mro = Kolona (Unicode (256)) klasa Plaćanje (osnova): __tablename__ = "plaćanja" # i tako dalje...

Sada je dovoljno da uvezete ovaj modul u bilo koji python projekat i možete raditi sa podacima.

Predviđam vaše pitanje - zašto SQLite? Glavni razlog je taj što je baza podataka samo za čitanje, pa nas problemi sa pisanjem u SQLite ne bi trebali brinuti. Drugo, format ovog DBMS-a je zgodan - praktičnije ga je pregledati (postoji mnogo besplatnih uslužnih programa, uključujući super-proširenje za FireFox). Treće, u nekim slučajevima je bilo potrebno pristupiti pretplatnicima sa onih mašina koje nemaju vezu sa MySQL serverom. U ovom slučaju, dovoljno je kopirati datoteku SQLite baze podataka i ova mašina će imati pristup svim informacijama.

Istovar se vrši jednom dnevno noću. Unos podataka u 1C može se automatizirati na isti način. Na primjer, potrebno je zabilježiti očitanja koja su pretplatnici ostavili na web stranici njihovog ličnog računa. U ovom slučaju, ponovo se povezujemo na 1C i, koristeći programsku metodu, kreiramo i izvršavamo dokument „Akt uzimanja očitanja“. Ispod ću dati kod.

Rad sa COM objektima u Pythonu je pomalo neobičan. Prvo, gubi se "pythonicity" koda - pravila za imenovanje varijabli i funkcija u 1C, blago rečeno, ne odgovaraju Zen of Python. Drugo, svi znaju da se 1C objekti često nazivaju ćiriličnim simbolima, što će uzrokovati probleme pri razvoju u Pythonu... ali oni se mogu riješiti. Predlažem da pročitate kod:

Import pythoncom import win32com.client V82_CONN_STRING = "Srvr = v8_server; Ref = v8_db; Usr = korisničko ime; Pwd = megapass;" pythoncom.CoInitialize () V82 = win32com.client.Dispatch ("V82.COMConnector"). Poveži (V82_CONN_STRING)

Kao što možete vidjeti iz koda, klijent je inicijaliziran za rad sa 1C. Definicija COM objekta se zove "V82.COMConnector". Imajte na umu da ovo ime vrijedi za V8.2 platformu, ako imate verziju 8.1, naziv će biti "V81.COMConnector".

Na inicijaliziranom klijentu pozivamo metodu Connect (), prosljeđujući joj niz veze. Niz se sastoji od imena servera, baze, korisnika i lozinke. Rezultirajući V82 objekt pohranjuje vezu s 1C aplikacijom. Nema metodu Disconnect () ili nešto slično. Da biste prekinuli vezu sa bazom, dovoljno je izbrisati objekat iz memorije pomoću funkcije del () ili ga dodijeliti varijabli None.

Imajući objekt, možete pristupiti svim poljima i metodama globalnog konteksta 1C, raditi s univerzalnim objektima kao što su TabularDocument, ValuesTable, itd. Važno je uzeti u obzir da kada radite preko COM veze, 1C radi u načinu "Vanjske veze". U njemu nisu dostupne nikakve funkcije za interaktivni rad, na primjer, skočni dijalozi, obavijesti i, što je najvažnije, obrasci. Siguran sam da ćete više puta psovati programere konfiguracije, koji prilažu najvažniju funkcionalnost u Button1Click () proceduri u modulu obrasca dokumenta.

Hajde da pričamo o tako važnoj stvari kao što su atributi ćirilice. Unatoč činjenici da je 1C dvojezično okruženje i za svaku rusku metodu postoji analog na engleskom jeziku, prije ili kasnije bit će potrebno okrenuti se atributu ćirilice. Ako u PHP ili VBSCript jezicima to ne uzrokuje probleme,

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

Tada će se Python kod jednostavno srušiti sa sintaksičkom greškom. šta da radim? Urediti konfiguraciju? Ne, dovoljno je koristiti metode getattr i setattr. Prenošenjem COM objekta i ćiriličnog naziva atributa ovim funkcijama, možete dobiti i postaviti vrijednosti u skladu s tim:

# kodiranje = cp1251 katalog = getattr (V82.Katalozi, "Lični računi")

Važno je sljedeće: imena atributa, kao i parametri funkcija i metoda moraju biti proslijeđeni u cp1251 kodiranju. Stoga, kako bi se unaprijed izbjegla putanja kodiranja, ima smisla deklarirati je na početku datoteke: # coding = cp1251. Nakon toga, možete prenositi nizove bez brige o njihovom kodiranju. Ali! Svi nizovi primljeni od 1C (rezultati poziva funkcija, zahtjeva) bit će kodirani u UTF-8.

Primjer koda koji izvršava upit u 1C okruženju, ponavlja rezultat i sprema bazu podataka u SQLite:

# coding = cp1251 q = "" "ODABIR PersonalAccounts.Code AS kod, PersonalAccounts.Structure.PopulatedPart.Name +", "+ PersonalAccounts.Kratka adresa AS adresa, PersonalAccounts.A subscriber Name AS fio, PersonalAccounts.CA Division psu .Broj EXPRESS (KarakteristikePersonalAccountsSliceLast.Value AS direktorij.TerritoriallyNetworkOrganizations) .Naziv AS tso, PersonalAccounts.Structure.PopulatedPart.Name AS np, PersonalAccounts.Street.Room.Room.A PersonalAccounts.Street.Room.Room.A PersonalAccounts.Street.Room.Room.A,Ccount. Ime AS mro FROM Directory.PersonalAccounts AS PersonalAccounts LEFT JOIN Data Register.CharacteristicsPersonalAccounts.CutLast (, TypeCharacteristics = VALUE (Directory.TypesCharacteristics. = V82.NewObject ( "Upit", q) odabir = upit.Izvrši (). Odaberite () CONN = db.connect () CONN.upit (modeli.Abonent) .izbriši () dok odabir.Sljedeće (): abonent = modeli.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 ()

Ovdje CONN je sesija za povezivanje na SQLite bazu podataka. Objekt upita je kreiran, njegov tekst je ispunjen. Kao što je gore navedeno, tekst zahtjeva mora biti u cp1251, za koji je kodiranje prvo deklarirano. Nakon izvršenja zahtjeva, svi pretplatnici se brišu u bazi kako se ne bi dodavali duplikati, zatim se dodaju u petlji i slijedi konačno urezivanje.

Kada sam radio sa upitima, pronašao sam sljedeća pravila.

Kada birate polja, dodijelite im imena latiničnim slovima, bit će mnogo zgodnije pozivati ​​se na njih kroz selektor (tačka), umjesto getattr ().
- Odaberite samo primitivne tipove podataka: nizove, brojeve, datum i logičke vrijednosti. Nikada ne birajte reference na objekt (dokument, referencu)! U ovom kontekstu, veze su vam apsolutno nepotrebne, pa čak i štetne, jer će svaki poziv na props ili link metodu dovesti do zahtjeva preko COM veze. Ako pristupite atributima veze u petlji, to će biti izuzetno sporo.
- Ako odaberete polje Datum, ono će biti vraćeno kao PyTime objekt. To je poseban tip podataka za prolazak datuma/vremena u COM konekciju. Nije tako zgodno raditi s njim kao s uobičajenim datumom i vremenom. Ako ovaj objekat prosledite u int (), bit će vraćena vremenska oznaka iz koje zatim možete dobiti datum i vrijeme pomoću metode fromtimestamp ().

Pogledajmo sada kako se formiraju štampani dokumenti. Činjenica je da potrošaču treba dati priliku da preuzme unaprijed pripremljene dokumente, na primjer, potvrdu o uplati ili izjavu o usaglašavanju. Ovi dokumenti se generiraju u 1C u skladu sa utvrđenim zahtjevima, njihova implementacija u Python-u će trajati dugo. Stoga je bolje generirati dokumente u 1C i spremiti ih u Excel format.

Dakle, dokument akta pomirenja se generiše posebnom eksternom obradom. Za one koji nisu upoznati sa 1C terminologijom: obrada je samostalni program koji ima svoj modul, obrasce, šablone, dizajnirane za rad u 1C okruženju. Potrebno je inicijalizirati obradu, popuniti njene detalje i pozvati funkciju koja će nam vratiti tabelarni dokument namijenjen pregledu u 1C. Ovaj dokument mora biti sačuvan u Excel formatu i kopiran na server ili upisan u bazu podataka.

Link = getattr (V82.Catalogs, "System Reports"). FindByDescription ("Elaine Reconciliation Act") nav_url = V82.GetURL (link, "Report") name = V82.ExternalReports.Connect (nav_url) ExternalReport = V82.ExternalReports.ExternalReports. Creport (name) setattr (ExternalReport, "Personal Account", referenca) table_doc = ExternalReport.GetDoc () path = V82.GetTempFileName ("xls") table_doc.Write (put, V82 .SpreadsheetDocumentFileType.XLS) report = modeli.Report ) report .account = reference.Code.strip () report.type = u "act" report.document = otvoren (put, "rb"). read () CONN.add (izvještaj)

Gornji isječak radi sljedeće. Povezana je obrada koja formira dokument. Obrada se može ugraditi u konfiguraciju, pohraniti na disk ili u bazu podataka 1C (u nekoj vrsti priručnika). Budući da se tretmani često mijenjaju, tako da svaki put kada se konfiguracija ne ažurira, tretmani koji se najčešće mijenjaju se pohranjuju u direktorij "System Reports", u atribut tipa "skladište vrijednosti" pod nazivom Report. Obrada se može inicijalizirati istovarom iz baze podataka na disk i učitavanjem, ili korištenjem metode GetURL () u koju trebate proslijediti vezu do stavke kataloga i ime atributa. Primljenom objektu obrade dodjeljujemo vrijednosti atributa, pozivamo izvezenu funkciju GetDoc (), dobivamo dokument proračunske tablice koji se sprema u privremenu Excel datoteku. Sadržaj ove datoteke je upisan u SQlite bazu podataka.

Posljednja stvar koju treba razmotriti je softverski unos podataka u 1C. Pretpostavimo da želite da unesete očitanja od pretplatnika. Da biste to učinili, dovoljno je kreirati i izvršiti dokument "Izjava o očitavanju":

# coding = cp1251 acts = getattr (V82.Documents, "Acceptance Act") act = acts.CreateDocument () setattr (act, "Indication", 1024.23) setattr (act, "Subscriber", "Ivanov") # Popunjavanje ostalih detalji... čin.Napiši ()
Sada je unos podataka automatizovan.

Dakle, izložio sam metodu koja se zasniva na programskom istovaru i učitavanju podataka pomoću COM veze. Ova metoda uspješno funkcionira u mojoj organizaciji skoro godinu dana. Baza, formirana od 1C, opslužuje 3 platna sistema, Internet acquiring (plaćanje karticama putem Interneta), kao i lični račun. Osim toga, razne skripte su povezane s bazom podataka kako bi se automatizirala rutina.

Unatoč nedostacima metode (spora brzina COM veze), općenito funkcionira stabilno. Imamo podatke u obliku nezavisnom od platforme (SQLite) sa kojima se može raditi sa bilo kog jezika. A glavni dio koda je napisan u Pythonu, što znači da postoji mnogo alata i tehnika koje se u 1C ne mogu ni sanjati.

Ovo je jedan od mogućih načina za interakciju sa 1C. Siguran sam da nije novo i vjerovatno je neko već testirao i optimizirao. Međutim, pokušao sam da iznesem što više detalja procesa kako bih vas spasio od zamki u koje sam i sam zakoračio.

Želim vam svima puno sreće i zapamtite da 1C nije tako strašan kao što je naslikan!

Jedna od opcija za razmjenu podataka između 1C baza je razmjena putem COM veze.

Koristeći COM vezu, možete se povezati s drugom iz jedne 1C baze podataka i čitati ili pisati podatke. Ova metoda se može koristiti iu klijent-server verzijama baza podataka iu bazama podataka datoteka. U ovom članku ćemo analizirati primjere ove vrste veza. Primjeri koriste platformu 8.2.

Možete kreirati dvije vrste COM objekata za 1C aplikaciju. to V82.Primjena i V82.COMConnector... U slučaju da V82.Primjena pokrenuta je gotovo potpuna instanca 1C aplikacije. u slučaju upotrebe V82.COMConnector pokreće se mali serverski dio.
Radna brzina je veća u ovom slučaju, ali neke funkcije možda neće biti dostupne. Konkretno, rad sa obrascima i uobičajenim modulima za koje nije podešeno svojstvo rada sa eksternim spojevima. Uglavnom morate koristiti V82.COMConnector i to samo u slučaju nedostatka funkcionalnosti V82.Primjena... Razlika u brzini može biti posebno uočljiva na velikim bazama podataka.

Pa počnimo

  1. Kreirajmo COM objekat
    • za V82.Primjena Veza = Novi COMObject ("V82.Application");
    • za V82.COMConnector Veza = Novi COMObject ("V82.COMConnector");
  2. Formiramo niz veze
    • za serversku verziju baze podataka ConnectionString = "Srvr =" "ServerName" "; Ref =" "BaseName";
    • za verziju datoteke baze podataka ConnectionString = "Datoteka =" "Putanja do baze" "; Usr = Korisničko ime; Pwd = Lozinka";
  3. Povezujemo se sa bazom Pokušaj povezivanja = Poveži se. Connect (ConnectionString); Poruka izuzetka = Nova poruka korisniku; Poruka. Tekst = + DescriptionErrors (); Poruka. Prijaviti() ; Kraj pokušaja;
  4. Prekidamo vezu sa bazom Veza = Nedefinisano;

    Za objekt V82.Primjena imperativ je prekinuti vezu, inače će nedovršena sesija ostati da visi, koja će se onda morati ručno izbrisati. U slučaju da V82.COMConnector veza se automatski prekida na kraju procedure u kojoj je konekcija napravljena.I tu je još jedan mali trenutak.

    Za korisnika pod kojim je konekcija uspostavljena, polje za potvrdu "Zatraži potvrdu pri zatvaranju programa" u njegovim postavkama mora biti onemogućeno.

Sada sastavite sav kod zajedno.

Veza = Novi COMObject ("V82.Application"); // Veza = Novi COMObject ("V82.COMConnector"); ConnectionString = "Srvr =" "Server1C" "; Ref =" "MyBase" "; Usr = Petya; Pwd = 123"; // ConnectionString = "File =" "S: \ MyBase" "; Usr = Petya; Pwd = 123"; Pokušaj povezivanja = Poveži se. Connect (ConnectionString); Poruka izuzetka = Nova poruka korisniku; Poruka. Tekst = "Povezivanje na bazu podataka nije uspjelo"+ DescriptionErrors (); Poruka. Prijaviti() ; Kraj pokušaja; Veza = Nedefinisano;

Za vrstu veze V82.Primjena metoda se koristi za COM objekat koji je originalno kreiran, i za V82.COMConnector metoda se primjenjuje na vezu. dalji rad sa zahtjevom obavlja se pomoću standardnih 1C alata. u kodu to izgleda ovako:

Zahtjev = Veza. NewObject ("Zahtjev"); // for V82.COMConnector Zahtjev = Veza. NewObject ("Zahtjev"); // for V82.Primjena Upit. Tekst = "ODABIR | Pozicije organizacija Kodeks, | Pozicije organizacija. OD | Imenik. Položaji organizacija AS Pozicije organizacija "; Rezultat = Zahtjev. Pokreni (); Uzorak = rezultat. Odaberite() ; Tokom uzorkovanja. Sljedeće () Loop End of Loop;

Za verziju 1C: Enterprise 8.3 sve ostaje nepromijenjeno, osim što prilikom kreiranja COM objekata morate koristiti "V83.COMConnector" ili "V83.Aplikacija".

Ispis (Ctrl + P)

Jedna od opcija za razmjenu podataka između 1C baza je razmjena putem COM veze. Koristeći COM vezu, možete se povezati s drugom iz jedne 1C baze podataka i čitati ili pisati podatke. Ova metoda se može koristiti iu klijent-server verzijama baza podataka iu bazama podataka datoteka. Ovaj članak govori o ovoj vrsti veza na platformi 8.3

com veza

Možete kreirati dvije vrste COM objekata za 1C aplikaciju. To je ole veza V83.Primjena i com veze V83.COMConnector ... U slučaju da V83.Primjena pokrenuta je gotovo potpuna instanca 1C aplikacije. U slučaju upotrebe V83.COMConnector pokreće se mali serverski dio. Radna brzina je veća u ovom slučaju, ali neke funkcije možda neće biti dostupne. Konkretno, rad sa obrascima i uobičajenim modulima za koje nije podešeno svojstvo rada sa eksternim spojevima. Uglavnom morate koristiti V83.COMConnector i to samo u slučaju nedostatka funkcionalnosti V83.Primjena... Razlika u brzini može biti posebno uočljiva na velikim bazama podataka. Za platformu se koristi 8.2 V82.Application ili V82.COMConnector

Uspostavite OLE vezu

Veza = Novi COMObject (“V83.Application”);

Uspostavite COM vezu

Veza = Novi COMObject (“V83.COMConnector”);

Connection string

// Za opciju klijent-server
StringConnection= "Srvr =" "Ime servera" "; Ref =" "Ime baze";
// Za opciju režima datoteke:
StringConnection= “Datoteka =” “Putanja do baze” “; Usr = Korisničko ime; Pwd = Lozinka ";
Pokušaj
Veza = Veza ... Povežite se(ConnectionString);
Izuzetak
Poruka = ​​Nova poruka korisniku;
Poruka ... Tekst = "Povezivanje na bazu nije uspjelo" + Greške u opisu (); Poruka ... Prijaviti();
Kraj pokušaja;

Prekini vezu

Veza = Nedefinisano;
Za objekt V83.Primjena imperativ je prekinuti vezu, inače će nedovršena sesija ostati da visi, koja će se onda morati ručno izbrisati. U slučaju da V83.COMConnector veza se automatski prekida na kraju procedure u kojoj je konekcija napravljena.I tu je još jedan mali trenutak. Za korisnika pod kojim je konekcija uspostavljena, polje za potvrdu "Zatraži potvrdu pri zatvaranju programa" u njegovim postavkama mora biti onemogućeno.

Metoda NewObject ().

Za kreiranje novog objekta možete koristiti metodu NewObject (), na primjer:

za V83.COMConnector

RequestCOM = Veza. NewObject ( "Upit") ;
TableCOM = Veza. NewObject ( "Tabela vrijednosti") ;
ArrayCOM = Veza. NewObject (“Niz”);

WidCOM = Connection.NewObject

za V83.Primjena

RequestOLE = Veza. NewObject (“ Upit") ;
Tabela OLE = Veza. NewObject("Tabela vrijednosti") ;
ArrayOLE = Connection.NewObject(“Niz”);
WidCOM = Connection.NewObject(“UniqueIdentifier”, StringUID);

RequestCOM ... Tekst =„ODABIR
| Pozicije organizacija Kodeks,
| Pozicije organizacija.
OD | Imenik.Pozicije organizacija
AS pozicije organizacija”;

Rezultat = RequestCOM. Pokreni ();
Uzorak = Rezultat. Odaberite () ;
Tokom uzorkovanja. Sljedeći()Ciklus
Kraj ciklusa;
Također možete koristiti upravitelje konfiguracijskih objekata:
ReferenceCOM = Veza. Referentne knjige. Ime imenika;
DocumentCOM = Veza. Dokumenti. DocumentName;
Registrirajte COM = Veza. Informacijski registri... Register Name;

Dobijanje i poređenje enuma preko COM veze

Za usporedbu vrijednosti elemenata nabrajanja definiranih u konfiguraciji, potrebno je ove elemente pretvoriti u jedan od primitivnih tipova, čije poređenje nije teško. Ovi tipovi mogu biti numerički ili nizovi. Možete pretvoriti vrijednost elementa nabrajanja u numerički tip kao što je ovaj

EnumerationElement = Connection.Directory.Directory1.FindByCode (1) .Props1;

PossibleValues ​​= EnumerationElement.Metadata ().EnumerationValues;

EnumerationElementNumber = PossibleValues.Index (PossibleValues.Find (Connection.XMLString (EnumerationElement)));

Ako je EnumerationElementNumber = 0, onda prijavi ( "EnumerationValue1");

ElseIf EnumerationElementNumber = 1 Onda Izvještaj (“EnumerationValue2”);

EndIf;

Dobivanje objekta preko COM-a po identifikatoru

Preko upravitelja konfiguracijskih objekata dobijamo com objekt, na primjer:
DocumentCOM = Veza. Dokumenti. DocumentName;

Tada dobijamo jedinstveni niz identifikatora:

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

ID = Novi U jedinstveni ID (StringUID);
WITH linkBy ID = Dokumenti [DocumentName] .GetLink (ID);

Ako trebate pronaći com objekt po dokumentu po identifikatoru, onda trebate napisati ovako:

WidCOM = Connection.NewObject(“UniqueIdentifier”, StringUID);
ReferenceById = Connection.Dokumenty [DocumentName] .GetLink (UIDCOM);

Top srodni članci