CLOPOTUL

Sunt cei care citesc aceasta stire inaintea ta.
Abonați-vă pentru a primi cele mai recente articole.
E-mail
Nume
Nume de familie
Cum ți-ar plăcea să citești Clopoțelul
Fără spam

Modulele platformei 1C: Enterprise 8.3, 8.2

Module generale

Funcțiile care sunt declarate cu indicatorul „export” într-un astfel de modul pot fi apelate de oriunde în configurație. Apelul se face prin CommonModuleName.FunctionName().

Astfel de module nu au o secțiune variabilă.

Execuția modulelor comune depinde de parametrii stabiliți în proprietățile lor:

Steagul „Global”

Dacă acest flag este setat, atunci contextul unui astfel de modul devine global. Adică, atunci când accesați funcțiile sale de export, nu trebuie să specificați numele modulului. Dar numele funcțiilor sale de export trebuie să fie unice în contextul configurației globale.

Semnalează „Server”

Funcțiile unui astfel de modul pot fi efectuate pe server.

Semnalați „Client (aplicație obișnuită)”

Funcțiile unui astfel de modul pot fi executate pe client în modul unei aplicații obișnuite.

Semnalați „Client (aplicație gestionată)”

Funcțiile unui astfel de modul pot fi executate pe client în modul de aplicație gestionată.

Steagul apelului serverului

Steagul este disponibil pentru modulele cu setul de steag "Server". Permite clientului să apeleze funcțiile de export ale acestui modul (care vor fi executate pe server).

Semnalul „Uniunea exterioară”

Funcțiile de export ale unui astfel de modul pot fi apelate atunci când sunt conectate de la o sursă externă.

Steagul „Privilegiat”

Într-un modul cu acest indicator, verificarea permisiunilor va fi dezactivată. Potrivit pentru productivitate sau activități administrative.

Opțiune de reutilizare

Dacă activați această opțiune, atunci valorile returnate ale funcțiilor de export vor fi stocate în cache imediat după primul apel. Memorarea în cache este posibilă pe durata apelului (timpul de execuție a unei anumite proceduri) sau pe durata sesiunii utilizatorului.

Modul de aplicație

Proiectat pentru a gestiona evenimentele de pornire și de sfârșit ale aplicației. Există două tipuri: pentru aplicații obișnuite și gestionate.

Nu ar trebui să îl supraîncărcați, deoarece acest lucru afectează timpul de pornire a aplicației.

modul de sesiune

Un modul special care este folosit pentru a inițializa parametrii sesiunii. Este necesar pentru a nu duplica codul în diferite module de aplicație.

Ar trebui folosit cu grijă, deoarece modulul poate fi executat de mai multe ori și, de asemenea, poate fi executat fără pornirea ulterioară a bazei. Se rulează înaintea modulelor de aplicație.

Cu stimă, (profesor și dezvoltator).

Articolul prezintă scurtă recenzieși caracteristici ale funcționalității, cum ar fi reutilizarea valorilor returnate ale modulelor partajate.

Probleme la lucrul cu 1C

Adesea, atunci când lucrați cu programul 1C, este necesar să obțineți valorile stocate în baza de date, acestea nu se schimbă de ani de zile. Un exemplu ar fi valoarea constantelor. Acest grup de valori poate include în mod condiționat căutarea unuia dintre elementele directorului sau căutarea nodului planului de schimb folosind codul, precum și nevoia de a obține valoarea detaliilor obiectelor.

Astfel de probleme sunt rezolvate rapid și simplu folosind următoarele tipuri de structuri:

Dacă DocumentDate > Constants.Regulation1137StartDate.Get() Atunci

Dar de fiecare dată când acest cod este executat, baza de date este accesată.

Mulți programatori folosesc următoarea metodă pentru a descărca o bază de date. Ei execută o singură solicitare către baza de cunoștințe și memorează în cache datele de care ar putea avea nevoie. Cu toate acestea, această metodă nu descarcă bazele de date la valoarea dorită. Motivele pentru aceasta pot fi următoarele:

· ciclul de execuție a codului nu este destul de clar (de exemplu, în timpul repostării în grup a documentelor);

Obținerea unui set strict de date necesare nu în acest moment uneori imposibil sau dificil;

· utilizarea datelor deja stocate în cache în diverse forme/apeluri.

Modul cu reutilizare valorile returnate

Pentru a rezolva problemele descrise mai sus, utilizarea modelelor cu reutilizarea valorilor de returnare va ajuta. Ce este? Acesta este un modul client sau server comun, în care funcția „Per apel” sau „Per sesiune” ar trebui să fie setată la Reutilizare valori returnate. Toate operațiunile și funcțiile direct în modul sunt descrise ca mai înainte.

