Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Programe
  • 1c cum se apelează o funcție dintr-un modul comun. Module comune

1c cum se apelează o funcție dintr-un modul comun. Module comune

Articolul continuă seria „Primii pași în dezvoltare pe 1C”, discută în detaliu următoarele probleme:

  • Ce este un modul software și din ce secțiuni constă?
  • Pentru ce este modulul de aplicație? De ce sunt doi dintre ei? Când se lansează care? Care sunt subtilitățile lucrării?
  • Ce evenimente sunt asociate cu începerea funcționării sistemului, cum și unde să le procesăm?
  • Pentru ce este modulul de conectare extern? Când și cum să-l folosești?
  • Când este utilizat modulul de sesiune?
  • Care sunt modulele comune? Care sunt proprietățile și regulile sale de funcționare? De ce să folosiți proprietatea „Reutilizarea valorilor returnate”?
  • Când este utilizat modulul formular și ce evenimente pot fi procesate în el?
  • Pentru ce este modulul obiect? Din ce secțiuni constă? Cum pot vedea evenimentele modulelor disponibile?
  • Care sunt subtilitățile lucrului cu modulele de manager de valoare (pentru constante) și modulele de set de înregistrări (pentru registre)?
  • Care sunt diferențele dintre un modul obiect și un modul manager? Când ar trebui să-l folosești pe acesta din urmă?

Aplicabilitate

Articolul discută platforma 1C:Enterprise 8.3.4.496. Materialul este, de asemenea, relevant pentru lansările actuale ale platformei.

Modulele din „1C: Enterprise 8.3”

Modulele sunt acele obiecte care conțin cod de program.

Există un număr destul de mare de tipuri de module în Platformă, fiecare dintre ele având propriul scop și caracteristici.

Orice linie de cod trebuie să fie într-un anumit modul. Există module de uz general și module obiect. Unele module pot fi compilate atât pe Client, cât și pe Server, iar unele doar pe Server.

Un modul poate consta din mai multe secțiuni. Secțiunea de descriere a variabilelor descrie variabilele locale ale acestui modul, care pot fi utilizate ulterior în orice procedură.

În cadrul fiecărei proceduri, puteți accesa o variabilă de modul. În plus, în cadrul procedurii în sine poate exista o altă declarație de variabilă cu același nume. Aceasta va fi o variabilă locală a acestei proceduri.

În ciuda aceluiași nume, acestea sunt două variabile diferite: una este utilizată în interiorul unei proceduri specifice, iar cealaltă este utilizată în afara acesteia.

În unele module, variabilele pot indica locația de compilare (disponibilitate) pe Server sau pe Client. De exemplu:

Secțiunea care descrie variabile este urmată de o secțiune de proceduri și funcții, unde sunt indicate metodele locale ale acestui modul. Unele module trebuie să specifice unde va fi compilată procedura sau funcția.

În principiu, directiva de compilare poate fi omisă. În acest caz, directiva de compilare implicită este Server. Cu toate acestea, pentru comoditatea analizei codului programului, se recomandă să indicați în mod explicit unde va fi compilată o anumită procedură. Ordinea în care sunt descrise procedurile nu contează.

La sfârșitul modulului, după descrierea tuturor procedurilor și funcțiilor, există o secțiune a programului principal, care poate conține unii operatori și poate inițializa variabilele locale ale modulului formular. Această secțiune este executată la accesarea modulului.

Deci, de exemplu, la deschiderea unui formular element, secțiunea principală de program a modulului formular este executată mai întâi.

Trebuie remarcat faptul că secțiunea de declarare a variabilelor și secțiunea principală a programului nu există pentru toate modulele (adică, aceste secțiuni nu sunt valabile în unele module). O secțiune pentru descrierea procedurilor și funcțiilor poate exista în absolut orice modul.

Modul de aplicație

Acest modul este conceput pentru a gestiona evenimentele de pornire și terminare a aplicației. De exemplu, atunci când lansați aplicația, puteți descărca cursurile valutare de pe Internet. Când închideți o aplicație, puteți confirma cu utilizatorul că intenționează să renunțe.

De asemenea, în modulul de aplicație există handlere speciale care vă permit să interceptați evenimente externe din echipament.

Acestea ar putea fi evenimente de la un cititor de carduri magnetice sau un registrator fiscal. Și aceste evenimente pot fi, de asemenea, procesate într-un fel.

Vă rugăm să rețineți că este pornirea interactivă a sistemului care este monitorizată în modulul de aplicație.

Modulul de aplicație nu va funcționa dacă programul 1C este lansat, de exemplu, în modul de conectare com. În acest caz, fereastra programului nu este creată.

Trebuie remarcat faptul că în Platforma 8.3 există două module de aplicație diferite: modulul Aplicație gestionată și modulul Aplicație obișnuită. Evenimentele modulului de aplicație gestionată sunt procesate atunci când sunt lansate Clientul subțire și gros al aplicației gestionate și Clientul web.

