1c je modul upravljane aplikacije u kojoj se izvršava. Uobičajeni moduli. Što koristiti

Pozdrav svima.
Danas ćemo razmotriti moduli platforme 1C Enterprise 8.2, ima ih više nego u verziji 8.1 i ponekad to nije tako lako shvatiti.
Primjer:

Ako pogledate pomoć za 1C, vidjet ćete sljedeću definiciju za modul:
Modul je program na ugrađenom jeziku sustava 1C: Enterprise.

A ako je jednostavnije onda: B moduli 1C sadrži izvršni kod, što je potrebno kako bi se nekako reagiralo na radnje sustava ili korisnika, kada vizualna sredstva nisu dovoljna za opis interakcije objekata u konfiguratoru. Također, u programskim modulima možete opisati vlastite metode.

Bilo koja linija koda je u modulu, to je razlika od 1C7.7, gdje se programski kod može nalaziti i u ćelijama tablica izgleda i u svojstvima elemenata obrasca.

Nabrojimo module koji se nalaze u 1C 8.2

Moduli platforme 1C Enterprise 8.2:

Upravljani aplikacijski modul
Redovni aplikacijski modul
Vanjski spojni modul
Modul sesije
Uobičajeni moduli
Objektni modul
Modul obrasca
Modul za upravljanje objektima
Modul upravitelja vrijednosti
Moduli skupa zapisa

Glavni dijelovi modula:
1. Odjeljak koji opisuje lokalne varijable ovog modula, možete odrediti direktivu kompilacije (ne postoji za sve module).
2. Odjeljak koji opisuje postupke i funkcije. Ako ne napišete direktivu kompilacije, tada je to prema zadanim postavkama & AtServer, redoslijed procedura i funkcija nije bitan.
3. Dio glavnog programa modula (sadrži neke operatore). Ovaj odjeljak se izvršava prilikom pristupa modulu (ne postoji za sve module).

Ne sadrže svi moduli odjeljke deklaracije varijabli i glavni programski odjeljak.
Na primjer: zajednički modul ili modul sesije.

Pravila kompilacije modula:
1. Neki moduli se kompiliraju u potpunosti ili na strani klijenta ili na strani poslužitelja. Sve metode u njima su ili na strani klijenta ili na strani poslužitelja. Primjer klijentskog modula je upravljani aplikacijski modul.
2. Neki moduli mogu kombinirati klijentske i poslužiteljske metode. U ovom slučaju, za svaku metodu morate navesti direktive kompilacije - & AtClient ili & AtServer. Primjer su moduli upravljanih obrazaca.

Klasifikacija modula:
1. Server sobe. Sastavljen samo na strani poslužitelja - objektni modul, modul upravitelja, modul skupa zapisa.
2. Na strani klijenta. Sastavljen samo na klijentu, kao što je modul upravljane aplikacije.
3. Kombinirano. Može se kompilirati i na poslužitelju i na klijentu - modul obrasca i zajednički moduli.

Gdje se sastavljaju moduli:
1. Tanki klijent (pruža mogućnost korištenja web preglednika).
2. Server.
3. Debeli klijent.

Kao što vidite, modula nema tako malo, gotovo svaki konfiguracijski objekt ima modul koji ima svoju svrhu.

Svrha svakog 1C 8.2 modula

Čuvari: Mislio si kupiti 1C Enterprise i ne znam od koga? Tvrtka LBS uključena je u prvih 20 1C: primatelja franšize. Bavi se automatizacijom računovodstva na temelju 1C proizvoda. Kupite 1C proizvode od LBS-a i dobijte visokokvalitetnu 1C podršku i uslugu.

p.s. Smijte se anegdoti iz Lukašenka))

Što su moduli i čemu su točno namijenjeni? Modul sadrži programski kod. Štoviše, vrijedno je napomenuti da, za razliku od platforme 7.7, gdje se kod može nalaziti i u svojstvima elemenata obrasca i u ćelijama tablica izgleda, u platformi 8.x svaki redak koda mora biti smješten u bilo kojem modulu. Obično se modul sastoji od tri odjeljka - ovo je odjeljak koji opisuje varijable, odjeljak koji opisuje procedure i funkcije, kao i dio glavnog programa. Ova struktura je tipična za gotovo sve module platforme, s nekim iznimkama. Neki moduli nemaju odjeljak deklaracije varijable i glavni programski odjeljak. Na primjer, modul sesije i bilo koji zajednički modul.

Kontekst izvršavanja modula, općenito, podijeljen je na klijenta i poslužitelja. Osim toga, neki moduli se mogu sastaviti i na strani klijenta i na strani poslužitelja. A neki su isključivo na strani poslužitelja ili na strani klijenta. Tako:

Aplikacijski modul

Modul je dizajniran tako da uhvati trenutke pokretanja aplikacije (učitavanja konfiguracije) i njenog završetka. A procedure provjere mogu se smjestiti u odgovarajuće događaje. Na primjer, na početku aplikacije ažurirajte sve referentne konfiguracijske podatke, na kraju rada pitajte vrijedi li je uopće ostaviti, možda radni dan još nije gotov. Osim toga, presreće događaje s vanjske opreme, na primjer, trgovinske ili fiskalne. Treba napomenuti da aplikacijski modul presreće opisane događaje samo u slučaju interaktivnog pokretanja. Oni. kada se kreira sam prozor programa. To se ne događa ako je aplikacija pokrenuta u načinu rada kom- veze.