Avantajul incontestabil al acestei metode este că returnarea valorii stocate în cache are loc fără a executa efectiv codul funcției. Acest lucru se întâmplă cu toate apelurile ulterioare la funcțiile de export ale acestor module. Același efect poate fi observat la măsurarea performanței.

Când codul este executat, valorile returnate sunt stocate în cache prin valorile parametrilor trecuți. Deci, acest lucru se întâmplă direct când codul este executat

Node1 = OurModule.GetExchangeNodeWithAccounting("0001");

Node2 = OurModule.GetExchangeNodeWithAccounting("0002");

Atât unul cât și celălalt apel duc la executarea operației corespunzătoare și returnează referințe diferite. Cu toate acestea, nodurile cu codul 0001 sau 0002 vor fi returnate deja în timpul următoarelor apeluri, fără a provoca o operațiune repetată și, în consecință, fără accesarea bazei de date.

Valorile vor fi stocate în cache izolat pe fiecare sesiune, atât pe client, cât și pe server (în funcție de faptul dacă apelul a fost efectuat de la modulul client sau server). Totul va funcționa impecabil dacă există anumite particularități în setările drepturilor de acces sau orice altă dependență a valorii primite.

Câteva DAR

Ca în orice regulă, există excepții de la această metodă. Nu trebuie specificat tipuri complexeîn parametrii funcțiilor care sunt suficient de simple, cum ar fi Data, Numărul, Nedefinit și așa mai departe. Nu ar trebui să încercați să specificați ca parametri, de exemplu, o structură, un obiect sau un tabel de valori. Veți obține rezultatul prima dată, dar nimic sensibil nu va ieși a doua oară.

Valoarea returnată poate fi de orice tip.

În plus, nu uitați să acordați atenție dimensiunii datelor pe care le memorați în cache, deoarece memoria serverului, deși imensă, nu este nelimitată.

Caracteristică sau eroare de la 1C

Valorile care sunt reutilizate au o caracteristică interesantă. Putem presupune că aceasta este o caracteristică sau o eroare, dar, în orice caz, merită să îi acordăm atenție.

Când introduceți următorul cod:

ValueStructure1 = OurModule.GetAttributesValuesStructure(ObjectReference);
ValueStructure1.Name = "Nume nou";
ValueStructure2 = OurModule.GetAttributesValuesStructure(ObjectReference);

în ValueStructure2.Name, va apărea exact numele Nou. Aceasta poate fi folosită pentru a actualiza valorile care s-au schimbat efectiv în baza de date, dar nu se știe cât de mult mai poate fi făcut acest lucru. Pentru că atunci când se creează soluții standard, acest lucru nu se poate face.

Dacă datele din cache au fost modificate

Dacă valorile stocate în cache s-au schimbat în baza de date, există o singură modalitate de a le utiliza - metoda UpdateReusedValues. În acest caz, valorile setărilor tuturor funcțiilor sunt resetate în toate modulele. Nu există posibilitatea de actualizare prin anumite valori ale parametrilor, fie funcții, fie module.

Cum se face o cerere în buclă

Dacă nu doriți să utilizați o funcție care reutiliza valorile returnate, iată câteva modalități mai creative de a rezolva problema.

· Proceduri universale care returnează detaliile legăturilor arbitrare.

· Crearea de proceduri care returnează valorile constantelor după numele lor. Apropo, astfel de proceduri sunt în versiuni standard.

· Reveniți un volum puțin mai mare decât este necesar pentru a reduce numărul de apeluri. De exemplu, dacă trebuie să obțineți cursul mai multor valute în același timp, este de dorit să apelați funcția exclusiv după dată, fără a selecta valute. După ce ați primit toate ratele, determinați ce monedă este acum necesară și care nu.

· Crearea unei proceduri care va executa o interogare cu memorarea simultană în cache a rezultatului obținut (parametri de intrare - text de interogare, mai multe nume și valori ale parametrilor).

Mai există o metodă despre care aș dori să vorbesc mai detaliat. Această metodă se bazează pe utilizarea unei funcții care conține un apel la baza de date, valoarea returnată fiind reutilizată direct în buclă, adică un fel de interogare în buclă. În unele cazuri, această construcție poate îmbunătăți performanța. Trebuie îndeplinită următoarea condiție: trebuie să existe un număr mic sensuri diferite parametrii de intrare întâlniți în buclă și majoritatea combinațiilor au fost deja primite cel puțin o dată mai devreme în această sesiune. Trebuie amintit că este extrem de dificil să obțineți un anumit set de combinații ale tuturor valorilor parametrilor de intrare în avans, iar încercările de a obține valori pentru toate combinațiile posibile pot duce la citirea prea multor date din baza de date.

