Üldiste moodulite loomise reeglid. Üldmoodulid Moodulid 1s ettevõttes

Platvormi moodulid 1C: Enterprise 8.3, 8.2

Üldmoodulid

Funktsioone, mis on sellises moodulis deklareeritud lipuga "eksport", saab välja kutsuda kõikjalt konfiguratsioonis. Kõne tehakse CommonModuleName.FunctionName() kaudu.

Sellistel moodulitel ei ole muutuvat sektsiooni.

Tavaliste moodulite täitmine sõltub nende omadustes seatud parameetritest:

Lipp "Globaalne"

Kui see lipp on seatud, muutub sellise mooduli kontekst globaalseks. See tähendab, et selle ekspordifunktsioonidele juurde pääsedes ei pea te mooduli nime määrama. Kuid selle ekspordifunktsioonide nimed peavad olema globaalses konfiguratsioonikontekstis ainulaadsed.

Märkige "Server"

Sellise mooduli funktsioone saab täita serveris.

Märgistage "Klient (tavaline rakendus)"

Sellise mooduli funktsioone saab kliendil täita tavalise rakenduse režiimis.

Märgistage "Klient (hallatud rakendus)"

Sellise mooduli funktsioone saab kliendil täita hallatava rakenduse režiimis.

Serveri kõne lipp

Lipp on saadaval moodulitele, mille lipp on seatud "Server". Võimaldab kliendil kutsuda selle mooduli ekspordifunktsioone (mis käivitatakse serveris).

Märkige "Väline liitumine"

Sellise mooduli ekspordifunktsioone saab välja kutsuda, kui see on ühendatud välisest allikast.

Lipp "Privilegeeritud"

Selle lipuga moodulis keelatakse lubade kontrollimine. Sobib tootlikuks või administratiivseks tegevuseks.

Taaskasutamise võimalus

Kui lubate selle valiku, salvestatakse ekspordifunktsioonide tagastusväärtused vahemällu kohe pärast esimest kõnet. Vahemällu salvestamine on võimalik kõne ajaks (teatud protseduuri teostamise ajaks) või kasutaja seansi ajaks.

Rakenduse moodul

Loodud rakenduse algus- ja lõppsündmuste käsitlemiseks. Neid on kahte tüüpi: tavaliste ja hallatavate rakenduste jaoks.

Te ei tohiks seda üle koormata, kuna see mõjutab rakenduse käivitusaega.

seansi moodul

Spetsiaalne moodul, mida kasutatakse seansi parameetrite lähtestamiseks. Vajalik selleks, et mitte dubleerida koodi erinevates rakendusmoodulites.

Seda tuleks kasutada ettevaatlikult, kuna moodulit saab käivitada mitu korda ja seda saab käivitada ka ilma baasi täiendava käivitamiseta. Töötab enne rakendusmooduleid.

Lugupidamisega (õpetaja ja arendaja).

Tarkvaramoodulid sisaldavad 1C keeles käivitatavat koodi, mis on vajalik süsteemi või kasutaja tegevusele teatud viisil reageerimiseks, kui visuaalsete arendusvahenditest ei piisa. Ka programmi moodulites saame kirjeldada enda meetodeid (protseduure ja funktsioone).

Tavaliselt koosneb tarkvaramoodul kolmest osast:

  • muutuv deklaratsiooniala;
  • protseduuride ja funktsioonide kirjelduse ala;
  • programmi põhitekst.

Näide programmimooduli ülesehitusest:

//******************** MUUTUV DEKLARATSIOONI ALA *************************

Rem perekonnanime eksport; / /see on globaalne muutuja
Muutuja nimi, isanimi; //see on moodulmuutuja
Muuda nime; //see on ka moodulmuutuja ja sellele pääseb juurde

//meie mooduli mis tahes protseduurist ja funktsioonist

//*************** MENETLUSE JA FUNKTSIOONIDE KIRJELDUSALA ****************

Menetlus Menetlus 1 ()
Muutuja Kokku ; / /Total on kohalik muutuja (protseduuri muutuja)

Kokku = Perekonnanimi + "" + Eesnimi + " "+ Isanimi;

Lõppprotseduur

Funktsioon Funktsioon1 ()

// funktsioonilaused

Return(Perenimi + " " + Eesnimi );

Lõppfunktsioonid

//**************************** PROGRAMMI PÕHITEKST ******************** *

Perekonnanimi = "Ivanov";
Nimi = "Ivan";
Keskmine nimi = "Ivanovitš";

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

Konkreetses programmimoodulis võib mõni valdkond puududa.
Muutuv deklaratsiooni ulatus paigutatakse mooduli teksti algusest protseduuri või funktsiooni lause või mis tahes käivitatava lause esimese lauseni. See jaotis võib sisaldada ainult muutujate deklaratsiooni avaldusi.

Protseduuride ja funktsioonide kirjeldus paigutatakse protseduuri või funktsiooni lause esimesest lausest mis tahes käivitatavasse lausesse väljaspool protseduuri või funktsiooni deklaratsiooni keha.

Põhiprogrammi tekstiala paigutatakse esimesest käivitatavast lausest väljaspool protseduuride või funktsioonide kogumit mooduli lõpuni. See jaotis võib sisaldada ainult käivitatavaid avaldusi. Programmi põhiteksti ala täidetakse mooduli initsialiseerimise ajal. Tavaliselt on programmi põhiosas mõttekas asetada avaldused muutujate lähtestamiseks teatud kindlate väärtustega, mis tuleb määrata enne mooduli protseduuride või funktsioonide esimest väljakutset.

Programmimoodulid asuvad konfiguratsioonis nendes kohtades, mis võivad nõuda konkreetsete tööalgoritmide kirjeldamist. Need algoritmid tuleks kavandada protseduuridena või funktsioonidena, mida süsteem ise etteantud olukordades kutsub (näiteks viitevormi avamisel, dialoogiboksis nupul klõpsamisel, objekti muutmisel jne).

Iga eraldiseisvat programmimoodulit tajub süsteem tervikuna, seega täidetakse kõik programmimooduli protseduurid ja funktsioonid ühes kontekstis.

Moodulite täitmise kontekst jaguneb kliendi- ja serverikontekstideks. Lisaks saab osa tarkvaramooduleid koostada nii kliendi kui ka serveri poolel.

Rakenduse moodul (hallatud või tavaline)

Rakendusmoodul kirjeldab sündmuste protseduure (käsitlejaid), mis initsialiseeritakse süsteemi alguses ja lõpus. Näiteks saate rakenduse käivitamisel värskendada mõningaid konfiguratsiooniandmeid ja väljumisel küsida, kas peaksite üldse programmist väljuma. Lisaks peatab see moodul pealt sündmusi välistest seadmetest, nagu kauplemis- või maksuseadmed. Väärib märkimist, et rakenduse moodul käivitatakse ainult rakenduse interaktiivse käivitamise korral, st programmi akna käivitamisel. Seda ei juhtu, kui rakendus käivitatakse ühenduse režiimis.
1C 8 platvormil on kaks erinevat rakendusmoodulit. Need on ühise rakenduse moodul ja hallatava rakenduse moodul. Need käivituvad erinevate klientide käivitamisel. Näiteks käivitatakse hallatud rakenduse moodul, kui veebiklient, õhuke klient ja paks klient käivitatakse hallatud rakenduse režiimis. Ja tavarakenduse moodul käivitub, kui paks klient käivitatakse tavalises rakendusrežiimis. Rakenduse käivitusrežiimi säte on määratud konfiguratsiooniatribuudis „Peakäivitusrežiim”.

Rakenduse moodul võib sisaldada kõiki 3 jaotist - muutujate deklaratsioonid, protseduuride ja funktsioonide kirjeldused, samuti programmi põhitekst. Rakenduse moodul on koostatud kliendi poolel, mis piirab meid tõsiselt mitut tüüpi andmete kasutamisest. Rakenduse mooduli konteksti saate laiendada ühiskasutatavate moodulite meetoditega, millel on kõneserveri atribuut. Kõik ekspordiks märgitud rakendusprogrammi mooduli muutujad ja meetodid on saadaval igas kliendipoolses konfiguratsioonimoodulis. Kuid nii ahvatlev kui see ka pole, ei tasu siia paigutada suurt hulka protseduure ja funktsioone. Mida rohkem koodi antud moodulis on, seda pikem on kompileerimisaeg ja sellest tulenevalt ka rakenduse käivitusaeg.

Nagu eespool märgitud, tegeleb rakenduse moodul rakenduse algus- ja lõpusündmustega. Kõigi nende sündmuste käsitlemiseks rakendusmoodulis on paar käitlejat Enne ... ja Millal ... Nende erinevused on järgmised: kui käitlejas Enne ... käivitatakse kood, on toimingul pole veel toimunud ja me võime keelduda selle täitmisest. Selleks on keeldumise valik. Töötlejates on toiming juba toimunud ja me ei saa keelduda rakenduse käivitamisest või sellest väljumisest.

Väline ühendusmoodul

  • võib sisaldada kõiki 3 ala
  • asub konfiguratsiooni juursektsioonis

Mooduli eesmärk on sarnane rakendusmooduli eesmärgiga. See haldab rakenduse algus- ja lõppsündmusi. Väline ühendusmoodul käivitub, kui rakendus käivitatakse ühenduse režiimis. Väline liitumisprotsess ise ei ole interaktiivne protsess. Selles režiimis toimub programmiline töö infobaasiga ja rakenduse aken ei avane, mis seab teatud piirangud interaktiivseks tööks mõeldud meetodite kasutamisele. Selles režiimis ei saa te kasutada dialoogivormide kõnesid, hoiatusi ja sõnumeid kasutajale jne. Nad lihtsalt ei jookse.

Nagu rakendusmoodulis, on ka siin saadaval kõik kolm valdkonda: muutujate deklaratsioonid, protseduuride ja funktsioonide kirjeldused ning programmi põhitekst. Peamine erinevus rakendusmoodulist on see, et com-connection režiimis toimub kogu töö infobaasiga serveri poolel, seega kompileeritakse väline ühenduse moodul serveri poolel. Sellest tulenevalt pole tavaliste kliendimoodulite ekspordimuutujad ja meetodid selles saadaval.

seansi moodul

  • sooritatakse serveri poolel
  • asub konfiguratsiooni juursektsioonis

See on väga spetsialiseerunud moodul, mis on loodud ainult seansi parameetrite lähtestamiseks. Miks oli vaja selleks oma moodul teha? Selle kasutamine on tingitud asjaolust, et rakendust ennast saab käivitada erinevates režiimides (mis viib kas hallatava rakenduse mooduli, tavalise rakenduse mooduli või välise ühendusmooduli käivitamiseni) ja seansi parameetrid tuleb lähtestada sõltumata käivitusrežiim. Selleks, et mitte kirjutada kõigis kolmes moodulis sama programmikoodi, vajasime lisamoodulit, mis käivitatakse sõltumata rakenduse käivitamise režiimist.

Seansimoodulis on üks sündmus "SetSessionParameters", mis käivitatakse kõige esimesena, isegi enne rakendusmooduli sündmust PreSystemBegin. Sellel ei ole muutuja deklaratsiooni jaotist ja põhiprogrammi jaotist. Samuti on võimatu deklareerida ekspordimeetodeid. Moodul on koostatud serveri poolel.

Üldmoodulid

  • võib sisaldada protseduuride ja funktsioonide kirjeldamise ala
  • käivitatakse serveri või kliendi poolel (sõltub mooduli sätetest)
  • asub konfiguratsiooniobjektide puu harus "Üldine" - "Üldmoodulid"

Ühised moodulid on mõeldud kirjeldama mõningaid levinud algoritme, mida kutsutakse teistest konfiguratsioonimoodulitest. Üldmoodul ei sisalda muutuvate deklaratsioonialasid ja programmi keha. Selles saate deklareerida ekspordimeetodeid, mille saadavuse määravad mooduli seaded (kummal poolel see käivitatakse: serveri või kliendi poolel). Kuna muutujate deklaratsiooni jaotis pole saadaval, ei saa jagatud moodulites globaalseid muutujaid defineerida. Selleks saate kasutada rakendusmoodulit.

Jagatud mooduli käitumine sõltub seatud parameetritest (globaalne või mitte, erinevad kompileerimislipud, kas serverikõne on saadaval jne). Siin on mõned näpunäited jagatud moodulite seadistamiseks.

Hea tava on mitte kasutada kõikjal "Globaalset" lippu. See vähendab rakenduse käivitusaega, samuti parandab koodi loetavust (muidugi juhul, kui ühisel moodulil on täiesti tähendusrikas nimi);
- Ei ole soovitatav kasutada rohkem kui ühte koostamislippu. Erinevates kontekstides läbiviimist vajavaid meetodeid pole nii palju ja kui selliseid meetodeid siiski vaja on, siis saab neile eraldada eraldi ühise mooduli;
- lipp "Serveri kõne" on mõttekas ainult siis, kui moodul on kompileeritud "Serveris". Seetõttu tuleks erinevate probleemide vältimiseks eemaldada kõik muud koostamise lipud;
- kui moodulimeetodites toimub andmete masstöötlus, andmebaasi lugemine ja kirjutamine, siis töö kiiruse suurendamiseks on parem juurdepääsukontroll keelata, seades lipu "Privilegeeritud". See režiim on saadaval ainult serveris kompileeritud jagatud moodulite jaoks.

Vormi moodul

  • võib sisaldada kõiki 3 ala
  • tehakse serveri ja kliendi poolel

Vormimoodul on loodud selle vormiga kasutaja toimingute käsitlemiseks (nupuklõpsu sündmuse käsitlemine, vormi atribuudi muutmine jne). On ka sündmusi, mis on otseselt seotud vormi endaga (näiteks selle avamine või sulgemine). Hallatava vormi moodulid ja tavavormi moodulid erinevad peamiselt selle poolest, et hallatava vormi moodul on selgelt konteksti eraldatud. Igal protseduuril või funktsioonil peab olema kompileerimisdirektiiv. Kui kompileerimisdirektiivi pole määratud, käivitatakse see protseduur või funktsioon serveri poolel. Tavalisel kujul käivitatakse kogu kood kliendi poolel.

Hallatava vormi struktuur sisaldab muutujate deklaratsiooni jaotist, protseduuride ja funktsioonide kirjeldusi ning programmi põhiosa (käitatakse vormi initsialiseerimisel). Standardvormi sündmustele pääseme juurde vormi eeldatavate protseduuride ja funktsioonide loendi kaudu (Ctrl+Alt+P) või vormi enda omaduste paleti kaudu.

Kui vormile on määratud põhiatribuut, siis muutuvad vormimoodulis kättesaadavaks põhiatribuudina kasutatava rakendusobjekti omadused ja meetodid.

Objekti moodul

  • võib sisaldada kõiki 3 ala
  • sooritatakse serveri poolel

See moodul on saadaval enamiku konfiguratsiooniobjektide jaoks ja on üldiselt mõeldud objektiga otseselt seotud sündmuste töötlemiseks. Näiteks objektide salvestamise ja kustutamise sündmused, objekti andmete täitmise kontrollimine, dokumendi postitamine jne.

Mõned objektimooduli sündmused dubleerivad vormimooduli sündmusi. Näiteks plaadiga seotud sündmused. Siiski tuleb mõista, et vormimooduli sündmused käivitatakse ainult objekti konkreetsel kujul, st konkreetse vormi avamisel. Ja objektimooduli sündmused kutsutakse igal juhul välja, isegi objektiga programmitöö ajal. Seega, kui vajate objektiga seotud meetodeid ilma objekti konkreetse vormiga seotud, on parem kasutada selleks objektimoodulit.

Objektihalduri moodul

  • võib sisaldada kõiki 3 ala
  • sooritatakse serveri poolel

Objektihalduri moodul ilmus alles alates versioonist 1C 8.2. Halduri moodul on olemas kõigi rakendusobjektide jaoks ja on loodud selle objekti haldamiseks konfiguratsiooniobjektina. Halduri moodul võimaldab laiendada objekti funktsionaalsust, tutvustades (kirjutus)protseduure ja funktsioone, mis ei kehti andmebaasiobjekti konkreetse eksemplari, vaid konfiguratsiooniobjekti enda kohta. Objektihalduri moodul võimaldab paigutada antud objektile ühiseid protseduure ja funktsioone ning pääseda neile juurde väljastpoolt, näiteks töötlemisest (muidugi juhul, kui see protseduur või funktsioon on Export märksõnaga). Mida see meile uut annab? Üldiselt ei midagi muud kui protseduuride organiseerimine objektide kaupa ja nende eraldi kohtadesse salvestamine - Objektihalduri moodulid. Sama hästi saame need protseduurid ja funktsioonid paigutada tavalistesse moodulitesse, kuid 1C soovitab paigutada objektide ühised protseduurid ja funktsioonid objektihalduri moodulisse. Näiteid Objektihaldurite mooduli protseduuride ja funktsioonide kasutamisest: kataloogi või dokumendi üksikandmete esmane täitmine teatud tingimustel, kataloogi või dokumendi detailide täitmise kontrollimine teatud tingimustel jne.

Käsumoodul

  • võib sisaldada protseduure ja funktsioone kirjeldavat jaotist
  • teostatakse kliendi poolel

Käsud on objektid, mis on allutatud rakendusobjektidele või konfiguratsioonile tervikuna. Igal käsul on käsumoodul, milles saate kirjeldada etteantud CommandProcess() protseduuri selle käsu täitmiseks.


Hallatud rakenduse moodul

See on mõeldud peamiselt rakenduse käivitamise ja väljalülitamise hetke tabamiseks. Samuti on olemas töötlejad, mis võimaldavad teil välist sündmust seadmest pealt kuulata. See on süsteemi interaktiivne käivitamine, mida jälgitakse hallatava rakenduse moodulis.

Hallatud rakenduse mooduli sündmused käivitatakse hallatava rakenduse õhukese kliendi, veebikliendi ja paksu kliendi käivitamisel. Juhtmoodulis rakendustele pääseb juurde konfiguratsiooni juursõlme omaduste paletist või konfiguratsiooni juursõlme kutsutud kontekstimenüüst.

Tavaline rakendusmoodul

Tavalise rakenduse moodul mängib sama rolli kui hallatud rakenduse moodul, tavalise rakenduse paksu kliendi käivitumisel käivituvad ainult tavalise rakenduse mooduli sündmused.

Tavaline rakenduse moodul muutub kättesaadavaks konfiguratsiooni juursõlme atribuutide paletist pärast seda, kui määrate vahekaardil "Üldine" konfiguraatori sätetes valiku "Käivitusrežiimide konfiguratsiooni redigeerimine" valikule "Hallatud rakendus ja tavaline".

Väline ühendusmoodul

Väline ühendusmoodul on ette nähtud sisselogimissündmuse käsitlemiseks (mitte interaktiivne, vaid COM-ühenduse režiimis) ja väljalogimiseks. Seal on sobivad käitlejad. COM-ühendus ei ava interaktiivset akent, seega ei tööta kasutajaga dialoogi funktsioonid. Ekspordi muutujaid ja meetodeid on võimalik kirjeldada moodulis. Väline ühendusmoodul kompileeritakse serveris. Need. on võimalik juurde pääseda vastavatele konfiguratsiooniobjektidele, näiteks kataloogidele.

seansi moodul

On olemas selline tavaline konfiguratsiooniobjekt nagu "Session Options". Seansi moodul loodi seansi parameetrite lähtestamiseks (selleks on konkreetne sündmus, see käivitub rakenduse käivitumisel kõige esimesena).

Töötab privilegeeritud režiimis (andmebaasi sisenemisel ei kontrolli juurdepääsuõigusi). Seansimoodul kompileeritakse serveris. Muutujate deklaratsiooni sektsioon ja põhiprogrammi jaotis puudub, ekspordimeetodeid ei saa kirjeldada, seda kasutatakse ainult seansi parameetrite määramiseks. Nagu näete, on seansimoodulil väga kitsas eesmärk.

Üldmoodulid

Üldmoodulid kirjeldavad mõningaid üldalgoritme, sisaldavad funktsioone, mida saab kutsuda erinevatest kohtadest. Jagatud mooduleid saab koostada nii kliendis kui serveris.

Üldmoodulites on saadaval AINULT protseduure ja funktsioone kirjeldav osa. Kui teil on vaja kasutada globaalset muutujat, saate kasutada hallatava rakenduse mooduli seansi parameetreid või ekspordimuutujat.

Üldmoodulis saate määrata mõned parameetrid, mis mõjutavad selle käitumist. Kui üldmoodulis on märgitud ruut "Globaalne", osalevad selle ekspordifunktsioonid globaalse konteksti moodustamises. Ja neile pääseb juurde otse teisest kontekstist (ühise mooduli nime mainimata): CommonModuleMethod();

Te ei tohiks kõikjal kasutada levinud moodulite atribuuti "Global", sest sellised moodulid kompileeritakse süsteemi käivitamisel ja aeglustavad programmi käivitumist

Objekti moodul

Paljudel konfiguratsiooniobjektidel (kataloogid, dokumendid jne) on objektimoodul. Sinna saab sisestada standardsündmusi nagu uue kataloogielemendi loomine, uue objekti sisestamine, kustutamine, dokumendi postitamise töötlemine jne. Kirjutamissündmus on olemas nii vormimoodulis (toimub interaktiivse salvestusprotsessi ajal, kui kasutaja klõpsab nupul “kirjuta”) kui ka objektimoodulis.

Tuleb meeles pidada, et ühel objektil võib olla mitu vormi. Seetõttu tuleb kirjutamissündmust töödelda objektimoodulis. Seal kontrollitakse salvestatud andmete õigsust.

Objektimoodulit saab välja kutsuda antud objekti omaduste paletist või kontekstimenüüst. Objektimoodulil on sama struktuur kui vormimoodulil. Objektimoodul kompileeritakse serveris, seega pole kompileerimisjuhiseid vaja.

Vormi moodul

Vormimoodul on mõeldud kasutaja toimingute käsitlemiseks (nupuklõpsu sündmuse käsitlemine jne). On ka sündmusi, mis on otseselt seotud vormi endaga (näiteks selle avamise, sulgemise sündmus). Hallatava vormi moodulid ja tavavormi moodulid erinevad peamiselt selle poolest, et hallatava vormi moodul on selgelt konteksti eraldatud. Igal protseduuril peab olema koostamise käskkiri. Tavalisel kujul käivitatakse kogu kood kliendil.

Hallatava vormi struktuur sisaldab muutuja deklaratsiooni sektsiooni, protseduuride ja funktsioonide sektsiooni ning põhiprogrammi osa (käitatakse vormi initsialiseerimisel). Standardvormi sündmustele pääseme juurde protseduuride ja funktsioonide loendi kaudu (Ctrl+Alt+P) või vormi enda atribuutide paleti kaudu. Samuti saate hallatud kujul käsitleda elemendi kirje sündmust (see sündmus on olemas ainult objektide puhul: kataloogid, dokumendid).

Objektihalduri moodul

Halduri moodul ilmus ainult versioonis 1C 8.2, see on olemas paljude konfiguratsiooniobjektide jaoks. Objektihalduri mooduli põhieesmärk on uuesti defineerida standardsündmus "ProcessingChoiceDataReceiving" ja me saame ka

Väärtusjuhi moodul

Konstantse konfiguratsiooni objektil pole objektimoodulit, vaid väga sarnane moodul, väärtushalduri moodul. Püsiväärtuse halduri moodulis saab kirjeldada erinevaid protseduure (ka eksportivaid), samuti töödelda 3 sündmust: BeforeWrite, OnWrite, ProcessingFillCheck. See moodul on kompileeritud serveris.

Recordset moodulid

Kirjekomplekti moodul on analoogne objektimooduliga ja on registritele omane. Kirjekomplekti moodulis on standardsündmused:

  • Enne salvestamist
  • Salvestamise ajal
  • Täitmise kontrolli töötlemine

Kirjekomplekti moodulis on muutujate, protseduuride ja funktsioonide (sh ekspordifunktsioonide) kirjeldamise osa, põhiprogrammi jaotis.

Peaaegu kõigil konfiguratsiooniobjektidel on halduri moodul ja enamiku objektide puhul objektimoodul. Sageli ei mõista algajad programmeerijad nende kahe mooduli eesmärgi erinevust.

Nende eesmärgi erinevuse mõistmine võimaldab teil kirjutada programmikoodi, mis on struktuurilt õigem, ja mõnel juhul säästa 1C serveri ressursse ja suurendada rakenduslahenduse jõudlust.

Artiklis vaatleme nende moodulite põhimõttelisi erinevusi nii teoreetilisest küljest kui ka konkreetse praktilise näite puhul.

teooria

Pöördume objektorienteeritud programmeerimise (OOP) põhitõdede juurde ja toome analoogia meie näitega. OOP-is saab objektidel olevad meetodid jagada järgmisteks osadeks staatiline (staatiline) ja lihtne. Lihtsaid meetodeid saab kutsuda ainult konkreetse objekti puhul, millele meil on praeguses koodikontekstis juurdepääs. Staatilistel meetoditel pole otsest juurdepääsu objektiandmetele. Objektile juurde pääsemiseks peate esmalt looma selle eksemplari. Sama kehtib ka platvormi 1C:Enterprise 8.x kohta.

Objektimoodulis salvestab platvorm protseduurid ja funktsioonid, mida saab välja kutsuda ainult siis, kui töötatakse konkreetse objektiga, näiteks viiteelemendi "Nomenklatuur" objektiga. Halduri moodul sisaldab protseduure ja funktsioone, mida saab rakendada kõikidele antud tüüpi objektidele, kuid selle objekti eksemplari esmase loomisega. See tähendab, et selle mooduli nomenklatuuri elemendi muutmiseks algselt elemendile viitamiseks käivitage meetod "GetObject ()" ja seejärel töötage sellega edaspidi.

Liigume teoorialt praktikale.

Harjuta

Liigume edasi praktilise näite juurde. Oletame, et meil on vaja lahendada kaubanimekirja printimise probleem Kasutaja prindib toote kas otse kataloogielemendist või tooteloendi vormilt. Vaatleme ülesande täitmiseks kahte võimalust.

Prindiprotseduur objektimoodulis

Lisage sõnastikuobjekti moodulile järgmine funktsioon:

// Edastab funktsioonile viite kataloogielemendile Funktsioon PrintSelectedItems(Link) Ekspordi TabDoc = Uus TabDoc; Paigutus = kataloogid. Kaubad. GetLayout(" Paigutus " ) ; Taotlus = uus taotlus; Taotlus. Tekst = " SELECT | Üksused . AS Kaupade esitlus,| Kaubad . Märgista Kustuta,| Kaubad . müüja kood |FROM| Kataloog . Tooted AS Tooted| KUS | Kaubad . Link B (& ItemsArray)" ; Request. SetParameter(" Kaupade massiiv " , Viide) ; // Valiku määramine viite järgi

Programmi kood on täielikult loodud prindidisaineri poolt. Ainus asi, mis väärib märkimist, on see, et see kuvatakse viitega päringus olevale kataloogielemendile "Tooted". Viide edastatakse funktsiooni parameetrina. Funktsiooni "Valitud kauba trükkimine" väljakutsumise tulemusena tagastatakse tabelidokument täidetud kaubapositsiooniga.

Programmikood objekti "PrintSelectedProducts" meetodi kutsumiseks vormi "Prindi" käsul on esitatud järgmises loendis:

& OnClient protseduuride printimine (käsk) // Loodud arvutustabeli dokumendi hankimiseks kutsuge välja serveri protseduur TabDoc = Prindiserver() ; // Näitab loodud arvutustabeli dokumenti TabDoc. Näita() ; EndProcedure & OnServer Funktsioon PrintServer() // teisendab vormiobjekti kataloogi "Tooted" objektiks, et funktsiooni objektimoodulist kutsuda ItemObject = FormAttributeToValue(" Objekt " ) ; // Kutsuge välja objektmooduli protseduur, edastades seal viite kataloogi aktiivsele elemendile. Tulemus // tagasi kliendi poolele Tagasta ObjectItem. PrintSelectedItems(Object.Reference) ; Lõppfunktsioonid

Seega printisime välja kataloogi praeguse elemendi, töötades selle objektiga. Kuid ülesandes öeldi, et tuleb printida nimekiri toodetest, mille kasutaja peab ise valima. Objektiga töötades ei ole võimalik lihtsal moel kasutajale sellist võimalust anda. Kõige õigem oleks trükkida kataloogi "Kaubad" elementide loendist.

Trükiprotseduur haldurimoodulis

Lisage kataloogihalduri moodulisse järgmine ekspordiprotseduur:

// Linkide massiivi edastamine toodetele Funktsioon PrintSelectedItems(ItemsArray) Eksport TabDoc = Uus arvutustabelidokument; Paigutus = kataloogid. Kaubad. GetLayout(" Paigutus " ) ; Taotlus = uus taotlus; Taotlus. Tekst = " SELECT | Üksused . AS Kaupade esitlus,| Kaubad . Märgista Kustuta,| Kaubad . müüja kood |FROM| Kataloog . Tooted AS Tooted| KUS | Kaubad . Link B (& ItemsArray)" ; Request. SetParameter(" Items Array " , Items Array) ; // Filtri määramine massiivi järgi Tulemus = Taotlus. Käivitama () ; AreaTitle = Paigutus. GetRegion(" Pealkiri " ) ; AreaFooter = Paigutus. GetRegion(" Kelder" ); Tabelipäise ala = Paigutus. GetArea("Tabeli päis") ; AreaFooterTables = Paigutus. GetRegion("Tabelijalus") ; AreaDetailRecords = Paigutus. GetRegion(" Üksikasjad " ) ; TabDoc. Clear() ; TabDoc. Väljund(alapäis) ; TabDoc. Väljund(RegionTableHeader) ; TabDoc. StartAutoGroupRows() ; SampleDetailRecords = Tulemus. Vali() ; Üksikasjalike kirjete proovide võtmise ajal. Järgmine() LoopDetailRecordsArea. Valikud. Täida(SelectionDetailRecords) ; TabDoc. Väljund(RegionDetailRecords, SelectionDetailRecords. Level() ) ; EndCycle ; TabDoc. EndAutoGroupRows() ; TabDoc. Väljund(RegionFooterTables) ; TabDoc. Väljund(AreaFooter) ; Tagasi TabDoc; Lõppfunktsioonid

Peamine erinevus objektimooduli funktsioonist on funktsiooni parameeter. Nüüd edastatakse parameetrina massiiv linkidega toodetele, mida tuleb printida.

Vormi käsumooduli "Prindi" programmikood on järgmine:

& Kliendiprotseduuris Print(Command) TabDoc = PrintServer() ; TabDoc. Näita() ; EndProcedure & OnServer Funktsioon PrintServer() // Valitud toodete linkide massiivi edastamine otsinguloendis // haldurimooduli funktsiooni "PrintSelectedItems". Tagasta käsiraamatud. Kaubad. PrintSelectedItems(Items. List. Selected Lines) ; Lõppfunktsioonid

Sel juhul on režiimis 1C: Enterprise käsu täitmise tulemus järgmine:

Halduri moodulist meetodi kasutamise korral pääseme ligi kataloogi "Tooted" andmetele ilma iga lingi jaoks objekti hankimata. Kuna objekti hankimine tähendab kõigi andmete hankimist andmebaasist kataloogi elemendi kaudu ja vastuvõetud andmete paigutamist RAM-i, mõjutab ülesande teisel viisil rakendamine jõudlust positiivselt. Tõepoolest, sel juhul kasutame serverimasina minimaalset ressurssi (RAM).

Mida kasutada?

Nagu ikka, oleneb kõik konkreetsest ülesandest. Kui teil on vaja dokumenti printida, on parim võimalus kasutada halduri moodulit. Kui teil on vaja objekt täita näiteks tabeliosade täitmise välise töötlemisega, on sel juhul parem paigutada protseduurid ja funktsioonid objektimoodulisse, kuna nende töö hõlmab täpselt objekti.

Tüüpilises konfiguratsioonis "Trade Management" versioonis 11 kasutatakse dokumentide printimiseks haldurimoodulit kõikjal. Kui vaatate konfiguratsiooni "Tootmisettevõtte haldus", siis halduri moodulit praktiliselt ei kasutata, kuna konfiguratsioon oli kirjutatud platvormi vanemates versioonides, kus selle mehhanismi täielikku tuge ei olnud.

Konfiguratsioon artikli näidetega.

Mis on moodulid ja milleks need täpselt mõeldud on? Moodul sisaldab programmi koodi. Lisaks tasub tähele panna, et erinevalt 7.7 platvormist, kus kood võiks asuda nii vormielementide omadustes kui ka paigutustabelite lahtrites, peab 8.x platvormil asuma suvaline koodirida mõnes moodulis. Tavaliselt koosneb moodul kolmest osast – osast muutujate kirjeldamiseks, osast protseduuride ja funktsioonide kirjeldamiseks ning osast põhiprogrammi jaoks. See struktuur on tüüpiline peaaegu kõikidele platvormimoodulitele, välja arvatud mõned erandid. Mõnel moodulil pole muutujate deklaratsiooni sektsiooni ja programmi põhiosa. Näiteks seansimoodul ja mis tahes üldmoodul.

Moodulite täitmise kontekst jaguneb üldiselt kliendi- ja serverikontekstideks. Lisaks saab osa mooduleid koostada nii kliendi kui ka serveri poolel. Ja mõned on puhtalt serveri- või kliendipoolsed. Niisiis:

Rakenduse moodul

Moodul on mõeldud rakenduse käivitamise (konfiguratsiooni laadimise) ja selle valmimise hetkede tabamiseks. Ja vastavates sündmustes saate korraldada kontrolliprotseduure. Näiteks rakenduse käivitamisel uuenda mistahes konfiguratsiooni viiteandmeid, töö lõpus küsi, kas tasub üldse ära jätta, võib-olla pole tööpäev veel lõppenud. Lisaks peatab see sündmusi välistest seadmetest, näiteks kauplemis- või maksuseadmetest. Väärib märkimist, et rakenduse moodul peatab kirjeldatud sündmused ainult interaktiivse käivitamise korral. Need. kui luuakse programmi aken ise. Seda ei juhtu, kui rakendus käivitatakse ühenduse režiimis.

8.2 platvormil on kaks erinevat rakendusmoodulit. Need on ühise rakenduse moodul ja hallatava rakenduse moodul. Need käivituvad erinevate klientide käivitamisel. Nii käivitub hallatava rakenduse moodul, kui veebiklient, õhuke klient ja paks klient käivitatakse hallatud rakenduse režiimis. Ja tavarakenduse moodul käivitub, kui paks klient käivitatakse tavalises rakendusrežiimis.

Rakendusmoodulisse saab paigutada kõik jaotised - muutujate, protseduuride ja funktsioonide kirjeldused, samuti põhiprogrammi kirjeldused. Rakendusmoodul on koostatud kliendi poolel, seega piirab see meid tõsiselt mitut tüüpi andmete kättesaadavuses. Rakenduse mooduli konteksti saate laiendada ühiskasutatavate moodulite meetoditega, millel on kõneserveri atribuut. Kõik muutujad ja meetodid, mis on märgitud ekspordiks, on saadaval igas kliendipoolses konfiguratsioonimoodulis. Kuid nii ahvatlev kui see ka pole, ärge pange siia liiga palju meetodeid. Mida rohkem koodi see sisaldab, seda pikem on kompileerimisaeg ja sellest tulenevalt ka rakenduse käivitusaeg, mis on kasutajatele väga tüütu.

Nagu eespool märgitud, tegeleb rakenduse moodul rakenduse algus- ja lõpusündmustega. Kõigi nende sündmuste käsitlemiseks rakendusmoodulis on paar töötlejat Enne ... ja Millal ... Nende erinevus seisneb selles, et kui käitlejas Enne ... on käivitatud kood, ei ole toiming veel tehtud. toimunud ja me võime keelduda selle täitmisest. Selleks on keeldumise valik. Töötlejates on toiming juba toimunud ja me ei saa keelduda rakenduse käivitamisest või sellest väljumisest.

Väline ühendusmoodul

Mooduli eesmärk on sarnane rakendusmooduli eesmärgiga. See käsitleb rakenduse algus- ja lõpp-punkte. Väline ühendusmoodul käivitub, kui rakendus käivitatakse ühenduse režiimis. Väline liitumisprotsess ise ei ole interaktiivne protsess. Selles režiimis toimub programmiline töö infobaasiga ja rakenduse aken ei avane, mis seab teatud piirangud interaktiivseks tööks mõeldud meetodite kasutamisele. Selles režiimis ei saa te kasutada dialoogivormide kõnesid, hoiatussõnumeid jne. Nad lihtsalt ei tööta.

Nagu rakendusmoodulis, on siin saadaval jaotised muutujate, meetodite ja põhiprogrammi kirjeldamiseks. Samuti saate deklareerida ekspordi muutujaid ja meetodeid. Erinevus seisneb selles, et com-ühenduse režiimis toimub kogu töö infobaasiga serveri poolel, seega kompileeritakse välisühenduse moodul eranditult serveris. Sellest tulenevalt pole tavaliste kliendimoodulite ekspordimuutujad ja meetodid selles saadaval.

seansi moodul

See on väga spetsialiseerunud moodul ja on mõeldud ainult seansi parameetrite lähtestamiseks. Miks oli vaja selleks oma moodul teha? Põhjuseks on asjaolu, et initsialiseerimisprotsess võib nõuda mõne koodi täitmist ning lisaks saab rakendust käivitada erinevate klientide all (mis viib erinevate rakendusmoodulite või välise ühendusmooduli täitmiseni) ning seansi parameetrid peavad olema lähtestada mis tahes käivitusrežiimis. Seetõttu oli vaja lisamoodulit, mis käivitatakse mis tahes rakenduse käivitamise režiimis.

Seansimoodulis on üks sündmus "SetSessionParameters", mis käivitatakse kõige esimesena, isegi enne rakendusmooduli sündmust BeforeSystemStart. Sellel ei ole muutuja deklaratsiooni jaotist ja põhiprogrammi jaotist. Samuti on võimatu deklareerida ekspordimeetodeid. Moodul on koostatud serveri poolel.

Vältige kiusatust, et seda moodulit käivitatakse iga kord, kui rakendus käivitatakse, ja asetage sinna kood, mis ei ole otseselt seotud seansiparameetrite lähtestamisega. See on tingitud asjaolust, et SetSessionParameters töötlejat saab süsteemi töötamise ajal korduvalt välja kutsuda. Näiteks juhtub see siis, kui pääseme juurde mitteinitsialiseeritavatele parameetritele. Ja kuigi selle sündmuse esmakordse käivitamise hetke on võimalik tabada (RequiredParameters on Undefined tüüpi), tuleb siiski märkida, et see moodul on koostatud privilegeeritud režiimis, s.t. see ei kontrolli juurdepääsuõigusi. Ja teine ​​punkt, me ei saa ikka veel sada protsenti kindlad olla, et süsteem käivitatakse. Järsku rakendusmoodul ebaõnnestub ja me proovime andmebaasiga mõnda toimingut teha.

Üldmoodulid

Moodulid on mõeldud kirjeldama mõningaid levinud algoritme, mida kutsutakse teistest konfiguratsioonimoodulitest. Üldmoodul ei sisalda muutujate deklaratsiooni sektsiooni ja põhiprogrammi osa. Selles saate deklareerida ekspordimeetodeid, mille juurdepääsetavuse kontekst määratakse kompileerimislippudega. Kuna muutujate deklaratsiooni jaotis pole saadaval, ei saa jagatud moodulites globaalseid muutujaid defineerida. Selleks peate kasutama tavaliste moodulite funktsioone koos tagastusväärtuste vahemällu või rakenduse mooduliga. Tuleb meeles pidada, et isegi kui ühise mooduli taaskasutamise atribuudiks on seatud "Seansi ajaks", siis sel juhul ei ületa vahemällu salvestatud väärtuste eluiga 20 minutit nende loomise hetkest. viimati kasutatud.
Jagatud mooduli käitumine sõltub seatud parameetritest (globaalne või mitte, erinevad kompileerimislipud, kas serverikõne on saadaval jne). Selles artiklis ei käsitle me kõikvõimalikke sätteid, samuti käitumisomadusi ja lõkse, mis tekivad atribuutide ebamõistlikul määramisel. See on eraldi artikli teema. Peatume vaid mõnel punktil, mida lippude seadmisel järgida:

  • Hea rusikareegel on mitte kasutada kõikjal "Globaalset" lippu. See vähendab rakenduse käivitusaega, samuti parandab koodi loetavust (muidugi juhul, kui ühisel moodulil on täiesti tähendusrikas nimi).
  • Ei ole soovitatav kasutada rohkem kui ühte koostamislippu. Erinevates kontekstides läbiviimist vajavaid meetodeid pole nii palju ja kui selliseid meetodeid siiski vaja on, siis saab neile eraldada eraldi ühise mooduli.
  • Lipp "Kõneserver" on mõttekas ainult siis, kui moodul on kompileeritud "Serveris". Seetõttu tuleks erinevate probleemide vältimiseks eemaldada kõik muud koostamise lipud.
  • Kui moodulimeetodeid kasutatakse andmete massiliseks töötlemiseks, lugemiseks ja andmebaasi kirjutamiseks, siis töö kiiruse suurendamiseks on parem juurdepääsukontroll keelata, seades lipu "Privilegeeritud". See režiim on saadaval ainult serveris kompileeritud jagatud moodulite jaoks.

Vormi moodul

See on mõeldud kasutaja toimingute töötlemiseks, s.o. erinevaid sündmusi, mis on seotud andmete sisestamise ja nende sisestamise õigsuse töötlemisega. Tavavormi moodul koostatakse täielikult kliendi peal. Hallatud vormi moodul seevastu on täitmiskontekstiga selgelt piiritletud, seega peab kõigil muutujatel ja meetoditel olema kompileerimisdirektiiv. Kui käsk pole selgesõnaliselt määratud, kompileeritakse see muutuja või meetod serveri poolel. Vormimoodulis on saadaval jaotised muutujate ja meetodite kirjeldamiseks, samuti jaotis põhiprogrammi jaoks.

Objekti moodul

See moodul on tüüpiline paljudele konfiguratsiooniobjektidele ja on üldiselt mõeldud objekti sündmuste töötlemiseks. Näiteks objektide kirjutamise ja kustutamise sündmused, dokumentide postitamise sündmus jne.

Mõned objektimooduli sündmused dubleerivad vormimooduli sündmusi. Näiteks plaadiga seotud sündmused. Siiski tuleb mõista, et vormimooduli sündmused käivitatakse ainult konkreetsel vormiobjektil. Üldiselt võib neid vorme olla mitu. Ja objektimooduli sündmused kutsutakse igal juhul välja, isegi objektiga programmitöö ajal. Seega, kui kõigil juhtudel on vaja mingit koodi käivitada, siis on parem kasutada selleks objektimooduli sündmust.

Objektimoodul kompileeritakse eranditult serveris. Selles saate määratleda ekspordimuutujad ja -meetodid, mis on saadaval teistes konfiguratsioonimoodulites. Nende omaduste ja meetodite abil saame oluliselt laiendada objekti funktsionaalsust.

Objektihalduri moodul

See moodul on olemas paljude konfiguratsiooniobjektide jaoks. Selle mooduli põhieesmärk on rea kaupa sisestamise ajal toimuva standardse valikusündmuse ümberdefineerimine ja halduri funktsionaalsuse laiendamine. Moodul on koostatud serveri poolel. Võimalik on määratleda ekspordi atribuute ja meetodeid. Halduri ekspordimeetodite kutsumine ei nõua objekti enda loomist.

Kõigele eelnevale saate lisada pildi mõnest konfiguratsioonimoodulist ja viisidest, kuidas hallatud rakenduse režiimis meetodeid vastastikku kutsuda. Nool näitab suunda, kuhu saab minna vastava meetodi kutsumiseks. Nagu diagrammil näha, on serveri kontekst täielikult suletud. Kuid kliendi kontekstist on võimalik juurde pääseda serverimeetoditele.

Sümbolid skeemil: O.M. Klient – ​​Kliendi ühine moodul; O.M. Server – Serveri ühine moodul; M.F. Klient - vormimooduli kliendi protseduurid; M.F. Server – vormimooduli serveriprotseduurid.