Postoje dva različita aplikacijska modula u 8.2 platformi. Oni su modul zajedničke aplikacije i modul upravljane aplikacije. Pokreću se prilikom pokretanja raznih klijenata. Ovako se aktivira modul upravljane aplikacije kada se web klijent, tanki klijent i debeli klijent pokreću u načinu upravljanja aplikacijom. A obični modul aplikacije se pokreće kada se debeli klijent pokrene u normalnom načinu rada.

U aplikacijskom modulu mogu se nalaziti svi dijelovi - opisi varijabli, procedura i funkcija, kao i opisi glavnog programa. Aplikacijski modul se kompilira na strani klijenta, tako da nas to ozbiljno ograničava u dostupnosti mnogih tipova podataka. Možete proširiti kontekst aplikacijskog modula korištenjem metoda uobičajenih modula, za koje je postavljeno svojstvo "Poziv poslužitelja". Sve varijable i metode koje su označene kao izvoz bit će dostupne u bilo kojem konfiguracijskom modulu na strani klijenta. Međutim, koliko god bio primamljiv, ne bi ga trebao objavljivati ​​ovdje. veliki broj metode. Što je više koda u njemu, to je duže vrijeme kompilacije, a samim time i vrijeme pokretanja aplikacije, što je korisnicima vrlo neugodno.

Kao što je gore navedeno, aplikacijski modul obrađuje događaje pokretanja i završetka aplikacije. Za rukovanje svakim od ovih događaja u aplikacijskom modulu postoji par rukovatelja Prije ... i Kada ... Razlika između njih je takva da kada se kod izvrši u rukovatelju Prije ..., akcija nije još dovršen i možemo ga odbiti izvršiti. Za to je namijenjen parametar Failure. U rukovaocima Kada .. radnja se već dogodila i ne možemo odbiti pokretanje aplikacije ili izlazak iz nje.

Vanjski spojni modul

Svrha modula je ista kao i namjena modula aplikacije. Obrađuje početnu i završnu točku aplikacije. Modul vanjske veze se pokreće kada se aplikacija pokrene u načinu com-veze. Sam proces vanjskog pridruživanja je neinteraktivan proces. U ovom načinu rada se odvija programski rad s infobazom i prozor aplikacije se ne otvara, što nameće određena ograničenja u korištenju metoda namijenjenih interaktivnom radu. U ovom načinu rada ne možete koristiti pozive dijaloškim obrascima, porukama upozorenja itd. Jednostavno neće raditi.

Kao iu aplikacijskom modulu, ovdje su dostupni odjeljci koji opisuju varijable, metode i dio glavnog programa. Također možete deklarirati izvozne varijable i metode. Razlika je u tome što se u načinu com-veze sav rad s infobazom odvija na strani poslužitelja, pa se vanjski modul povezivanja kompilira isključivo na poslužitelju. Sukladno tome, izvozne varijable i metode uobičajenih klijentskih modula nisu dostupne u njemu.

Modul sesije

Ovo je visoko specijalizirani modul i namijenjen je isključivo za inicijalizaciju parametara sesije. Zašto ste za to trebali napraviti svoj vlastiti modul? To je zbog činjenice da proces inicijalizacije može zahtijevati izvršenje nekog koda, a osim toga, aplikacija se može pokrenuti pod različitim klijentima (što dovodi do izvršavanja različitih modula aplikacije ili vanjskog modula za povezivanje), te parametri sesije mora biti inicijaliziran u bilo kojem načinu pokretanja. Stoga je bio potreban dodatni modul koji se izvršava u bilo kojem načinu pokretanja aplikacije.

Postoji jedan događaj SessionParameterSetting u modulu sesije, koji se izvršava vrlo prvi, čak i prije događaja aplikacijskog modula BeforeSystemWorking. Odjeljak deklaracije varijable i glavni programski odjeljak nisu dostupni u njemu. Također ne možete deklarirati metode izvoza. Modul se kompilira na strani poslužitelja.

Nemojte biti u iskušenju da se ovaj modul izvršava svaki put kada se aplikacija pokrene i u njega postavite kod koji nije izravno povezan s inicijalizacijom parametara sesije. To je zbog činjenice da se rukovatelj SessionParameterSetting može više puta pozivati ​​tijekom rada sustava. Na primjer, to se događa kada pristupamo neinicijaliziranim parametrima. I iako je moguće uhvatiti trenutak prvog pokretanja ovog događaja (RequiredParameters je tipa Undefined), ipak treba napomenuti da je ovaj modul kompiliran u privilegiranom načinu, tj. ne kontrolira prava pristupa. I druga točka, još uvijek ne možemo biti sto posto sigurni da će sustav biti pokrenut. Odjednom dolazi do kvara u aplikacijskom modulu, a mi pokušavamo izvesti neke radnje s bazom podataka.