V-am oferit doar funcții și metode exemplare. Prin urmare, înainte de a le folosi, evaluați condițiile în care va funcționa codul dvs.


Imprimare (Ctrl+P)

Obiectele situate în ramura arborelui de configurare Modulele comune sunt concepute pentru a conține textele funcțiilor și procedurilor care pot fi apelate din orice alt modul de configurare.
ATENŢIE! Un modul generic poate conține doar definiții de proceduri și funcții.
Procedurile și funcțiile unui modul comun care au cuvântul cheie Export în antetele lor se numără printre părțile constitutive context global. Puteți afla mai multe despre scrierea procedurilor într-un modul comun în secțiunile „Formatul textelor sursă ale modulelor de program” și „Operatori” din ajutorul limbajului 1C:Enterprise.
Pentru a edita un modul comun, în paleta de proprietăți a unui obiect de tipul Module comune din fereastra Configurare, în proprietatea Modul, faceți clic pe linkul Deschidere. Textul modulului general va fi emis pentru editare în editorul de text 1C:Enterprise în modul de editare de text al modulului de program.
Modulul comun, fiind parte a configurației, este salvat doar ca parte a configurației.
Proprietatea Global determină dacă metodele exportate ale unui modul partajat fac parte din contextul global.
Dacă proprietatea Global este setată la True, atunci metodele exportate ale modulului partajat sunt disponibile ca metode ale contextului global.
Dacă proprietatea Global este setată la Fals, atunci o proprietate este creată în context global cu numele corespunzător numelui modulului partajat din metadate. Această proprietate este numai pentru citire. Valoarea acestei proprietăți este un obiect GenericModule. Prin acest obiect sunt disponibile metodele exportate ale acestui modul comun. Astfel, accesarea metodelor de module partajate non-globale arată ca XXXXX.YYYYY, unde XXXXX este numele proprietății care corespunde contextului modulului partajat, iar YYYYY este numele metodei exportate a modulului partajat.
Exemplu:

WorkWithTradeEquipment.ConnectBarcodeScanner();

Diverse contexte și module comune

Folosind proprietățile modulelor comune și instrucțiunile preprocesorului, puteți organiza execuția diferitelor metode ale modulelor comune în contextul dorit.
Fiecare proprietate a modulului comun este responsabilă pentru capacitatea de a compila (și de a executa) modulul comun într-un anumit context.
Sunt disponibile următoarele proprietăți, care sunt responsabile pentru contextul în care sunt disponibile metodele modulului partajat:
Client (aplicație obișnuită)– metodele modulului comun vor fi disponibile pentru clientul gros în modul normal de aplicare;
● – metodele comune ale modulelor vor fi disponibile pentru client subțire, client web și, de asemenea, pentru client gros
modul de aplicare gestionat;
● Server - metodele modulului comun vor fi disponibile pe server;
Îmbinare exterioară– metodele modulului comun vor fi disponibile în conexiunea exterioară.
Dacă sunt setate mai multe proprietăți în același timp, aceasta înseamnă că metodele modulului partajat vor fi disponibile în mai multe contexte.
Dacă un modul partajat are proprietatea Server și orice altă proprietate setată, aceasta înseamnă că modulul partajat va fi disponibil pe server și în clientul selectat în același timp. În același timp, este necesar să înțelegeți că de fapt vor fi mai multe variante ale codului compilat (în funcție de numărul de clienți selectați și pentru serverul în sine).
În acest caz, dacă o metodă situată într-un astfel de modul comun este apelată din partea clientului, atunci se va folosi copia client a modulului comun, iar dacă de pe server, se va folosi copia serverului. În acest caz, folosind directive de preprocesor (pentru mai multe detalii, vezi aici), poți „proteja” serverul de codul care nu poate fi executat pe el.
Luați în considerare un exemplu. Există o metodă în modulul comun (care poate fi executată pe clientul subțire și pe server) care are un comportament ușor diferit pe partea clientului subțire și pe partea serverului. Să vedem cum se poate face acest lucru:



#Dacă ThinClient Atunci
// Afișează avertisment
ShowAlertUser(„Pe client”);
#EndIf
EndProcedure
Apoi, pe partea de server, codul va arăta astfel:
Procedură Metoda CommonModule() Export
// Diverse coduri importante merg aici
EndProcedure
Și pe partea de client subțire, codul va arăta astfel:
Procedură CommonModule Method() Export
// Diverse coduri importante merg aici
// Afișează avertisment
ShowUserAlert("Pe client");
EndProcedure

Există mai multe moduri de a transfera controlul de la client la server:
● apelarea unei metode de modul comun de server;
● într-un modul de formular sau de comandă, apelați o metodă care este precedată de directive de compilare &AtServer, &AtServerWithoutContext

