internetul Windows. Android

COM Connection 1C 8.3 Exemplu de cerere. Trei balene de lucru cu obiecte com

) In regula

În același timp, am văzut mai mult decât o dată când am coborât publicațiile care nu au tras nici măcar 10 puncte.
De ce s-a întâmplat? Aparent pentru că cineva au căzut în mod evident.


Vorbesc despre asta și aș spune că ar fi frumos fără a citi articolul cu privire la rating pentru a înțelege cât de mult aveți nevoie sau evaluați-o nu este atât de primitivă +/-. În ceea ce privește sufletul, aș ajusta acest lucru: ea a marcat atât de mult datorită faptului că stelele s-au dezvoltat și mulți oameni s-au adunat pe site și au plăcut mulți, înțelegi acest caz, pentru că De îndată ce articolul pleacă cu pagina principală Se poate găsi deja numai la cerere, astfel încât să voteze tot ceea ce trece. Și să mențină pe principalul lucru în măsura în care înțeleg, permite comentarii permanente \u003d promovarea articolului.
Este vorba de faptul că există magazine pe străzile de trecere - la urma urmei, este adesea importantă calitatea și relevanța bunurilor, ci pasitatea locului, oamenii care merg adesea cumpăra ceea ce vor arunca a doua zi, doar de dragul procesului. A fost mult timp o boală bine cunoscută - o explozie. Sau pur și simplu crește fluxul crește probabilitatea cumpărătorului dorit.

Și pluses și cons ... este doar un fel de "mulțumesc" pentru timpul petrecut și de lucru


Acestea. Minus este, de asemenea, luat în considerare pentru "mulțumiri"? Am vrut să vă cunosc atitudinea față de faptul dacă este necesar să o punem în astfel de cazuri și cât de interesant este alții? Se pune când articolul este dăunător / rău sau când este doar inutil pentru tine / gol.
În opinia mea, articolul pare a fi pur și simplu creșterea ratingului, deoarece:
1. Problema cu tipurile cu tipurile sunt, în general, ignorate de autor, deși nu a fost leneș să scrie o grămadă de comentarii.
2. În articol, inexactitatea evidentă: se spune că poți doar

V82 \u003d New Comback ("V82.comConnector"); Cod \u003d contrapartită.code;


dar eu fac calm cu ajutorul procesului de procesare:

Raport (bază.pravnikhniki.tragents.Tragents.nightIponiament ("LLC"). Cod);


Și totul este bine! Și aleg conexiunea V82.comConnector
Este ciudat că autorul a scuipat absolut pe faptul că articolul său conține astfel de probleme pe care au indicat și nu reacționează în nici un fel.
3. Dar există încă o problemă atunci când o eroare apare "clasa nu există"
4. Și există o problemă atunci când este instalată 8,2 și apoi instalată 8.1 - Încercați să schimbați în conformitate cu Schimbul de utilizare standard OLE / COM!
5. Puteți specifica prelucrarea principală a site-ului care vă permite să vă conectați universal prin OLE / COM pentru a începe noii veniți, scrieți pentru ei! Apropo, de felul, din anumite motive, se bate cu tine, de ce? Și, ca urmare, 2 cuvinte sunt în esență 6 pentru scene.

În general, nu am noroi de apă, ci indică lacune specifice, dar zero reacții. Dacă aceasta este experiența pe care o împărțiți este un fel de eronat și incomplet.
Vreau să spun prin faptul că autorul ar avea o dorință de a colecta toate glitch-urile, atunci ar putea cel puțin să asculte experiența altcuiva și să nu se apropie de comentarii. Există, de asemenea, o situație atunci când cea care a citit-o cunoaște mai mult decât autorul, îi spun (uneori incorect) și se luptă și el. Ca urmare, toate informațiile nu sunt în articol, ci în comentarii! Amuzant! Așa că se întâmplă adesea, dar nu trebuie să scăpați de ceea ce ați vrut cât mai bine - arăt cât de bine, iar alții sunt arătați! Includeți-l în articol și va fi util, nu tot ce este interesant de citit acest vas.

Imprimare (Ctrl + P)

Una dintre opțiunile pentru schimbul de date între bazele de date 1C este un schimb prin intermediul COM Connection. Cu conexiunea COM, vă puteți conecta dintr-o bază de date la alta și citirea sau scrierea datelor. Puteți utiliza această metodă atât în \u200b\u200bversiunile serverului client ale bazelor, cât și în bazele de fișiere.. Acest articol discută despre acest tip de compuși de pe platformă 8.3

cOM Connection

Puteți crea două tipuri de obiecte com pentru aplicație 1c. Aceasta este conexiunile OLE V83.Aplicație și conexiuni com V83.comConnector. . In caz de V83.Aplicație Instanța aproape completă a aplicației 1C este pornită. În caz de utilizare V83.comConnector. Este lansată o mică parte a serverului. Viteza de lucru în acest caz este mai mare, dar unele funcții nu pot fi disponibile. În special, lucrați cu formulare și cu module comune pentru care proprietatea nu este stabilită cu compuși externi. Trebuie să utilizeze V83.comConnector. Și numai în caz de lipsă de funcționalitate V83.Aplicație. În special, diferența de viteză poate fi vizibilă la bazele volumului mare. Pentru platforma 8.2 utilizată V82.Application sau v82.comConnector