Uobičajeni moduli

Moduli su namijenjeni opisu nekih uobičajenih algoritama koji će biti pozvani iz drugih konfiguracijskih modula. Opći modul ne sadrži odjeljak koji opisuje varijable i dio glavnog programa. U njemu možete deklarirati metode izvoza, čiji će kontekst pristupačnosti biti određen oznakama kompilacije. Zbog činjenice da odjeljak deklaracije varijable nije dostupan, ne možete definirati globalne varijable u zajedničkim modulima. Da biste to učinili, trebate koristiti funkcije uobičajenih modula s povratnim predmemorijatom ili modul aplikacije. Treba imati na umu da čak i ako je svojstvo ponovne upotrebe zajedničkog modula postavljeno na "Za vrijeme trajanja sesije", tada u ovom slučaju životni vijek predmemoriranih vrijednosti ne prelazi 20 minuta od trenutka posljednjeg pristup njima.
Ponašanje zajedničkog modula ovisi o postavljenim parametrima (globalno ili ne, različite oznake kompilacije, je li dostupan poziv poslužitelja, itd.). U ovom članku nećemo razmatrati sve vrste postavki, kao ni značajke ponašanja i zamke koje nastaju prilikom nerazumnog postavljanja zastavica svojstva. Ovo je tema za poseban članak. Zaustavimo se samo na nekoliko točaka kojih se treba pridržavati prilikom postavljanja zastava:

  • Dobro je pravilo ne koristiti globalnu zastavu posvuda. To će skratiti vrijeme pokretanja aplikacije, kao i poboljšati čitljivost koda (naravno, ako opći modul ima smisleno ime).
  • Nije preporučljivo koristiti više od jedne zastavice kompilacije. Ne postoji toliko mnogo metoda koje je potrebno izvesti u različitim kontekstima, a ako su takve metode još uvijek potrebne, onda se za njih može izdvojiti zasebni zajednički modul.
  • Oznaka "Poslužitelj poziva" ima smisla samo ako je modul preveden "Na poslužitelju". Stoga bi sve ostale zastavice kompilacije trebale biti poništene kako bi se izbjegli različiti problemi.
  • Ako u metodama modula postoji masovna obrada podataka, čitanje i pisanje u bazu podataka, tada je za povećanje brzine rada bolje onemogućiti kontrolu pristupa postavljanjem zastavice "Privilegirano". Ovaj način rada je dostupan samo za dijeljene module kompajlirane na poslužitelju.

Modul obrasca

Dizajniran je za obradu radnji korisnika, t.j. razni događaji vezani uz unos podataka i obradu ispravnosti njihovog unosa. Redovni modul obrasca se u potpunosti sastavlja na klijentu. Modul upravljani oblik je jasno razgraničen kontekstom izvršavanja, tako da sve varijable i metode moraju imati direktivu kompilacije. Ako direktiva nije eksplicitno navedena, tada će se ova varijabla ili metoda prevesti na strani poslužitelja. U modulu obrasca nalaze se odjeljci koji opisuju varijable i metode, kao i dio glavnog programa.

Objektni modul

Ovaj modul je tipičan za mnoge konfiguracijske objekte i namijenjen je, u općem slučaju, za obradu događaja objekata. Na primjer, događaji snimanja i brisanja objekata, događaj knjiženja dokumenta itd.

Neki događaji modula objekta dupliciraju događaje modula obrasca. Na primjer, snimanje događaja. Međutim, treba imati na umu da će se događaji modula forme izvršavati isključivo na specifičnom obliku objekta. Općenito, može postojati nekoliko ovih oblika. A događaji modula objekta bit će pozvani u svakom slučaju, čak i u ovom trenutku programski rad s objektom. Stoga, ako trebate izvršiti neki kod u svim slučajevima, onda je za to bolje koristiti događaje objektnog modula.

Objektni modul se kompilira isključivo na poslužitelju. U njemu možete definirati izvozne varijable i metode koje će biti dostupne u drugim konfiguracijskim modulima. Uz pomoć ovih svojstava i metoda možemo značajno proširiti funkcionalnost objekta.

Modul za upravljanje objektima

Ovaj modul postoji za mnoge konfiguracijske objekte. Glavna svrha ovog modula je redefinirati standardni događaj odabira koji se javlja u trenutku unosa po liniji i proširiti funkcionalnost upravitelja. Modul se kompilira na strani poslužitelja. Moguće je definirati svojstva i metode izvoza. Pozivanje metoda izvoza upravitelja ne zahtijeva kreiranje samog objekta.

Svemu navedenom možete dodati sliku nekih od konfiguracijskih modula i metoda uzajamnih poziva metoda u načinu rada upravljane aplikacije. Strelica pokazuje smjer u kojem se možete pozivati ​​na pozivanje odgovarajuće metode. Kao što možete vidjeti iz dijagrama, kontekst poslužitelja je potpuno zatvoren. Ali iz konteksta klijenta moguće je pozvati metode poslužitelja.

