Reguli pentru crearea modulelor comune. Module generale Module în 1C Enterprise

Modulele platformei 1C: Enterprise 8.3, 8.2

Module comune

Funcțiile care sunt declarate cu steag „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 setările din 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.

Steagul serverului

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

Indicatorul „Client (aplicație obișnuită)”.

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

Indicatorul „Client (aplicație gestionată)”.

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

Steagul „Apel server”.

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).

Steagul de alăturare externă

Funcțiile de export ale unui astfel de modul pot fi apelate la conectarea de la o sursă externă.

Steagul „Privilegiat”

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

Opțiune de reutilizare

Dacă activați această opțiune, 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 al unei anumite proceduri) sau pe durata sesiunii utilizator.

Modul de aplicație

Proiectat pentru a gestiona evenimentele de pornire și terminare a 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 diverse module de aplicație.

Ar trebui să fie folosit cu atenție, deoarece modulul poate fi executat de mai multe ori și poate fi, de asemenea, executat fără a porni în continuare baza de date. Execut înaintea modulelor de aplicație.

Cu stimă, (profesor și dezvoltator).

Modulele software conțin cod executabil în limbajul 1C, care este necesar pentru a răspunde într-un anumit mod la acțiunile sistemului sau ale utilizatorului atunci când instrumentele de dezvoltare vizuală nu sunt suficiente. De asemenea, putem descrie propriile noastre metode (proceduri și funcții) în module software.

De obicei, un modul software este format din trei secțiuni:

  • zona de declarare a variabilei;
  • zona de descriere a procedurilor și funcțiilor;
  • textul principal al programului.

Exemplu de structură a unui modul de program:

//******************** AREA DE DECLARAȚIE VARIABILĂ ************************

Perem Nume Export; / /aceasta este o variabilă globală
Schimbarea numelui, patronimic; //aceasta este o variabilă de modul
numele complet Perem; //aceasta este, de asemenea, o variabilă de modul și poate fi accesată

//din orice procedură și funcție a modulului nostru

//*************** ZONA DESCRIEREA PROCEDURILOR ȘI FUNCȚIILOR ****************

Procedura Procedura1 ()
Variabila Total ; / /Rezultatul este o variabilă locală (variabilă de procedură)

Total = Prenume + " "+ Prenume + " "+ Al doilea nume;

Sfârșitul procedurii

Funcție Funcția 1()

// operatori de funcții

Return(Nume + " "+ Prenume);

EndFunction

//*********************** TEXTUL PRINCIPAL AL ​​PROGRAMULUI ***********************

Nume = „Ivanov”;
Nume = "Ivan";
Patronimic = „Ivanovici”;

//******************************************************************************

Într-un anumit modul software, oricare dintre zone poate lipsi.
Zona de declarare variabilă plasat de la începutul textului modulului până la prima instrucțiune Procedure sau Function sau orice instrucțiune executabilă. Această secțiune poate conține numai instrucțiuni de declarare a variabilei variabile.

Zona pentru descrierea procedurilor și funcțiilor plasat de la prima instrucțiune Procedure sau Function la orice instrucțiune executabilă din afara corpului procedurii sau descrierii funcției.

Zona principală a textului programului este plasat de la prima instrucțiune executabilă în afara corpului de proceduri sau funcții până la sfârșitul modulului. Această secțiune poate conține numai instrucțiuni executabile. Zona principală de text a programului este executată în momentul inițializării modulului. De obicei, într-o secțiune a programului principal, are sens să plasați operatori pentru inițializarea variabilelor cu orice valori specifice care trebuie alocate înainte de primul apel la proceduri sau funcții ale modulului.

Modulele software sunt amplasate în acele locuri din configurație care pot necesita o descriere a anumitor algoritmi de operare. Acești algoritmi ar trebui să fie formalizați sub forma unor proceduri sau funcții care vor fi apelate de sistemul însuși în situații predeterminate (de exemplu, la deschiderea unui formular de director, la apăsarea unui buton într-o casetă de dialog, la schimbarea unui obiect etc.) .

Fiecare modul software individual este perceput de sistem ca un întreg, astfel încât toate procedurile și funcțiile modulului software sunt realizate într-un singur context.

Contextul de execuție al modulului este împărțit în client și server. În plus, unele module software pot fi compilate atât pe partea client, cât și pe partea serverului.

Modul de aplicație (gestionat sau obișnuit)

Modulul de aplicație descrie procedurile (de gestionare) a evenimentelor care sunt inițializate la începutul și la sfârșitul sistemului. De exemplu, când aplicația începe să ruleze, puteți actualiza unele date de configurare, iar când ieșiți din aplicație, puteți întreba dacă merită să ieșiți din program. În plus, acest modul interceptează evenimente de la echipamente externe, de exemplu, de tranzacționare sau fiscale. Este de remarcat faptul că modulul aplicației este executat numai atunci când aplicația este lansată interactiv, adică atunci când fereastra programului este lansată. Acest lucru nu se întâmplă dacă aplicația este lansată în modul conexiune com.
În platforma 1C 8 există două module de aplicație diferite. Acestea sunt modulul Aplicație obișnuită și modulul Aplicație gestionată. Acestea sunt declanșate atunci când sunt lansate diferiți clienți. Astfel, modulul Aplicație administrată este declanșat atunci când clientul web, clientul subțire și clientul gros sunt lansate în modul aplicație administrată. Iar modulul de aplicație obișnuit este declanșat atunci când clientul gros este lansat în modul de aplicație normal. Setarea modului de lansare a aplicației este specificată în proprietatea de configurare „Mod de lansare de bază”.

