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.