Legenda na dijagramu: O.M. Klijent - zajednički modul klijenta; O. M. Server - zajednički modul poslužitelja; M.F. Klijent - Klijentske procedure modula obrasca; M.F. Server - Poslužiteljske procedure modula obrasca.

Ispis (Ctrl + P)

Objekti koji se nalaze u grani stabla konfiguracije Općih modula namijenjeni su da sadrže tekstove funkcija i procedura koje se mogu pozvati iz bilo kojeg drugog konfiguracijskog modula.
PAŽNJA! Zajednički modul može sadržavati samo definicije procedura i funkcija.
Uobičajeni postupci i funkcije modula za koje naslovi označavaju ključna riječ Među njima je i izvoz sastavni dijelovi globalnom kontekstu. Više o postupcima pisanja možete saznati u općem modulu u odjeljcima „Format izvornih tekstova softverski moduli"I" Operatori "ugrađenog jezika pomoći.
Da biste uredili zajednički modul, u paleti svojstava objekta tipa Common Modules prozora Konfiguracija, u svojstvu Modul kliknite vezu Otvori. Tekst općeg modula izdat će se za uređivanje u uređivaču teksta sustava 1C: Enterprise u načinu uređivanja teksta programskog modula.
Zajednički modul, koji je dio konfiguracije, pohranjuje se samo kao dio konfiguracije.
Svojstvo Global određuje jesu li izvezene metode zajedničkog modula dio globalnog konteksta.
Ako je svojstvo Global postavljeno na True, tada su izvezene metode zajedničkog modula dostupne kao metode globalnog konteksta.
Ako je svojstvo Global postavljeno na False, tada se stvara svojstvo u globalnom kontekstu s imenom koje odgovara imenu zajedničkog modula u metapodacima. Ovo svojstvo je samo za čitanje. Vrijednost ovog svojstva je CommonModule objekt. Izvezene metode ovog zajedničkog modula dostupne su putem ovog objekta. Dakle, pozivanje metoda neglobalnih zajedničkih modula izgleda kao XXXXX.YYYYY, gdje je XXXXX naziv svojstva koje odgovara kontekstu zajedničkog modula, a YYYYY je naziv izvezene metode zajedničkog modula.
Primjer:

WorkSales Equipment.ConnectBarcode Scanner ();

Različiti kontekst i zajednički moduli

Koristeći svojstva zajedničkih modula i instrukcije pretprocesora, možete organizirati izvođenje različitih metoda zajedničkih modula u željenom kontekstu.
Svako svojstvo zajedničkog modula odgovorno je za sastavljanje (i izvođenje) zajedničkog modula u određenom kontekstu.
Dostupna su sljedeća svojstva koja su odgovorna za kontekst u kojem su metode zajedničkog modula dostupne:
Klijent (redovna prijava)- metode zajedničkog modula bit će dostupne debelom klijentu u normalnom načinu rada;
● - metode zajedničkog modula bit će dostupne za tanki klijent, web klijent, a također i za debeli klijent u
način upravljanja aplikacijom;
● Server - metode zajedničkog modula bit će dostupne na poslužitelju;
Vanjska veza- metode zajedničkog modula bit će dostupne u vanjska veza.
Ako je nekoliko svojstava postavljeno u isto vrijeme, to znači da će metode zajedničkog modula biti dostupne u nekoliko konteksta.
Ako zajednički modul ima svojstvo Server i neka druga svojstva, to znači da će zajednički modul biti dostupan istovremeno na poslužitelju i u odabranom klijentu. Treba razumjeti da će zapravo biti nekoliko verzija prevedenog koda (prema broju odabranih klijenata i za sam poslužitelj).
Štoviše, ako se metoda koja se nalazi u takvom zajedničkom modulu pozove sa strane klijenta, tada će se koristiti klijentska kopija zajedničkog modula, a ako s poslužitelja - kopija poslužitelja. U ovom slučaju, pomoću direktiva predprocesora (pogledajte detalje ovdje), možete "zaštititi" poslužitelj od koda koji se na njemu ne može izvršiti.
Pogledajmo primjer. U zajedničkom modulu (koji se može izvršiti na tanak klijent i na poslužitelju) postoji metoda koja ima nešto drugačije ponašanje na strani tankog klijenta i strani poslužitelja. Pogledajmo kako to možete učiniti:



# Ako je tanak klijent onda
// Prikaži upozorenje
Prikaži upozorenje korisnika(“O klijentu”);
#Završi ako
Završetak postupka
Zatim, na strani poslužitelja, kod izgleda ovako:
Postupak CommonModule () metoda Izvoz
// Različiti važni kodovi idu ovdje
Završetak postupka
Na strani tankog klijenta, kod će izgledati ovako:
ProcedureCommonModuleMethod () Izvoz
// Različiti važni kodovi idu ovdje
// Prikaži upozorenje
ShowUserNotification (“Na klijentu”);
Završetak postupka

Postoji nekoliko načina za prijenos kontrole s klijenta na poslužitelj:
● pozvati metodu zajedničkog modula poslužitelja;
● u obliku ili naredbenom modulu, pozovite metodu kojoj prethode direktive kompilacije & AtServer, & AtServerWithoutContext