Un modul de aplicație poate conține toate cele 3 secțiuni - declarații de variabile, descrieri de proceduri și funcții, precum și textul principal al programului. Modulul de aplicație este compilat pe partea clientului, ceea ce limitează foarte mult utilizarea noastră a multor tipuri de date. Puteți extinde contextul modulului aplicației utilizând metode ale modulelor comune care au setată proprietatea „Apel server”. Toate variabilele și metodele modulului de aplicație care sunt marcate ca export vor fi disponibile în orice modul de configurare care rulează pe partea client. Cu toate acestea, oricât de tentant ar fi, nu ar trebui să plasați aici un număr mare de proceduri și funcții. Cu cât există mai mult cod într-un anumit modul, cu atât timpul de compilare este mai lung și, în consecință, timpul de lansare a aplicației.

După cum sa menționat mai sus, modulul de aplicație se ocupă de evenimentele de pornire și de terminare a aplicației. Pentru a gestiona fiecare dintre aceste evenimente în modulul de aplicație, există o pereche de handlere Înainte... și Când... Diferențele dintre ele sunt următoarele: la executarea codului în handlerul Înainte..., acțiunea nu a fost încă a avut loc și putem refuza să o executăm. Pentru asta este opțiunea Respingere. În handlerele On.., acțiunea a avut deja loc și nu putem refuza lansarea aplicației sau ieșirea din ea.

Modul de conectare extern

  • poate conține toate cele 3 zone
  • situat în secțiunea rădăcină a configurației

Scopul modulului este similar cu scopul modulului de aplicație. Procesează evenimentele de început și de sfârșit ale aplicației. Modulul de conexiune externă este declanșat atunci când aplicația este lansată în modul conexiune com. Procesul de îmbinare exterioară în sine nu este un proces interactiv. În acest mod, are loc munca programatică cu baza de informații și fereastra aplicației nu se deschide, ceea ce impune anumite restricții privind utilizarea metodelor destinate lucrului interactiv. În acest mod, apelurile la formularele de dialog, avertismentele și mesajele către utilizator, etc. nu pot fi utilizate. Pur și simplu nu vor fi executați.

Ca și în modulul de aplicație, toate cele trei zone sunt disponibile aici: declarații de variabile, descrieri ale procedurilor și funcțiilor, precum și textul principal al programului. Principala diferență față de modulul de aplicație este că, în modul de conectare com, toate lucrările cu baza de informații au loc pe partea serverului, astfel încât modulul de conectare externă este compilat pe partea serverului. În consecință, variabilele de export și metodele modulelor client comune nu sunt disponibile în acesta.

Modul de sesiune

  • rulează pe partea de server
  • situat în secțiunea rădăcină a configurației

Acesta este un modul foarte specializat conceput exclusiv pentru inițializarea parametrilor de sesiune. De ce a trebuit să-ți faci propriul modul pentru asta? Utilizarea sa se datorează faptului că aplicația în sine poate fi lansată în diferite moduri (rezultând fie executarea unui modul de aplicație gestionat, fie a unui modul de aplicație obișnuit, fie a unui modul de conexiune externă), iar inițializarea parametrilor de sesiune trebuie făcută indiferent a modului de pornire. Pentru a nu scrie același cod de program în toate aceste trei module, aveam nevoie de un modul suplimentar care să ruleze indiferent de modul de lansare a aplicației.

În modulul de sesiune, există un singur eveniment „SettingSessionParameters”, care este executat foarte întâi, chiar înainte de evenimentul din modulul de aplicație BeforeSystemStartOperation. Secțiunea de declarare a variabilelor și secțiunea principală a programului nu sunt disponibile în ea. De asemenea, nu puteți declara metode de export. Modulul este compilat pe partea serverului.

Module comune

  • poate conține o zonă care descrie proceduri și funcții
  • executat pe server sau pe partea client (în funcție de setările modulului)
  • este situat în ramura arborescentă a obiectelor de configurare „General” - „Module generale”

Modulele comune au scopul de a descrie niște algoritmi comuni care vor fi apelați din alte module de configurare. Modulul general nu conține zone de declarare variabile și textul programului principal. Puteți declara în el metode de export, a căror disponibilitate va fi determinată de setările modulului (pe ce parte se execută: pe partea de server sau de client). Datorită faptului că secțiunea de descriere a variabilelor nu este disponibilă, variabilele globale nu pot fi definite în module comune. Puteți utiliza un modul de aplicație pentru aceasta.

Comportamentul unui modul comun depinde de parametrii setați (globali sau nu, diverse steaguri de compilare, dacă este disponibil un apel de server etc.). Iată câteva sfaturi pentru configurarea modulelor comune:

Este o practică bună să nu folosiți steagul global peste tot. Acest lucru va reduce timpul de pornire al aplicației și, de asemenea, va îmbunătăți lizibilitatea codului (desigur, dacă modulul comun are un nume complet semnificativ);
- Nu este recomandabil să folosiți mai mult de un flag de compilare. Nu există atât de multe metode care trebuie executate în contexte diferite și, dacă astfel de metode sunt încă necesare, atunci le poate fi alocat un modul comun separat;
- indicatorul „Server de apeluri” are sens numai dacă modulul este compilat „Pe server”. Prin urmare, toate celelalte steaguri de compilare ar trebui eliminate pentru a evita diverse probleme;
- dacă metodele modulului implică procesarea masivă a datelor, citirea și scrierea în baza de date, atunci pentru a crește viteza de lucru este mai bine să dezactivați controlul accesului prin setarea steagului „Privilegiat”. Acest mod este disponibil numai pentru modulele partajate compilate pe server.

Modul formular

  • poate conține toate cele 3 zone
  • executate pe server și pe partea clientului

Modulul formular este conceput pentru a procesa acțiunile utilizatorului cu acest formular (procesarea unui eveniment de clic pe buton, modificarea detaliilor formularului etc.). Există, de asemenea, evenimente asociate direct cu formularul în sine (de exemplu, deschiderea sau închiderea acestuia). Modulele de formulare gestionate și obișnuite diferă, în primul rând, prin faptul că modulul unui formular gestionat este clar împărțit în context. Fiecare procedură sau funcție trebuie să aibă o directivă de compilare. Dacă directiva de compilare nu este specificată, atunci această procedură sau funcție este executată pe partea serverului. În forma sa normală, tot codul este executat pe partea clientului.

Structura unui formular gestionat conține o secțiune pentru declarații de variabile, descrieri de proceduri și funcții, precum și textul principal al programului (executat la momentul inițializării formularului). Putem accesa evenimente de formular standard prin lista de proceduri și funcții așteptate ale formularului (Ctrl+Alt+P), sau prin paleta de proprietăți a formularului în sine.

Dacă un formular are alocat un atribut principal, atunci proprietățile și metodele obiectului aplicație utilizat ca atribut principal devin disponibile în modulul formular.

Modul obiect

  • poate conține toate cele 3 zone
  • rulează pe partea de server

Acest modul este disponibil pentru majoritatea obiectelor de configurare și este în general destinat procesării evenimentelor legate direct de obiect. De exemplu, evenimente de înregistrare și ștergere a obiectelor, verificarea completării detaliilor obiectului, postarea unui document etc.

Unele evenimente din modulul obiect dublează evenimentele din modulul formular. De exemplu, evenimente asociate cu o înregistrare. Cu toate acestea, trebuie înțeles că evenimentele modulului de formular vor fi executate exclusiv în forma specifică a obiectului, adică atunci când formularul specific este deschis. Și evenimentele modulului obiect vor fi apelate în orice caz, chiar și în momentul lucrului programatic cu obiectul. Prin urmare, dacă aveți nevoie de metode asociate cu un obiect fără a fi legat de o formă specifică a obiectului, atunci este mai bine să utilizați modulul obiect pentru aceasta.

Modulul de gestionare a obiectelor

  • poate conține toate cele 3 zone
  • rulează pe partea de server

Modulul de gestionare a obiectelor a apărut abia începând cu versiunea 1C 8.2. Modulul manager există pentru toate obiectele aplicației și este conceput pentru a gestiona acest obiect ca obiect de configurare. Modulul manager vă permite să extindeți funcționalitatea unui obiect prin introducerea de proceduri și funcții (scriind) care nu se referă la o instanță specifică a unui obiect de bază de date, ci la obiectul de configurare în sine. Modulul de gestionare a obiectelor vă permite să plasați proceduri și funcții generale pentru un anumit obiect și să le accesați din exterior, de exemplu, din procesare (desigur, dacă această procedură sau funcție are cuvântul cheie Export). Ce nou ne dă asta? În general, nimic în afară de organizarea procedurilor pe obiecte și stocarea lor în locuri separate - Module Object Manager. Putem plasa la fel de bine aceste proceduri și funcții în module generale, dar 1C recomandă plasarea procedurilor și funcțiilor generale ale obiectelor în Modulul Object Manager. Exemple de utilizare a procedurilor și funcțiilor Modulului Object Managers: completarea inițială a detaliilor individuale ale unui director sau document în anumite condiții, verificarea completării detaliilor unui director sau document în anumite condiții etc.

Modul de comandă

  • poate conține o secțiune care descrie proceduri și funcții
  • executate pe partea clientului

Comenzile sunt obiecte subordonate obiectelor aplicației sau configurației în ansamblu. Fiecare comandă are un modul de comandă în care poate fi descrisă o procedură CommandProcess() predefinită pentru a executa acea comandă.


Modul de aplicație gestionată

Conceput în principal pentru a surprinde momentul pornește aplicația și momentul în care se închide. Există și handler-uri aici care vă permit să interceptați un eveniment extern din echipament. În modulul de aplicație gestionată, este monitorizată pornirea interactivă a sistemului.