Cu toate acestea, nu este posibil să apelați metode ale modulelor comune client (care nu au setată proprietatea Server) și metode client ale unui modul de formular sau modul de comandă din procedurile serverului. Controlul va reveni la client după ce s-a finalizat apelul cel mai extern la metoda serverului.
Excepție fac metodele din modulul formular și modulul de comandă, care sunt precedate de directive de compilare &La ClientLa Server, &La ClientLa ServerWithoutContext
De asemenea, trebuie menționate următoarele puncte:
● Dacă un modul partajat este disponibil pentru mai mult de un client, atunci când scrieți cod, luați în considerare restricțiile maxime pe care clienții le pot impune sau utilizați instrucțiunile preprocesorului pentru a „izola” codul specific clientului.
● Instrucțiunile preprocesorului au sens și atunci când un modul comun are mai multe contexte de execuție, cum ar fi o conexiune externă și un client subțire sau (mai frecvent) un client și un server. În acest caz, instrucțiunile preprocesorului vor împacheta cod interactiv care nu poate fi utilizat pe server, dar este posibil pe client (vezi exemplul de mai sus).
Pentru mai multe informații despre instrucțiunile preprocesorului și directivele de compilare, consultați secțiunea Executarea procedurilor și funcțiilor din 1C:Enterprise Language Help.
Proprietatea Server Invocation controlează dacă metodele exportate ale modulului comun server pot fi apelate din codul client.
Dacă proprietatea este setată, atunci metodele exportate ale modulului partajat de server sunt disponibile pentru a fi apelate de către client. Dacă proprietatea nu este setată, atunci astfel de metode exportate pot fi apelate numai din metodele server (atât metodele modulelor comune server, cât și metodele serverului modulului formular și modulelor de comandă).
Sfat . Este recomandat să setați proprietatea Server Invocation la False în cazurile în care modulul comun de pe server conține metode pe care nu doriți să le apelați de la client (din motive de securitate, de exemplu).
Notă. Dacă proprietățile sunt setate în același timp Client (aplicație obișnuită), Client (aplicație gestionată), Îmbinare exterioară, atunci proprietatea Server de apeluri este resetată automat. Dacă proprietatea Server de apeluri este setată, proprietățile sunt resetate automat Client (aplicație obișnuită), Client (aplicație gestionată)și Îmbinare exterioară dacă aceste proprietăți au fost setate în același timp.
Proprietate Privilegiat este conceput pentru a dezactiva controlul accesului la executarea metodelor unui modul comun.
NOTĂ. Dacă proprietatea Privilegiat este setată, apoi proprietatea Server este setată automat pentru modulul comun și alte proprietăți sunt resetate ( Client (aplicație obișnuită), Client (aplicație gestionată)și B conexiune externă). Un modul partajat cu privilegii poate rula numai pe server.

Reutilizarea valorilor returnate

Dacă modulul partajat nu este global, atunci proprietatea Reuse return values ​​​​devine disponibilă. Această proprietate poate lua următoarele valori:
● Nu utilizați - Valorile returnate nu sunt reutilizate pentru funcțiile din acest modul partajat.
● Per apel și per sesiune - Modulul partajat folosește metoda de detectare a reutilizarii datelor. Esența acestei metode constă în faptul că în timpul execuției codului, sistemul își amintește parametrii și rezultatul funcțiilor după primul apel de funcție. Când funcția este apelată din nou cu aceiași parametri, valoarea stocată este returnată (de la primul apel) fără a executa funcția în sine. Dacă funcția modifică valorile parametrilor în timpul execuției sale, apelarea din nou a funcției nu o va face.
Următoarele caracteristici ale salvării rezultatelor apelurilor pot fi distinse:
● dacă funcția este executată pe server și apelată din codul serverului, atunci valorile parametrilor și rezultatul apelului sunt memorate pentru sesiunea curentă din partea serverului;
● dacă funcția este executată pe un client gros sau subțire, atunci valorile parametrilor și rezultatele apelurilor sunt stocate pe partea clientului;
● dacă funcția este executată pe partea de server și apelată din codul client, atunci valorile parametrilor de apel sunt reținute atât pe partea client, cât și pe partea server (pentru sesiunea curentă).
Valorile stocate sunt șterse:
● dacă proprietatea este setată la Pentru durata apelului:
● pe partea serverului – când controlul este returnat de la server;
● pe partea clientului – când se încheie o procedură sau o funcție de nivel superior 1C:Enterprise (apelată de sistem din interfață, și nu dintr-o altă procedură sau funcție 1C:Enterprise);
● dacă proprietatea modulului partajat este setată la Pentru durata sesiunii:
● pe partea serverului – la finalul sesiunii;
● pe partea client – ​​când aplicația client este închisă.
Valorile salvate vor fi șterse:
● pe server, client gros, conexiune externă, client subțire și client web cu viteză normală de conectare - la 20 de minute după calcularea valorii stocate sau la 6 minute după ultima utilizare;
● într-un client subțire și un client web cu viteză redusă de conectare - la 20 de minute de la calcularea valorii stocate;
● când există o lipsă de memorie RAM în procesul de lucru al serverului;
● la repornirea unui flux de lucru;
● Când un client trece la un alt flux de lucru.
După ștergerea valorilor, apelul la funcția exportată se efectuează ca la primul apel.
Această proprietate a modulelor comune nu afectează execuția procedurilor – procedurile sunt întotdeauna executate.