Istodobno, nemoguće je iz poslužiteljskih procedura pozvati metode zajedničkih modula klijenta (za koje nije postavljeno svojstvo Server) i klijentske metode modula obrasca ili naredbenog modula. Kontrola će se vratiti klijentu nakon dovršetka najudaljenijeg poziva metode poslužitelja.
Iznimka su metode modula forme i naredbenog modula, kojima prethode direktive kompilacije. & OnClientOnServer, & OnClientOnServerBithout Context
Također treba spomenuti sljedeće točke:
● Ako je zajednički modul dostupan više od jednog klijenta, tada biste trebali uzeti u obzir maksimalna ograničenja koja klijenti mogu nametnuti prilikom pisanja koda ili koristiti upute za predprocesor za "izolaciju" koda specifičnog za klijenta.
● Instrukcije pretprocesora također imaju smisla kada jedan zajednički modul ima nekoliko konteksta izvršavanja, na primjer, vanjsku vezu i tanki klijent, ili (što je mnogo češće) klijenta i poslužitelja. U ovom slučaju, upute predprocesora će uokviriti interaktivni kod koji se ne može koristiti na poslužitelju, ali je moguć na klijentu (vidi gornji primjer).
Za više informacija o uputama predprocesora i direktivama kompilacije, pogledajte odjeljak Izvršne procedure i funkcije u pomoći za ugrađeni jezik.
Svojstvo Call servera koristi se za kontrolu mogućnosti pozivanja izvezenih metoda zajedničkog modula poslužitelja iz klijentskog koda.
Ako je svojstvo postavljeno, tada su izvezene metode zajedničkog modula poslužitelja dostupne za poziv od klijenta. Ako svojstvo nije postavljeno, tada se takve izvezene metode mogu pozvati samo iz metoda na strani poslužitelja (i metode zajedničkih modula na strani poslužitelja i metode na strani poslužitelja modula obrasca i naredbenih modula).
savjet . Preporuča se postaviti svojstvo poslužitelja poziva na False u slučajevima kada zajednički modul poslužitelja sadrži metode koje ne želite pozvati od klijenta (na primjer, iz sigurnosnih razloga).
Bilješka... Ako su svojstva postavljena u isto vrijeme Klijent (redovna prijava), Klijent (upravljana aplikacija), Vanjska veza, tada se svojstvo Poziv poslužitelja automatski briše. Ako je postavljeno svojstvo poslužitelja poziva, tada se svojstva automatski resetiraju. Klijent (redovna prijava), Klijent (upravljana aplikacija) i Vanjska veza ako su ta svojstva postavljena u isto vrijeme.
Vlasništvo Privilegiran namijenjen je za onemogućavanje kontrole pristupa prilikom izvršavanja metoda zajedničkog modula.
BILJEŠKA. Ako je imovina Privilegiran postavljeno, tada se svojstvo poslužitelja automatski postavlja na zajednički modul, a ostala svojstva se resetiraju ( Klijent (redovna prijava), Klijent (upravljana aplikacija) i u vanjska veza). Privilegirani zajednički modul može se izvoditi samo na poslužitelju.

Ponovno korištenje povratnih vrijednosti

Ako zajednički modul nije globalan, tada postaje dostupno svojstvo ponovne upotrebe povratne vrijednosti. Ovo svojstvo može imati sljedeće vrijednosti:
● Ne koristi — ponovna upotreba povratne vrijednosti ne koristi se za funkcije u ovom zajedničkom modulu.
● U vrijeme poziva i u vrijeme sesije — Metoda za određivanje ponovne upotrebe podataka koristi se za zajednički modul. Bit ove metode je da tijekom izvršavanja koda sustav pamti parametre i rezultat funkcije nakon prvog poziva funkcije. Kada se funkcija ponovno pozove s istim parametrima, pohranjena vrijednost se vraća (iz prvog poziva) bez izvršavanja same funkcije. Ako funkcija promijeni vrijednosti parametara tijekom svog izvođenja, ponovljeni poziv funkcije to neće učiniti.
Mogu se razlikovati sljedeće značajke spremanja rezultata poziva:
● ako se funkcija izvršava na poslužitelju i poziva se iz koda poslužitelja, tada se vrijednosti parametara i rezultat poziva pohranjuju za trenutnu sesiju na strani poslužitelja;
● ako se funkcija izvršava na debelom ili tankom klijentu, tada se vrijednosti parametara i rezultati poziva pohranjuju na strani klijenta;
● ako se funkcija izvršava na strani poslužitelja i poziva iz klijentskog koda, tada se vrijednosti parametara poziva pamte i na strani klijenta i na strani poslužitelja (za trenutnu sesiju).
Pohranjene vrijednosti se brišu:
● ako je svojstvo postavljeno na U vrijeme poziva:
● na strani poslužitelja - kada se kontrola vrati s poslužitelja;
● na strani klijenta - kada se završi procedura ili funkcija ugrađenog jezika visoke razine (koju sustav poziva iz sučelja, a ne iz druge procedure ili funkcije ugrađenog jezika);
● ako je svojstvo zajedničkog modula postavljeno na Za vrijeme trajanja sesije:
● na strani poslužitelja - na kraju sesije;
● na strani klijenta - kada je klijentska aplikacija zatvorena.
Pohranjene vrijednosti bit će izbrisane:
● na poslužitelju, u masnom klijentu, u vanjskoj vezi, u tankom klijentu i u web klijentu pri normalnoj brzini veze - 20 minuta nakon izračunavanja pohranjene vrijednosti ili 6 minuta nakon posljednje upotrebe.
● u tankom klijentu i web klijentu s malom brzinom veze - 20 minuta nakon izračuna pohranjene vrijednosti;
● u slučaju nestašice RAM memorija u tijeku rada poslužitelja;
● prilikom ponovnog pokretanja tijeka rada;
● kada se klijent prebaci na drugi tijek rada.
Nakon brisanja vrijednosti vrši se poziv eksportirane funkcije kao u prvom pozivu.
Ovo svojstvo zajedničkih modula ne utječe na izvođenje procedura – procedure se uvijek izvršavaju.