Modul Aplicare regulată funcționează când rulează Thick Client în modul Aplicare regulată, care conține interfața obișnuită de comandă în formular Meniu principal.

Dacă aplicația rulează A reușit, și în mod Aplicare regulată, atunci este necesar să descriem procedurile de manipulare ca și pentru modul Aplicație gestionată, și pentru modul Aplicare regulată.

Modul Aplicație gestionată poate fi selectat din meniul contextual al nodului de configurare rădăcină.

Acest modul poate fi deschis și din paleta de proprietăți a elementului de configurare rădăcină.

Pentru a deschide un modul Aplicare regulată, ar trebui să vă referiți la setările de configurare (comandă Opțiuniîn meniu Serviciu).

Se va deschide formularul Opțiuni. Pe marcaj Sunt comune trebuie specificat modul de editare a configurației Aplicație gestionatăȘi Aplicare regulată.

În acest caz modulul Aplicare regulată se va putea deschide și din proprietățile nodului rădăcină.

Lista evenimentelor pentru care pot fi procesate A reușitȘi Aplicare regulată e aceeasi.

Acest modul poate conține o secțiune de declarare a variabilelor, o secțiune de descriere a procedurilor și funcțiilor arbitrare și o secțiune principală a programului. Dar, pe lângă procedurile și funcțiile arbitrare, în modul pot fi localizați handlere de evenimente speciale.

Lista manipulanților disponibili poate fi vizualizată apelând lista de proceduri și funcții ale modulului curent atunci când modulul este deschis.

Fereastra Proceduri și Funcții care se deschide afișează toate procedurile și funcțiile acestui modul, precum și evenimentele pentru care manipulatorii nu au fost încă creați.

Există două evenimente asociate cu pornirea sistemului („înainte” și „la”). Două evenimente asociate cu oprirea sistemului („înainte” și „la”). Și, de asemenea, procesarea evenimentelor externe (de exemplu, evenimente de echipamente comerciale).

Când se execută un handler de evenimente înainte, se consideră că acțiunea nu a avut loc încă. Când handlerul de evenimente „la” este executat, acțiunea a fost deja finalizată.

Eveniment Înainte de a porni sistemul apare în momentul lansării Enterprise 8.3, dar aplicația în sine nu a apărut încă pe ecran. Acest eveniment are următorul parametru: Refuz.

Dacă acest parametru ia valoarea Adevărat, atunci aplicația nu va porni. Eveniment La pornirea sistemului presupune că acțiunea a fost deja finalizată, fereastra a fost deja creată și, în acest caz, putem, de exemplu, să afișam un formular special. Nu mai este posibil să refuzi lansarea.

În mod similar, înainte de a închide sistemul, aplicația este încă deschisă și puteți refuza să o închideți. Când sistemul se închide, fereastra aplicației s-a închis deja. Este posibil doar să efectuați acțiuni suplimentare, de exemplu, ștergerea unor fișiere sau trimiterea unui e-mail.

În modul Aplicație gestionată Directivele pentru compilarea procedurilor și funcțiilor nu sunt specificate, deoarece modulul este compilat în întregime pe partea Clientului. Aceasta înseamnă că în procedurile și funcțiile modulului nu vom putea accesa direct, de exemplu, cărți de referință.

Dacă din modul Aplicație gestionată trebuie să efectuați un apel la server, apoi pentru aceasta va trebui să creați un apel special cu un steag .

În modul Aplicare regulată Nu există astfel de restricții, deoarece acest modul va fi compilat la încărcarea Thick Client. Aproape toate tipurile de date sunt disponibile în Thick Client.

Procedurile, funcțiile și variabilele unui modul de aplicație pot fi descrise ca exporturi.

Deoarece modulul este compilat în întregime pe Client, aceasta înseamnă că în procedurile client putem accesa această metodă și această proprietate.

De exemplu, puteți apela o procedură sau o funcție a unui modul de aplicație din modulul de formular al unui obiect. Cu toate acestea, se recomandă utilizarea modulelor comune pentru a descrie algoritmi generali. Scopul principal al modulului de aplicație este de a procesa punctul de început și punctul final.

Prin analogie cu un modul de aplicație, acest modul este conceput pentru a procesa evenimentul de deschidere a programului și evenimentul de oprire.

Spre deosebire de modulul de aplicație, care este inițiat în momentul lansării interactive a aplicației, modulul de conectare extern funcționează în modul de conectare COM, adică. când un obiect 1C:Enterprise 8 este creat și conectat la o anumită bază de date.

Acest modul are evenimente: La pornirea sistemuluiȘi La oprirea sistemului.

Modulul de conexiune externă poate fi deschis utilizând fie meniul contextual la nivel de obiect de configurare rădăcină, fie paleta de proprietăți pentru nodul rădăcină.

Procesul de conectare externă în sine este un proces de lucru programatic cu baza de informații, și nu interactiv. În consecință, în acest moment nu puteți utiliza formulare de dialog sau afișa mesaje de avertizare, deoarece nu există interfață cu utilizatorul.