Evenimentele modulului de aplicație gestionată se declanșează atunci când sunt lansate clientul subțire, clientul web și clientul gros al aplicației gestionate. În modulul de control aplicațiile pot fi accesate din paleta de proprietăți a nodului de configurare rădăcină sau din meniul contextual numit pe nodul de configurare rădăcină.

Modul de aplicare obișnuit

Modulul de aplicație obișnuit joacă același rol ca și modulul de aplicație gestionată, doar evenimentele modulului de aplicație obișnuit sunt declanșate atunci când este lansat clientul gros al aplicației obișnuite.

Modulul obișnuit al aplicației va deveni disponibil din paleta de proprietăți a nodului de configurare rădăcină după setarea opțiunii „Editare configurație pentru modurile de lansare” din parametrii configuratorului din fila „General” la „Aplicație gestionată și normală”.

Modul de conectare extern

Modulul de conectare extern este conceput pentru a gestiona evenimentul de conectare (nu interactiv, dar în modul de conectare COM) și deconectare. Există manipulatori corespunzători. Cu o conexiune COM, o fereastră interactivă nu se deschide, așa că funcțiile de dialog cu utilizatorul nu vor funcționa. Este posibil să descrieți variabilele și metodele de export în modul. Modulul de conectare extern este compilat pe server. Acestea. este posibil să accesați obiectele de configurare corespunzătoare, de exemplu, directoare.

Modul de sesiune

Există un astfel de obiect de configurare general ca „Parametrii sesiunii”. Modulul de sesiune este creat pentru a inițializa parametrii de sesiune (există un eveniment specific pentru aceasta; când pornește aplicația, pornește prima).

Se rulează în modul privilegiat (drepturile de acces nu sunt verificate la accesarea bazei de date). Modulul de sesiune este compilat pe server. Nu există o secțiune pentru descrierea variabilelor și o secțiune pentru programul principal; metodele de export nu pot fi descrise; este folosit doar pentru setarea parametrilor de sesiune. După cum puteți vedea, modulul de sesiune are un scop foarte restrâns.

Module comune

Modulele comune descriu niște algoritmi obișnuiți și conțin funcții care pot fi apelate din diferite locuri. Modulele comune pot fi compilate atât pe client, cât și pe server.

În modulele generale, este disponibilă NUMAI secțiunea care descrie proceduri și funcții. Dacă trebuie să utilizați o variabilă globală, puteți utiliza fie parametrii de sesiune, fie o variabilă de export a unui modul de aplicație gestionat.

În modulul general, puteți seta câțiva parametri care îi vor afecta comportamentul. Dacă caseta de selectare „Global” este bifată în modulul general, atunci funcțiile sale de export vor participa la formarea contextului global. Și pot fi accesate direct din alt context (fără a menționa numele modulului comun): CommonModuleMethod();

Nu ar trebui să utilizați proprietatea „Global” a modulelor comune peste tot, deoarece astfel de module sunt compilate la pornirea sistemului și încetinesc pornirea programului

Modul obiect

Multe obiecte de configurare (directoare, documente etc.) au un modul obiect. Puteți introduce evenimente standard în el, cum ar fi crearea unui nou articol de director, înregistrarea unui nou obiect, ștergerea, procesarea înregistrării unui document etc. Evenimentul de înregistrare există atât în ​​modulul formular (apare în timpul procesului de înregistrare interactiv când utilizatorul face clic pe butonul „înregistrare”), cât și în modulul obiect.

Trebuie amintit că un obiect poate avea mai multe forme. Prin urmare, evenimentul de înregistrare trebuie procesat în modulul obiect. Aici este verificată corectitudinea datelor înregistrate.

Un modul de obiect poate fi apelat din paleta de proprietăți a unui obiect dat sau din meniul contextual. Structura unui modul obiect nu este diferită de un modul formular. Modulul obiect este compilat pe server, deci nu sunt necesare directive de compilare.

Modul formular

Modulul formular este proiectat pentru a gestiona acțiunile utilizatorului (tratarea unui eveniment de clic pe buton etc.). Există, de asemenea, evenimente asociate direct cu formularul în sine (de exemplu, evenimentul deschiderii, închiderii acesteia). Modulele de formular gestionate și cele obișnuite diferă în primul rând prin faptul că modulul de formular gestionat este clar separat în context. Fiecare procedură trebuie să aibă o directivă de compilare. În formă normală, tot codul este executat pe client.

Structura unui formular gestionat conține o secțiune pentru descrierea variabilelor, o secțiune pentru proceduri și funcții și o secțiune pentru programul principal (executat în momentul inițializării formularului). Putem accesa evenimentele de formular standard prin lista de proceduri și funcții (Ctrl+Alt+P) sau în paleta de proprietăți a formularului propriu-zis. De asemenea, puteți procesa evenimentul de înregistrare a elementului într-o formă gestionată (acest eveniment este prezent doar pentru obiecte: directoare, documente).

Modulul de gestionare a obiectelor