Dacă un modul partajat are setată reutilizarea valorii de returnare, există o serie de restricții privind tipurile de parametri ale funcției exportate. Tipurile de parametri pot fi doar:
● Tipuri primitive ( Nedefinit, NULL, boolean, număr, șir, dată).
● Orice referințe la obiectele bazei de date.
● Structuri cu valori de proprietate ale tipurilor de mai sus. În acest caz, identitatea parametrilor este controlată „de conținutul” structurilor.
Dacă funcția exportată returnează orice obiect, returnează de fapt o referință la obiectul stocat în cache. Dacă starea obiectului se schimbă după primirea acestei referințe, atunci un apel ulterior către aceeași funcție va returna o referință la obiectul deja modificat fără a executa efectiv funcția. Acest comportament va continua până când valoarea stocată este eliminată (din orice motiv). Cu alte cuvinte, schimbarea stării unui obiect obținut ca urmare a apelării unei funcții dintr-un modul partajat cu reutilizarea valorilor returnate nu este baza pentru apelarea efectivă a funcției. De asemenea, rețineți că memoria cache a obiectelor returnate este indiferentă
starea modului privilegiat la momentul apelului funcției cu valorile returnate reutilizate. Această caracteristică poate duce la următoarea caracteristică comportamente:
● Execuția efectivă a apelului de funcție cu reutilizarea valorii returnate (primul apel) a fost făcută cu modul privilegiat activat.
● La executarea unei funcții, a fost primit un obiect care nu poate fi primit cu modul privilegiat dezactivat.
● Apelurile ulterioare către funcție au fost efectuate fără a seta modul privilegiat.
● Cu toate acestea, până când memoria cache a obiectelor returnate este golită sau apelul efectiv este efectuat din nou, funcția va returna un obiect inaccesibil formal.
● Comportamentul invers este de asemenea adevărat, în cazul în care primul apel este efectuat fără a seta modul privilegiat, iar modul privilegiat nu returnează un obiect care ar fi putut fi obținut în modul privilegiat.

Dacă modulul comun are o proprietate Reutilizarea valorilor returnate este setat pe Pe durata sesiunii, atunci valorile returnate de funcțiile unui astfel de modul nu pot folosi valori de tip Manager temporar de tabel.
Dacă o funcție a unui modul partajat, cu setat de reutilizare, este apelată din același modul partajat (de exemplu, cu numele SharedModule ), atunci ar trebui să vă amintiți următoarea caracteristică: dacă funcția este numită cu numele MyFunction() , atunci funcţia va fi executată de fiecare dată când funcţia este apelată . Pentru a utiliza valorile stocate, funcția trebuie apelată prin numele complet calificat:
GeneralModule.MyFunction().
Metoda contextului global elimină toate valorile reutilizate, atât pe partea serverului, cât și pe partea clientului, indiferent de locul în care este apelată metoda. După executarea metodei UpdateReusableValues() primul apel de funcție va fi executat complet.

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

  • Ce modul softwareȘi din ce secțiuni constă?
  • Pentru ce este modulul de aplicație? De ce sunt doi? Cand incepe? Care sunt detaliile lucrării?
  • Ce evenimente sunt asociate cu pornirea sistemului, cum și unde să le gestionăm?
  • Pentru ce este modulul de conectare extern? Când și cum să-l folosești?
  • Când este utilizat modulul de sesiune?
  • Ce sunt modulele partajate? Care sunt proprietățile și regulile sale de funcționare? De ce să folosiți proprietatea Reuse Return Values ​​​​?
  • Când este utilizat modulul formular și ce evenimente pot fi gestionate în el?
  • Pentru ce este modulul obiect? Din ce secțiuni constă? Cum să vizualizați 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 este diferența dintre un modul obiect și un modul manager? Când ar trebui să-l folosești pe acesta din urmă?

Aplicabilitate

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

Module în 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 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 declarare a variabilelor descrie variabilele locale ale acestui modul, care pot fi utilizate ulterior în orice procedură.

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

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

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