În Modulul de conexiune externă este posibil să se descrie variabilele de export și metodele de export care vor fi disponibile pe partea în care are loc apelul extern la 1C:Enterprise 8.3.

Deoarece nu există o interfață cu utilizatorul într-o îmbinare exterioară, Modulul de îmbinare externă este compilat în întregime pe server.

Modul de sesiune

Acest modul este necesar pentru a inițializa parametrii sesiunii. Parametrii de sesiune sunt variabile globale rapide ale căror valori sunt disponibile oriunde în configurație.

Puteți deschide Modulul de sesiune fie prin meniul contextual, fie prin paleta de proprietăți a nodului rădăcină.

Modulul de sesiune oferă un eveniment SettingSessionParameters.

Când pornește aplicația, această procedură este apelată mai întâi. Parametrii de sesiune sunt necesari pentru orice operațiune a aplicației: atât când este lansată interactiv, cât și când este lansată în modul de conectare externă.

Modulul de sesiune descrie diferite acțiuni de inițializare a parametrilor de sesiune în funcție de diferite condiții.

Acest modul, de regulă, descrie mai multe proceduri care sunt apelate din procedură SettingSessionParameters. Prin urmare, toate aceste proceduri sunt separate într-un modul separat.

Modulul de sesiune rulează întotdeauna în modul privilegiat. Aceasta înseamnă că nu va fi efectuată nicio verificare a permisiunilor la accesarea bazei de date. Modulul de sesiune este compilat pe Server, adică Este posibil să accesați orice metodă de server (inclusiv citirea valorilor din baza de date).

În Modulul de Sesiune este posibil să se definească numai proceduri și funcții, de ex. nu există o secțiune de descriere variabilă și nici o secțiune principală a programului. Nu puteți defini metode de export într-un Modul de sesiune.

Dacă, la pornirea sistemului, este necesară efectuarea unor acțiuni pe Server, de exemplu, crearea unui element dintr-un director, atunci, opțional, este posibil să se utilizeze Modulul de sesiune, deoarece este compilat pe server și este întotdeauna executat în mod fiabil la pornirea sistemului. Cu toate acestea, trebuie luate în considerare următoarele puncte:

  • procedură SettingSessionParameters se execută nu numai la pornirea sistemului, ci și la accesarea parametrilor de sesiune neinițializați. Acestea. handlerul SetSessionParameters poate fi apelat în mod repetat în timpul funcționării aplicației;
  • dacă numărul de elemente din matricea parametrilor de sesiune este zero (matricea parametrilor necesari are un tip de date Undefined), atunci acesta este momentul lansării aplicației;
  • întrucât Modulul de sesiune funcționează în modul privilegiat și nu va exista nicio verificare a drepturilor de acces, ar trebui să lucrați cu mare atenție cu obiectele bazei de date, deoarece utilizatorul poate obține acces la date care nu ar trebui să îi fie furnizate;
  • Când sistemul pornește, nu se știe încă sigur dacă aplicația va fi lansată. În acest caz, acțiunile inutile pot fi efectuate în handlerul de evenimente SetSessionParameters.

Aceste module reprezintă o descriere a unor algoritmi generali, de ex. proceduri și funcții care pot fi apelate din diferite locuri.

Metodele legate logic pot fi grupate în diferite module comune. Aceste module sunt create în interiorul ramurii General.

Puteți adăuga orice număr de module partajate. Pentru ca metodele Common Module să fie disponibile în altă parte a configurației, acestea trebuie definite cu cuvântul cheie Export. Procedurile client ale modulelor comune vor fi disponibile pe Client, iar cele server – pe Server.

În Modulele generale, este disponibilă doar secțiunea care descrie proceduri și funcții. Acestea. în Modulul General nu puteți descrie variabile și nu puteți descrie o secțiune a programului principal.

Dacă este necesară o variabilă globală, puteți utiliza fie parametrii de sesiune, fie variabilele de export ale modulelor de aplicație.

Pentru modulele generale, puteți seta câțiva parametri care vor afecta comportamentul acestui modul. Dacă proprietatea Global este setată pentru un modul General, atunci metodele de export declarate în acest modul vor fi accesibile direct din exterior, fără instrucțiuni suplimentare.

Acestea. cel Modul general va participa la formarea contextului de configurare globală.

Proprietate Global pentru modulele generale poate fi util. Cu toate acestea, nu ar trebui să-l utilizați peste tot pentru toate modulele comune.

Acestea , care sunt marcate cu semnul Global, va fi compilat la pornirea sistemului. Cu cât mai multe astfel de module, cu atât programul va porni mai lent.

Dacă steagul Global Pentru Modul general nu este specificat, atunci compilarea acestui modul va fi efectuată în momentul primului apel către acesta (adică după pornirea sistemului).

În plus, utilizarea modulelor comune globale afectează înțelegerea codului. Metodele unui modul comun non-global sunt numite prin nume Modul generalși numele metodei, de exemplu:
Modul de calcul al costurilor.DistributeIndirectCosts();