Modulul manager a apărut doar în 1C 8.2; există în multe obiecte de configurare. Scopul principal al modulului de gestionare a obiectelor este de a suprascrie evenimentul standard „Procesarea datelor de selecție de primire”, iar în el putem, de asemenea,

Modulul de management al valorii

Obiectul de configurare constantă nu are un modul obiect, dar există un modul foarte asemănător - modulul de gestionare a valorii. În modulul de gestionare a valorii constante, puteți descrie diverse proceduri (inclusiv cele de export), precum și procesați 3 evenimente: BeforeWrite, OnWrite, ProcessingFillCheck. Acest modul este compilat pe server.

Module recordset

Modulul recordset este analog cu modulul obiect și este inerent în registre. Există evenimente standard în modulul set de înregistrări:

  • Înainte de înregistrare
  • La înregistrare
  • Se procesează verificarea umpluturii

În modulul recordset există o secțiune pentru descrierile variabilelor, procedurilor și funcțiilor (inclusiv cele de export), o secțiune pentru programul principal.

Aproape toate obiectele de configurare au un modul manager, iar pentru majoritatea obiectelor un modul obiect. Adesea, programatorii începători nu înțeleg diferențele în scopul acestor două module.

Înțelegerea diferenței în scopul lor vă permite să scrieți cod de program mai corect ca structură și, în unele cazuri, să economisiți resursele serverului 1C și să creșteți performanța soluției aplicației.

În articol ne vom uita la diferențele fundamentale dintre aceste module atât din punct de vedere teoretic, cât și folosind un exemplu practic specific.

Teorie

Să ne întoarcem la elementele de bază ale programării orientate pe obiecte (OOP) și să facem o analogie cu exemplul nostru. În POO, metodele pentru obiecte pot fi împărțite în static și simplu. Metodele simple pot fi apelate numai pe un obiect specific la care avem acces în contextul de cod curent. Metodele statice nu au acces direct la datele obiectului. Pentru a accesa un obiect, mai întâi trebuie să creați o instanță a acestuia. Același lucru este valabil și pentru platforma 1C:Enterprise 8.x.

În modulul obiect, platforma stochează proceduri și funcții care pot fi apelate numai atunci când se lucrează cu un anumit obiect, de exemplu, cu obiectul elementului de director „Nomenclatură”. Modulul manager conține proceduri și funcții care pot fi aplicate tuturor obiectelor de un anumit tip, dar cu crearea inițială a unei instanțe a acelui obiect. Adică, pentru a schimba un element de nomenclatură din acest modul, mai întâi executați metoda „GetObject()” pentru a face referire la element și apoi lucrați cu el.

Să trecem de la teorie la practică.

Practică

Să trecem la un exemplu practic. Să presupunem că trebuie să rezolvăm problema tipăririi unei liste de produse.Utilizatorul tipărește un produs fie direct dintr-un element de director, fie din formularul de listă de produse. Să luăm în considerare două moduri de a finaliza sarcina.

Procedura de imprimare în modulul obiect

În modulul obiect director, adăugați următoarea funcție:

// Transmite o referință la un element de director la funcție Funcție PrintSelectedProducts(Link) Export TabDoc = New TabularDocument; Layout = directoare. Bunuri. GetLayout ("Aspect"); Solicitare = Solicitare nouă; Cerere. Text = " SELECTAȚI | Produse . Prezentare ca produs,| Bunuri . MarkDeletion,| Bunuri . Cod furnizor |DIN| Director . Produse AS Produse|UNDE | Bunuri . Link B(&Matrice de produse)" ; Solicitare. SetParameter(" Matrice de produse ", Link); //Selectați prin link

Codul programului este complet generat de designerul de imprimare. Singurul lucru demn de remarcat este afișarea prin referire la elementul directorului „Produse” din cerere. Referința este transmisă ca parametru funcției. Ca urmare a apelării funcției „PrintSelectedProducts”, va fi returnat un document de foaie de calcul cu poziția completă a produsului.

Codul programului pentru apelarea metodei obiect „PrintSelectedProducts” folosind comanda formularului „Print” este prezentat în următoarea listă:

&OnClient Procedure Print(Comandă) // Contactați procedura serverului pentru a primi documentul generat de foaia de calcul TabDoc = PrintServer(); // Afișează documentul tabelar generat TabDoc. Spectacol() ; Funcția EndProcedure și OnServer PrintServer() // Convertiți obiectul formular într-un obiect director „Produse” pentru a apela o funcție din modulul obiect ObjectItem = FormAttributeValue("Obiect"); // Apelați procedura modulului obiect, pasând acolo un link către elementul director curent. Rezultat // revenim la partea clientului Returnați ObjectProduct. PrintSelectedProducts(Object.Link) ; EndFunction

Astfel, am tipărit elementul director curent lucrând cu obiectul său. Dar sarcina a spus să tipăriți o listă de produse pe care utilizatorul însuși trebuie să le selecteze. Când lucrați cu un obiect, nu este posibil să oferiți utilizatorului o astfel de oportunitate într-un mod simplu. Cea mai corectă modalitate ar fi să tipăriți din lista de articole din directorul „Produse”.

Procedura de imprimare în modulul manager