Ako je zajednički modul postavljen na ponovnu upotrebu povratnih vrijednosti, tada se nameću brojna ograničenja na vrste parametara izvezenih funkcija. Vrste parametara mogu biti samo:
● Primitivni tipovi ( Nedefinirano, NULL, Boolean, broj, niz, datum).
● Sve reference na objekte baze podataka.
● Strukture s vrijednostima svojstava gore navedenih tipova. U ovom slučaju, identitet parametara kontrolira "sadržaj" struktura.
Ako izvezena funkcija vrati bilo koji objekt, tada se zapravo vraća referenca na objekt pohranjen u predmemoriji. Ako nakon primanja ove reference dođe do promjene stanja objekta, onda će naknadni poziv iste funkcije rezultirati vraćanjem reference na već promijenjeni objekt bez stvarnog izvršavanja funkcije. Ovo će se ponašanje nastaviti sve dok se pohranjena vrijednost ne izbriše (iz bilo kojeg razloga). Drugim riječima - promjena stanja objekta dobivenog kao rezultat pozivanja funkcije iz zajedničkog modula s ponovno koristiti povratne vrijednosti nisu osnova za stvarni poziv funkcije. Također treba imati na umu da je predmemorija vraćenih objekata ravnodušna
stanje privilegiranog načina rada u vrijeme poziva funkcije s ponovnom upotrebom povratnih vrijednosti. Ova značajka može dovesti do sljedećeg ponašanja:
● Stvarno izvršenje poziva funkcije s ponovnom upotrebom povratnih vrijednosti (prvi poziv) obavljeno je s uključenim privilegiranim načinom rada.
● Prilikom izvršavanja funkcije primljen je objekt koji se ne može primiti s onemogućenim privilegiranim načinom rada.
● Naknadni pozivi funkcija su napravljeni bez postavljanja privilegiranog načina rada.
● Međutim, dok se predmemorija vraćenih objekata ne izbriše ili se stvarni poziv ne ponovi, funkcija će vratiti formalno nedostupan objekt.
● Vrijedi i obrnuto, kada je prvi poziv upućen bez postavljanja privilegiranog načina rada, a u privilegiranom načinu rada se ne vraća objekt koji je mogao biti dobiven u privilegiranom načinu.

Ako zajednički modul ima svojstvo Ponovno korištenje povratnih vrijednosti je postavljen na Za vrijeme trajanja sesije, zatim vrijednosti tipa Privremeni upravitelj tablica.
Ako se funkcija zajedničkog modula, s ponovnom upotrebom skupa, poziva iz istog zajedničkog modula (na primjer, s imenom CommonModule), zapamtite sljedeću značajku: ako je funkcija pozvana imenom MyFunction (), tada funkcija će se izvršiti svaki put kada se funkcija pozove... Da bi se koristile pohranjene vrijednosti, funkcija treba biti pozvana punim imenom:
CommonModule.MyFunction ().
Metoda globalnog konteksta uklanja sve vrijednosti koje se mogu ponovno koristiti, i na strani poslužitelja i na strani klijenta, bez obzira na to gdje je metoda pozvana. Nakon izvršenja metode RefreshReusedValues ​​() prvi poziv funkcije bit će izvršen u potpunosti.

Gotovo svi konfiguracijski objekti imaju modul upravitelja, a za većinu objekata objektni modul. Programeri početnici često ne razumiju razliku u svrsi ova dva modula.

Razumijevanje razlike u njihovoj namjeni omogućuje vam da napišete strukturiraniji programski kod, au nekim slučajevima uštedite resurse 1C poslužitelja i povećate performanse primijenjenog rješenja.

U članku ćemo razmotriti temeljne razlike između ovih modula kako s teorijske strane tako i na konkretnom praktičnom primjeru.

Teorija