În acest caz, denumirile modulelor comune trebuie să reflecte conținutul procedurilor descrise în acestea. Specificarea numelui modulului comun la apelarea unei proceduri ajută la înțelegerea mai bună a codului.

Pentru Modul general V Paleta de proprietăți puteți seta proprietatea Privilegiat.

Modulul privilegiat nu controlează drepturile de acces. Acest lucru este necesar dacă Modul general Este necesară efectuarea prelucrării în masă a datelor, obținând date din baza de date.

Controlul drepturilor de acces crește timpul necesar pentru a accesa o bază de date, iar algoritmii de masă trebuie adesea să funcționeze cât mai repede posibil.

De exemplu, salarizarea este o operațiune care necesită mult resurse. Trebuie făcută cât mai repede posibil. Pentru a face acest lucru, algoritmii care calculează salariile sunt plasați în privilegii .

Totodată, toate procedurile care asigură completarea documentelor de salarizare sunt în afara acestora Module comune. În aceste proceduri se realizează controlul drepturilor de acces.

În acest fel, se pot obține îmbunătățiri semnificative ale performanței. Acest lucru este valabil mai ales atunci când se utilizează un mecanism pentru controlul accesului rând cu rând la înregistrările de tabel.

Dacă un Modul Comun este privilegiat, atunci procedurile acestui modul pot fi compilate numai pe Server.

Există situații în care un obiect ar trebui să fie inaccesibil utilizatorului, de exemplu, un anumit director. Dar atunci când se realizează orice document, este necesară referirea la această carte de referință.

Acestea. Este necesar să extindeți temporar drepturile de utilizator și apoi să le readuceți la starea inițială. Acest efect poate fi obținut utilizând privilegiul Module comune.

Pentru a face acest lucru într-un privilegiat Modul general Ar trebui să creați o procedură care să acceseze datele necesare.

Această procedură va fi apelată din documentul corespunzător. Acestea. utilizatorului i se acordă efectiv drepturi extinse în momentul apelării acestei proceduri.

Pentru Module comune Este posibil să specificați locația de compilare. Indicatoarele sunt folosite pentru a determina dacă Modulul Comun va fi disponibil pe Client (aplicație gestionată), pe Server sau în modul Conexiune externă.

În plus, dacă comutați modul de editare a configurației la Aplicație gestionată și aplicație obișnuită, atunci va fi posibil un alt context de compilare - Client (aplicație obișnuită).

Astfel, există patru opțiuni pentru funcționarea programului. În funcție de aplicația care rulează, în funcție de lucrul pe Client sau pe Server, anumite Module Comune vor fi disponibile sau indisponibile.

În plus față de capacitatea de a specifica steaguri de compilare, este posibil să specificați directive de compilare pentru proceduri și funcții situate în Modulul Comun.

Dacă o directivă de compilare este specificată pentru o metodă, atunci, deși Modulul Comun este disponibil în toate contextele specificate, disponibilitatea metodei specifice va fi limitată de directiva de compilare.

În acest caz, procedura nu poate fi accesată într-un context care nu este accesibil întregului modul.

Dacă nu specificați o directivă de compilare pentru o procedură (funcție), aceasta va fi compilată în toate contextele definite pentru modul.

Acestea. În esență, se vor face mai multe copii ale procedurii. Alegerea unei anumite instanțe compilate depinde de locul în care este apelată procedura (după regula de apelare cea mai apropiată). Trebuie avut în vedere faptul că codul unei astfel de proceduri trebuie scris ținând cont de disponibilitatea acesteia în toate contextele definite pentru modul.

Modulele generice care sunt accesibile simultan în mai multe contexte diferite sunt concepute în primul rând pentru a crea proceduri care sunt accesibile în mai multe contexte.

Când se creează un Modul comun, se consideră o practică bună să nu se specifice directivele de compilare. Acestea. Disponibilitatea procedurilor și funcțiilor ar trebui să fie determinată de proprietățile modulului însuși.

Cu această abordare, procedurile client vor fi localizate în module comune separate, iar procedurile server vor fi localizate în module comune separate.

Modulele care au setate mai multe steaguri de compilare sunt folosite extrem de rar în practică. Acestea sunt câteva acțiuni comune disponibile atât pe client, cât și pe server. De obicei, acestea sunt niște calcule simple.

Important! Este posibil ca Clientul să acceseze metodele de export ale serverului unui Modul comun, dar numai dacă acest Modul comun este compilat numai pe Server. În acest caz, este furnizat un steag special pentru a oferi acces de la Client .

Pentru modulele comune non-globale, este posibil să stocați în cache valorile returnate de funcții. Acestea. După primul apel al unei funcții, sistemul își poate aminti rezultatul execuției acesteia. Dacă această funcție este apelată din nou cu aceiași parametri, sistemul va returna valoarea din cache.

Scopul acestui mecanism este de a accelera apelurile repetate. Pentru a configura acest comportament trebuie Paleta de proprietăți modul, setați valoarea corespunzătoare pentru proprietatea Reutilizarea valorilor returnate.