Să adăugăm următoarea procedură de export la modulul de manager de directoare:

// Transmite o serie de link-uri către produse Funcția PrintSelectedProducts(ArrayProducts) Export TabDoc = New TabularDocument; Layout = directoare. Bunuri. GetLayout ("Aspect"); Solicitare = Solicitare nouă; Cerere. Text = " SELECTAȚI | Produse . Prezentare ca produs,| Bunuri . MarkDeletion,| Bunuri . Cod furnizor |DIN| Director . Produse AS Produse|UNDE | Bunuri . Link B(&Matrice de produse)" ; Solicitare. SetParameter(" Matrice de produse ", Matrice de produse) ; // Setați selecția după matrice Rezultat = Solicitare. Alerga(); HeaderArea = Aspect. GetArea(„Titlu”); AreaFooter = Aspect. GetArea(" Subsol "); TableHeadArea = Aspect. GetArea("Antet tabel"); TableFooterArea = Aspect. GetArea(„TableFooter”); DetailRecordsArea = Aspect . GetArea(„Detalii”); TabDoc. Clar() ; TabDoc. Ieșire(AreaTitle); TabDoc. Ieșire (TableHeadArea); TabDoc. StartAutoGroupingRows() ; SelectionDetailRecords = Rezultat. Alegeți() ; În timp ce SelectionDetailedRecords. Next() LoopDetailRecordArea. Opțiuni. Fill(SelectionDetailRecords) ; TabDoc. Ieșire(DetailedRecordsArea, DetailedRecordsSelection.Level()) ; EndCycle ; TabDoc. FinishAutoGroupingRows() ; TabDoc. Ieșire (TableFooterArea); TabDoc. Ieșire (AreaFootground) ; Întoarce TabDoc; EndFunction

Principala diferență față de o funcție dintr-un modul obiect este parametrul funcției. Acum, o matrice cu link-uri către produse care trebuie tipărite este trecută ca parametru.

Codul de program al modulului de comandă a formularului „Print” arată astfel:

& Pe Procedura Client Print(Command) TabDoc = PrintServer() ; TabDoc. Spectacol() ; Funcția EndProcedure și OnServer PrintServer() // Treceți o serie de legături ale produselor selectate în lista de directoare // în funcția modulului manager „PrintSelectedProducts” Retur Directoare. Bunuri. PrintSelectedItems(Items.List.SelectedRows) ; EndFunction

În acest caz, rezultatul executării comenzii în modul 1C:Enterprise va fi următorul:

Dacă folosim metoda din modulul manager, putem accesa datele din directorul „Produse” fără a obține un obiect pentru fiecare link. Deoarece obținerea unui obiect înseamnă obținerea tuturor datelor din baza de date pentru un element de director și plasarea datelor primite în RAM, implementarea sarcinii în a doua modalitate va avea un efect pozitiv asupra performanței. La urma urmei, în acest caz vom folosi un minim de resurse (RAM) ale mașinii server.

Ce să folosești?

Ca întotdeauna, totul depinde de sarcina specifică. Dacă trebuie să imprimați un document, atunci cea mai bună opțiune este să utilizați modulul manager. Dacă trebuie să completați un obiect, de exemplu, prin prelucrarea externă a pieselor tabulare de umplere, atunci în acest caz este mai bine să plasați proceduri și funcții în modulul obiect, deoarece acestea funcționează în mod specific cu obiectul.

În configurația standard a „Trade Management” versiunea 11, modulul manager este folosit peste tot pentru tipărirea documentelor. Dacă vă uitați la configurația „Managementul întreprinderii de producție”, modulul de manager practic nu este utilizat, deoarece configurația a fost scrisă în versiuni mai vechi ale platformei, unde nu exista suport complet pentru acest mecanism.

Configurare cu exemple din articol.

Ce sunt modulele și la ce anume sunt destinate? Modulul conține codul programului. Mai mult, este de remarcat faptul că, spre deosebire de platforma 7.7, unde codul ar putea fi localizat în proprietățile elementelor de formular și în celulele tabelelor de layout, în platforma 8.x orice linie de cod trebuie să fie amplasată într-un anumit modul. . De obicei, un modul este format din trei secțiuni - o secțiune pentru descrierea variabilelor, o secțiune pentru descrierea procedurilor și funcțiilor și o secțiune pentru programul principal. Această structură este tipică pentru aproape toate modulele platformei, cu unele excepții. Unele module nu au o secțiune de descriere variabilă sau o secțiune principală a programului. De exemplu, Modulul Sesiune și orice Modul General.

Contextul de execuție al modulelor este în general împărțit în client și server. În plus, unele module pot fi compilate atât pe partea client, cât și pe partea serverului. Și unele sunt exclusiv pe partea serverului sau a clientului. Asa de:

Modul de aplicație