Secțiunea de declarare a variabilelor este urmată de secțiunea de proceduri și funcții, care specifică metodele locale ale modulului. Unele module necesită să specificați 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ă această 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, inițializează variabilele locale ale modulului formular. Această secțiune este executată când se accesează modulul.

Deci, de exemplu, la deschiderea formei unui element, se execută în primul rând secțiunea programului principal a modulului formular.

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 sunt invalide în unele module). O procedură și secțiune de descriere a funcției poate exista în absolut orice modul.

Modul de aplicație

Acest modul este conceput pentru a gestiona evenimentele de pornire și oprire a aplicației. De exemplu, atunci când porniți aplicația, puteți descărca cursuri de schimb de pe Internet. La sfârșitul aplicației, vă puteți asigura că utilizatorul are intențiile sale de a încheia munca.

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

Acestea pot fi evenimente de la un cititor de carduri magnetice, registrator fiscal. Și aceste evenimente pot fi gestionate într-un fel.

Trebuie remarcat faptul că lansarea interactivă a sistemului este urmărită î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 declanșate atunci când sunt lansate clienții subțiri și groși ai aplicației gestionate și ale clientului web.

Modul Aplicatie generala funcționează când Thick Client este pornit în modul Aplicatie generala, care are interfața obișnuită de comandă în formular meniu principal.

Dacă aplicația rulează și Gestionate, iar în modul Aplicatie generala, atunci este necesar să descriem procedurile de manipulare ca și pentru modul aplicație gestionată, și pentru modul Aplicatie generala.

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

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

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

Se va deschide un formular Opțiuni. Marcaj General trebuie specificat modul de editare a config Aplicație gestionatăși Aplicatie generala.

În acest caz, modulul Aplicatie generala poate fi deschis și din proprietățile nodului rădăcină.

Lista evenimentelor pentru care pot fi procesate Gestionateși Aplicatie generala aceeași.

În acest modul, puteți plasa o secțiune de declarare a variabilelor, o secțiune pentru descrierea procedurilor și funcțiilor arbitrare și o secțiune pentru programul principal. 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 în timp ce modulul este deschis.

Fereastra deschisă Proceduri și funcții 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 legate de oprirea sistemului („înainte” și „la”). Precum și procesarea unui eveniment extern (de exemplu, un eveniment al unui echipament de magazin).

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

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 un astfel de parametru ca Refuz.

Dacă acest parametru este setat la Adevărat, atunci aplicația nu va porni. Eveniment La pornirea sistemului presupune că acțiunea a fost deja întreprinsă, fereastra a fost deja creată și, în acest caz, putem, de exemplu, să afișăm o formă specială. Nu mai poți refuza lansarea.

În mod similar, înainte de a închide sistemul, aplicația este încă deschisă și puteți alege să nu o închideți. Când sistemul a fost oprit, fereastra aplicației era deja închisă. Este posibil doar să efectuați acțiuni suplimentare, cum ar fi ș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 de server, apoi pentru aceasta va trebui să creați special cu un steag afisat .

În modul Aplicatie generala 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 export.

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

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

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

Spre deosebire de modulul de aplicație, care este inițiat atunci când aplicația este lansată interactiv, modulul de conexiune externă funcționează în modul de conectare com, adică. când este creat un obiect 1C:Enterprise 8 și se realizează o conexiune la o anumită bază de date.

Acest modul are evenimente: La pornirea sistemuluiși la oprirea sistemului.

Modulul de conectare exterior poate fi deschis folosind fie meniul contextual de la nivelul obiectului de configurare rădăcină, fie paleta de proprietăți pentru nodul rădăcină.

Procesul de unire extern în sine este un proces de lucru programatic cu o bază de informații, nu una interactivă. În consecință, în acest moment este imposibil să se utilizeze formulare de dialog, să se afișeze mesaje de avertizare, deoarece nu există o 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 conexiune exterioară, Modulul de conexiune exterioară 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ă.

Un eveniment este oferit în Modulul Sesiune SettingSessionParameters.

Când pornește aplicația, această procedură este numită chiar prima. 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 conexiune 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 permisiunii la accesarea bazei de date. Modulul de sesiune este compilat pe Server, adică este posibil să apelați orice metodă de server (inclusiv citirea valorilor din baza de date).

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

Dacă la pornirea sistemului este necesar să se efectueze unele acțiuni pe server, de exemplu, pentru a crea un element al unui 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 de mai multe ori în timpul execuției aplicației;
  • dacă numărul de elemente din matricea parametrilor de sesiune este egal cu zero (matricea de parametri necesari are tipul de date Undefined), atunci acesta este momentul lansării aplicației;
  • întrucât Modulul de sesiune funcționează în modul privilegiat și nu vor exista verificări de acces, ar trebui să fiți foarte atenți când lucrați cu obiecte de bază 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, pot fi efectuate acțiuni suplimentare în handlerul de evenimente al evenimentului SetSessionParameters.