În mod implicit, această proprietate este setată la Nu folosiți. Alte valori posibile: cache În timpul apelului, sau Pe durata sesiunii.

Această proprietate are sens să fie utilizată numai pentru acele funcții ale căror rezultate depind numai de parametrii de intrare. Acest mecanism este disponibil numai pentru modulele comune non-globale.

Dacă se selectează valoarea parametrului corespunzător Pentru durata apelului, memoria cache va funcționa atâta timp cât rulează procedura din care a fost apelată metoda Modulului General. Dacă este selectată valoarea Pentru durata sesiunii, atunci se presupune în mod condiționat că memoria cache va funcționa în timp ce utilizatorul lucrează.

Cu toate acestea, există anumite restricții de timp. Cache-ul este șters automat la 20 de minute după ce valoarea intră în cache.

Modul formular

Acest modul este conceput pentru a procesa acțiunile utilizatorului. De exemplu, descrieți algoritmul pentru modul în care un program reacționează atunci când este apăsat un buton. Sau, de exemplu, în momentul introducerii unei valori într-un câmp, verificați imediat corectitudinea.

Pe lângă evenimentele asociate cu controalele formularului (butoane, câmpuri de introducere), există evenimente asociate direct cu formularul în sine.

De exemplu, puteți gestiona evenimentul de deschidere al formularului și puteți efectua o inițializare inițială. De asemenea, puteți gestiona evenimentul de închidere a formularului și puteți verifica dacă utilizatorul a introdus totul corect.

Există forme controlate și forme regulate. Modulele acestor formulare diferă în primul rând prin faptul că modulul de formular gestionat este clar împărțit în context. Fiecare procedură (funcție) trebuie să aibă o directivă de compilare. În formă normală, tot codul este utilizat pe Client.

Într-un modul de formular gestionat, puteți declara proceduri și funcții, puteți declara variabile și puteți descrie o secțiune a programului principal.

Codul de program al programului principal va fi executat în momentul inițializării formularului, adică. când utilizatorul începe să-l deschidă. Figura arată o listă de evenimente standard pentru un formular gestionat.

Lista de evenimente a unui formular gestionat este, de asemenea, vizibilă în lista de proprietăți direct pentru formularul în sine. Această listă este apelată în editorul de formulare gestionate.

Într-o formă gestionată, puteți gestiona evenimentul de scriere a articolului. Acest eveniment este prezent doar pentru formele obiect (directoare, documente și altele). Dacă formularul nu este legat de un anumit obiect, atunci nu există niciun eveniment de scriere.

Pentru un modul de formă obișnuită, lista evenimentelor standard este oarecum mai mică, deoarece într-o formă gestionată, multe evenimente sunt făcute pentru a fi împerecheate (unul este executat pe Client și celălalt pe Server). În forma sa normală, tot codul este executat pe Client.

Modul obiect

Aceste module sunt tipice pentru directoare, documente, planuri pentru tipuri de calcule, planuri de conturi și multe alte obiecte. Modulul obiect este conceput pentru a gestiona evenimente standard. De exemplu, un eveniment pentru introducerea unui element de director, un eveniment pentru scrierea unui element, ștergerea, postarea unui document etc.

În principiu, evenimentul de scriere există și în Modulul Formular. Dar evenimentul de scriere din Modulul Formular are loc în timpul procesului de înregistrare interactivă, atunci când se lucrează cu un anumit formular.

Evenimentul de scriere din modulul obiect va fi executat pe orice scriere din orice formă a obiectului dat. În plus, dacă obiectul este scris programatic, evenimentul modulului obiectului se va declanșa.

În cazul de scriere a modulului obiect, puteți include toate verificările pentru corectitudinea datelor care sunt scrise, deoarece această procedură va fi executată în momentul absolut oricărei înregistrări.

Modulul acestui obiect poate fi apelat prin meniul contextual, din Paleta Proprietăți obiect și din fereastra de editare a obiectelor.

Figura de mai jos arată o listă de evenimente disponibile pentru modulul de director.

În Modulul Obiect puteți plasa o secțiune pentru descrierea variabilelor, descriind funcții arbitrare care ar putea să nu fie asociate cu un eveniment, precum și o secțiune a programului principal.

În secțiunea principală a programului, puteți, de exemplu, să inițializați variabilele locale ale unui anumit modul. Acest cod de program va fi executat atunci când acest obiect Modul este accesat.

Trebuie remarcat faptul că toate procedurile Modulului Obiect sunt compilate pe Server. În consecință, directivele de compilare pentru procedurile și funcțiile Modulului Obiect nu sunt necesare. Unele obiecte de configurare nu au module obiect.

Acest lucru se datorează caracteristicilor obiectelor în sine. Astfel de obiecte includ constanteȘi Registrele. Pentru Constant nu există un modul obiect, dar există un modul foarte asemănător numit Modulul de management al valorii.

ÎN Modulul de management al valorii te poți ocupa de evenimente de scriere constanteși procesarea de verificare a umplerii.