Okrenimo se osnovama objektno orijentiranog programiranja (OOP) i povucimo analogiju s našim primjerom. U OOP-u se metode za objekte mogu podijeliti na statičan i jednostavan. Jednostavne metode može se pozvati samo za određeni objekt kojemu imamo pristup u trenutnom kontekstu programskog koda. Statičke metode nemaju izravan pristup podacima objekta. Da biste upućivali na objekt, prvo morate stvoriti njegovu instancu. Isto vrijedi i za platformu 1C: Enterprise 8.x.

U objektnom modulu platforma pohranjuje procedure i funkcije koje se mogu pozvati samo pri radu s određenim objektom, na primjer, sa stavkom kataloške stavke "Nomenklatura". Modul upravitelja sadrži procedure i funkcije koje se mogu primijeniti na sve objekte ovog tipa ali s početnim stvaranjem instance ovog objekta. To jest, da biste promijenili stavku iz ovog modula, u početku da se referira na stavku, izvršite metodu "GetObject ()", a zatim radite s njom.

Idemo s teorije na praksu.

Praksa

Idemo dalje na praktični primjer... Pretpostavimo da trebamo riješiti problem ispisa popisa proizvoda.Korisnik ispisuje proizvod ili izravno iz kataloške stavke ili iz obrasca popisa proizvoda. Razmotrite dva načina za postizanje ovog zadatka.

Postupak ispisa u objektnom modulu

U modulu objekta imenika dodajte sljedeću funkciju:

// Prosljeđivanje reference na referentni element u funkciju Funkcija Ispis odabranih stavki (veza) Izvoz TabDoc = Novi tablični dokument; Izgled = Reference. Roba. Get Layout ("Izgled"); Zahtjev = Novi zahtjev; Upit. Tekst = "ODABIR | Proizvodi ... Zastupstvo AS proizvoda,| Roba ... Izbriši oznaku,| Roba ... šifra dobavljača |IZ| Imenik ... Proizvodi AS Proizvodi| GDJE | Roba ... Povezivanje (& ArrayProducts)"; Zahtjev. SetParameter (" ArrayProducts ", Veza); // Postavi odabir putem veze

Programski kod u potpunosti generira dizajner tiska. Jedina stvar vrijedna pažnje je odabir na temelju kataloške stavke "Proizvodi" u zahtjevu. Referenca se prosljeđuje kao parametar funkciji. Kao rezultat poziva funkcije "PrintSelected Items", the dokument proračunske tablice s ispunjenim artiklom robe.

Programski kod za pozivanje metode objekta "PrintSelected Items" naredbom obrasca "Ispis" prikazan je na sljedećem popisu:

& Postupak ispisa na klijentu (naredba) // Pozivanje poslužiteljske procedure za dobivanje generiranog dokumenta proračunske tablice TabDoc = PrintServer (); // Prikaži generirani dokument proračunske tablice TabDoc. Prikaži() ; EndProcedure & AtServer funkcija PrintServer () // Pretvorite objekt obrasca u objekt kataloga "Proizvodi" da biste pozvali funkciju iz modula objekta ObjectGood = FormInValue ("Objekt"); // Pozivamo proceduru modula objekta, prosljeđujući tamo vezu na trenutnu stavku rječnika. Proizlaziti // povratak na stranu klijenta Vrati predmetnu stavku. Ispis odabranih stavki (Object. Link); EndFunction

Tako smo ispisali trenutni element imenika, radeći s njegovim objektom. Ali zadatku je rečeno da ispiše popis proizvoda koje sam korisnik mora odabrati. Kada radite s objektom, dajte korisniku takvu priliku jednostavan način ne čini se mogućim. Najispravnije bi bilo ispisati s popisa artikala u katalogu "Proizvodi".

Postupak ispisa u modulu upravitelja

Dodajte sljedeću proceduru izvoza u modul upravitelja direktorija:

// Prosljeđivanje niza poveznica na proizvode Funkcija Ispis odabranih stavki (niz stavki) Izvoz TabDocs = Novi tablični dokument; Izgled = Reference. Roba. Get Layout ("Izgled"); Zahtjev = Novi zahtjev; Upit. Tekst = "ODABIR | Proizvodi ... Zastupstvo AS proizvoda,| Roba ... Izbriši oznaku,| Roba ... šifra dobavljača |IZ| Imenik ... Proizvodi AS Proizvodi| GDJE | Roba ... Povezivanje (& ArrayProducts)"; Zahtjev. SetParameter (" Niz robe ", Niz robe); // Postavi odabir nizom Rezultat = Zahtjev. Trčanje (); Zaglavlje područja = Izgled. GetScope ("Naslov"); Podnožje područja = Izgled. GetArea ("Podrum"); AreaTablesHead = Izgled. GetArea ("TableHead"); AreaFooterTables = Izgled. GetArea ("Podnožje tablice"); Područje detaljnih zapisa = Izgled. GetArea ("Detalji"); TabDoc. Čisto (); TabDoc. Zaslon (ScopeHeader); TabDoc. Prikaz (ScopeTableHat); TabDoc. StartAutoGroupLines (); SampleDetailed Records = Rezultat. Odaberi() ; Dok SampleDetailed Records. Sljedeća () Loop DetailRecords Area. Mogućnosti. Ispunite (SelectionDetailed Records); TabDoc. Izlaz (DetailRecordsArea, SelectionDetailRecords. Razina ()); Kraj ciklusa; TabDoc. EndAutoGroupLines (); TabDoc. Izlaz (ScopeTableFootball); TabDoc. Zaslon (AreaFooter); Povrat TabDoc-a; EndFunction