Instalați conexiunea OLE.

Conexiune \u003d combinație nouă ("v83.aplication");

Setați conexiunea COM

Conexiune \u003d obiect COM nou ("V83.comConnector");

Șir de conectare

// Pentru serverul de clienți opțional
Monitorizarea șirului \u003d "SRVR \u003d" "IMPARAȚIA" "; ref \u003d denumirea";
// Pentru modul de mod de fișier:
Monitorizarea șirului \u003d "File \u003d" "Pullbase" "; USR \u003d nume de utilizator; Pwd \u003d parola ";
Atentat, încercare
Conexiune \u003d conexiune . Conectați.(Monitorizarea șirului);
O exceptie
Mesaj \u003d mesaj nou utilizator;
Mesaj . Text = "Nu sa putut conecta la baza de date" + Descriere (); Mesaj . A raporta();
Sărbători;

Breaking conexiune

Compus \u003d nedefinit;
Pentru obiect V83.Aplicație Este necesar să îndeplinim conexiunea la conexiune, altfel sesiunea incompletă va atârna, ceea ce va trebui să fie șters manual. In caz de V83.comConnector. Conexiunea este ruptă automat când procedura este finalizată în care a fost efectuată conexiunea. Și există un alt moment mic. Pentru utilizatorul în care se efectuează conexiunea, caseta de selectare "Programul de închidere a solicitării" trebuie oprit în setările sale.

Metoda NewObject ()

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

pentru V83.comConnector.

Cercetarea \u003d Conexiune. NewObject ( "Anchetă ") ;
Tablecom. \u003d Conexiune. NewObject ( "Tablement") ;
Mascoma \u003d conexiune. NewObject ("matrice");

Uidcom \u003d conexiune .newobject

pentru V83.Aplicație

Cerere \u003d Compus. NewObject (" Anchetă ") ;
Tableole \u003d conexiune. Newobject.("Tablement") ;
Masiv \u003d conexiune.Newobject("Matrice");
Uidcom \u003d conexiune.Newobject("Instrumentul unic", canal);

Cercetarea . Text \u003d."ALEGE
| Postganizări. Cod,
| Organizațiile de propulație. Nume
| Este. | Director. ValabilizareaOrganizațiilor
Ca birou ";

Rezultat \u003d Cerere. A executa ();
Probă \u003d Rezultat. Alegeți ();
În timp ce eșantionul. Ca urmare a()Ciclu
Endcycle;
De asemenea, puteți utiliza managerii de obiecte de configurare:
Referință \u003d conexiune. Directoare. Namemanship;
DocumentCom. \u003d Conexiune. Documentație. Imediat;
Înregistrați \u003d conexiune. Înregistrarea. Marogăresc;

Primirea și compararea transferului prin conexiune COM

Pentru a compara valorile elementelor enumeratelor definite în configurație, este necesar să se transforme aceste elemente la unul dintre tipurile primitive, ceea ce nu provoacă dificultăți. Astfel de tipuri pot fi fie numerice, fie un tip de șir. Convertiți valoarea elementului de enumerare la tipul numeric poate fi așa

Tranzacții de elemente \u003d. Conexiune. Rulează. Pravoyer1.nextile (1). Reqisite1;

Posibile \u003d tranzacții cu elemente. Turnarea (). Valori;