Întregul context al modulului este executat pe Server.

Pentru registre există un Modul Recordset.

Acest modul are, de asemenea, capacitatea de a gestiona evenimente de scriere și de a efectua verificări de ocupare.

În modulele obiect, modulele Value Manager (pentru constante) și modulele Recordset (pentru registre) puteți descrie metode care pot fi făcute exportabile, iar aceste metode vor fi accesibile din exterior.

Acestea. Pe lângă utilizarea metodelor fixe ale unei clase de obiecte, puteți crea metode suplimentare pentru un obiect în Modulul Obiect. Acest modul ar trebui să descrie procedura corespunzătoare cu cuvântul cheie Export.

Atunci se va putea accesa această procedură din exterior. Mai mult decât atât, această metodă va fi afișată în context tooltip. Noile metode din panoul explicativ context sunt evidențiate cu font albastru (pictograma albastră p() pentru proceduri și f() pentru funcții).

În mod similar, puteți crea o nouă proprietate prin declararea unei variabile cu cuvântul cheie Export. Această proprietate poate fi accesată și din exterior.

În acest fel, este posibilă extinderea funcționalității obiectelor (pentru a defini noi metode și noi proprietăți). Cu toate acestea, proprietățile sunt dinamice și nu sunt salvate în baza de date.

Dacă trebuie să utilizați o proprietate pentru un obiect care va fi stocat în baza de date, ar trebui să creați un atribut de obiect.

Modulul manager

Acest modul există pentru multe obiecte (directoare, documente, registre etc.). Modulul este deschis fie prin meniul contextual pentru obiect, fie prin intermediul Paleta de proprietăți, sau prin fereastra de editare.

În Modulul Manager puteți trece peste unele evenimente standard. De exemplu, în ProcesareReceivingSelectionData, atunci când un element este selectat din director, se pot face o filtrare sau verificare suplimentară.

În plus, în Modulul Manager puteți crea metode suplimentare și puteți indica că sunt metode de export. În acest caz, este posibil să accesați aceste metode din exterior.

Pentru a efectua acest apel este necesar să obțineți tipul de date DirectoryManager.

Diferența dintre metodele de export ale Modulului Manager și Modulul Obiect este că pentru a accesa metoda Modulului Obiect, trebuie mai întâi să obțineți obiectul în sine (adică să obțineți cumva o legătură și apoi să convertiți această legătură într-un obiect) .

După aceasta, vor fi disponibile variabilele și metodele de export ale Modulului Obiect. Pentru Modulul Manager apelul este mai simplu, de exemplu:
Directoare.Contrapartide.NumeMetodă

Acestea sunt două apeluri diferite. Convertiți de la referință la obiect (metoda GetObject) este o acțiune destul de serioasă pentru sistem, deoarece la primirea unui obiect sunt citite absolut toate datele acestui obiect, ceea ce poate fi destul de lung.

A doua diferență este că Modul obiect numită în contextul unui element specific. În consecință, putem presupune că este aplicabil pentru un element dat (în cele mai multe cazuri, aceasta este exact logica folosită).

În ceea ce privește Modulul Manager, acesta descrie o acțiune comună pentru un grup sau pentru toate elementele unui director sau a unui document. De exemplu, dacă trebuie să tipăriți un element de director, puteți utiliza modulul obiect.

Dar în Modulul Manager este posibil să se creeze un mecanism mai universal care va imprima, printre altele, un grup de elemente.

În plus, accesarea obiectului Modul este încă o acțiune mai lungă. Prin urmare, este mai de preferat să rezolvați această problemă în modulul manager.

Aceasta încheie cunoștințele noastre cu modulele din configurația sistemului 1C:Enterprise. Dacă rezumăm pe scurt toate cele de mai sus, concluziile de bază sunt următoarele:

  • Un modul software este o parte a configurației care poate conține doar text în limbajul 1C încorporat
  • Modulele software sunt clasificate în funcție de tipurile pe care le-am discutat în acest articol. Fiecare vizualizare este determinată de plasarea sa și de contextul programului disponibil.
  • Structura modulului constă din mai multe secțiuni, care sunt aranjate într-o anumită secvență. Compoziția secțiunilor este determinată de tipul de modul.

De asemenea, rețineți că am omis în mod deliberat un tip de modul, și anume modulul de comandă. Nu este nimic remarcabil și vă invităm să vă familiarizați cu funcționalitatea acestuia.

Până acum, am luat în considerare tot codul programului nostru separat de soluția aplicației și, de regulă, l-am scris într-o configurație mică de testare proprie. Știți că „nu puteți pur și simplu să mergeți” și să începeți editarea codului unei configurații standard? Nu? Apoi, în următorul articol vă vom explica totul!

Astăzi ne vom uita la modulele comune, ce sunt acestea, de ce sunt necesare și cum să le folosim. Funcțiile care sunt utilizate în mai multe documente pot fi plasate într-un modul comun. De exemplu, calcularea sumei în partea tabelară a documentului.

