Delphi și 1c - export și import, delphisite

V1CEnterprise.Application - cheie independentă de versiune
V77.Application - cheie dependentă de versiune
V77S.Application - cheie dependentă de versiune, versiune SQL
V77L.Application - cheie dependentă de versiune, versiune locală






V77M.Application - cheie dependentă de versiune, versiune de rețea
De exemplu, creați un obiect OLE pentru serverul 1C: Enterprise. Pentru simplificare, hai să creăm un obiect fără a fi obligat la o anumită versiune și tip de program:

procedura TForm1. Create1C;

onesobj: = createoleobject # 40; 'V1CEnterprise.Application' # 41; ;

onesobj: = Neutilizat;
Cu toate acestea, acest lucru nu este necesar, deoarece când închideți aplicația, obiectul OLE va fi lansat automat.
Rezumați cunoștințele: creați un obiect OLE "1C: Enterprise", inițializați-l și eliberați corect:

procedura TForm1. Create1C;

onesobj: = createoleobject # 40; 'V1CEnterprise.Application' # 41; ;

onesobj. inițializa # 40; onesobj. rmtrade,

Cum să lucrați cu obiectul primit
Întrebare rezonabilă. De fapt, pentru asta, totul a început, nu-i așa? ) De fapt, totul este foarte simplu. După ce am creat și inițializat obiectul OLE, putem lucra cu acesta după cum urmează:
Utilizând metoda EvalExpr ()
Metoda EvalExpr evaluează expresia scrisă la parametru în limba 1C: Enterprise și returnează rezultatul calculului. Rezultatul unei expresii poate fi un număr, un șir, o dată sau o valoare a unui tip de date agregat.
Utilizând metoda CreateObject ()
Metoda CreateObject creează un obiect de date agregat al sistemului 1C: Enterprise și returnează o referință la acesta. Această funcție este utilizată, de obicei, simultan cu definiția explicită a unei variabile de tip OLEVariant și atribuirea acesteia obiectului tipului de date agregat.
Utilizând metoda ExecuteBatch ()
Metoda ExecuteBatch execută o secvență de instrucțiuni scrise în parametru în limba 1C: Enterprise încorporată. Metoda returnează -1 dacă secvența de instrucțiuni are succes sau 0 altfel.
Apelarea atributelor și metodelor sistemului 1C: Enterprise ca server de automatizare OLE
Există câteva capcane aici, pe care vreau imediat să le avertizez:
Când invocați atributele și metodele sistemului 1C: Enterprise, trebuie să utilizați sinonimele în limba engleză (acestea sunt enumerate pentru fiecare metodă în cartea "Descrierea limbii încorporate").
Pentru tipul de date agregat generat în mediul Delphi, este necesar să se creeze o variabilă de tip OLEVariant
În cazul în care metoda OLE obiect numit nu necesită parametri (sau unul dintre parametri este opțional), ca parametru trebuie să treacă EmptyParam (sau - pentru Delphi 3 - un șir gol).
Pentru a accesa identificatori de obiect tipurile de limba rusă se agrega (de exemplu, elaborarea de manuale detalii) ar trebui să utilizeze metoda obiect de tip agregat getattrib () pentru a obține valoarea atributului, și setattrib () pentru a seta valoarea.
Pentru o ilustrare completă a tuturor celor de mai sus, voi da un exemplu în care conținutul directorului „Nomenclatorul“ exportat în întregime într-o tabelă de bază de date (în acest exemplu presupune că ați creat deja Table1 de masă, ale căror domenii sunt director adecvate. Tabelul 2 Tabelul se referă la aceeași masă fizică care Table1 și servește numai pentru căutarea elementelor deja adăugate):






procedura TForm1. exportsprav;

contra: întreg; // Contor de înregistrări importate

onesobj: Olevariant; // Obiectul OLE al programului 1C: Enterprise

obiecte de uz casnic2: olevariant; // Obiecte agregate

Val. edizm, nds, np: olevariant;

pf: integer; // variabile intermediare

Tabelul 1. deschide; // deschideți tabelul1

Tabelul 2. deschide; // Deschide tabelul2

contra: = 0; // Reduceți contorul de înregistrări

onesobj: = createoleobject # 40; 'V1CEnterprise.Application' # 41; ; // Creați un obiect OLE

// Creați obiectele agregate necesare

ware: = onesobj. CREATEOBJECT # 40; "Nomenclatură de referință" # 41; ;

ware2: = onesobj. CREATEOBJECT # 40; "Nomenclatură de referință" # 41; ;

edizm: = onesobj. CREATEOBJECT # 40; "Unități de măsură" # 41; ;