Modulul este conceput pentru a surprinde momentele lansării aplicației (încărcarea configurației) și încetarea funcționării acesteia. Și procedurile de verificare pot fi plasate în evenimentele corespunzătoare. De exemplu, când porniți o aplicație, actualizați câteva date de configurare de referință și, când terminați munca, întrebați dacă merită să o părăsiți, poate că ziua de lucru nu s-a încheiat încă. În plus, interceptează evenimente din echipamente externe, de exemplu, de tranzacționare sau fiscale. Este de remarcat faptul că modulul de aplicație interceptează evenimentele descrise numai atunci când este lansat interactiv. Acestea. atunci când fereastra programului în sine este creată. Acest lucru nu se întâmplă dacă aplicația este lansată în modul conexiune com.

Există două module de aplicație diferite în platforma 8.2. Acestea sunt modulul Aplicație obișnuită și modulul Aplicație gestionată. Acestea sunt declanșate atunci când sunt lansate diferiți clienți. Acesta este modul în care modulul de aplicație gestionată este declanșat atunci când clientul web, clientul subțire și clientul gros sunt lansate în modul aplicație gestionată. Iar modulul de aplicație obișnuit este declanșat atunci când clientul gros este lansat în modul de aplicație normal.

Un modul de aplicație poate conține toate secțiunile - descrieri ale variabilelor, proceduri și funcții, precum și descrieri ale programului principal. Modulul de aplicație este compilat pe partea clientului, așa că acest lucru ne limitează foarte mult în disponibilitatea multor tipuri de date. Puteți extinde contextul modulului aplicației utilizând metode ale modulelor comune care au setată proprietatea „Apel server”. Toate variabilele și metodele care sunt marcate ca export vor fi disponibile în orice modul de configurare care rulează pe partea client. Cu toate acestea, oricât de tentant ar fi, nu ar trebui să postați aici un număr mare de metode. Cu cât conține mai mult cod, cu atât timpul de compilare este mai lung și, prin urmare, timpul de lansare a aplicației, ceea ce este foarte enervant pentru utilizatori.

După cum sa menționat mai sus, modulul de aplicație se ocupă de evenimentele de pornire și de terminare a aplicației. Pentru a gestiona fiecare dintre aceste evenimente în modulul de aplicație, există o pereche de handlere Before... and When... Diferențele dintre ele sunt de așa natură încât la executarea codului în handler Before..., acțiunea nu a fost încă realizată. a avut loc și putem refuza să o executăm. Pentru asta este opțiunea Respingere. În handlerele On.., acțiunea a avut deja loc și nu putem refuza lansarea aplicației sau ieșirea din ea.

Modul de conectare extern

Scopul modulului este similar cu scopul modulului de aplicație. Procesează punctele de început și de sfârșit ale aplicației. Modulul de conexiune externă este declanșat atunci când aplicația este lansată în modul conexiune com. Procesul de îmbinare exterioară în sine este un proces non-interactiv. În acest mod, are loc munca programatică cu baza de informații și fereastra aplicației nu se deschide, ceea ce impune anumite restricții privind utilizarea metodelor destinate lucrului interactiv. În acest mod, apelurile la formularele de dialog, mesajele de avertizare etc. nu pot fi utilizate. Pur și simplu nu vor funcționa.

Ca și în modulul de aplicație, secțiunile pentru descrierea variabilelor, metodelor și o secțiune pentru programul principal sunt disponibile aici. De asemenea, puteți declara variabile și metode de export. Diferența este că, în modul de conectare com, toate lucrările cu baza de informații au loc pe partea serverului, astfel încât modulul de conexiune externă este compilat exclusiv pe server. În consecință, variabilele de export și metodele modulelor client comune nu sunt disponibile în acesta.

Modul de sesiune

Acesta este un modul foarte specializat și este destinat exclusiv inițializării parametrilor de sesiune. De ce a trebuit să-ți faci propriul modul pentru asta? Acest lucru se datorează faptului că procesul de inițializare poate necesita executarea unui anumit cod și, în plus, aplicația poate fi lansată sub diferiți clienți (ceea ce duce la executarea diferitelor module de aplicație sau a unui modul de conexiune extern) și inițializarea parametrii de sesiune trebuie să se facă în orice mod de lansare. Prin urmare, a fost necesar un modul suplimentar care rulează în orice mod de lansare a aplicației.

În modulul de sesiune, există un singur eveniment „SettingSessionParameters”, care este executat foarte întâi, chiar înainte de evenimentul din modulul de aplicație BeforeSystemStartOperation. Secțiunea de declarare a variabilelor și secțiunea principală a programului nu sunt disponibile în ea. De asemenea, nu puteți declara metode de export. Modulul este compilat pe partea serverului.

Nu trebuie să fiți tentat de faptul că acest modul este executat ori de câte ori este lansată aplicația și nu trebuie să plasați în el cod care nu are legătură directă cu inițializarea parametrilor sesiunii. Acest lucru se datorează faptului că handlerul SetSessionParameters poate fi apelat în mod repetat în timpul funcționării sistemului. De exemplu, acest lucru se întâmplă în cazurile în care accesăm parametri neinițializați. Și deși este posibil să se surprindă momentul primei lansări a acestui eveniment (RequiredParameters este de tip Undefined), trebuie luat în considerare faptul că acest modul este compilat în modul privilegiat, adică. nu controlează drepturile de acces. Și al doilea punct este că încă nu putem fi sută la sută siguri că sistemul va fi lansat. Brusc, apare o defecțiune în modulul aplicației și încercăm să efectuăm unele acțiuni cu baza de date.

Module comune

Modulele sunt destinate să descrie unii algoritmi comuni care vor fi apelați din alte module de configurare. Modulul general nu conține o secțiune de descriere a variabilelor și o secțiune principală a programului. Puteți declara în el metode de export, al căror context de accesibilitate va fi determinat de steaguri de compilare. Datorită faptului că secțiunea de descriere a variabilelor nu este disponibilă, variabilele globale nu pot fi definite în module comune. Pentru a face acest lucru, trebuie să utilizați funcțiile modulelor comune cu memorarea în cache a valorilor returnate sau un modul de aplicație. Merită să rețineți că, chiar dacă proprietatea de reutilizare a modulului partajat este setată la „Pentru durata sesiunii”, atunci, în acest caz, durata de viață a valorilor stocate în cache nu depășește 20 de minute din momentul ultimului acces la lor.
Comportamentul unui modul comun depinde de parametrii setați (globali sau nu, diverse steaguri de compilare, dacă este disponibil un apel de server etc.). În acest articol nu vom lua în considerare toate tipurile de setări, precum și caracteristicile comportamentale și capcanele care apar atunci când setați semnalizatoarele de proprietate în mod nerezonabil. Acesta este un subiect pentru un articol separat. Să ne oprim doar la câteva puncte care ar trebui urmate atunci când setați steaguri:

  • O regulă de bază bună este să nu folosiți steagul Global peste tot. Acest lucru va reduce timpul de pornire al aplicației și, de asemenea, va îmbunătăți lizibilitatea codului (desigur, dacă modulul comun are un nume complet semnificativ).
  • Nu este recomandabil să folosiți mai mult de un semnal de compilare. Nu există multe metode care trebuie executate în contexte diferite și, dacă astfel de metode sunt încă necesare, atunci le poate fi alocat un modul comun separat.
  • Indicatorul „Apel server” are sens numai dacă modulul este compilat „Pe server”. Prin urmare, toate celelalte steaguri de compilare ar trebui eliminate pentru a evita diverse probleme.
  • Dacă metodele modulului implică procesarea masivă a datelor, citirea și scrierea în baza de date, atunci pentru a crește viteza de lucru este mai bine să dezactivați controlul drepturilor de acces prin setarea steagului „Privilegiat”. Acest mod este disponibil numai pentru modulele partajate compilate pe server.

Modul formular

Este conceput pentru a procesa acțiunile utilizatorului, de ex. diverse evenimente legate de introducerea datelor și prelucrarea corectitudinii introducerii acestora. Un modul cu forma obișnuită este compilat în întregime pe client. Un modul de formular gestionat este clar delimitat de contextul de execuție, astfel încât toate variabilele și metodele trebuie să aibă o directivă de compilare. Dacă directiva nu este specificată în mod explicit, atunci această variabilă sau metodă va fi compilată pe partea serverului. Modulul formular conține secțiuni pentru descrierile variabilelor și metodelor, precum și o secțiune pentru programul principal.

Modul obiect

Acest modul este tipic pentru multe obiecte de configurare și este în general destinat procesării evenimentelor obiect. De exemplu, evenimente pentru înregistrarea și ștergerea obiectelor, evenimente pentru postarea documentelor etc.

Unele evenimente din modulul obiect dublează evenimentele din modulul formular. De exemplu, evenimente asociate cu o înregistrare. Cu toate acestea, înțelegeți că evenimentele modulului de formular vor fi executate exclusiv pe formularul specific al obiectului. În general, pot exista mai multe dintre aceste forme. Și evenimentele modulului obiect vor fi apelate în orice caz, chiar și în momentul lucrului programatic cu obiectul. Prin urmare, dacă trebuie să executați un cod în toate cazurile, atunci este mai bine să utilizați un eveniment de modul obiect pentru aceasta.

Modulul obiect este compilat exclusiv pe server. În el puteți defini variabilele de export și metodele care vor fi disponibile în alte module de configurare. Folosind aceste proprietăți și metode, putem extinde semnificativ funcționalitatea obiectului.

Modulul de gestionare a obiectelor

Acest modul există pentru multe obiecte de configurare. Scopul principal al acestui modul este de a redefini evenimentul de selecție standard care are loc la introducerea unei linii și de a extinde funcționalitatea managerului. Modulul este compilat pe partea serverului. Vă permite să definiți proprietățile și metodele de export. Apelarea metodelor de export ale managerului nu necesită crearea obiectului în sine.

La toate cele de mai sus, puteți adăuga o imagine a unor module de configurare și modalități de apelare reciprocă a metodelor în modul aplicație gestionată. Săgeata indică direcția în care vă puteți întoarce pentru a apela metoda corespunzătoare. După cum se poate vedea din diagramă, contextul serverului este complet închis. Dar din contextul clientului este posibil să accesezi metode server.

Simboluri pe diagramă: O.M. Client - Modul comun Client; O.M. Server - Modul server partajat; M.F. Client - Proceduri client ale modulului formular; M.F. Server - Proceduri server ale modulului formular.