De exemplu, să luăm vechea noastră configurație, pe care am folosit-o în articolele anterioare. Avem două documente în el: Sosirea mărfurilor în depozit și Eliberarea mărfurilor în depozit. Ambele documente au proceduri care calculează suma într-un rând tabelar.

Fiecare document conține același cod pentru calcularea sumei.

Procedură MaterialePriceOnChange(Element)
TabularPart Row = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Sfârșitul procedurii

Astăzi îl vom muta într-un modul comun și îl vom apela din document.

Creăm un modul general pentru calcularea sumei

Și să începem, mai întâi trebuie să creați un modul comun. Pentru a face acest lucru, accesați configuratorul, căutați elementul Module generale, faceți clic dreapta și adăugați altele noi, scrieți numele WorkWithDocuments. Introducem următorul cod în el.

De asemenea, asigurați-vă că bifați casetele de lângă Client (Aplicație gestionată) și Server în fereastra de proprietăți.

Acum trebuie să modificați ușor codul din modulul formular document. În stânga în configurație căutăm documentul Sosire mărfuri, extindeți ferestrele la fereastra Formulare, faceți dublu clic pe Formular document și în fereastra formular care se deschide, mergeți la fila Modul din partea de jos. Avem acest cod

Această procedură funcționează la modificarea cantității din partea tabelară a documentului de primire a mărfurilor și calculează suma.

&OnClient



Sfârșitul procedurii

Și această procedură începe să funcționeze atunci când prețul se modifică în partea tabelară a documentului de primire a mărfurilor și calculează suma.

&OnClient

TabularPart Row = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Sfârșitul procedurii

Înlocuiește-l cu acesta

&OnClient
Procedura MaterialsQuantityOnChange(Element)
TabularPart Row = Elements.Materials.CurrentData;

Sfârșitul procedurii
&OnClient
Procedură MaterialePriceOnChange(Element)
TabularPart Row = Elements.Materials.CurrentData;
WorkWithDocuments.CalculateSum(TabularPartRow);
Sfârșitul procedurii

După cum ați observat, doar o linie se schimbă la prima vedere, poate părea că o linie a fost înlocuită cu alta. Dar nu uitați că acesta este un exemplu. De fapt, cantitatea de cod poate fi mult mai mare dacă, de exemplu, ați efectuat calcule folosind o formulă complexă, caz în care codul va fi redus considerabil.

Facem același lucru pentru documentul Eliberarea mărfurilor din depozit, rulăm și verificăm funcționalitatea codului. Deci tu și cu mine am realizat primul modul comun, sper că articolul meu va fi de folos cuiva.

Modulele comune sunt responsabile pentru stocarea procedurilor și funcțiilor care sunt apelate din alte locuri din sistemul 1C. Este considerată o practică bună să plasați codul care este apelat de mai multe ori într-o procedură într-un modul comun. Această regulă este universală pentru toate configurațiile, astfel încât orice dezvoltator 1C ar trebui să poată lucra cu aceste obiecte de configurare. Pentru a face acest lucru, trebuie să înțelegeți toate nuanțele și să puteți utiliza corect oportunitățile oferite de platformă.

Crearea unui modul comun în 1C

După crearea unei funcții într-unul dintre modulele obiectului, a fost nevoie să se folosească un algoritm similar în alt loc. Cel mai bun lucru de făcut aici este să transferați codul într-un modul comun, dar înainte de asta trebuie să îl creați. Pentru a face acest lucru, trebuie să mergem la configurator și să găsim fila „General” în arborele de configurare. Apoi selectați „Module generale” și utilizați butonul sub forma unui plus alb pe cercul verde.

Proprietățile modulului comun adăugat se vor deschide în partea dreaptă și trebuie să ne dăm seama ce înseamnă fiecare dintre ele. Ele pot fi de diferite direcții, prin urmare, înainte de a monta un nou obiect, este indicat să decidem ce vom stoca acolo. Dacă ceva, în viitor, va fi posibilă modificarea proprietăților în conformitate cu sarcinile:

  • "Global". Acest flag este setat dacă modulul este destinat să stocheze proceduri și funcții care trebuie apelate fără a specifica numele modulului. Desigur, ele trebuie să fie exportabile, iar numele lor trebuie să fie unice în contextul întregului context global. Ele nu vor diferi în utilizare față de funcțiile standard ale platformei;
  • "Client". Depinde de setările sistemului și reglează dacă procedurile modulului pot fi executate pe partea clientului;
  • "Server". Sunt marcate module generale, în cadrul cărora algoritmii sunt planificați să fie plasați pentru execuție pe server;
  • „Uniunea exterioară”. Procedurile modulului cu această proprietate activată vor putea fi executate prin conectarea unei surse externe;
  • „Apel server”. Responsabil pentru a permite procedurilor din modul să apeleze serverul în timp ce rulează pe client;
  • "Privilegiat". Activarea acestei setări vă va permite să nu verificați drepturile de acces atunci când rulați codul de procedură al modulului. Puteți apela un modul comun cu această setare numai pe server. Setările pentru client și conexiunea externă vor fi resetate;
  • „Reutilizare”. Poate lua următoarele valori: „Nu utilizați”, „Pentru durata sesiunii”, „Pentru durata apelului”. La apelarea unei proceduri de mai multe ori, sistemul poate folosi date calculate anterior în cadrul procedurii (apel) sau pe durata întregii sesiuni (lansare 1C). Ar trebui să fiți foarte atenți cu această setare, deoarece pot apărea erori din cauza utilizării incorecte a unor astfel de module.