Glavna razlika od funkcije u objektnom modulu je parametar funkcije. Sada se kao parametar prosljeđuje niz s vezama na proizvode za ispis.

Programski kod naredbenog modula obrasca "Ispis" izgleda ovako:

& Na klijentskoj proceduri Ispis (naredba) TabDoc = PrintServer (); TabDoc. Prikaži() ; EndProcedure & AtServer funkcija PrintServer () // Prosljeđivanje niza veza odabranih proizvoda u popisu imenika // u funkciju upravljačkog modula "PrintSelected Items" Vrati imenike. Roba. PrintSelectedProducts (stavke. popis. odabrane linije); EndFunction

U ovom slučaju, rezultat izvršavanja naredbe u načinu 1C: Enterprise bit će sljedeći:

U slučaju korištenja metode iz modula upravitelja, možemo pristupiti podacima direktorija "Proizvodi" bez dobivanja objekta za svaku poveznicu. Budući da dobivanje objekta znači dobivanje svih podataka iz baze podataka za referentni element i stavljanje primljenih podataka u RAM, implementacija zadatka na drugi način će imati pozitivan učinak na performanse. Doista, u ovom slučaju koristit ćemo minimum resursa (RAM) poslužiteljskog stroja.

Što biste trebali koristiti?

Kao i uvijek, sve ovisi o konkretnom zadatku. Ako trebate ispisati dokument, onda je bolja opcija korištenje modula upravitelja. Ako trebate ispuniti objekt, npr. vanjska obrada punjenje tabelarni dijelovi, onda su u ovom slučaju procedure i funkcije bolje smještene u objektnom modulu, jer njihov rad uključuje upravo objekt.

V tipična konfiguracija"Trade Management" verzija 11 je naširoko korišten modul upravitelja za ispis dokumenata. Ako pogledate konfiguraciju "Manufacturing Enterprise Management", tada se modul upravitelja praktički ne koristi, budući da je konfiguracija napisana u starijim verzijama platforme, gdje ovaj mehanizam nije bio u potpunosti podržan.

Konfiguracija s primjerima iz članka.

Moduli platforme 1C: Enterprise 8.3, 8.2

Uobičajeni moduli

Funkcije koje su deklarirane s "export" zastavicom u takvom modulu mogu se pozvati s bilo kojeg mjesta u konfiguraciji. Poziv se vrši putem CommonModuleName.FunctionName ().

U takvim modulima nema varijabilnog odjeljka.

Izvođenje uobičajenih modula ovisi o parametrima postavljenim u njihovim svojstvima:

Zastava "Global"

Ako je ova zastavica postavljena, onda kontekst takvog modula postaje globalan. To jest, kada pristupate njegovim funkcijama izvoza, ne morate navesti naziv modula. Ali nazivi njegovih eksportnih funkcija moraju biti jedinstveni unutar globalnog konfiguracijskog konteksta.

Oznaka poslužitelja

Funkcije takvog modula mogu se izvršavati na poslužitelju.

Zastava klijenta (redovna aplikacija).

Funkcije takvog modula mogu se izvršavati na klijentu u normalnom načinu rada.

Oznaka klijenta (upravljana aplikacija).

Funkcije takvog modula mogu se izvršavati na klijentu u načinu upravljanja aplikacijom.

Oznaka poziva poslužitelja

Zastava je dostupna za module sa postavljenom zastavicom "Poslužitelj". Omogućuje pozive klijentu na funkcije izvoza ovog modula (izvršavanje na poslužitelju).

Vanjska zastava za spajanje

Izvozne funkcije takvog modula mogu se pozvati kada je spojen s vanjskog izvora.

Označite "Privilegirano"

U modulu s takvom zastavicom provjera prava bit će onemogućena. Pogodno za radnje produktivnosti ili administracije.

Opcija ponovne upotrebe

Ako uključite ovaj parametar, tada će se povratne vrijednosti eksportnih funkcija spremati u predmemoriju odmah nakon prvog poziva. Keširanje je moguće za vrijeme trajanja poziva (vrijeme izvršenja određene procedure) ili za vrijeme trajanja korisničke sesije.

Aplikacijski modul

Dizajniran za rukovanje događajima pokretanja i gašenja aplikacije. Postoje dvije vrste: za redovite i upravljane aplikacije.

Nemojte ga preopteretiti jer to utječe na vrijeme pokretanja aplikacije.

Modul sesije

Poseban modul koji se koristi za inicijalizaciju parametara sesije. Potreban je kako se kod u različitim aplikacijskim modulima ne bi duplicirao.

Treba ga koristiti s oprezom, jer se modul može izvršiti nekoliko puta, a također se može izvesti bez daljnjeg pokretanja baze. Izvršava se prije modula aplikacije.

Srdačan pozdrav, (učiteljica i programer).