Modulele generale 1C- un obiect al metadatelor de configurare 1C 8.3 și 8.2, care stochează codul programului care este adesea numit în configurație. O funcție/procedură poate fi apelată de oriunde în configurație (dacă este exportată).
Cum se utilizează modulul partajat
Este o bună practică să puneți o procedură sau o funcție într-un modul comun dacă este apelată în mai multe locuri. În primul rând, dacă o procedură este corectată, trebuie corectată doar într-un singur loc. În al doilea rând, obține o ordine mai mare în cod.
Un exemplu tipic de modul comun este procesarea înregistrării în funcție de un registru, obținerea sumei diferenței în zile lucrătoare, conversia cursurilor de schimb, recalcularea cantității/prețului/suma în secțiunea tabelară și alte funcții.
Proprietăți generale ale modulului
Una dintre principalele diferențe dintre modulele partajate și alte module este că nu puteți declara variabile partajate.
Obțineți 267 de lecții video 1C gratuit:
Să aruncăm o privire mai atentă la paleta de proprietăți a modulului comun:
- Global- dacă flag-ul este setat, funcțiile și procedurile din acest modul devin disponibile în context global. Acestea. ele pot fi apelate oriunde în configurație fără numele modulului comun. Cu toate acestea, se adaugă o condiție - numele procedurilor și funcțiilor din acest modul comun trebuie să fie unice în contextul global.
- Server- Procedurile și funcțiile acestui modul comun pot fi executate pe server.
- Îmbinare exterioară- codurile de program ale acestui modul comun pot fi executate atunci când sunt conectate printr-o sursă externă (de exemplu, COM).
- Client (aplicație gestionată)— Procedurile și funcțiile acestui modul comun pot fi utilizate într-un client gros în modul aplicație gestionată.
- Client (aplicație obișnuită)— codurile de program ale acestui modul comun pot fi utilizate în clientul gros în modul normal de aplicație.
- Apel pe server- un flag care permite clientului să utilizeze procedurile și funcțiile din acest modul comun.
- - dacă este setată la True, verificarea drepturilor de acces va fi dezactivată în acest modul comun.
- Reutilizați — determină setările pentru valorile returnate, dacă opțiunea este activată, apoi după prima execuție sistemul își va aminti valoarea pentru acești parametri de intrare și va returna o valoare gata făcută. Poate lua următoarele valori: nefolosit- închide, la momentul apelului- pe durata unei anumite proceduri, în timpul sesiunii- până când utilizatorul a închis sesiunea (programul).
Dacă începeți să învățați programarea 1C, vă recomandăm cursul nostru gratuit (nu uitați
Orice program constă dintr-un cod de program, adică dintr-o secvență de acțiuni scrise în orice limbaj care trebuie efectuat.
Totuși, chiar acest program trebuie scris undeva, adică trebuie să fie localizat undeva. În cele mai multe cazuri, codul programului este scris în fișiere text simplu. Singura diferență este că extensia din ele nu este .txt, ci .cpp sau .php.
Unde este scris programul 1C?
Ce este Modulul 1C?
Desigur, codul 1C ar putea fi scris și într-un fișier text. Cu toate acestea, există conceptul de Configurare 1C - care include nu numai o listă de setări, șabloane de formulare și alte lucruri, ci și cod de program 1C. Prin urmare, codul 1C este stocat în configurație.
Configurația constă din obiecte 1C, așa cum am considerat deja în lecțiile anterioare. Fiecare obiect 1C conține obiecte imbricate, de exemplu, un director are mai multe forme.
Fiecare obiect 1C, inclusiv unele imbricate, are propriul său Modul - un fel de fișier text care conține codul programului.
Există, de asemenea, module independente de obiect în care poate fi scris cod de program independent de un anumit obiect.
Astfel, în 1C nu există un program „unic”. Există un set de module pentru scrierea codului de program pentru fiecare obiect de configurare 1C.
Cum sunt utilizate modulele 1C?
Întregul program poate fi împărțit aproximativ în două tipuri:
- Metoda obiectului
- Reacția la evenimente.
Metode. După cum am spus mai devreme, obiectul 1C este o structură integrală care include atât date, cât și metode de procesare a acestora. Aceste metode sunt un set de acțiuni (metode) care pot fi apelate pentru prelucrarea datelor. Un exemplu de astfel de acțiune DirectoryObject.Write() – scrie un element al directorului în baza de date.
Metodele multor obiecte 1C pot fi standard (adică, programate în platforma 1C) și scrise de un programator în limbajul 1C. Cu ajutorul acestuia din urmă, puteți extinde funcționalitatea obiectelor 1C după cum doriți.
Evoluții. Evenimentele se găsesc în multe alte instrumente de dezvoltare. Scopul programului nu este doar de a calcula ceva la pornire, ci și de a sprijini munca utilizatorului.
Eveniment utilizator - utilizatorul a apăsat butonul. Ca răspuns, o parte din cod va fi executată, reacționând la acțiunile utilizatorului.
Evenimente de sistem - am scris obiectul 1C în baza de date. A avut loc evenimentul de sistem „Obiect de înregistrare”. Este posibil să se configureze reacția care va avea loc la evenimente cauzate nu de utilizator (care a apăsat butonul sau a făcut altceva), ci de sistemul însuși. Un exemplu izbitor al unui astfel de eveniment este momentul începerii programului.
Ordinea de executare a modulelor 1C
În multe limbi există un „punct de intrare”. Aceasta este prima linie sau funcție care va fi executată la pornirea programului.
Există mai multe astfel de puncte de intrare în 1C - pentru fiecare tip de client. Adică, la pornirea unui client gros, punctul de intrare este unul, la pornirea unui client subțire, este altul. Acest lucru vă permite să programați funcții care sunt diferite în diferite tipuri de clienți.
Punctul de intrare în modulul corespunzător este handlerii de evenimente de sistem BeforeSystemStart() și, respectiv, AtSystemStart() (adică, în ordine). Aceste funcții sunt executate mai întâi, pot porni ceva automat.
Dacă nimic nu a fost lansat automat, atunci interfața 1C se deschide în fața utilizatorului și apoi totul depinde de el. Face clic pe buton - este executat handlerul pentru apăsarea acestui buton (care, la rândul său, poate porni ceva automat).
Lucrul cu module 1C
Produs în configurator. Puteți deschide modulul folosind fereastra Configurare.
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 cod care este apelat de mai multe ori într-o procedură într-un modul partajat. Această regulă este universală pentru toate configurațiile, așa că 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 în mod corespunzător 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 utilizeze un algoritm similar în altă parte. Cel mai corect 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 un cerc verde.
În dreapta, se vor deschide proprietățile modulului comun adăugat ș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 ar trebui 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. În ceea ce privește utilizarea, acestea nu vor diferi 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 modulele comune, în care este planificată plasarea algoritmilor de execuție pe server;
- „Conexiune exterioară”. Procedurile modulului cu această proprietate activată pot fi executate printr-o conexiune la sursă externă;
- Apel pe server. Responsabil pentru a permite procedurilor dintr-un modul să apeleze serverul în timp ce se execută pe client;
- "Privilegiat". Activarea acestei setări va permite codului de procedură al modulului să nu verifice drepturile de acces atunci când rulează. Puteți apela doar un modul partajat cu această setare pe server. Setările „Client” și „Conexiune 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 (începând cu 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 când doriți să creați un modul comun cu apeluri de procedură pe server și client cu diferențe de algoritm. Pentru delimitarea codului se folosesc directive de preprocesor cu verificare. Ca urmare, pentru un apel de server va fi un cod, iar pentru un apel de client va fi altul.
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"; #EndIf EndProcedure
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 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ție și implementare. Să transferăm codul de procedură într-un modul comun, care trebuie creat în prealabil pentru a putea folosi acest cod în alte documente.
&La procedura client GoodsPriceOnChange(Element) RecalculationAmount(); EndProcedure &AtClient Procedure GoodsQuantityOnChange(Element) RecalculationAmount(); Sfârșitul procedurii &La procedura client Recalcularea sumei() String PM = Elements.Goods.CurrentData; String PM.Sum = String PM.Cantitate * String PM.Price; EndProcedureDeoarece pentru sarcina noastră avem nevoie 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 pentru calcule mai complexe în viitor, atunci verificați și „Server” în proprietăți. Etapa pregătitoare s-a încheiat ș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 tabelare 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.
Fragmentul 1
&AtClient Procedure GoodsPriceOnChange(Item) //apelează procedura din modulul comun CalculationsInSystem.CalculateString(Items.Goods.CurrentData); //RecalculationAmount(); Sfârșitul procedurii &La procedura client GoodsQuantityOnChange(Item) //apelați procedura din modulul comun CalculationsInSystem.CalculateString(Items.Goods.CurrentData); //RecalculationAmount(); Sfârșitul procedurii &La procedura client Recalcularea sumei() String PM = Elements.Goods.CurrentData; String PM.Sum = String PM.Cantitate * String PM.Price; EndProcedureFragmentul 2
Nu vom observa nicio diferență la pornirea sistemului, dar această structură de cod este mult mai ușor 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 performanța sistemului. În plus, dezvoltatorii experimentați 1C recomandă să nu descrie algoritmii în module de formular, ci să îi plaseze în module comune configurate corespunzător.
La dezvoltarea modulelor comune, trebuie luate în considerare regulile general acceptate pentru crearea lor:
- Plasați procedurile și funcțiile legate de funcționalități similare într-un modul comun separat;
- În numele modulului, reflectați apartenența acestuia la context (Client, Server) și evitați 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 intermediul unui nume de modul poate fi confuz, mai ales dacă sistemul este susținut de mai multe echipe de dezvoltare.
Modulele create corect vă vor ajuta să navigați mult mai rapid în structura de configurare și să aduceți îmbunătățiri. Dacă vedeți o oportunitate de a face o funcție utilă generică și de a o muta într-un modul comun, atunci faceți-o. În viitor, dumneavoastră și colegii dumneavoastră veți fi recunoscători pentru această decizie.
În platforma 8.2, o aplicație gestionată propune o separare a funcțiilor client și server pentru a optimiza performanța aplicației. Pe client, de exemplu, nu puteți accesa datele bazei de date. Și pe partea de server, datele formularului nu sunt disponibile, în modulul căruia există o procedură cu directiva &AtServerWithoutContext. Codul programului din 1C este situat în diverse module, un modul obiect, un modul formular, module generale etc. Procedurile și funcțiile fiecărui modul pot fi compilate atât pe server, cât și pe client. Luați în considerare posibilitățile de a apela diferite proceduri și funcții din procedurile compilate pe partea de server și procedurile compilate pe partea client.
Asa de, din partea clientului, puteți suna
1) proceduri client ale acestui modul, cu directiva &AtClient;
2) procedurile de server ale acestui modul, cu directiva &AtServer;
3) proceduri client ale unui modul comun, cu directiva &AtClient (în funcție de disponibilitate în mai multe contexte în proprietăți, se cere „Client” etc.);
4) toate procedurile modulului comun client, în proprietățile modulului comun ar trebui să existe doar proprietatea „Client (aplicație gestionată)”. Directiva &AtClient nu este scrisă în modulul general în acest caz;
5) proceduri ale modulului comun server, dar cu proprietatea suplimentară „Apel server”, și este important ca modulul comun să aibă doar proprietatea de compilare pe server.
Din partea serverului, puteți suna
1) procedurile de server ale acestui modul, cu directiva de compilare &AtServer;
2) toate procedurile modulului comun server, iar în proprietățile modulului comun ar trebui să existe doar proprietatea „Server”. Directiva &AtServer nu este scrisă în modulul general în acest caz;
3) proceduri ale modulului general, cu directiva &AtServer (în funcție de disponibilitate în mai multe contexte în proprietăți, este necesar „Server” etc.).
În plus, dacă în proprietățile modulului comun sunt specificate mai multe locuri de compilare „Client, Server” și nu este specificată nicio directivă de compilare în procedură, atunci în acest caz procedura va fi compilată atât pe partea de server, cât și pe client. latură. Și poate fi apelat, respectiv, atât din metodele client, cât și din metodele server. În acest caz, trebuie să utilizați cu atenție procedura, este necesar ca codul acestuia să poată fi executat atât pe server, cât și pe client.
Mai există o caracteristică. Într-un modul comun care are mai multe locuri de compilare („Server, client”), nu puteți apela procedura de server a aceluiași modul din procedura client, chiar dacă bifați caseta de selectare „apel server”. Proprietatea „apel de server” are sens dacă există o singură proprietate comună a modulului „compilare pe server”.
Există recomandări de utilizare a modulelor partajate compilate doar pe server sau doar pe client. În consecință, utilizați toate modulele client din modulul cu proprietatea „Client” și utilizați toate metodele de server din modulul cu proprietatea „server”.
O altă proprietate utilă a unui modul partajat. Dacă activați proprietatea „Global” în proprietățile unui modul comun, atunci procedurile acestui modul pot fi apelate direct, fără numele modulului comun.
Dar nu te lăsa dus de cap folosind această proprietate, deoarece în acest caz modulul va fi compilat la pornirea sistemului, ceea ce mărește timpul de pornire.
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 indicator 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 normale.
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 utilizat pentru a inițializa parametrii sesiunii. Este necesar pentru a nu duplica codul în diferite module de aplicație.
Trebuie 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).