Există situații în care trebuie să creați un modul comun cu apeluri de procedură pe server și client cu diferențe de algoritm. Directivele de preprocesor cu verificare sunt folosite pentru a delimita codul. Ca rezultat, va fi un cod pentru apelul serverului și altul pentru apelul client.
Procedure AlgorithmServerClient() Export #If ThinClient Then // codul este executat dacă apelul procedurii a venit de la client ShowUserAlert("Pe client"); ElseIf Server Then // codul este executat dacă apelul procedurii a venit de la server VariableServer = "Apel server"; #TheEndIfTheEndProcedure

Un exemplu de transfer de cod la un modul comun 1C

Să luăm în considerare o situație în care avem două evenimente pe formularul de document care implică o singură procedură de înmulțire a cantității și a prețului în secțiunea tabelară. Acesta este un algoritm destul de comun, așa cum se găsește în multe documente de achiziții și vânzări. Să transferăm codul de procedură într-un modul comun, care trebuie creat mai întâi pentru a putea folosi acest cod în alte documente.

&OnClient Procedure ProductsPriceOnChange(Element) RecalculateAmount(); Sfârșitul procedurii &Procedura pe client ProductsQuantityOnChange(Element) RecalculateAmount(); Sfârșitul procedurii &Pe procedura client Recalculați sume() String PM = Elements.Products.CurrentData; Line PM.Amount = Line PM.Quantity * Line PM.Price; Sfârșitul procedurii

Deoarece pentru sarcina noastră avem nevoie doar de un apel de la client și nu avem nevoie de date din baza de date, setăm doar steag-ul „Client”. Dacă doriți să utilizați același modul în viitor pentru calcule mai complexe, atunci bifați „Server” în proprietăți. Etapa pregătitoare este finalizată și putem trece la scrierea codului.


Să creăm o procedură de export în modul și să transferăm acolo algoritmul pentru calcularea sumei din procedura din modulul formular. Șirul secțiunii de tabel va fi folosit ca parametru de procedură la intrare. În modulul formular document, schimbăm apelurile de procedură din același modul într-un apel de procedură din modulul general.


Procedură CalculateRow(TabularPartRow) ExportTabularPartRow.Sum = TabularPartRow.Quantity * TabularPartRow.Price; Sfârșitul procedurii

Fragmentul 1

&Pe Procedura Client ProductsPriceWhenChanged(Element) //apelarea procedurii din modulul general CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //RecalculateAmount(); Sfârșitul procedurii &Pe Procedura Client ProductsQuantityWhenChanging(Element) //apelarea procedurii din modulul general CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //RecalculateAmount(); Sfârșitul procedurii &Pe procedura client Recalculați sume() String PM = Elements.Products.CurrentData; Line PM.Amount = Line PM.Quantity * Line PM.Price; Sfârșitul procedurii

Fragmentul 2

Când sistemul pornește, nu vom observa diferența, dar această structură de cod este mult mai convenabilă de citit și întreținut. Desigur, în acest exemplu, cantitatea de cod nu poate afișa toate beneficiile. În cazul unui algoritm complex pentru zeci de obiecte de configurare, câștigul în cantitatea de cod și structura acestuia vor afecta și viteza sistemului. În plus, dezvoltatorii experimentați 1C recomandă să nu descrie algoritmii în module de formular, ci să îi plaseze în module generale configurate corect.

Atunci când dezvoltați module generale, ar trebui să țineți cont de regulile general acceptate pentru crearea lor:

  • Plasați procedurile și funcțiile legate de funcționalități similare într-un modul comun separat;
  • Numele modulului trebuie să reflecte apartenența acestuia la context (Client, Server) și să evite cuvintele uzuale (handlers, proceduri etc.);
  • Separați logica serverului intern a aplicației și logica clientului pentru interfață;
  • Fiți atenți când creați un modul partajat global. Nu trebuie să faceți referire la o procedură prin numele modulului poate duce la confuzie, mai ales dacă sistemul este susținut de mai multe echipe de dezvoltare.

Modulele create corect vă vor ajuta să navigați în structura de configurare și să faceți îmbunătățiri mult mai rapid. Dacă vedeți o oportunitate de a face o funcție utilă universală și de a o pune într-un modul comun, atunci faceți-o. În viitor, dumneavoastră și colegii dumneavoastră veți fi recunoscători pentru această decizie.

Cele mai bune articole pe această temă