Aceste module sunt descrieri ale unor algoritmi generali, de ex. proceduri și funcții care pot fi apelate din diverse 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 a face metodele Common Module disponibile în altă parte a configurației, acestea trebuie definite cu cuvânt cheie Export. Procedurile client ale modulelor comune vor fi disponibile pe Client, iar procedurile server - pe Server.

În modulele comune, este disponibilă doar secțiunea care descrie proceduri și funcții. Acestea. într-un modul Common nu puteți declara variabile și nu puteți descrie o secțiune a programului principal.

Dacă este necesară o variabilă globală, pot fi utilizate fie parametrii de sesiune, fie variabilele de export ale modulelor de aplicație.

Pentru modulele comune, puteți seta câțiva parametri care vor afecta comportamentul acestui modul. Dacă proprietatea Global este setată pentru un modul Common, 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 module comune poate fi util. Cu toate acestea, nu ar trebui să-l utilizați universal pentru toate modulele comune.

Acestea , care sunt marcate cu 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 partajate globale afectează înțelegerea codului. Apelarea metodelor unui modul partajat non-global se face prin nume Modul generalși numele metodei, de exemplu:
Modul de calcul al costurilor.Alocarea costurilor indirecte();

În același timp, denumirile modulelor generale ar trebui să reflecte conținutul procedurilor descrise în acestea. Specificarea numelui modulului comun la apelarea unei proceduri face codul mai ușor de înțeles.

Pentru Modul generalîn Paleta de proprietăți proprietatea poate fi setata Privilegiat.

Drepturile de acces nu sunt controlate într-un modul privilegiat. Acest lucru este necesar dacă în Modul general este necesar să se efectueze prelucrarea în vrac a datelor, obținând date din baza de date.

Controlul accesului mărește timpul de acces la baza de date, iar algoritmii în bloc trebuie adesea să ruleze cât mai repede posibil.

De exemplu, o operațiune care necesită mult resurse este calculul salariile. 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 accesului.

În acest fel, se poate obține o creștere semnificativă a performanței. Acest lucru este valabil mai ales în cazul utilizării mecanismului de diferențiere a accesului linie cu linie la înregistrările de tabel.

Dacă modulul Common 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 să apelezi la acest ghid.

Acestea. este necesar să extindeți temporar drepturile utilizatorului ș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 este necesară emiterea unei proceduri care accesează 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ă se specifice locația de compilare. Flag-urile sunt folosite pentru a determina dacă Modulul Comun va fi disponibil pe Client (aplicație gestionată), pe Server, în modul Conexiune Externă.

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

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 Common 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ă pentru o metodă este specificată o directivă de compilare, atunci, deși modulul Generic este disponibil în toate contextele specificate, accesibilitatea unei anumite metode va fi limitată de directiva de compilare.

În acest caz, procedura nu poate fi accesată într-un context care nu este disponibil în general pentru întreg modulul.

Dacă directiva de compilare nu este specificată pentru o procedură (funcție), atunci aceasta va fi compilată în toate contextele definite pentru modul.

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

Modulele comune care sunt disponibile în mai multe contexte diferite în același timp sunt destinate în principal să creeze proceduri care sunt disponibile în mai multe contexte.

Când creați un modul generic, este o practică bună să nu specificați directive de compilare. Acestea. accesibilitatea 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 mai multe steaguri de compilare setate sunt rareori utilizate î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 să accesați metodele de export server ale Modulului Partajat de la Client, dar numai dacă acest Modul Partajat este compilat doar pe Server. În același timp, o casetă de selectare specială este menită să ofere acces de la Client. .

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

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

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

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

Dacă este selectată valoarea parametrului corespunzător Pentru durata apelului, atunci memoria cache va fi activă atâta timp cât rulează procedura din care a fost apelată metoda modulului Common. Dacă valoarea este Pentru durata sesiunii, atunci memoria cache este considerată condiționat a fi activă în timp ce utilizatorul lucrează.

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

Modul formular

Acest modul este conceput pentru a procesa acțiunile utilizatorului. De exemplu, descrieți algoritmul de reacție al programului atunci când este apăsat un buton. Sau, de exemplu, în momentul introducerii valorii în 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 a 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 gestionate și forme normale. Modulele de date de formular diferă în primul rând prin faptul că modulul de formular gestionat este clar separat într-un context. Fiecare procedură (funcție) trebuie să aibă o directivă de compilare. În forma sa 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 îl deschide. Figura arată o listă de evenimente standard pentru un formular gestionat.

Lista evenimentelor de formular gestionate este vizibilă și în lista de proprietăți pentru formularul în sine. Această listă este apelată în editorul de formulare gestionate.