nds: = onesobj. CREATEOBJECT # 40; 'Spravochnik.StavkiNDS' # 41; ;

np: = onesobj. CREATEOBJECT # 40; 'Spravochnik.StavkiNP' # 41; ;

ware. selectgroup # 40; 1 # 41; ; // Setați modul de selecție a grupului

ware. selectitems # 40; 1 # 41; ; // Deschide selecția elementelor din director

în timp ce sunt consumate. GetItem # 40; 1 # 41;> 0 do // Selectați toate elementele

dacă nu. nivel # 40; „“ # 41; = 1 apoi // Dacă am ales un grup de primul nivel, atunci

// În caz contrar, căutăm elementul părinte

ware2. FindItem # 40; ware. getattrib # 40; „Mamă“ # 41; # 41; ;

dacă tabelul2. findkey # 40; # 91; ware2. getattrib # 40; „Codul“ # 41; # 93; # 41; atunci

// Dacă am importat deja acest element

pf: = table2. fieldbyname # 40; 'ID' # 41;. AsInteger //, obținem codul său

pf: = -1; // altfel am plasat elementul în grupul din primul nivel

dacă nu. deletemark # 40; „“ # 41; = 0 apoi // Dacă elementul nu este șters, atunci

Tabelul 1. adăugați; // adăugați un câmp nou în tabel

// Completați câmpurile tabelului cu valorile atributelor corespunzătoare ale elementului din director

Tabelul 1. fieldbyname # 40; 'CODE_1S' # 41;. AsInteger: = produse. getAttrib # 40; „Codul“ # 41; ;

// Completați câmpul de nume

Tabelul 1. fieldbyname # 40; 'NAME' # 41;. AsString: = obiecte. getAttrib # 40; „Nume“ # 41; ;

Tabelul 1. fieldbyname # 40; 'PARENT_FOLDER' # 41;. AsInteger: = pf;

Tabelul 1. fieldbyname # 40; 'FULLNAME' # 41;. AsString: = obiecte. getAttrib # 40; "Numele complet" # 41; ;

// căutați intrarea corespunzătoare în "unitatea de măsură"

edizm. finditem # 40; ware. getattrib # 40; "Unitate de măsură" # 41; # 41; ;

// Umpleți unitatea de măsură

Tabelul 1. fieldbyname # 40; 'EDIZM' # 41;. AsString: = edizm. getattrib # 40; „Nume“ # 41; ;

// astfel încât să obținem valorile rechizitelor periodice

Tabelul 1. fieldbyname # 40; 'SEBESTOIM' # 41;. AsFloat: =

ware. getAttrib # 40; "Prețul costului" # 41;. GetValue # 40; datetostr # 40; acum # 41; # 41; ;

Tabelul 1. fieldbyname # 40; 'PRICEOPT' # 41;. AsFloat: = produse. getAttrib # 40; „Preț“ # 41; ;

NDS. finditem # 40; ware. getAttrib # 40; 'StavkaNDS' # 41;. GetValue # 40; datetostr # 40; acum # 41; # 41; # 41; ;

np. finditem # 40; ware. getAttrib # 40; 'StavkaNP' # 41;. GetValue # 40; datetostr # 40; acum # 41; # 41; # 41; ;

// Completați câmpul cotei TVA

Tabelul 1. fieldbyname # 40; 'STNDS' # 41;. AsFloat: = nds. getAttrib # 40; 'Bet' # 41; ;

// Completați câmpul ratei NP

Tabelul 1. fieldbyname # 40; 'STNP' # 41;. AsFloat: = np. getAttrib # 40; 'Bet' # 41; ;

Tabelul 1. fieldbyname # 40; 'ARTICUL' # 41;. AsString: = obiecte. getAttrib # 40; „De referință“ # 41; ;

dacă Ware. IsGroup # 40; „“ # 41; = 1 apoi // Dacă am selectat un grup de produse, atunci

Tabelul 1. fieldbyname # 40; 'IS_FOLDER' # 41;. AsInteger: = 1

Tabelul 1. fieldbyname # 40; 'IS_FOLDER' # 41;. AsInteger: = 0;

inc # 40; contor # 41; ;

concluzie
Din păcate, este imposibil să se potrivească într-un singur articol toate informațiile care ar fi utile pentru dvs. Am încercat să dau doar minimul necesar pentru obținerea unor cunoștințe de bază și pot deveni fundamentul propriilor mici descoperiri în domeniul integrării Delphi și "1C: Enterprise".
Scrie-mi, pune întrebări și este posibil ca articolul să fie continuat în curând.







Articole similare

Trimiteți-le prietenilor: