1c tagastamisväärtuste taaskasutamine. Tagastusväärtuse taaskasutamisega moodulite kasutamine
Prindi (Ctrl+P)
Konfiguratsioonipuu harus Üldmoodulid asuvad objektid on mõeldud sisaldama funktsioonide ja protseduuride tekste, mida saab kutsuda mis tahes muust konfiguratsioonimoodulist.
TÄHELEPANU! Üldmoodul võib sisaldada ainult protseduuride ja funktsioonide määratlusi.
Ühise mooduli protseduurid ja funktsioonid, mille päises on määratud Ekspordi märksõna, on üks globaalse konteksti komponente. Lisateavet üldmooduli kirjutamisprotseduuride kohta leiate sisseehitatud keeleabi jaotistest "Programmimoodulite lähtetekstide vorming" ja "Operaatorid".
Ühise mooduli redigeerimiseks klõpsake konfiguratsiooniaknas Common Modules tüüpi objekti atribuutide paletis atribuudis Moodul linki Ava. Üldmooduli tekst väljastatakse redigeerimiseks 1C:Enterprise süsteemi tekstiredaktoris tarkvaramooduli tekstitöötlusrežiimis.
Ühine moodul, mis on konfiguratsiooni osa, salvestatakse ainult konfiguratsiooni osana.
Atribuut Global määrab, kas ühise mooduli eksporditud meetodid on osa globaalsest kontekstist.
Kui atribuudi Globaalne väärtus on seatud väärtusele Tõene, on ühise mooduli eksporditud meetodid saadaval globaalse konteksti meetoditena.
Kui atribuudi Global väärtuseks on määratud Väär, luuakse globaalses kontekstis atribuut nimega, mis ühtib metaandmetes oleva ühise mooduli nimega. See atribuut on kirjutuskaitstud. Selle atribuudi väärtus on GeneralModule'i objekt. Selle objekti kaudu on saadaval selle ühise mooduli eksporditud meetodid. Seega näeb mitteglobaalsete jagatud moodulite meetoditele ligipääs välja kujul XXXXX.YYYYY, kus XXXXX on jagatud mooduli kontekstile vastava atribuudi nimi ja YYYYY on jagatud mooduli eksporditud meetodi nimi.
Näide:
Töötamine jaemüügiseadmetega. ConnectBarcode Scanner();
Erinevad kontekstid ja ühised moodulid
Kasutades tavaliste moodulite atribuute ja eelprotsessori käske, saate korraldada tavaliste moodulite erinevate meetodite täitmist soovitud kontekstis.
Ühise mooduli iga omadus vastutab ühise mooduli kompileerimise (ja käivitamise) eest konkreetses kontekstis.
Saadaval on järgmised atribuudid, mis vastutavad konteksti eest, milles üldmooduli meetodid on saadaval:
● Klient (tavaline rakendus)– ühise mooduli meetodid on paksule kliendile kättesaadavad tavarakendusrežiimis;
● – üldmooduli meetodid on saadaval nii õhukese kliendi, veebikliendi kui ka paksu kliendi jaoks
hallatud rakenduse režiim;
● Server – ühise mooduli meetodid on serveris saadaval;
● Väline liitmine– välisühenduses on saadaval ühise mooduli meetodid.
Kui korraga on määratud mitu atribuuti, tähendab see, et ühise mooduli meetodid on saadaval mitmes kontekstis.
Kui ühisel moodulil on atribuut Server ja mõni muu atribuutide komplekt, tähendab see, et ühine moodul on serveris ja valitud kliendis saadaval üheaegselt. On vaja mõista, et tegelikult on see kompileeritud koodi mitu versiooni (vastavalt valitud klientide arvule ja serverile endale).
Veelgi enam, kui sellises ühises moodulis asuvat meetodit kutsutakse kliendi poolelt, siis kasutatakse ühise mooduli kliendikoopiat ja kui serverist, siis serverikoopiat. Sel juhul saate eeltöötlusjuhiste abil (lisateave siit) "kaitsta" serverit koodi eest, mida sellel ei saa käivitada.
Vaatame näidet. Ühismoodulis (mida saab käivitada nii õhukeses kliendis kui ka serveris) on meetod, mille käitumine on õhukese kliendi ja serveri poolel veidi erinev. Vaatame, kuidas seda teha:
#Kui ThinClient Siis
// Kuva hoiatus
ShowUserAlert("Kliendil");
#EndIf
Menetluse lõpp
Seejärel näeb serveri poolel kood välja selline:
Menetlus CommonModule() meetod Ekspordi
// Siia läheb mitu olulist koodi
Menetluse lõpp
Ja õhukese kliendi poolel näeb kood välja järgmine:
Protseduur CommonModule Method() Eksport
// Siia läheb mitu olulist koodi
// Kuva hoiatus
ShowUserAlert ("Kliendis");
Menetluse lõpp
Juhtimise ülekandmiseks kliendilt serverile on mitu võimalust:
● kutsuda välja serveri ühismooduli meetod;
● vormis või käsumoodulis kutsuge meetod, millele eelnevad kompileerimisjuhised &OnServer, &OnServerWithout Context
Samal ajal ei saa serveri protseduuridest välja kutsuda kliendi tavamoodulite meetodeid (millel pole atribuuti Server) ja vormimooduli või käsumooduli klientmeetodeid. Juhtimine naaseb kliendi juurde pärast seda, kui äärepoolseima serveri meetodi kutse on lõppenud.
Erandiks on vormimooduli ja käsumooduli meetodid, millele eelnevad kompileerimisjuhised &OnClientOnServer, &OnClientOnServerIlma kontekstita
Samuti tuleks mainida järgmisi punkte:
● Kui ühine moodul on saadaval rohkem kui ühele kliendile, siis tuleks programmikoodi kirjutamisel arvestada maksimaalsete piirangutega, mida kliendid võivad kehtestada, või kasutada kliendispetsiifilise koodi “isoleerimiseks” eelprotsessori juhiseid.
● Eelprotsessori juhised on mõttekad ka siis, kui ühel ühisel moodulil on mitu täitmiskonteksti, näiteks välisühendus ja õhuke klient või (mis on palju tavalisem) mõni klient ja server. Sel juhul raamivad eeltöötlusjuhised interaktiivset koodi, mida ei saa kasutada serveris, kuid mida saab kasutada kliendis (vt ülaltoodud näidet).
Eelprotsessori juhiste ja kompileerimisjuhiste kohta lisateabe saamiseks vaadake manustatud keele spikri jaotist "Protseduuride ja funktsioonide täitmine".
Kõneserveri atribuut on mõeldud serveri ühismooduli eksporditud meetodite kliendikoodist väljakutsumise võimaluse juhtimiseks.
Kui atribuut on määratud, on serveri ühismooduli eksporditud meetodid kliendilt helistamiseks saadaval. Kui atribuut ei ole määratud, saab selliseid eksporditud meetodeid välja kutsuda ainult serveripoolsetest meetoditest (nii serveripoolsete tavamoodulite meetodid kui ka vormimoodulite ja käsumoodulite serveripoolsed meetodid).
Nõuanne . Soovitatav on määrata atribuudi Server Call väärtuseks False juhtudel, kui serveri ühismoodul sisaldab meetodeid, mida te ei soovi kliendilt kutsuda (näiteks turvalisuse huvides).
Märge. Kui atribuudid on määratud samal ajal Klient (tavaline rakendus), Klient (hallatud rakendus), Väline liitmine, siis lähtestatakse kõneserveri atribuut automaatselt. Kui atribuut Call server on määratud, lähtestatakse atribuudid automaatselt Klient (tavaline rakendus), Klient (hallatud rakendus) Ja Väline liitmine, kui need omadused määrati samal ajal.
Kinnisvara Privilegeeritud on mõeldud juurdepääsuõiguste kontrolli keelamiseks ühise mooduli meetodite täitmisel.
MÄRGE. Kui vara Privilegeeritud installitud, siis määratakse ühise mooduli jaoks automaatselt atribuut Server ja ülejäänud atribuudid lähtestatakse ( Klient (tavaline rakendus), Klient (hallatud rakendus) ja B välisühendus). Privilegeeritud jagatud moodulit saab käivitada ainult serveris.
Tagastusväärtuste taaskasutamine
Kui jagatud moodul ei ole globaalne, muutub atribuut Tagastamisväärtuste taaskasuta kättesaadavaks. See omadus võib võtta järgmisi väärtusi:
● Ära kasuta – selles ühises moodulis funktsioonide tagastamisväärtusi ei saa uuesti kasutada.
● Kõne ja seansi kohta – jagatud moodul kasutab andmete taaskasutamise määramiseks meetodit. Selle meetodi olemus seisneb selles, et koodi täitmisel jätab süsteem meelde parameetrid ja funktsioonide tulemuse pärast funktsiooni esimest väljakutsumist. Kui funktsiooni kutsutakse uuesti samade parameetritega, tagastatakse salvestatud väärtus (esimesest väljakutsest) ilma funktsiooni ennast täitmata. Kui funktsioon muudab selle täitmise ajal parameetrite väärtusi, siis funktsiooni uuesti kutsumine seda ei tee.
Kõnetulemuste salvestamisel saab esile tõsta järgmisi funktsioone:
● kui funktsioon käivitatakse serveris ja kutsutakse välja serveri koodist, jäetakse serveri poolel praeguse seansi jaoks meelde parameetrite väärtused ja kõne tulemus;
● kui funktsioon täidetakse paksul või õhukesel kliendil, siis jäetakse kliendi poolel meelde kõne parameetrite väärtused ja tulemused;
● kui funktsioon käivitatakse serveri poolel ja kutsutakse välja kliendi koodist, siis jäetakse kõneparameetrite väärtused meelde nii kliendi kui ka serveri poolel (praeguse seansi jaoks).
Salvestatud väärtused kustutatakse:
● kui atribuut on seatud Kõne ajaks:
● serveri poolel – serverilt juhtimise tagastamisel;
● kliendi poolel – tipptasemel sisseehitatud keeleprotseduuri või funktsiooni lõpetamisel (süsteemi kutsub välja liidesest, mitte mõnest muust sisseehitatud keeleprotseduurist või funktsioonist);
● kui jagatud mooduli atribuudiks on seatud Seansi ajaks:
● serveri poolel – seansi lõpus;
● kliendi poolel – kliendirakenduse sulgemisel.
Salvestatud väärtused kustutatakse:
● serveris, paksus kliendis, välisühenduses, õhukeses kliendis ja tavalise ühenduskiirusega veebikliendis - 20 minutit pärast salvestatud väärtuse arvutamist või 6 minutit pärast viimast kasutamist;
● õhukeses kliendis ja väikese ühenduskiirusega veebikliendis – 20 minutit pärast salvestatud väärtuse arvutamist;
● kui serveri tööprotsessis napib RAM-i;
● töövoo taaskäivitamisel;
● kui klient lülitub teisele töövoole.
Pärast väärtuste eemaldamist tehakse eksporditud funktsiooni kõne nagu esimeses kõnes.
See tavaliste moodulite omadus ei mõjuta protseduuride täitmist – protseduurid täidetakse alati.
Kui tavaline moodul on seatud tagastamisväärtusi uuesti kasutama, kehtestatakse funktsiooni eksporditavate parameetrite tüüpidele mitmeid piiranguid. Parameetri tüübid võivad olla ainult:
● Primitiivsed tüübid ( Määratlemata, NULL, tõeväärtus, arv, string, kuupäev).
● Kõik viited andmebaasiobjektidele.
● Eespool nimetatud tüüpi omaduste väärtustega struktuurid. Sel juhul kontrollib parameetrite identiteeti struktuuride "sisu".
Kui eksporditud funktsioon tagastab objekti, tagastab see tegelikult viite vahemällu salvestatud objektile. Kui pärast selle viite saamist objekti olek muutub, siis järgnev sama funktsiooni väljakutse tagastab viite juba muudetud objektile ilma funktsiooni tegelikult täitmata. See käitumine jätkub seni, kuni salvestatud väärtus kustutatakse (mis tahes põhjusel). Teisisõnu, ühise mooduli funktsioonikutsest tuleneva objekti oleku muutmine koos tagastamisväärtuste taaskasutamisega ei ole tegeliku funktsioonikutse aluseks. Samuti peaksite meeles pidama, et tagastatud objektide vahemälu on ükskõikne
privilegeeritud režiimi olek funktsiooni kutsumise ajal, kasutades tagastatavaid väärtusi. See funktsioon võib põhjustada järgmist käitumist:
● Funktsioonikutse tegelik täitmine tagastusväärtuste taaskasutamisega (esimene kõne) viidi läbi privilegeeritud režiimiga.
● Funktsiooni täitmisel võeti vastu objekt, mida ei saa vastu võtta, kui privilegeeritud režiim on keelatud.
● Järgmised funktsioonikutsed tehti ilma privilegeeritud režiimi määramata.
● Kuni tagastamisobjekti vahemälu pole tühjendatud või tegelikku kõnet uuesti tehtud, tagastab funktsioon formaalselt ligipääsmatu objekti.
● Vastupidine käitumine kehtib ka siis, kui esimene kõne tehakse ilma privilegeeritud režiimi määramata ja privilegeeritud režiimis objekti, mis oleks võinud privilegeeritud režiimis vastu võtta, ei tagastata.
Kui ühisel moodulil on omadus Tagastusväärtuste taaskasutamine on seatud Seansi ajaks, siis ei saa tüübi väärtusi kasutada sellise mooduli funktsioonide poolt tagastatavates väärtustes Tunniplaani haldur.
Kui korduvkasutatavuse komplektiga jagatud mooduli funktsioon kutsutakse välja samast jagatud moodulist (näiteks nimega GeneralModule), tuleks meeles pidada järgmist hoiatust: kui funktsiooni kutsutakse nimega MyFunction() , siis käivitatakse funktsioon iga kord, kui seda funktsiooni kutsutakse. Salvestatud väärtuste kasutamiseks tuleb funktsiooni kutsuda täisnimega:
GeneralModule.MyFunction().
Globaalse konteksti meetod eemaldab kõik taaskasutatud väärtused, nii serveri- kui ka kliendipoolsed, olenemata sellest, kus meetodit kutsutakse. Pärast meetodi rakendamist Uuenda ReusedValues() esimene funktsioonikutse täidetakse täielikult.
Artikkel jätkab seeriat “Esimesed sammud 1C arenduses”, käsitletakse üksikasjalikult järgmisi probleeme:
- Mis on tarkvaramoodul ja millistest osadest see koosneb?
- Milleks on rakendusmoodul? Miks neid on kaks? Millal kumb algab? Millised on töö peensused?
- Millised sündmused on seotud süsteemi töö algusega, kuidas ja kus neid töödelda?
- Milleks on välisühendusmoodul? Millal ja kuidas seda kasutada?
- Millal seansimoodulit kasutatakse?
- Mis on tavalised moodulid? Millised on selle omadused ja tööreeglid? Miks kasutada atribuuti „Tagastusväärtuste taaskasutamine”?
- Millal vormimoodulit kasutatakse ja milliseid sündmusi saab selles töödelda?
- Milleks on objektmoodul? Millistest osadest see koosneb? Kuidas ma saan näha saadaolevaid mooduli sündmusi?
- Millised on väärtushalduri moodulitega (konstandid) ja kirjekomplekti moodulitega (registrite jaoks) töötamise peensused?
- Millised on erinevused objektimooduli ja halduri mooduli vahel? Millal peaksite viimast kasutama?
Kohaldatavus
Artiklis käsitletakse platvormi 1C:Enterprise 8.3.4.496. Materjal on asjakohane ka praeguste platvormiväljaannete jaoks.
Moodulid versioonis "1C:Enterprise 8.3"
Moodulid on need objektid, mis sisaldavad programmi koodi.
Platvormis on üsna palju erinevaid mooduleid, millest igaühel on oma eesmärk ja omadused.
Iga koodirida peab olema mõnes moodulis. On üldotstarbelisi mooduleid ja objektmooduleid. Mõnda moodulit saab koostada nii Kliendis kui ka Serveris ning mõnda ainult Serveris.
Moodul võib koosneda mitmest osast. Muutujate kirjelduse jaotises kirjeldatakse selle mooduli kohalikke muutujaid, mida saab hiljem kasutada mis tahes protseduurides.
Iga protseduuri käigus pääsete juurde mooduli muutujale. Lisaks võib protseduuri enda sees olla veel üks sama nimega muutuja deklaratsioon. See on selle protseduuri kohalik muutuja.
Vaatamata samale nimele on tegemist kahe erineva muutujaga: ühte kasutatakse konkreetse protseduuri sees ja teist väljaspool seda.
Mõnes moodulis võib muutujatel olla serveris või kliendis kompileerimiskoht (kättesaadavus). Näiteks:
Muutujaid kirjeldavale jaotisele järgneb protseduuride ja funktsioonide osa, kus on näidatud selle mooduli kohalikud meetodid. Mõned moodulid peavad määrama, kus protseduur või funktsioon koostatakse.
Põhimõtteliselt võib koostamise käskkirja ära jätta. Sel juhul on kompileerimisdirektiiv Server. Programmikoodi analüüsimise mugavuse huvides on siiski soovitatav selgesõnaliselt märkida, kus antud protseduur koostatakse. Protseduuride kirjeldamise järjekord ei oma tähtsust.
Mooduli lõpus on peale kõikide protseduuride ja funktsioonide kirjeldamist põhiprogrammi osa, mis võib sisaldada mõningaid operaatoreid ja initsialiseerida vormimooduli lokaalseid muutujaid. See jaotis käivitatakse moodulile juurdepääsul.
Nii näiteks elemendivormi avamisel käivitatakse esmalt vormimooduli põhiprogrammi osa.
Tuleb märkida, et muutujate deklaratsiooni osa ja programmi põhiosa ei eksisteeri kõigi moodulite jaoks (st need jaotised ei kehti mõnes moodulis). Protseduuride ja funktsioonide kirjeldamise jaotis võib olla absoluutselt igas moodulis.
Rakenduse moodul
See moodul on mõeldud rakenduse käivitamise ja lõpetamise sündmuste käsitlemiseks. Näiteks saate rakenduse käivitamisel Internetist valuutakursid alla laadida. Rakenduse lõpetamisel saate kasutajaga kinnitada, et ta kavatseb lõpetada.
Ka rakenduste moodulis on spetsiaalsed töötlejad, mis võimaldavad teil väliseid sündmusi seadmest pealt kuulata.
Need võivad olla magnetkaardilugeja või maksuregistri pidaja sündmused. Ja neid sündmusi saab ka kuidagi töödelda.
Pange tähele, et rakendusmoodulis jälgitakse süsteemi interaktiivset käivitamist.
Rakenduse moodul ei tööta, kui programm 1C käivitatakse näiteks com-ühenduse režiimis. Sel juhul programmi akent ei looda.
Tuleb märkida, et platvormis 8.3 on kaks erinevat rakendusmoodulit: hallatud rakenduse moodul ja tavarakenduse moodul. Hallatud rakenduse mooduli sündmusi töödeldakse, kui käivitatakse hallatud rakenduse õhuke ja paks klient ja veebiklient.
Moodul Regulaarne pealekandmine töötab Thick Clienti režiimis käitamisel Regulaarne pealekandmine, mis sisaldab vormil tavalist käsuliidest Peamenüü.
Kui rakendus töötab Hallatud ja režiimis Regulaarne pealekandmine, siis on vaja kirjeldada käitleja protseduure nagu mooduli puhul Hallatud rakendus, ja mooduli jaoks Regulaarne pealekandmine.
Moodul Hallatud rakendus saab valida juurkonfiguratsioonisõlme kontekstimenüüst.
Seda moodulit saab avada ka juurkonfiguratsioonielemendi omaduste paletist.
Mooduli avamiseks Regulaarne pealekandmine, peaksite lugema konfiguratsiooniseadeid (käsk Valikud menüüs Teenindus).
Vorm avaneb Valikud. Järjehoidja peal On levinud konfiguratsiooni redigeerimise režiim tuleb määrata Hallatud rakendus Ja Regulaarne pealekandmine.
Sel juhul moodul Regulaarne pealekandmine seda saab avada ka juursõlme omadustest.
Sündmuste loend, mida saab töödelda Hallatud Ja Regulaarne pealekandmine on sama.
See moodul võib sisaldada muutujate deklaratsiooni sektsiooni, suvaliste protseduuride ja funktsioonide kirjeldusosa ning programmi põhiosa. Kuid lisaks suvalistele protseduuridele ja funktsioonidele võivad moodulis asuda ka spetsiaalsed sündmuste käsitlejad.
Saadaolevate töötlejate loendit saab vaadata, kui moodul on avatud, helistades aktiivse mooduli protseduuride ja funktsioonide loendisse.
Avanevas Protseduuride ja funktsioonide aknas kuvatakse kõik selle mooduli protseduurid ja funktsioonid ning sündmused, millele pole veel töötlejaid loodud.
Süsteemi käivitamisega on seotud kaks sündmust (“enne” ja “kell”). Kaks süsteemi väljalülitamisega seotud sündmust (“enne” ja “kell”). Ja ka väliste sündmuste töötlemine (näiteks kommertsseadmete üritused).
Kui käivitatakse sündmuste käitleja "enne", loetakse, et toiming ei ole veel toimunud. Kui sündmuste käitleja "at" on käivitatud, on toiming juba lõpule viidud.
Sündmus Enne süsteemi käivitamist ilmneb hetkel, kui Enterprise 8.3 käivitatakse, kuid rakendus ise pole veel ekraanile ilmunud. Sellel sündmusel on järgmine parameeter: Keeldumine.
Kui see parameeter võtab väärtuse Tõsi, siis rakendus ei käivitu. Sündmus Süsteemi käivitamisel eeldab, et toiming on juba lõpetatud, aken on juba loodud ja sel juhul saame näiteks kuvada mõne erivormi. Käivitusest ei saa enam keelduda.
Samamoodi on rakendus enne süsteemi väljalülitamist endiselt avatud ja saate keelduda selle sulgemisest. Kui süsteem välja lülitub, on rakenduse aken juba suletud. Võimalik on teha ainult lisatoiminguid, näiteks mõne faili kustutamine või meili saatmine.
Moodulis Hallatud rakendus Protseduuride ja funktsioonide koostamise juhiseid ei täpsustata, kuna moodul on täielikult koostatud Kliendi poolel. See tähendab, et mooduli protseduurides ja funktsioonides ei pääse me otse ligi näiteks teatmeteostele.
Kui moodulist Hallatud rakendus peate tegema serverikõne, siis peate selleks looma spetsiaalse lipuga .
Moodulis Regulaarne pealekandmine Selliseid piiranguid ei ole, kuna see moodul kompileeritakse Thick Clienti laadimisel. Peaaegu igat tüüpi andmed on paksus kliendis saadaval.
Rakenduse mooduli protseduure, funktsioone ja muutujaid võib kirjeldada kui eksporti.
Kuna moodul kompileeritakse täielikult Kliendi peal, tähendab see, et kliendiprotseduurides pääseme sellele meetodile ja omadusele juurde.
Näiteks saate objekti vormimoodulist välja kutsuda rakenduse mooduli protseduuri või funktsiooni. Üldiste algoritmide kirjeldamiseks on siiski soovitatav kasutada ühiseid mooduleid. Rakendusmooduli põhieesmärk on töödelda algus- ja lõpp-punkti.
Analoogiliselt rakendusmooduliga on see moodul loodud programmi avamise ja sulgemise sündmuse töötlemiseks.
Erinevalt rakenduse moodulist, mis käivitatakse rakenduse interaktiivse käivitamise hetkel, töötab välisühenduse moodul COM-ühenduse režiimis, s.t. kui luuakse 1C:Enterprise 8 objekt ja ühendatakse see konkreetse andmebaasiga.
Selles moodulis on sündmused: Süsteemi käivitamisel Ja Süsteemi väljalülitamisel.
Välise ühenduse mooduli saab avada kas juurkonfiguratsiooniobjekti tasemel kontekstimenüü või juursõlme atribuutide paleti abil.
Välisühenduse protsess ise on programmilise töö protsess teabebaasiga, mitte interaktiivne. Seetõttu ei saa te praegu kasutada dialoogivorme ega kuvada hoiatusteateid, kuna puudub kasutajaliides.
Välisühenduse moodulis on võimalik kirjeldada ekspordimuutujaid ja ekspordimeetodeid, mis on saadaval sellel poolel, kus toimub väline kõne 1C:Enterprise 8.3-le.
Kuna välisel liitumisel pole kasutajaliidest, kompileeritakse välisliitumise moodul täielikult serveris.
Seansi moodul
Seda moodulit on vaja seansi parameetrite lähtestamiseks. Seansi parameetrid on kiired globaalsed muutujad, mille väärtused on saadaval kõikjal konfiguratsioonis.
Seansimooduli saate avada kas kontekstimenüü või juursõlme atribuutide paleti kaudu.
Seansimoodul pakub sündmust SettingSessionParameters.
Kui rakendus käivitub, kutsutakse see protseduur kõigepealt välja. Seansi parameetreid on vaja iga rakenduse toimimiseks: nii interaktiivsel käivitamisel kui ka välise ühenduse režiimis käivitamisel.
Seansimoodul kirjeldab erinevaid toiminguid seansi parameetrite lähtestamiseks sõltuvalt erinevatest tingimustest.
See moodul kirjeldab reeglina mitmeid protseduure, mis protseduurist välja kutsutakse SettingSessionParameters. Seetõttu on kõik need protseduurid eraldatud eraldi mooduliks.
Seansimoodul töötab alati privilegeeritud režiimis. See tähendab, et andmebaasi sisenemisel õigusi ei kontrollita. Seansimoodul koostatakse Serveris, s.o. Juurdepääs on võimalik mis tahes serverimeetodile (sh andmebaasist väärtuste lugemisele).
Seansimoodulis on võimalik defineerida ainult protseduure ja funktsioone, s.t. puudub muutuja kirjelduse sektsioon ja põhiprogrammi osa. Seansimoodulis ei saa määrata ekspordimeetodeid.
Kui süsteemi käivitamisel on vaja teha Serveris mingeid toiminguid, näiteks luua kataloogi element, siis on valikuna võimalik kasutada Session Module'i, sest see kompileeritakse serveris ja käivitatakse süsteemi käivitamisel alati usaldusväärselt. Siiski tuleb arvesse võtta järgmisi punkte:
- menetlust SettingSessionParameters käivitatakse mitte ainult süsteemi käivitamisel, vaid ka initsialiseerimata seansi parameetritele juurdepääsul. Need. SetSessionParametersi töötlejat saab rakenduse töötamise ajal korduvalt välja kutsuda;
- kui seansi parameetrite massiivi elementide arv on null (nõutavate parameetrite massiivi andmetüüp on Undefined), siis on see hetk, mil rakendus käivitatakse;
- kuna seansimoodul töötab privilegeeritud režiimis ja juurdepääsuõigusi ei kontrollita, peaksite andmebaasiobjektidega töötama väga hoolikalt, kuna kasutajal on juurdepääs andmetele, mida talle ei tohiks anda;
- Kui süsteem käivitub, pole veel kindlalt teada, kas rakendus käivitatakse. Sel juhul võidakse sündmuste töötlejas SetSessionParameters teha tarbetuid toiminguid.
Need moodulid kujutavad endast mingite üldalgoritmide kirjeldust, st. protseduurid ja funktsioonid, millele saab helistada erinevatest kohtadest.
Loogiliselt seotud meetodeid saab rühmitada erinevatesse ühistesse moodulitesse. Need moodulid luuakse harus Üldine.
Saate lisada mis tahes arvu jagatud mooduleid. Ühise mooduli meetodite mujal konfiguratsioonis kättesaadavaks tegemiseks tuleb need määratleda märksõnaga Ekspordi. Tavaliste moodulite kliendiprotseduurid on kättesaadavad Kliendis ja serveri omad – Serveris.
Üldmoodulites on saadaval ainult protseduure ja funktsioone kirjeldav jaotis. Need. Üldmoodulis ei saa kirjeldada muutujaid ega kirjeldada põhiprogrammi osa.
Kui on vaja globaalset muutujat, saate kasutada kas seansi parameetreid või rakendusemooduli ekspordimuutujaid.
Üldiste moodulite jaoks saate määrata mõned parameetrid, mis mõjutavad selle mooduli käitumist. Kui atribuut Globaalne on määratud moodulile Üldine, on selles moodulis deklareeritud ekspordimeetodid väljastpoolt otse juurdepääsetavad, ilma täiendavate juhisteta.
Need. a Üldmoodul osaleb globaalse konfiguratsiooni konteksti kujundamisel.
Kinnisvara Globaalneüldmoodulite jaoks võib see kasulik olla. Kuid te ei tohiks seda kasutada kõikjal kõigi levinud moodulite jaoks.
Need , mis on tähistatud märgiga Globaalne, kompileeritakse süsteemi käivitamisel. Mida rohkem selliseid mooduleid, seda aeglasemalt programm käivitub.
Kui lipp Globaalne Sest Üldmoodul ei ole määratud, siis tehakse selle mooduli kompileerimine selle esimese kõne ajal (st pärast süsteemi käivitumist).
Lisaks mõjutab koodist arusaamist globaalsete ühismoodulite kasutamine. Mitteglobaalse ühismooduli meetodeid kutsutakse nime kaudu Üldmoodul ja meetodi nimi, näiteks:
Kulude arvutamise moodul.DistributeIndirectCosts();
Sel juhul peavad ühismoodulite nimed kajastama neis kirjeldatud protseduuride sisu. Ühise mooduli nime määramine protseduuri kutsumisel aitab koodist paremini aru saada.
Sest Üldmoodul V Omaduste palett saate määrata vara Privilegeeritud.
Privilegeeritud moodul ei kontrolli juurdepääsuõigusi. See on vajalik, kui Üldmoodul Vajalik on andmetöötluse masstöötlus, andmete hankimine andmebaasist.
Juurdepääsuõiguste kontrollimine pikendab andmebaasile juurdepääsuks kuluvat aega ja massialgoritmid peavad sageli töötama nii kiiresti kui võimalik.
Näiteks palgaarvestus on ressursimahukas tegevus. Seda tuleb teha nii kiiresti kui võimalik. Selleks paigutatakse palka arvutavad algoritmid privilegeeritud .
Samas jäävad nendest välja kõik protseduurid, mis tagavad palgaarvestuse dokumentide täitmist Ühised moodulid. Nende protseduuride käigus teostatakse juurdepääsuõiguste kontroll.
Sel viisil on võimalik jõudlust oluliselt parandada. See kehtib eriti siis, kui kasutatakse tabelikirjetele ridade kaupa juurdepääsu kontrollimise mehhanismi.
Kui ühine moodul on privilegeeritud, saab selle mooduli protseduure kompileerida ainult serveris.
On olukordi, kus mõni objekt peaks olema kasutajale kättesaamatu, näiteks teatud kataloog. Kuid ühe dokumendi koostamisel on vaja viidata sellele teatmeraamatule.
Need. On vaja ajutiselt laiendada kasutajaõigusi ja seejärel taastada need algsesse olekusse. Selle efekti saab kasutada privilegeeritud Ühised moodulid.
Et seda teha privilegeeritud Üldmoodul Peaksite looma protseduuri, mis pääseb juurde vajalikele andmetele.
See protseduur kutsutakse välja vastavast dokumendist. Need. selle protseduuri käivitamise ajal antakse kasutajale tegelikult laiendatud õigused.
Sest Ühised moodulid Võimalik on täpsustada koostamise asukohta. Lippe kasutatakse selleks, et määrata, kas ühine moodul on saadaval kliendis (hallatud rakenduses), serveris või välisühenduse režiimis.
Lisaks, kui lülitate konfiguratsiooni redigeerimise režiimiks Hallatud rakendus ja tavaline rakendus, on võimalik ka teine kompileerimiskontekst - Klient (tavaline rakendus).
Seega on programmi toimimiseks neli võimalust. Olenevalt töötavast rakendusest, olenevalt tööst kliendis või serveris, on teatud ühised moodulid saadaval või mitte.
Lisaks kompileerimislippude määramise võimalusele on võimalik määrata kompileerimisjuhised ühismoodulis paiknevatele protseduuridele ja funktsioonidele.
Kui meetodi jaoks on määratud kompileerimisdirektiiv, siis kuigi ühine moodul on saadaval kõigis määratud kontekstides, piirab konkreetse meetodi kättesaadavust kompileerimisdirektiiv.
Sel juhul ei saa protseduurile juurde pääseda kontekstis, mis ei ole juurdepääsetav kogu moodulile.
Kui te ei määra protseduurile (funktsioonile) kompileerimiskäsku, kompileeritakse see kõigis mooduli jaoks määratletud kontekstides.
Need. Põhimõtteliselt tehakse protseduurist mitu koopiat. Konkreetse kompileeritud eksemplari valik sõltub sellest, kus protseduur kutsutakse (lähima kõne reegli järgi). Arvestada tuleb sellega, et sellise protseduuri kood tuleb koostada arvestades selle kättesaadavust kõigis mooduli jaoks määratletud kontekstides.
Üldised moodulid, mis on üheaegselt juurdepääsetavad mitmes erinevas kontekstis, on mõeldud peamiselt mitmes kontekstis juurdepääsetavate protseduuride loomiseks.
Ühise mooduli loomisel peetakse heaks tavaks mitte määrata koostamisjuhiseid. Need. Protseduuride ja funktsioonide kättesaadavuse peaksid määrama mooduli enda omadused.
Selle lähenemisviisi korral asuvad kliendiprotseduurid eraldi ühistes moodulites ja serveriprotseduurid eraldi ühistes moodulites.
Moodulid, millel on mitu kompileerimislippu, kasutatakse praktikas äärmiselt harva. Need on mõned tavalised toimingud, mis on saadaval nii kliendis kui ka serveris. Tavaliselt on need mõned lihtsad arvutused.
Tähtis! Kliendil on võimalik pääseda ligi ühise mooduli ekspordiserveri meetoditele, kuid ainult siis, kui see ühismoodul on kompileeritud ainult serveris. Sellisel juhul on Kliendi juurdepääsu tagamiseks ette nähtud spetsiaalne lipp .
Mitteglobaalsete ühiste moodulite puhul on võimalik funktsioonide tagastatud väärtused vahemällu salvestada. Need. Pärast funktsiooni esimest väljakutsumist mäletab süsteem selle täitmise tulemust. Kui seda funktsiooni samade parameetritega uuesti välja kutsuda, tagastab süsteem väärtuse vahemälust.
Selle mehhanismi eesmärk on kiirendada korduvaid kõnesid. Selle käitumise konfigureerimiseks peate Omaduste palett moodul, määrake atribuudi Tagastusväärtuste taaskasutamine sobiv väärtus.
Vaikimisi on selle atribuudi väärtuseks määratud Ära kasuta. Muud võimalikud väärtused: vahemälu Kõne ajal, või Seansi ajaks.
Seda omadust on mõttekas kasutada ainult nende funktsioonide puhul, mille tulemused sõltuvad ainult sisendparameetritest. See mehhanism on saadaval ainult mitteglobaalsete ühismoodulite jaoks.
Kui valitud on vastav parameetri väärtus Kõne kestuseks, töötab vahemälu seni, kuni töötab protseduur, millest üldmooduli meetod välja kutsuti. Kui valitud on väärtus Seansi kestuseks, eeldatakse tingimuslikult, et vahemälu töötab kasutaja töötamise ajal.
Siiski on teatud ajapiirangud. Vahemälu tühjendatakse automaatselt 20 minutit pärast väärtuse sisestamist vahemällu.
Vormi moodul
See moodul on loodud kasutaja toimingute töötlemiseks. Näiteks kirjeldage algoritmi, kuidas programm nupule vajutamisel reageerib. Või näiteks väljale väärtuse sisestamise hetkel kontrolli kohe õigsust.
Lisaks vormi juhtelementidega seotud sündmustele (nupud, sisestusväljad) on sündmused, mis on seotud otseselt vormi endaga.
Näiteks saate käsitleda vormi avamissündmust ja teha esialgse lähtestamise. Samuti saate käsitleda vormi sulgemise sündmust ja kontrollida, kas kasutaja sisestas kõik õigesti.
On kontrollitud vorme ja tavavorme. Nende vormide moodulid erinevad eelkõige selle poolest, et hallatava vormi moodul on selgelt jaotatud konteksti järgi. Igal protseduuril (funktsioonil) peab olema kompileerimisdirektiiv. Tavakujul kasutatakse kogu koodi Kliendil.
Hallatava vormi moodulis saate deklareerida protseduure ja funktsioone, deklareerida muutujaid ja kirjeldada põhiprogrammi jaotist.
Põhiprogrammi programmikood käivitatakse vormi initsialiseerimise hetkel, s.o. kui kasutaja hakkab seda avama. Joonisel on näidatud hallatava vormi standardsündmuste loend.
Hallatava vormi sündmuste loend on nähtav ka otse vormi enda atribuutide loendis. Seda loendit kutsutakse hallatud vormide redaktoris.
Hallatud kujul saate käsitleda üksuse kirjutamissündmust. See sündmus on olemas ainult objektivormide (kataloogid, dokumendid ja mõned muud) puhul. Kui vorm ei ole konkreetse objektiga seotud, siis kirjutamissündmust pole.
Tavavormi mooduli puhul on tavasündmuste nimekiri mõnevõrra väiksem, sest Hallatud kujul pannakse palju sündmusi siduma (üks käivitatakse kliendis ja teine serveris). Tavalisel kujul käivitatakse kogu kood Kliendis.
Objekti moodul
Need moodulid on tüüpilised kataloogide, dokumentide, arvutustüüpide plaanide, kontoplaanide ja paljude muude objektide jaoks. Objektimoodul on loodud standardsete sündmuste käsitlemiseks. Näiteks kataloogielemendi sisestamise sündmus, elemendi kirjutamise, kustutamise, dokumendi postitamise jne.
Põhimõtteliselt on kirjutamissündmus olemas ka vormimoodulis. Kuid kirjutamissündmus vormimoodulis toimub interaktiivse salvestusprotsessi ajal, kui töötate konkreetse vormiga.
Objektimooduli kirjutamise sündmus käivitatakse antud objekti mis tahes vormis kirjutamisel. Lisaks käivitub objekti mooduli sündmus, kui objekt on kirjutatud programmiliselt.
Objektimooduli kirjutamise korral saate sisestada kõik kirjutatavate andmete õigsuse kontrollid, kuna see protseduur viiakse läbi absoluutselt igasuguse salvestamise ajal.
Selle objekti moodulit saab kutsuda kontekstimenüüst, objekti omaduste paletist ja objekti redigeerimise aknast.
Allolev joonis näitab saadaolevate kataloogimooduli sündmuste loendit.
Objektimoodulisse saate paigutada muutujate kirjeldamise, suvaliste funktsioonide kirjeldamise, mis ei pruugi olla sündmusega seotud, kui ka põhiprogrammi jaotise.
Programmi põhiosas saate näiteks lähtestada antud mooduli kohalikke muutujaid. See programmikood käivitatakse, kui sellele objektimoodulile pääsete juurde.
Tuleb märkida, et kõik objektimooduli protseduurid kompileeritakse serveris. Sellest tulenevalt ei ole objektmooduli protseduuride ja funktsioonide kompileerimisjuhised nõutavad. Mõnel konfiguratsiooniobjektil pole objektimooduleid.
See on tingitud objektide endi omadustest. Selliste objektide hulka kuuluvad Konstandid Ja Registrid. Sest Püsiv objektmoodulit pole, kuid on väga sarnane moodul nimega Väärtusjuhi moodul.
IN Väärtusjuhi moodul saad hakkama sündmuste kirjutamisega Konstandid ja täitmise kontrollimise töötlemine.
Kogu mooduli kontekst käivitatakse serveris.
Registrite jaoks on olemas kirjekomplekti moodul.
Sellel moodulil on ka võimalus kirjutada sündmusi ja teostada hõivatuse kontrolle.
Objektimoodulites, väärtushalduri moodulites (konstantide jaoks) ja kirjekomplekti moodulites (registrite jaoks) saate kirjeldada meetodeid, mida saab muuta eksporditavaks ja need meetodid on väljastpoolt juurdepääsetavad.
Need. Lisaks objektiklassi fikseeritud meetodite kasutamisele saate objektimoodulis luua objektile täiendavaid meetodeid. See moodul peaks kirjeldama vastavat protseduuri märksõnaga Ekspordi.
Siis on sellele protseduurile võimalik juurde pääseda väljastpoolt. Lisaks kuvatakse see meetod konteksti vihjes. Uued meetodid konteksti tööriistaspikris on esile tõstetud sinise kirjaga (sinine ikoon p() protseduuride jaoks ja f() funktsioonide jaoks).
Samamoodi saate luua uue omaduse, deklareerides märksõnaga muutuja Ekspordi. Sellele kinnistule pääseb ligi ka väljast.
Nii on võimalik laiendada objektide funktsionaalsust (defineerida uusi meetodeid ja uusi omadusi). Kuid omadused on dünaamilised ja neid ei salvestata andmebaasi.
Kui teil on vaja andmebaasi salvestatava objekti jaoks kasutada atribuuti, peaksite looma objekti atribuudi.
Juhataja moodul
See moodul on olemas paljude objektide jaoks (kataloogid, dokumendid, registrid jne). Moodul avatakse kas objekti kontekstimenüü kaudu või selle kaudu Omaduste palett või redigeerimisakna kaudu.
Halduri moodulis saate alistada mõned standardsed sündmused, näiteks sisse ProcessingReceivingSelectionData, kui element on kataloogist valitud, saab teha täiendavat filtreerimist või kontrollimist.
Lisaks saate haldurimoodulis luua lisameetodeid ja märkida, et need on ekspordimeetodid. Sel juhul on võimalik neile meetoditele juurde pääseda väljastpoolt.
Selle kõne sooritamiseks on vaja hankida andmetüüp Kataloogihaldur.
Haldurmooduli ja objektimooduli ekspordimeetodite erinevus seisneb selles, et objektimooduli meetodile juurdepääsuks peate esmalt hankima objekti enda (st hankima kuidagi lingi ja seejärel teisendama selle lingi objektiks) .
Pärast seda on objektimooduli muutujad ja meetodid saadaval. Halduri mooduli jaoks on kõne lihtsam, näiteks:
Kataloogid.Osapooled.Meetodinimi
Need on kaks erinevat üleskutset. Teisenda viitest objektiks (meetod GetObject) on süsteemi jaoks üsna tõsine tegevus, kuna objekti vastuvõtmisel loetakse absoluutselt kõik selle objekti andmed, mis võib olla üsna pikk.
Teine erinevus seisneb selles Objekti moodul kutsutakse konkreetse elemendi kontekstis. Sellest lähtuvalt võime eeldada, et see on antud elemendi puhul rakendatav (enamasti kasutatakse just seda loogikat).
Mis puudutab haldurimoodulit, siis see kirjeldab mõnda ühist toimingut rühma või kataloogi või mõne dokumendi kõigi elementide jaoks. Näiteks kui teil on vaja printida kataloogiüksus, saate kasutada objektimoodulit.
Kuid halduri moodulis on võimalik luua universaalsem mehhanism, mis prindib muuhulgas elementide rühma.
Lisaks on objektimoodulile ligipääs siiski pikem tegevus. Seetõttu on eelistatum lahendada see probleem halduri moodulis.
Sellega lõpetame meie tutvumise moodulitega süsteemi 1C:Enterprise konfiguratsioonis. Kui võtame kõik ülaltoodu lühidalt kokku, on järeldused järgmised:
- Tarkvaramoodul on konfiguratsiooni osa, mis võib sisaldada ainult teksti sisseehitatud 1C keeles
- Tarkvaramoodulid klassifitseeritakse vastavalt käesolevas artiklis käsitletud tüüpidele. Iga vaade määratakse selle paigutuse ja saadaoleva programmi konteksti järgi.
- Mooduli struktuur koosneb mitmest osast, mis on paigutatud kindlasse järjestusse. Sektsioonide koosseis määratakse mooduli tüübi järgi.
Pange tähele ka seda, et me jätsime teadlikult välja ühte tüüpi mooduli, nimelt käsumooduli. See pole midagi tähelepanuväärset ja kutsume teid selle funktsionaalsusega kurssi viima.
Seni oleme kogu oma programmikoodi käsitlenud rakenduslahendusest eraldi ja reeglina kirjutasime selle mõnes oma väikeses testkonfiguratsioonis. Kas olete teadlik, et "te ei saa lihtsalt minna" ja hakata muutma standardkonfiguratsiooni koodi? Ei? Järgmises artiklis selgitame seda kõike!
Üldised 1C moodulid- konfiguratsiooni metaandmete objekt 1C 8.3 ja 8.2 jaoks, mis salvestab programmikoodi, mida konfiguratsioonis sageli kutsutakse. Funktsiooni/protseduuri saab kutsuda kõikjalt konfiguratsioonis (kui see on eksporditav).
Kuidas kasutada jagatud moodulit
Hea tava on paigutada protseduur või funktsioon ühisesse moodulisse, kui seda kutsutakse rohkem kui ühes kohas. Esiteks, kui protseduuri korrigeeritakse, tuleb seda parandada ainult ühes kohas. Teiseks saavutab see koodis suurema korra.
Üldmooduli tüüpiline näide on mõnda registrisse kandmise töötlemine, tööpäevade vahe suuruse saamine, valuutakursside ümberarvutamine, koguse/hinna/summa ümberarvutamine tabeliosas ja muud funktsioonid.
Tavaliste moodulite omadused
Teiste moodulite jagatud moodulite üks peamisi omadusi on see, et te ei saa jagatud muutujaid deklareerida.
Hankige 267 videotundi 1C-s tasuta:
Vaatame lähemalt üldmooduli omaduste paletti:
- Globaalne- kui lipp on seatud, muutuvad selle mooduli funktsioonid ja protseduurid kättesaadavaks globaalses kontekstis. Need. neid saab kutsuda kõikjal konfiguratsioonis, kui pääsete juurde ilma ühise mooduli nimeta. Siiski lisatakse tingimus – protseduuride ja funktsioonide nimed selles ühises moodulis peavad olema globaalses kontekstis ainulaadsed.
- Server— selle ühise mooduli protseduure ja funktsioone saab käivitada serveris.
- Väline liitmine— selle ühise mooduli programmikoode saab käivitada, kui need on ühendatud välise allikaga (näiteks COM).
- Klient (hallatud rakendus)— selle ühise mooduli protseduure ja funktsioone saab kasutada hallatud rakenduse režiimis paksus kliendis.
- Klient (tavaline rakendus)— selle ühise mooduli programmikoode saab kasutada tavalises rakendusrežiimis paksus kliendis.
- Serveri kõne— lipp, mis võimaldab kliendil kasutada selle ühise mooduli protseduure ja funktsioone.
- - kui see on seatud väärtusele Tõene, keelatakse selles ühises moodulis juurdepääsuõiguste kontrollimine.
- Taaskasuta— määrab tagastatavate väärtuste seadistused, kui valik on sisse lülitatud, jätab süsteem pärast esimest täitmist nende sisendparameetrite väärtused meelde ja tagastab valmis väärtuse. Võib võtta järgmisi väärtusi: pole kasutatud- Lülita välja, kõne ajaks- teatud protseduuri ajaks, seansi ajaks— kuni kasutaja seansi (programmi) sulgemiseni.
Kui hakkate õppima 1C programmeerimist, soovitame meie tasuta kursust (ärge unustage
/
Kliendi-serveri suhtlus- ja turvaprobleemid
Tagastusväärtuse taaskasutamisega moodulite kasutamine
Kasutusala: hallatav rakendus, mobiilirakendus, tavarakendus.
1. Üldmoodulid tagastusväärtuste taaskasutamisega (edaspidi: vahemälu) on ette nähtud neis asuvate funktsioonide tulemuste vahemällu salvestamiseks - seansi või kõne ajal. Neid tuleks kasutada serveri andmetöötlusressursside säästmiseks ja kliendi-serveri suhtluse minimeerimiseks.
Vaadake ka: jaotist "Tagastusväärtuste taaskasutamine" platvormi 1C:Enterprise dokumentatsioonis,
Väärtuste kasutamine, mis mõjutavad kliendirakenduse käitumist
2. Samal ajal võib tavaliste moodulite liigne (põhjendamatu) kasutamine tagastusväärtuste taaskasutamisega põhjustada tarbetut mälutarbimist.
2.1. Ei ole vastuvõetav luua jagatud korduvkasutatavaid mooduleid, mis tagastavad andmeid, mida on kiirem arvutada kui vahemälust hankida. Näiteks stringi konstandid. Lisaks asjaolule, et stringikonstandi iga kord hankimine on palju kiirem kui selle taaskasutamine jagatud moodulist, hõivavad need andmed vahemälu.
Näiteks on vale paigutada korduvkasutatavasse moodulisse:
Andmed, mis on saadud andmebaasist, välistest andmeallikatest või keerukate (ressursimahukate) arvutustega, on mõttekas salvestada vahemällu. Lisaks ei tohiks mõnel juhul isegi andmebaasist saadud väärtusi vahemällu salvestada, kui nende vahemällu salvestamisest saadav kasu pole ilmne. Näiteks ei tohiks te vahemällu salvestada primitiivsete tüüpide konstante (metaandmete objekte), kuna need moodustavad sageli vaid väikese osa ressursimahuka toimingu kogu täitmisajast.
2.2. Peaksite vahemällu salvestama ainult neid andmeid, millele sageli juurde pääsete.
Eelkõige pidage meeles, et vahemälu ei salvesta andmeid igavesti. Vahemällu salvestatud väärtus eemaldatakse vahemälust 20 minutit pärast selle arvutamist või 6 minutit pärast viimast kasutamist (olenevalt sellest, kumb saabub varem*). Lisaks kustutatakse väärtus, kui serveri tööprotsessis pole piisavalt RAM-i, kui tööprotsess taaskäivitatakse ja kui klient lülitub teisele tööprotsessile. Seega, kui kellelgi ei olnud aega vahemälust olevaid andmeid kasutada, läks see ressurss raisku.
*Märkus: konkreetsed numbrid võivad olenevalt kasutatavast platvormi 1C:Enterprise versioonist erineda.
2.3. Ühiskasutatavatesse korduvkasutatavatesse moodulitesse paigutatud funktsioonide sisendparameetrite väärtuste vahemik ei tohiks olla lai.
Näiteks pakub konfiguratsioon funktsiooni, mis saab sisendiks vastaspoole. Kui andmebaasis on palju vastaspooli ja kasutaja stsenaarium on selline, et tõenäosus, et keegi võtab 5 minuti jooksul sama vastaspoolega ühendust, on väga väike, siis läheb ressurss raisku. Lisaks, kui see "raisk" korrutada samaaegsete kasutajate arvuga, muutub ressursside raiskamine märkimisväärseks.
3. Vahemälust saadud andmeid ei tohi muuta. Vastasel juhul võivad programmi töös esineda varjatud vead, aga ka mälu (vahemälu ressursside) raiskamine. Seetõttu on soovitatav kasutada tagastusväärtustena väärtusi, mille olekut ei saa muuta, näiteks: FixedArray, Fikseeritud struktuur.
Selle piirangu põhjustab asjaolu, et vahemälu ei tagasta iga kord objekti koopiat, vaid viidet samale objektile mälus. Näiteks kui massiivile lisatakse uus väärtus, mille korduvkasutatav funktsioon tagastab iga kord, kui seda dokumentide töötlemisel välja kutsutakse, siis selle tulemusena "paisub" vahemälu väga kiiresti. Lisaks kaovad järgmisel vahemälu lähtestamisel lisatud väärtused ja kood, mis neile tugines, ei tööta õigesti.
4. Kui korduvkasutatavas moodulis on mitu ekspordifunktsiooni, mida mitte ainult ei kutsuta väljapoole, vaid ka üksteist kutsuvad, siis tuleb meeles pidada, et sisekõnede tulemust ei salvestata vahemällu.
Näiteks kui moodulis Andmevahetus Korda Ekspordifunktsioone on kaks:
Funktsioon OfflineWorkSupported() Eksporditagastus . . . EndFunction Funktsioon ThisOfflineWorkSite() Ekspordi ReturnOfflineWorkSupported() Ja . . . ; EndFunction
mida kutsutakse järjestikku rakenduse koodist,
DataExchangeRestartOfflineOperationSupported(); ... = DataExchangeReuseThisAutonomousWorkplace();
siis funktsioon Võrguühenduseta toimimine toetatud arvutatakse kaks korda.
Artiklis antakse lühike ülevaade ja funktsioonid sellistest funktsioonidest nagu tavaliste moodulite tagastamisväärtuste taaskasutamine.
Probleemid 1C-ga töötamisel
Sageli peate programmiga 1C töötades hankima andmebaasi salvestatud väärtused, need pole aastaid muutunud. Näitena võiks tuua konstantide väärtuse. See väärtuste rühm võib tinglikult hõlmata ühe kataloogielemendi otsimist või vahetusplaani sõlme otsimist koodi abil, samuti vajadust hankida objekti üksikasjade väärtus.
Selliseid probleeme saab kiiresti ja lihtsalt lahendada järgmist tüüpi konstruktsioonide abil:
Kui DocumentDate > Constants.StartDateApplicationRegulation1137.Get() then
Kuid iga kord, kui see kood käivitatakse, pääseb andmebaasi juurde.
Paljud programmeerijad kasutavad andmebaasi mahalaadimiseks järgmist meetodit. Nad täidavad andmebaasile ainult ühe päringu ja salvestavad vahemällu andmed, mida neil võib vaja minna. Kuid see meetod ei laadi andmebaase soovitud tasemele. Selle põhjused võivad olla järgmised:
· mitte täiesti selge koodi täitmise tsükkel (näiteks dokumentide ülekandmisel rühmades);
· hetkel mittevajaliku range andmekogumi saamine on mõnikord võimatu või raskesti saavutatav;
· juba vahemällu salvestatud andmete kasutamine erinevates vormides/kõnedes.
Tagastusväärtuse taaskasutamise moodul
Tagastusväärtusi taaskasutavate mudelite kasutamine aitab ülalkirjeldatud probleeme lahendada. Mis see on? See on tavaline kliendi- või serverimoodul, milles funktsioon "Kõne kestuseks" või "Seansi kestuseks" tuleks määrata väärtusele Taaskasuta väärtusi. Kõik otse moodulis olevad toimingud ja funktsioonid on kirjeldatud nagu varem.
Selle meetodi vaieldamatu eelis on see, et vahemällu salvestatud väärtus tagastatakse ilma funktsiooni koodi tegelikult täitmata. See juhtub kõigi järgnevate kõnedega nende moodulite ekspordifunktsioonidele pärast esimest. Sama efekti võib näha ka tootlikkuse mõõtmisel.
Kui kood on käivitatud, salvestatakse tagastatud väärtused vahemällu läbi edastatud parameetrite väärtuste. Nii juhtub see otse koodi käivitamisel
Sõlm1 = MeieMoodul.GetExchangeNodeWithAccounting("0001");
Sõlm2 = MeieMoodul.GetExchangeNodeWithAccounting("0002");
Mõlemad kõned sooritavad vastava toimingu ja tagastavad erinevad viited. Kuid järgmistel kõnedel tagastatakse sõlmed koodiga 0001 või 0002 ilma kordustoimingut põhjustamata ja vastavalt andmebaasile juurdepääsuta.
Väärtused salvestatakse vahemällu eraldi iga seansi jaoks nii kliendis kui ka serveris (see sõltub sellest, millisest moodulist kõne tehti - kliendist või serverist). Kõik töötab laitmatult, kui juurdepääsuõiguste sätetes on mingeid iseärasusi või mis tahes muu sõltuvus vastuvõetud väärtusest.
Mitu AGA
Nagu iga reegli puhul, on ka sellel meetodil erandeid. Te ei tohiks funktsiooni parameetrites määrata keerulisi tüüpe, piisab lihtsatest tüüpidest, nagu kuupäev, number, määramata jne. Te ei tohiks proovida parameetritena määrata näiteks struktuuri, objekti või väärtuste tabelit. Esimesel korral saate tulemusi, kuid teisel korral ei tule sellest midagi sisulist.
Tagastusväärtus võib olla mis tahes tüüpi.
Lisaks ärge unustage pöörata tähelepanu vahemällu salvestatavate andmete suurusele, sest kuigi serveri mälu on tohutu, pole see piiramatu.
Funktsioon või viga alates 1C
Taaskasutatud väärtustel on huvitav omadus. Võime eeldada, et tegemist on funktsiooni või veaga, kuid igal juhul tasub sellele tähelepanu pöörata.
Kui sisestate järgmise koodi:
ValueStructure1 = MeieMoodul.GetStructureofAttributesValues(ObjectReference);
ValueStructure1.Name = "Uus nimi";
ValueStructure2 = MeieMoodul.GetStructureofAttributesValues(ObjectReference);
Funktsioonis ValueStructure2.Name kuvatakse täpselt Uus nimi. Seda saab kasutada andmebaasis tegelikult muudetud väärtuste värskendamiseks, kuid pole teada, kui kaua seda saab teha. Sest standardlahenduste loomisel seda teha ei saa.
Kui vahemällu salvestatud andmed on muutunud
Kui vahemällu salvestatud väärtusi on andmebaasis muudetud, on selle kasutamiseks ainult üks viis - meetod UpdateReusedValues. Sel juhul lähtestatakse kõigi funktsioonide sätted kõigis moodulites. Mõne parameetri väärtuste, funktsioonide või moodulite alusel värskendamise võimalus puudub.
Kuidas päringut tsüklis sooritatakse
Kui te ei soovi kasutada tagastamisväärtusi taaskasutavat funktsiooni, on siin mõned loovamad lähenemisviisid probleemi lahendamiseks.
· Universaalsed protseduurid, mis tagastavad suvaliste linkide üksikasjad.
· Looge protseduure, mis tagastavad konstantsed väärtused nende nimede järgi. Muide, sellised protseduurid on saadaval standardversioonides.
· Kõnede arvu vähendamiseks vajalikust pisut suurema helitugevuse tagastamine. Näiteks kui teil on vaja saada korraga mitme valuuta kursse, on soovitatav funktsioon välja kutsuda ainult kuupäeva järgi, ilma valuutasid valimata. Olles saanud kõik kursid, määrake, millist valuutat on praegu vaja ja millist mitte.
· Protseduuri loomine, mis täidab päringu, salvestades samal ajal saadud tulemuse vahemällu (sisendparameetrid - päringu tekst, mitu nime ja parameetri väärtust).
Tahaksin teile rääkida veel ühest meetodist. See meetod põhineb andmebaasikutset sisaldava funktsiooni kasutamisel, tagastamisväärtuse taaskasutamisel otse tsüklis, st teatud tüüpi päringus tsüklis. Mõnel juhul võib see disain jõudlust parandada. Täidetud peab olema järgmine tingimus: tsüklis esinevate sisendparameetrite erinevate väärtuste arv peab olema väike ja enamus kombinatsioone on selle seansi jooksul juba varem vähemalt korra saadud. Tuleb meeles pidada, et kõigi sisendparameetrite väärtuste kindlat kombinatsioonide komplekti eelnevalt hankida on äärmiselt keeruline ning katsed saada väärtusi kõigi võimalike kombinatsioonide jaoks võivad viia andmebaasist liiga suure hulga andmete lugemiseni.
Oleme andnud teile ainult näidisfunktsioone ja -meetodeid. Seetõttu hinnake enne nende kasutamist tingimusi, milles teie kood töötab.