LA formă gestionată puteți gestiona evenimentul de scriere a elementului. Acest eveniment este prezent numai pentru forme de obiecte (cărți de referință, documente și unele altele). Dacă formularul nu este legat de un anumit obiect, atunci nu există niciun eveniment de scriere.

Pentru un modul de formular obișnuit, lista de evenimente standard este oarecum mai mică, deoarece într-o formă gestionată, multe evenimente sunt realizate în perechi (unul este executat pe Client și celălalt pe Server). În forma obișnuită, tot codul este executat pe Client.

Modul obiect

Aceste module sunt tipice pentru directoare, documente, planuri de tipuri de calcule, planuri de conturi și multe alte obiecte. Modulul obiect este proiectat pentru a procesa 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 scrierii interactive, când se lucrează cu un anumit formular.

Evenimentul de scriere din modulul obiect va fi declanșat pentru orice scriere din orice formă a obiectului dat. De asemenea, dacă obiectul este scris programatic, evenimentul modulului obiectului se va declanșa în acest caz.

În cazul de scriere a modulului obiect, puteți încorpora toate verificările pentru corectitudinea datelor care sunt scrise, deoarece această procedură va funcționa în momentul absolut orice scriere.

Modulul acestui obiect poate fi apelat prin meniul contextual, din paleta de proprietăți a obiectului și din fereastra de editare a obiectului.

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

În Modulul Obiect, puteți plasa o secțiune de declarare a variabilelor, puteți descrie funcții arbitrare care pot fi asociate sau nu 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 acestui modul. Acest cod de program va fi executat atunci când este accesat acest Modul Obiect.

Trebuie remarcat faptul că toate procedurile Modulului Obiect sunt compilate pe Server. În consecință, directivele de compilare nu sunt necesare pentru procedurile și funcțiile Modulului Obiect. 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.

LA Modulul de management al valorii vă puteți ocupa de înregistrarea evenimentelor constanteși procesarea cecului de umplere.

Î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 o verificare a populației.

Î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 disponibile 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 relevantă cu cuvântul cheie Export.

Atunci se va putea face referire la 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 albastru (pictograma albastră p() pentru proceduri și f() pentru funcții).

În mod similar, puteți crea o proprietate nouă declarând o variabilă cu cuvântul cheie Export. Această proprietate poate fi accesată și din exterior.

Astfel, este posibilă extinderea funcționalității obiectelor (adăugați noi metode și noi proprietăți). Proprietățile sunt dinamice și nu sunt stocate î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.

Modul manager

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

În Modulul Manager, puteți suprascrie unele evenimente standard. De exemplu, în ProcessingReceivingDataChoice, când un element este selectat din dicționar, puteți face o filtrare sau verificare suplimentară.

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

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

Diferența dintre metodele de export ale Modulului Manager și Modulul Obiect este că, pentru a apela 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ă aceea, variabilele și metodele de export ale Modulului Obiect vor fi disponibile. Pentru Modulul Manager, apelul este mai simplu, de exemplu:
Directoare.Conturi.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 atunci când un obiect este primit, sunt citite absolut toate datele acestui obiect, ceea ce poate fi destul de lung.

A doua diferență este că ObjectModule invocat în contextul unui anumit element. În consecință, putem presupune că este aplicabil pentru acest element (în cele mai multe cazuri, aceasta este logica stabilită).

În ceea ce privește Modulul Manager, acesta descrie o acțiune generală pentru un grup sau pentru toate elementele unui director sau a unui document. De exemplu, dacă trebuie să imprimați un articol de referință, puteți utiliza Modulul Obiect.

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

În plus, accesarea Modulului obiectului 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ă însumăm toate cele de mai sus, atunci 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 de program sunt clasificate în funcție de tipurile pe care le-am examinat în acest articol. Fiecare vizualizare este definită de plasarea sa și de contextul de programare disponibil.
  • Structura modulului constă din câteva 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 fel de modul, și anume modulul de comandă. Nu reprezintă nimic remarcabil și vă sugerăm să vă familiarizați cu funcționalitatea acestuia.

Până acum, am luat în considerare tot codul programului nostru în mod fragmentar din soluția aplicată și, de regulă, l-am scris într-un fel de configurație de test mică a noastră. Sunteți conștient de faptul că „nu puteți pur și simplu să o luați” și să începeți să editați codul unei configurații tipice? Nu? Apoi, în următorul articol vă vom explica totul!

CLOPOTUL

Sunt cei care citesc aceasta stire inaintea ta.
Abonați-vă pentru a primi cele mai recente articole.
E-mail
Nume
Nume de familie
Cum ți-ar plăcea să citești Clopoțelul
Fără spam