Proceduri elementare \u003d posibile. Posit. Index (posibilitate. Interitive (conexiune .xmlstring

Dacă elementul este operația \u003d 0, apoi raportarea ( "Valori1");

Inspecificat elementarizarea \u003d 1 Atunci Raport ("valori2");

Încheiat;

Obținerea unui obiect prin COM by Identificator

Prin managerii de obiecte de configurare, primim un obiect com, de exemplu:
DocumentCom. \u003d Compus. Documentație. Imediat;

Apoi primim un șir de identificator unic:

Rowing \u003d conexiune.String ( DocumentCom.unikovytentificator.())

Identificator \u003d nou y naturalfentificator (canotaj);
DIN syclipoider \u003d [imidcement] Documente. Se toarnă la identificator (identificator);

Dacă trebuie să găsiți un obiect COM conform documentului de identificare, atunci trebuie să scrieți astfel:

Uidcom \u003d. Conexiune.Newobject("Instrumentul unic", canal);
Identificator Reflot \u003d conexiune. Documente [imytrocement]. Distribuția (UIDCOM);

Bună Habravelov!

În acest articol, vreau să spun despre modul în care este stabilită integrarea cu platforma 1C în organizația mea. Mi-a determinat să fac o absență aproape completă informații tehnice despre această temă. Citirea diferitelor articole și rapoarte pe tema Bundles 1c cu orice sistem de informații, se asigură încă o dată că toți sunt marketing, demonstrații și niciodată - tehnologia, reflectând problema și esența deciziei sale.

Am avertizat că metoda în nici un caz nu susține universalitatea. Deoarece configurațiile 1c sunt multe, există multe și sisteme de informare, limbile și platformele sunt și mai mult, numărul de combinații posibile este imens. Scopul meu este de a demonstra una dintre soluțiile posibile.


Ca o limbă care va fi integrată cu 1c, am ales Python. Este foarte potrivit pentru automatizarea proceselor. Aceasta contribuie la sintaxa minimalistă (codul este recrutat foarte repede), o bibliotecă standard bogată (mai puțin necesită module terță parte), cu o probabilitate transversală - cu o probabilitate ridicată, codul scris în sistemul de operare Linix va câștiga cu succes în Windows .

Pentru a începe cu, contururi cu care vom lucra cu. Organizare - Compania de aprovizionare cu energie în regiunea de est de est - servește aproximativ 400 de mii de abonați, baza 1c pe o configurație auto-scris. Pentru fiecare abonat, plățile, acumulările, serviciile consumate și schemele de calcul, dispozitive de contabilitate, citirile și multe alte date sunt stocate.

Odată în organizație, a fost un program scris în Delphi și utilizând MSSQL / Firebird ca bază de date. În acele vremuri glorioase, a fost posibil să se conecteze la baza de date folosind orice limbă și să facă multe acțiuni - pentru a selecta abonații debitoare, difuzarea plății primite, remediați citirile instrumentelor. Nu este surprinzător faptul că colecția de scripturi care automatizează rutina a crescut constant. Programatorii ar putea efectua acțiuni fără a deschide programul însuși.

Din păcate, cu tranziția la scaunele 1C încheiate - nu a fost posibil să se conecteze direct la bază. În general, platforma 1C în sine este indivizibilă și integrată slabă cu alte sisteme. Ea, așa cum spun ei, lucrul în sine. Prin încărcarea datelor în 1c, trebuie amintit că nu va fi atât de ușor să le eliminați. Dar, având în vedere faptul că organizația necesară pentru implementarea sistemelor de plată și zonă personalăA fost necesar să găsim o soluție.

Principalele sarcini care au stat în fața mea sunt capacitatea de a primi rapid date pe un cont personal specific - numele complet, adresa, dispozitivele contabile, citirile instrumentului, plățile, acumulările. În plus, formarea documentelor este un act de reconciliere, primire de plată. Astfel, posibilitatea unei conexiuni directe din baza de date lipsește - toți cei care au analizat baza de date 1C de pe serverul SQL, a văzut că în masa tabelului tipului AAA1, AAA2 este greu de înțeles. Și să construiască cereri cu astfel de nume de tabele și câmpuri este pur și simplu ireal. În plus, multe tabele 1c (în special cele mai importante, cum ar fi felii tăiate din ultimele, reziduuri și revoluții) sunt virtuale și împrăștiate de diferite tabele fizice, adunând mai multe zone de îmbinare. Această metodă nu este potrivită.

Platforma 1C oferă posibilitatea de a se conecta la acesta prin conexiunea COM. La fel ca multe programe Windows, în timpul instalării 1C, două obiecte COM sunt înregistrate în serverul de automatizare a sistemului și conectorul COM. Puteți lucra cu ambele obiecte folosind limba în care este furnizată tehnologia COM.

Obiectul serverului de automatizare este o aplicație 1c, aproape nici o altă dată de aplicația obișnuită a clientului. Diferența este că, în plus, apare capacitatea de a programa instanța de aplicare a aplicației. Când lucrați cu obiectul conectorului COM, este lansată o versiune ușoară a aplicației 1C, în care formularele nu sunt disponibile, precum și funcțiile și metodele legate de interfață și efecte vizuale. Aplicația însăși începe în modul "Union extern". Inițializarea variabilelor globale (de exemplu, definiție utilizator curent și setările sale) trebuie efectuate în modul compusul extern 1c. Dacă în modul de conectare extern din cod va fi numit o funcție care nu este disponibilă în acest mod, va fi cauzată excepția (care va fi transferată în scriptul nostru Python). Apelarea funcțiilor nesigure ar trebui să fie încadrate de desenele formularului

# Dacă nu conexiune externă, apoi un avertisment ("Bună!"); # Endox.

De la lucrul cu obiectele COM - tehnologie exclusiv de ferestre, nu este surprinzător faptul că în aprovizionarea standard a lui Python lipsește. Va trebui să setați extensia - un set de module care oferă toate funcționalitățile necesare pentru programarea sub Windows pe Python. Acesta poate fi descărcat ca un ex-instalator deja colectat. Extensia însăși oferă acces la registru, servicii, ODBC, obiecte, etc. Alternativ, puteți instala imediat distribuția ActiveState Python, în care prelungirea WIN32 vine din cutie.

De ceva timp am experimentat o conexiune COM în dezvoltarea aplicațiilor web, în \u200b\u200bspecial un cont personal. Următoarele minusuri au fost dezvăluite:

Conexiunea COM este lentă. Productivitate scăzută - Celebrul tehnologie minus com.
- Procesul de instalare a unei conexiuni cu 1c, în funcție de configurație, poate dura de la 1 la 8 secunde (în cazul meu - 6 secunde). Merită să spuneți că conectarea conexiunii la fiecare solicitare va duce la acest lucru, fiecare pagină va fi încărcată timp de 8 secunde.
- Deoarece aplicațiile web pe Python funcționează ca un server independent, elementul anterior poate fi compensat prin stocarea conexiunii într-o anumită variabilă globală și în caz de eroare pentru ao restabili. Cum să mențineți o conexiune la PHP, eu, sincer, nu am gândit încă.
Aplicația web cross-platformă este pierdută.

Pe baza elementelor de mai sus, sa decis modificarea principiului interacțiunii, separarea acesteia în 2 părți - prima platformă dependentă (Windows), descărcarea datelor 1c la orice format convenabil, iar al doilea, care nu este dependent de platformă, care este capabil să lucreze cu datele, nu este conștient de 1c în principiu.

Strategia de acțiune este după cum urmează: Scriptul Python este conectat de la 1c, efectuează interogările dorite și descărcați datele din baza SQLite. Această bază de date poate fi conectată de la Python, PHP, Java. Cele mai multe dintre proiectele noastre lucrează la Python, iar din moment ce nu voi ieși din scrierea interogărilor brute SQL cu mâinile, apoi toate lucrările cu baza SQLite se efectuează prin intermediul ORM SQLALCHEMY. A fost necesar doar să descrieți structura de date a stilului declarativ de bază de date:

De la sqlalchemy.ext.Declarativ import declarativ_base de la coloana de import SQLALCHEMY, Integer, numeric, Datetime, Unicode, Boolean, Breadbinary Base Sweekey \u003d Declarative_Base () Abonent de clasă (bază): __Tablename__ \u003d "Abonenți" ID \u003d Coloană (Integer, Primary_key \u003d Adevărat) Cont \u003d Coloana (Unicode (32), index \u003d true) Cod \u003d Coloana (Unicode (32)) Adresa \u003d coloana (Unicode (512)) FIO \u003d Coloana (Unicode (256)) Sursa \u003d Coloana (Unicode (16) ) PSU \u003d Coloana (Unicode (256)) TSO \u003d Coloana (Unicode (256)) NP \u003d coloana (Unicode (256)) Street \u003d Coloana (Unicode (256)) Casa \u003d Coloana (Integer) Flat \u003d Coloana (Integer) MRO \u003d Coloana (Unicode (256)) Plata clasei: __Tablename__ \u003d "Plăți" # și așa mai departe ...

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

Vă prezint întrebarea - "De ce SQLite"? Principalul motiv - baza este necesară numai pentru citire, deci nu ar trebui să existe probleme cu scrierea în SQLite. În al doilea rând, formatul acestui DBMS 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ă accesați abonații de la acele mașini pe care nu există nicio legătură cu serverul MySQL. În acest caz, este suficient să copiați fișierul de bază de date SQLite, iar această mașină va accesa toate informațiile.

Descărcarea are loc o dată pe zi pe timp de noapte. Carcasa de date în 1c poate fi automatizată în același mod. De exemplu, trebuie să înregistrați mărturia rămasă de abonați pe site-ul contului personal. În acest caz, se conectează din nou cu 1c și metoda software pe care o creăm și le îndeplinesc documentul "Actul de eliminare a indicațiilor". Voi da codul de mai jos.

Lucrul cu obiectele com în Python este un pic neobișnuit. În primul rând, "pitologia" codului este pierdută - regulile de numire a variabilelor și funcțiilor în 1c, pentru ao pune ușor, nu corespund lui Zen Python. În al doilea rând, toată lumea știe că obiectele 1C sunt adesea denumite simboluri chirilice, ceea ce vor provoca probleme atunci când se dezvoltă pe Python ... dar ele sunt rezolvate. Vă propun să vă familiarizați cu codul:

Import Pythoncom Import Win32Com.Client V82_CONN_String \u003d "SRVR \u003d V8_SERVER; REF \u003d V8_DB; USR \u003d nume de utilizator; pwd \u003d megapass;" PYTHONCOM.COINITIALIZE () V82 \u003d Win32Com.Client.Dispatch ("V82.comConnector"). Conectați (v82_conn_string)

După cum se poate observa din cod, clientul este inițializat pentru a lucra cu 1c. Definiția obiectului COM are loc după numele "V82.comConnector". Rețineți că acest nume este valabil pentru platforma V8.2, dacă aveți versiunea 8.1, atunci numele va fi "V81.comConnector".

La clientul inițializat, numim metoda conexiunii () prin transmiterea unui șir de conexiune. Șirul constă în numele serverului, baza de date, utilizator și parolă. Obiectul rezultat V82 păstrează conexiunea cu aplicația 1C. El nu are nici o metodă de deconectare () sau ceva de genul asta. Pentru a deconecta baza, este suficient să ștergeți un obiect din funcția de memorie del () sau să atribuiți o variabilă fără nici o variabilă.

Având un obiect, vă puteți referi la orice câmp și metode ale contextului global 1c, operați cu volume universale ale tipului de document text, tabel și TD. Este important să se considere că atunci când lucrați prin conexiunea COM 1C funcționează în modul "Union extern". Nu este disponibilă orice funcție pentru munca interactivă, cum ar fi dialogurile pop-up, notificările și, cel mai important, forme. Sunt sigur că schimbați dezvoltatorii de configurare, care fac cea mai importantă funcționalitate în butonul Procedură 1 () în modulul de formular de documente.

Să vorbim despre o astfel de vanitate ca atributele kirilice. În ciuda faptului că 1c este un mediu bilingv și pentru fiecare metodă rusă există un analog de limbă engleză, mai devreme sau mai târziu, va fi necesar să contactați atributul kirilic. Dacă în limbile PHP sau VBScript nu provoacă probleme,

SET CON \u003d CREATEOBJECT ("v81.comConnector") set v8 \u003d con.connect ("stringclining") set contabilitate mod \u003d v8.documents. Programare .... Setați AccountSape \u003d Baterie .... AccountSAPAPE. Recrutare ()

Codul de pe Python se blochează pur și simplu cu o eroare de eroare de sintaxă. Ce să fac? Editați configurația? Nu, este suficient să utilizați metodele GetTTR și SETATTR. Transmiterea obiectului COM și a denumirii chirilice a atributului la aceste funcții pot fi obținute în mod corespunzător și setate valori:

# Codificare \u003d CP1251 Catalog \u003d GETTTR (V82.Catalogs, "Facial")

Următoarele sunt importante: numele detaliilor, precum și parametrii funcțiilor și metodelor trebuie transmise în codul CP1251 codificat. Prin urmare, pentru a evita punerea în avans cu codificări, este logic să o declară la începutul fișierului: # codare \u003d CP1251. După aceea, puteți transfera linii fără să vă faceți griji cu privire la codificarea lor. Dar! Toate șirurile obținute de la 1c (rezultatele funcției funcțiilor, cererile) vor fi în codarea UTF-8.

Un exemplu de cod care efectuează în interogarea 1c, se dovedește rezultatul și salvează baza în SQLite:

# Coding \u003d CP1251 Q \u003d "" Alegeți o fairytte. Cod cum ar fi codul, Facial. Express (caracteristică desiccreet-durabil. Relație ca ghid. Organizația Surriană Substituție). Nume ca OTS, Facial., Litsevyesche.divizion.roditel.naimenovanie MRO AS AS Spravochnik.LitsevyeScheta LitsevyeScheta a plecat alătura RegistrSvedeniy.HarakteristikiLitsevyeScheta.SrezPoslednih (, VidHarakteristiki \u003d VALOARE (Spravochnik.VidyHarakteristik.TerritorialnoSetevayaOrganizatsiya)) CUM HarakteristikiLitsevyeSchetaSrezPoslednih LitsevyeScheta.Ssylka HarakteristikiLitsevyeSchetaSrezPoslednih.Obekt \u003d "" „query \u003d V82.newobject ( "Interogare", Q) Selectare \u003d Query.execute () Alegeți () Conn \u003d db.connect () conn.query (modele.abonent) .delete () în timp ce selecție.next (): abonent \u003d modele.abonent () abonent.account \u003d selecție.code.Strip () abonent.code \u003d selecție.code abonent.fio \u003d selecție.fio abonent.address \u003d Selecție.Address abonent.psu \u003d selecție.psu abonent.tso \u003d selecție.Tso abonent.source \u003d U "asrn" abonent.np \u003d selecție.np abonent.street \u003d Selecție.Street abonent.house \u003d Selecție.house abonent.flat \u003d selecție.flat.mro \u003d selecție.mro con.add (abonent) con.commit ()

Aici Conn este o sesiune de conectare la bază SQLite. Se creează un obiect de solicitare de interogare, textul său este umplut. După cum sa menționat mai sus, textul interogării trebuie să fie în CP1251, pentru care codificarea este declarată mai întâi. După executarea cererii, toți abonații sunt șterși în baza de date pentru a nu adăuga un ducky, apoi adăugați în ciclu și urmează comentariul final.

Când lucrați cu cereri, am dezvăluit următoarele reguli.

Alegerea câmpurilor, alocați-le numele latinei, va fi mult mai convenabil să le accesați prin selector (punct), în loc de Getar ().
- Alegeți numai tipurile de date primite: rânduri, numere, date și boolean. Nu alegeți niciodată legături către un obiect (document, director)! În acest context, referințele nu sunt absolut necesare și chiar dăunătoare pentru dvs., deoarece orice referire la detaliile sau metoda linkului va duce la solicitare printr-o conexiune COM. Dacă contactați atributele link-ului în ciclu, acesta va fi extrem de lent.
- Dacă alegeți un câmp de tip câmp, atunci acesta este returnat ca obiect PyTime. Acesta este un tip de date special pentru a transfera data de dată în conexiunea COM. Nu este atât de convenabil să lucrați cu el, ca și cu data obișnuită. Dacă trimiteți acest obiect în Int (), se întoarce marcajul de timp, de la care puteți obține o metodă de date de laTimeStamp ().

Acum ia în considerare cum să se formeze imprimați documente. Faptul este că consumatorul trebuie să ofere capacitatea de a descărca documente pre-pregătite, cum ar fi primirea de plată sau actul de reconciliere. Aceste documente sunt formate în 1c în conformitate cerințe stabilite, implementarea lor pe Python va dura mult timp. Prin urmare, este mai bine să generați documente în 1c și să le mențineți în formatul Excel..

Astfel, actul de reconciliere este generat de un special prelucrarea externă. Pentru cei care nu sunt familiarizați cu terminologia 1c: procesarea este un program independent care are un modul, forme, șabloane, concepute pentru a începe în mediul 1C. Este necesar să se inițieze procesarea, să completați detaliile și să apelați o funcție care să ne returneze un document tabular conceput pentru a vizualiza 1c. Acest document trebuie salvat în format Excel și copiați serverului sau scrieți în baza de date.

LINK \u003d GETATR (V82.Catalogs, "Rapoartele"). FindByDescription ("Act Records Elean") NAV_URL \u003d V82.GETURL (link, "raport") Nume \u003d V82.externalReports.connect (nav_url) externReport \u003d V82.externalReports.Create (Nume) SETATTR (externReport "," facial ", referință) table_doc \u003d externRetens.getdoc () calea \u003d v82.gettempFilename (" xls ") table_doc.write (calea, v82 .spreadsheetdocumentFiletype.xls) Raport \u003d modele.Report () Raport .Account \u003d referință.code.Strip () raport \u003d u "acct" raport.document \u003d deschis (calea, "rb"). Citește () conn.add (raport)

Se urmează următorul fragment. Conectează procesarea care formează un document. Prelucrarea poate fi încorporată în configurație, stocată pe un disc sau în baza de date 1C (într-un ghid). Deoarece procesarea este adesea modificată, astfel încât de fiecare dată când nu puteți actualiza configurația, cea mai frecventă schimbare este stocată în ghidul de raportare, într-un detaliu al raportului tip "Valoare Storation". Prelucrarea poate fi inițializată prin descărcarea acesteia din baza de date pe disc și încărcare sau prin metoda GetURL (), la care trimiterea la elementul de referință și numele de recuzită. Atribimați valoarea recuzită obținută de obiectul de procesare, apelați la funcția GetDoc (), obținem un document tabular care este stocat într-un fișier Excel temporar. Conținutul acestui fișier este înregistrat în baza de date SQLite.

Ultimul lucru rămâne de luat în considerare - acesta este un software care se sporește în 1c. Să presupunem că doriți să faceți mărturie de la abonați. Pentru a face acest lucru, este suficient să creați și să efectuați un document "act de eliminare a indicațiilor":

# Codificare \u003d Actele CP1251 \u003d GETATR (V82.Documents, "Aktsnotchy") ACT \u003d ACTS.Createdocument () SetTTR (ACT, "Indicație", 1024.23) SETATTR (ACT, "Abonatul", "Ivanov") # Completarea altor detalii. .. ACT.WRITE ()
Acum, carcasa de date automată.

Deci, am subliniat metoda care se bazează pe descărcare software și de încărcare a datelor utilizând conexiunea 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, diferitele scripturi sunt conectate la baza de date pentru a automatiza rutina.

În ciuda dezavantajelor metodei (viteza lentă a COM-compusului), în general funcționează stabilă. Avem date într-o formă bazată pe platformă (SQLite) cu care puteți lucra din orice limbă. Iar partea principală a codului este scrisă în Python și, prin urmare, sunt disponibile multe mijloace și tehnici, ceea ce nu poate chiar să viseze de la 1c.

Acesta este unul din metode posibile interacțiune cu 1c. Sunt sigur că nu este nou și probabil deja testat de cineva, optimizat. Cu toate acestea, am încercat să stabilesc maximul detaliilor procesului de a vă proteja de capcanele la care sa presupus.

Îi doresc tuturor norocului și amintesc că nu este atât de teribil pentru 1c, ca puțin!

Una dintre opțiunile de schimb de date între bazele de date 1c este un schimb prin conexiunea COM.

Cu conexiunea COM, vă puteți conecta dintr-o bază de date la alta și citirea sau scrierea datelor. Puteți utiliza această metodă atât în \u200b\u200bversiunile serverului client ale bazelor de date și baze de fișiere. În acest articol, vom analiza exemple de astfel de compuși. Exemplele utilizează platforma 8.2.

Puteți crea două tipuri de obiecte com pentru aplicație 1c. aceasta V82.Aplicație și V82.comConnector.. In caz de V82.Aplicație Instanța aproape completă a aplicației 1C este pornită. În caz de utilizare V82.comConnector. Este lansată o mică parte a serverului.
Viteza de lucru în acest caz este mai mare, dar unele funcții nu pot fi disponibile. În special, lucrați cu formulare și cu module comune pentru care proprietatea nu este stabilită cu compuși externi. Trebuie să utilizeze V82.comConnector. Și numai în caz de lipsă de funcționalitate V82.Aplicație. În special, diferența de viteză poate fi vizibilă la bazele volumului mare.

Deci, procedați

  1. Creați un obiect com
    • pentru V82.Aplicație Conexiune \u003d obiect COM COM ("V82.Application");
    • pentru V82.comConnector. Conexiune \u003d obiect COM nou ("v82.comConnector");
  2. Formăm o conexiune plurală
    • pentru varianta de server a conexiunii șirului \u003d "srvr \u003d" "imasorver" "; ref \u003d denumire";
    • pentru versiunea de fișier a conexiunii șirului \u003d "Fișier \u003d" "Pullbazbaz" "Usr \u003d nume de utilizator; pwd \u003d parola";
  3. Efectuați o conexiune la baza de date Încercarea conexiunii \u003d conexiune. Conectați (compusul șirului); Mesaj de excepție \u003d mesaj nou utilizator; Mesaj. Text \u003d + Descriere (); Mesaj. A raporta() ; Sărbători;
  4. Sparge conexiunea cu baza Compus \u003d nedefinit;

    Pentru obiect V82.Aplicație Este necesar să îndeplinim conexiunea la conexiune, altfel sesiunea incompletă va atârna, ceea ce va trebui să fie șters manual. In caz de V82.comConnector. Conexiunea este ruptă automat când procedura este finalizată în care a fost efectuată conexiunea. Și există un alt moment mic.

    Pentru utilizatorul în care se efectuează conexiunea, caseta de selectare "Programul de închidere a solicitării" trebuie oprit în setările sale.

Acum vom colecta tot codul într-o grămadă

Conexiune \u003d obiect COM COM ("V82.Application"); // conexiune \u003d Obiect COM nou ("V82.comConnector"); Indexul de robinet \u003d "srvr \u003d" "server1c" "; ref \u003d" "mybase" "; usr \u003d petya; pwd \u003d 123"; // Ritching Indion \u003d "File \u003d" "C: \\ Mybase" "; USR \u003d Peter; PWD \u003d 123"; Încercarea conexiunii \u003d conexiune. Conectați (compusul șirului); Mesaj de excepție \u003d mesaj nou utilizator; Mesaj. Text \u003d. "Nu sa putut conecta la baza de date" + Descriere (); Mesaj. A raporta() ; Sărbători; Compus \u003d nedefinit;

Pentru tipul de conexiune V82.Aplicație Metoda este aplicată obiectului COM, care a fost creat inițial și pentru V82.comConnector. Metoda se aplică conectării. Apoi, lucrați cu cererea merge mijloace standard 1c. În cod se pare așa:

Solicitare \u003d conexiune. NewObject ("interogare"); // pentru V82.comConnector. Interogare \u003d conexiune. NewObject ("interogare"); // pentru V82.Aplicație Anchetă. Text \u003d "Selectați | Postganizări. Cod, | Organizațiile de propulație. Nume | Este. | Director. Alloriganizări ca birou "; Rezultat \u003d Cerere. A executa (); Selecție \u003d rezultat. Alegeți (); În timp ce eșantionul. Următorul () ciclul ENDACKEL;

Pentru versiunea 1C: Enterprise 8.3 Totul rămâne neschimbat, cu excepția faptului că atunci când ar trebui să se utilizeze un COMOBEEC "V83.comConnector" sau "V83.Application".

O modalitate de a transfera date de la o configurație 1c la alta este o conexiune software utilizând COM. Multe companii folosesc mai multe baze diferite, între care trebuie să fie anumite relații și dependențe. Dacă este necesar nu numai să transferați date, ci și să efectuați o prelucrare specifică a datelor, atunci conexiunea COM va fi cel mai bun mecanism. Abilitatea de a analiza datele dintr-o altă bază de date 1c este utilă pentru orice dezvoltator.

Conectați-vă prin comanda la baza de date 1c

Pentru a implementa conexiunea COM în 1C, se utilizează un mecanism special numit comonnector. Acest obiect este instalat împreună cu platforma și este utilizat pentru comunicare. bazele de informare. Trebuie remarcat faptul că pentru versiunile 8.2 și 8.3 sunt utilizate diferite obiecte - "v82.connector" și "v83.comConnector" respectiv.

Amintiți-vă că, pe conexiunea COM la baza de date pentru a petrece o licență - nu este necesar să vă implicați în execuția simultană a mai multor conexiuni. Acest lucru este deosebit de important pentru organizațiile al căror număr de licențe este limitat. Aceasta poate fi decisă de această problemă cu ajutorul sarcinilor de reglementare care rulează în timpul lipsei de conexiuni active ale utilizatorilor la baza de date a informațiilor.

Pentru a putea să vă conectați la o altă bază de date și să solicitați informațiile necesare pentru care trebuie să cunoașteți următoarele date:

  1. Ce tip de tip este - fișier sau client-server;
  2. Unde este localizat;
  3. Sub numele de nume și parolă pot merge la ea;
  4. Ce date vă interesează.

Din primele trei elemente pentru implementarea conexiunii COM, trebuie să formați șirul parametrilor. În funcție de tipul IB, acesta va fi diferit specii externe. Folosind șirul rezultat, este conectată o conexiune, care poate fi colectată pentru analiză și prelucrare a datelor dintr-o altă bază de date prin orice metode.

Parametrii Conferința FileBib \u003d "File \u003d" "PATH_BASE" ", USR \u003d" "Nume utilizator" "" PWD \u003d "" "Parolă" ""; Parametrii CONCLUZIICLINSERVEVEB \u003d "SRVR \u003d" "SERVER_NAME" "" REF \u003d "" Nume de bază "; Usr \u003d" "Nume de utilizator" ";

Funcția de conectare este simplă și nu ar trebui să provoace întrebări dacă toți parametrii sunt corecți. Pentru a accelera depanarea și analizarea eventualele erori Este mai bine să încheiem o conexiune în designul "încercării". Returnarea funcției va fi valoarea tipului "COM Object", cu care trebuie să lucrați, obținerea datelor necesare.

& Nasserver Connect Funcție () Parametrii de export Concluzionsib \u003d "Fișier \u003d" "E: \\ BASE 1C \\ ERP" "Usr \u003d" "Administrator"; Pwd \u003d "" 1 ""; V83comcon \u003d noul coge obiect ("V83.comConnector"); Încercați să returnați v83comcon.connect (Puncte de putere parametrii); Excepție de informare (descriere ()); Întoarcerea este nedefinită; Sărbători; Endfunction

Prin conexiunea COM nu puteți selecta numai date, ci și le adăugați în baza de date la care vă conectați. Amintiți-vă că putem transmite prin obiectul COM 4 tipul primitiv date. Alte tipuri vor trebui specificate utilizând funcțiile de căutare încorporate în platformă. Rețineți că funcțiile platformei globale sunt, de asemenea, numite prin conexiunea COM.

Primim date din baza 1C

După ce ați primit obiectul dorit, trebuie să citiți datele de la o altă bază. Pentru a face acest lucru, aplicăm o solicitare prin conexiune COM la 1c 8.3 utilizând tipul "com obiect" rezultat din funcție. Este important să vă conectați mai întâi la baza de date și apoi să efectuați o cerere. Execuția are loc prin metoda NewOBject cu o indicație ca parametru de tip obiect într-un formular de șir - "Solicitare".

& Teste Nasserver Procedura mecanică () Conectare \u003d Conectați (); Dacă tipul de tip tip (conexiune) ("nedefinit"), apoi solicitați \u003d conexiune.Newobject ("interogare"); Solicitare. Text \u003d "Selectați prima 15 | director de director. Nume ca nume | Detarele directorului. Utilizatori ca director"; Eșantionare \u003d cerere. Completați (). Selectați (); În timp ce eșantionul. Următorul () Ciclul este raportat (eșantionare. Endcycle; Încheiat; Extra-procedură\u003e

De exemplu, pentru a obține informații despre utilizatorii unei unități specifice, setați starea la cererea prin parametrii. Un parametru va fi un tip simplu - un șir, iar unitatea este menționată de cartea de referință "Structura întreprinderii". Rezultatul interogării este un tabel cu câmpurile enumerate ale tipului pe care ele există în baza de date la care a avut loc conexiunea COM. Dacă aveți nevoie să le convertiți la alte tipuri - utilizați funcțiile platformei standard:

  • Linia();
  • Număr();
  • Data().
Solicitare \u003d conexiune.Newobject ("interogare"); Solicitarea ; Solicitare. Parametru de instalare ("Desktoming", compus. Rulează. StructuraRedit. IntrarePocode ("00-000023")); Solicitare. Parametru de instalare ("dorit", "Catherine"); Eșantionare \u003d cerere. Completați (). Selectați (); În timp ce eșantionul. Următorul ciclu () este raportat (eșantionare. Nume); Endcycle;

Dacă doriți să trimiteți o matrice în baza de date pentru a selecta mai mulți parametri, de exemplu, unități, se utilizează și comanda NewOBject. În mod similar, puteți transfera o listă sau o tabelă de valori prin completarea lor cu elemente ale unei alte baze de date prin conexiune. Pentru a vă căuta pe toți accesibili metodele existente Obiecte și mecanisme platforme.

Solicitare \u003d conexiune.Newobject ("interogare"); Cererea. ""; Massputs \u003d conexiune.Newobject ("matrice"); Forțe de massput. Addly (compusul. Pravnochiki. Enterprise structurale. Entipotype ("00-000023")); Massputs forțe. Addly (compusul. Rulează. Intreprindere structurală. Entrypocus ("00-000038")); Forțe de massput. Addly (compus. Cadre. Intreprindere structurală. Entripotype ("00-000046")); Solicitare. Parametru de instalare ("dorit pentru diviziune", matrice); Solicitare. Parametru de instalare ("dorit", "Catherine"); Eșantionare \u003d cerere. Completați (). Selectați (); În timp ce eșantionul. Următorul ciclu () este raportat (eșantionare. Nume); Endcycle;

La transferarea documentelor sau a elementelor de referință, apare întotdeauna întrebarea de a controla transferul unui anumit obiect. Folosind conexiuni com, astfel de probleme pot fi rezolvate printr-un identificator unic. Trebuie să găsiți un obiect în baza de date conectată de pe identificatorul de la actualul IB utilizând funcția "Dressline" utilizând identificatorul sub formă de șir. Dacă acest lucru nu a fost găsit, îl puteți crea cu o conexiune COM.

Strider \u003d Row (directoare. Utilizatori. Lightpocode ("00-0000313"). Selicultura unic ()); Dacă nu este denominat (conexiune. Rulează. Utilizatori. Pereskliklka (conexiune .Newobject ("Slothentifier unic", Streed))), apoi un nou utilizator \u003d compus. Rulează utilizatorii (); Nume utilizator nou \u003d Referințe. Utilizatori. Entipocose ("00-0000313"). Nume; Noul utilizator.fizicity \u003d referințe. Utilizatori. Entipotip ("00-0000313"). Fizic Utilizator nou. Recrutare (); Încheiat;

De asemenea, conexiunea COM are dreptul de a utiliza procedurile și funcțiile de la module comune 1c cu caracteristica de conectare externă inclusă. În plus, starea numită funcția sau procedura trebuie să fie exporta și nu include acțiuni interactive efectuate pe server. În cazul opus, veți vedea o greșeală despre inadmisibilitatea operațiunii.

Compus..; Mașini de funcționare \u003d conexiune. Apelare\u003e Numele Tapițerie\u003e Callsprocessories\u003e Numeoterie\u003e

Posibilitățile unei conexiuni externe cu o altă bază din 1c sunt suficient de extinse și pot permite o multitudine de sarcini. Este important să puteți evalua corect setul de instrumente și să alegeți soluția optimă. În majoritatea cazurilor, această abilitate apare numai cu experiență sau de a studia exemple de specialiști cu experiență.