Modul za rad sa klijentima u 1s. Opšti moduli. External Join flag

Članak nastavlja seriju "Prvi koraci u razvoju na 1C", detaljno razmatra sljedeća pitanja:

  • Šta je softverski modul i od kojih dijelova se sastoji?
  • Čemu služi aplikativni modul? Zašto ih ima dvoje? Kada se koji lansira? Koje su suptilnosti rada?
  • Koji su događaji povezani s početkom rada sistema, kako i gdje ih obraditi?
  • Čemu služi vanjski modul za povezivanje? Kada i kako ga koristiti?
  • Kada se koristi modul sesije?
  • Šta su uobičajeni moduli? Koja su njegova svojstva i pravila rada? Zašto koristiti svojstvo “Ponovna upotreba povratnih vrijednosti”?
  • Kada se koristi modul obrasca i koji događaji se mogu obraditi u njemu?
  • Čemu služi objektni modul? Od kojih se sekcija sastoji? Kako pogledati dostupne događaje modula?
  • Koje su suptilnosti rada sa modulima upravitelja vrijednosti (za konstante) i modulima skupova zapisa (za registre)?
  • Koje su razlike između objektnog modula i modula menadžera? Kada biste trebali koristiti potonje?

Primjenjivost

Članak govori o platformi 1C:Enterprise 8.3.4.496. Materijal je također relevantan za trenutna izdanja platforme.

Moduli u 1C:Enterprise 8.3

Moduli su oni objekti koji sadrže programski kod.

Na Platformi postoji prilično veliki broj tipova modula, od kojih svaki ima svoju svrhu i karakteristike.

Bilo koja linija koda mora biti u nekom modulu. Postoje moduli opće namjene i objektni moduli. Neki moduli se mogu kompajlirati i na klijentu i na serveru, a neki samo na serveru.

Modul se može sastojati od nekoliko sekcija. Odjeljak opisa varijable opisuje lokalne varijable ovog modula, koje se kasnije mogu koristiti u bilo kojoj proceduri.

Unutar svake procedure, možete pristupiti varijabli modula. Osim toga, unutar same procedure može postojati još jedna deklaracija varijable s istim imenom. Ovo će biti lokalna varijabla ove procedure.

Unatoč istom imenu, ovo su dvije različite varijable: jedna se koristi unutar određene procedure, a druga se koristi izvan nje.

U nekim modulima, varijable mogu imati lokaciju kompilacije (dostupnost) na serveru ili klijentu. Na primjer:

Nakon odjeljka koji opisuje varijable slijedi dio procedura i funkcija, gdje su naznačene lokalne metode ovog modula. Neki moduli moraju specificirati gdje će procedura ili funkcija biti kompajlirana.

U principu, direktiva o kompilaciji može biti izostavljena. U ovom slučaju, zadana direktiva kompilacije je Server. Međutim, radi pogodnosti analize programskog koda, preporučuje se eksplicitno naznačiti gdje će se dati postupak kompajlirati. Redosled kojim su procedure opisane nije bitan.

Na kraju modula, nakon opisa svih procedura i funkcija, nalazi se dio glavnog programa koji može sadržavati neke operatore i inicijalizirati lokalne varijable modula forme. Ova sekcija se izvršava prilikom pristupa modulu.

Tako, na primjer, prilikom otvaranja obrasca elementa, prvo se izvršava glavni programski dio modula forme.

Treba napomenuti da sekcija deklaracije varijable i glavna programska sekcija ne postoje za sve module (tj. ovi sekcije nisu važeći u nekim modulima). Odjeljak za opisivanje procedura i funkcija može postojati u apsolutno svakom modulu.

Aplikacioni modul

Ovaj modul je dizajniran za rukovanje događajima pokretanja i završetka aplikacije. Na primjer, kada pokrenete aplikaciju, možete preuzeti kurseve valuta sa Interneta. Prilikom ukidanja aplikacije, možete potvrditi s korisnikom da on ili ona namjeravaju zatvoriti.

Također u aplikacijskom modulu postoje posebni rukovaoci koji vam omogućavaju presretanje vanjskih događaja iz opreme.

To mogu biti događaji iz čitača magnetnih kartica ili fiskalnog registra. I ovi događaji se takođe mogu na neki način obraditi.

Imajte na umu da modul aplikacije prati interaktivno pokretanje sistema.

Aplikacijski modul neće raditi ako se program 1C pokrene, na primjer, u načinu com veze. U ovom slučaju, prozor programa se ne kreira.

Treba napomenuti da u Platformi 8.3 postoje dva različita modula aplikacije: modul Upravljane aplikacije i modul Regularne aplikacije. Događaji modula upravljane aplikacije se obrađuju kada se pokrenu Managed Application Thin and Thick Client i Web Client.

Modul Redovna primjena radi kada se pokreće Thick Client u načinu rada Redovna primjena, koji sadrži uobičajeni komandni interfejs u obliku Glavni meni.

Ako je aplikacija pokrenuta Upravljano, i u načinu rada Redovna primjena, tada je potrebno opisati procedure rukovaoca kao za modul Upravljana aplikacija, i za modul Redovna primjena.

Modul Upravljana aplikacija može se odabrati iz kontekstnog menija korijenskog konfiguracijskog čvora.

Ovaj modul se također može otvoriti iz palete svojstava osnovnog konfiguracijskog elementa.

Za otvaranje modula Redovna primjena, trebali biste pogledati konfiguracijske postavke (komanda Opcije na meniju Servis).

Forma će se otvoriti Opcije. Na obeleživaču Uobičajeni su način uređivanja konfiguracije mora biti specificiran Upravljana aplikacija I Redovna primjena.

U ovom slučaju modul Redovna primjena također će biti moguće otvoriti iz svojstava korijenskog čvora.

Lista događaja za koje se može obraditi Upravljano I Redovna primjena je isti.

Ovaj modul može sadržavati odjeljak deklaracije varijable, odjeljak opisa proizvoljnih procedura i funkcija i glavni programski dio. Ali pored proizvoljnih procedura i funkcija, u modulu se mogu locirati posebni obrađivači događaja.

Lista dostupnih rukovalaca može se pogledati pozivanjem liste procedura i funkcija trenutnog modula kada je modul otvoren.

Prozor Procedure and Functions koji se otvara prikazuje sve procedure i funkcije ovog modula, kao i događaje za koje rukovatelji još nisu kreirani.

Dva su događaja povezana sa startom sistema (“prije” i “u”). Dva događaja povezana sa gašenjem sistema ("prije" i "u"). I također obrada vanjskih događaja (na primjer, događaji komercijalne opreme).

Kada se izvrši obrađivač događaja prije, smatra se da se radnja još nije dogodila. Kada se izvrši rukovalac događajem „at“, radnja je već završena.

Događaj Prije pokretanja sistema javlja se kada se pokrene Enterprise 8.3, ali se sama aplikacija još nije pojavila na ekranu. Ovaj događaj ima sljedeći parametar: Odbijanje.

Ako ovaj parametar ima vrijednost Istinito, tada se aplikacija neće pokrenuti. Događaj Prilikom pokretanja sistema pretpostavlja da je radnja već završena, prozor je već kreiran i u ovom slučaju možemo, na primjer, prikazati neki poseban obrazac. Više nije moguće odbiti lansiranje.

Slično tome, prije isključivanja sistema, aplikacija je još uvijek otvorena i možete je odbiti zatvoriti. Kada se sistem isključi, prozor aplikacije je već zatvoren. Moguće je samo izvršiti dodatne radnje, na primjer, brisanje nekih datoteka ili slanje e-pošte.

U modulu Upravljana aplikacija Smjernice za kompajliranje procedura i funkcija nisu specificirane, jer je modul u potpunosti kompajliran na strani klijenta. To znači da u procedurama i funkcijama modula nećemo moći direktno pristupiti, na primjer, referentnim knjigama.

Ako iz modula Upravljana aplikacija trebate izvršiti poziv servera, tada ćete za to morati kreirati specijal sa zastavom .

U modulu Redovna primjena Nema takvih ograničenja, jer će ovaj modul biti preveden prilikom učitavanja debelog klijenta. Gotovo sve vrste podataka dostupne su u debelom klijentu.

Procedure, funkcije i varijable aplikacijskog modula mogu se opisati kao izvozi.

Pošto je modul u potpunosti kompajliran na klijentu, to znači da u klijentskim procedurama možemo pristupiti ovoj metodi i ovom svojstvu.

Na primjer, možete pozvati proceduru ili funkciju modula aplikacije iz modula forme objekta. Međutim, preporučuje se korištenje zajedničkih modula za opisivanje općih algoritama. Glavna svrha aplikativnog modula je obrada početne i krajnje točke.

Po analogiji sa modulom aplikacije, ovaj modul je dizajniran da obradi događaj otvaranja programa i događaj gašenja.

Za razliku od modula aplikacije, koji se pokreće u trenutku interaktivnog pokretanja aplikacije, modul eksterne veze radi u načinu COM veze, tj. kada je objekt 1C:Enterprise 8 kreiran i povezan s određenom bazom podataka.

Ovaj modul ima događaje: Prilikom pokretanja sistema I Nakon isključivanja sistema.

Modul eksterne veze može se otvoriti pomoću kontekstnog izbornika na razini osnovnog konfiguracijskog objekta ili palete svojstava za korijenski čvor.

Sam proces eksternog povezivanja je proces programskog rada sa informacijskom bazom, a ne interaktivni. Shodno tome, u ovom trenutku ne možete koristiti dijaloške forme ili prikazati poruke upozorenja, jer ne postoji korisnički interfejs.

U modulu eksterne veze moguće je opisati varijable izvoza i metode izvoza koje će biti dostupne na strani gdje se odvija eksterni poziv 1C:Enterprise 8.3.

Budući da u vanjskom spoju nema korisničkog sučelja, vanjski modul za spajanje se u potpunosti kompajlira na serveru.

Modul sesije

Ovaj modul je potreban za inicijalizaciju parametara sesije. Parametri sesije su brze globalne varijable čije su vrijednosti dostupne bilo gdje u konfiguraciji.

Modul sesije možete otvoriti ili kroz kontekstni meni ili kroz paletu svojstava korijenskog čvora.

Modul sesije pruža događaj SettingSessionParameters.

Kada se aplikacija pokrene, ova procedura se prvo poziva. Parametri sesije su potrebni za bilo koju operaciju aplikacije: i kada se pokreće interaktivno i kada se pokreće u načinu eksterne veze.

Modul sesije opisuje različite akcije za inicijalizaciju parametara sesije u zavisnosti od različitih uslova.

Ovaj modul, po pravilu, opisuje nekoliko procedura koje se pozivaju iz procedure SettingSessionParameters. Stoga su svi ovi postupci izdvojeni u poseban modul.

Modul sesije uvijek radi u privilegovanom načinu. To znači da se prilikom pristupa bazi podataka neće izvršiti provjera dozvola. Modul sesije se kompajlira na serveru, tj. Moguće je pristupiti svim serverskim metodama (uključujući čitanje vrijednosti iz baze podataka).

U modulu sesije moguće je definirati samo procedure i funkcije, tj. nema sekcije opisa varijable i glavnog programa. Ne možete definirati metode izvoza u modulu sesije.

Ako je prilikom pokretanja sistema potrebno izvršiti neke radnje na Serveru, na primjer kreirati element direktorija, tada je, kao opcija, moguće koristiti Modul sesije, jer kompajlira se na serveru i uvijek se pouzdano izvršava pri pokretanju sistema. Međutim, moraju se uzeti u obzir sljedeće tačke:

  • procedura SettingSessionParameters se izvršava ne samo pri pokretanju sistema, već i kada se pristupa neinicijaliziranim parametrima sesije. One. rukovalac SetSessionParameters se može pozivati ​​više puta tokom rada aplikacije;
  • ako je broj elemenata u nizu parametara sesije nula (niz potrebnih parametara ima tip podataka Undefined), onda je to trenutak kada se aplikacija pokreće;
  • budući da modul sesije radi u privilegovanom režimu i neće biti provere prava pristupa, trebalo bi da radite veoma pažljivo sa objektima baze podataka, pošto korisnik može da dobije pristup podacima koji mu ne bi trebalo da budu dati;
  • Kada se sistem pokrene, još se sa sigurnošću ne zna da li će aplikacija biti pokrenuta. U ovom slučaju, nepotrebne radnje mogu se izvršiti u obrađivaču događaja SetSessionParameters.

Ovi moduli predstavljaju opis nekih opštih algoritama, tj. procedure i funkcije koje se mogu pozvati sa raznih mjesta.

Logički povezane metode mogu se grupirati u različite zajedničke module. Ovi moduli se kreiraju unutar Generalne grane.

Možete dodati bilo koji broj zajedničkih modula. Da bi metode Common Module bile dostupne na drugom mjestu u konfiguraciji, one moraju biti definirane ključnom riječi Export. Klijentske procedure zajedničkih modula biće dostupne na Klijentu, a serverskih – na Serveru.

U Opštim modulima dostupan je samo odeljak koji opisuje procedure i funkcije. One. u Općem modulu ne možete opisati varijable i ne možete opisati dio glavnog programa.

Ako je potrebna globalna varijabla, možete koristiti ili parametre sesije ili varijable za izvoz modula aplikacije.

Za Općenite module, možete postaviti neke parametre koji će utjecati na ponašanje ovog modula. Ako je svojstvo Global postavljeno za Generalni modul, tada će metode izvoza deklarirane u ovom modulu biti dostupne izvana direktno, bez ikakvih dodatnih instrukcija.

One. the Opšti modulće učestvovati u formiranju konteksta globalne konfiguracije.

Nekretnina Global za opšte module može biti korisno. Međutim, ne biste ga trebali koristiti svugdje za sve uobičajene module.

One , koji su označeni znakom Global, će se kompajlirati pri pokretanju sistema. Što je više takvih modula, sporije će se pokrenuti program.

Ako je zastava Global Za Opšti modul nije naveden, tada će se kompilacija ovog modula izvršiti u trenutku prvog poziva (tj. nakon pokretanja sistema).

Osim toga, korištenje globalnih zajedničkih modula utiče na razumijevanje koda. Metode neglobalnog zajedničkog modula se pozivaju kroz ime Opšti modul i naziv metode, na primjer:
Modul za izračunavanje troškova.DistributeIndirectCosts();

U ovom slučaju, nazivi zajedničkih modula moraju odražavati sadržaj procedura opisanih u njima. Određivanje imena zajedničkog modula prilikom pozivanja procedure pomaže boljem razumijevanju koda.

Za Opšti modul V Paleta svojstava možete postaviti svojstvo Privilegovani.

Privilegirani modul ne kontrolira prava pristupa. Ovo je neophodno ako Opšti modul Potrebno je izvršiti masovnu obradu podataka, dobijanje podataka iz baze podataka.

Kontrola prava pristupa povećava vrijeme potrebno za pristup bazi podataka, a masovni algoritmi često moraju raditi što je brže moguće.

Na primjer, obračun plaća je operacija koja zahtijeva resurse. To treba uraditi što je brže moguće. Da bi se to postiglo, algoritmi koji izračunavaju plate stavljaju se u privilegovane .

Istovremeno, sve procedure koje obezbeđuju kompletiranje platnih dokumenata su van ovih Zajednički moduli. U ovim procedurama se vrši kontrola prava pristupa.

Na ovaj način mogu se postići značajna poboljšanja performansi. Ovo je posebno tačno kada se koristi mehanizam za kontrolu pristupa red po red zapisima tabele.

Ako je zajednički modul privilegovan, onda se procedure ovog modula mogu kompajlirati samo na serveru.

Postoje situacije kada bi neki objekt trebao biti nedostupan korisniku, na primjer, određeni direktorij. Ali prilikom izrade bilo kojeg dokumenta potrebno je upućivanje na ovu referentnu knjigu.

One. Potrebno je privremeno proširiti korisnička prava, a zatim ih vratiti u prvobitno stanje. Ovaj efekat se može postići korištenjem privileged Zajednički moduli.

Da biste to učinili u privilegovanoj Opšti modul Trebali biste kreirati proceduru koja pristupa potrebnim podacima.

Ova procedura će biti pozvana iz odgovarajućeg dokumenta. One. korisniku se zapravo dodjeljuju proširena prava u trenutku pozivanja ove procedure.

Za Zajednički moduli Moguće je odrediti lokaciju kompilacije. Oznake se koriste za određivanje da li će zajednički modul biti dostupan na klijentu (upravljana aplikacija), na serveru ili u načinu eksterne veze.

Osim toga, ako prebacite način uređivanja konfiguracije na Upravljana aplikacija i redovna aplikacija, tada će biti moguć još jedan kontekst kompilacije - Klijent (obična aplikacija).

Dakle, postoje četiri opcije za funkcionisanje programa. Ovisno o pokrenutoj aplikaciji, ovisno o radu na klijentu ili serveru, određeni zajednički moduli će biti dostupni ili nedostupni.

Pored mogućnosti specificiranja zastavica kompilacije, moguće je specificirati kompilacijske direktive za procedure i funkcije koje se nalaze u zajedničkom modulu.

Ako je za metodu specificirana direktiva kompilacije, onda iako je zajednički modul dostupan u svim specificiranim kontekstima, dostupnost specifične metode će biti ograničena direktivom o kompilaciji.

U ovom slučaju, proceduri se ne može pristupiti u kontekstu koji nije dostupan cijelom modulu.

Ako ne navedete direktivu kompilacije za proceduru (funkciju), ona će biti prevedena u svim kontekstima definiranim za modul.

One. U suštini, biće napravljeno više kopija procedure. Izbor određene kompajlirane instance zavisi od toga gde se poziva procedura (po pravilu najbližeg poziva). Treba uzeti u obzir da kod takvog postupka mora biti napisan uzimajući u obzir njegovu dostupnost u svim kontekstima definisanim za modul.

Generički moduli koji su istovremeno dostupni u nekoliko različitih konteksta prvenstveno su dizajnirani da kreiraju procedure koje su dostupne u više konteksta.

Prilikom kreiranja zajedničkog modula, smatra se dobrom praksom da se ne specificiraju direktive kompilacije. One. Dostupnost procedura i funkcija treba da bude određena svojstvima samog modula.

Sa ovim pristupom, klijentske procedure će se nalaziti u zasebnim zajedničkim modulima, a serverske procedure će se nalaziti u zasebnim zajedničkim modulima.

Moduli koji imaju postavljeno nekoliko kompilacijskih zastavica se izuzetno rijetko koriste u praksi. Ovo su neke uobičajene radnje dostupne i na klijentu i na serveru. Obično su to neke jednostavne kalkulacije.

Bitan! Klijentu je moguće pristupiti metodama izvoznog servera zajedničkog modula, ali samo ako je ovaj zajednički modul kompajliran samo na serveru. U ovom slučaju je predviđena posebna zastavica koja omogućava pristup klijentu .

Za neglobalne Common module, moguće je keširati vrijednosti koje vraćaju funkcije. One. Nakon prvog poziva funkcije, sistem može zapamtiti rezultat njenog izvršenja. Ako se ova funkcija ponovo pozove sa istim parametrima, sistem će vratiti vrijednost iz keša.

Svrha ovog mehanizma je da ubrza ponovljene pozive. Da biste konfigurisali ovo ponašanje, morate Paleta svojstava modul, postavite odgovarajuću vrijednost za svojstvo Ponovna upotreba povratnih vrijednosti.

Podrazumevano, ovo svojstvo je postavljeno na Ne koristi. Ostale moguće vrijednosti: cache Tokom poziva, ili Za vrijeme trajanja sesije.

Ovo svojstvo ima smisla koristiti samo za one funkcije čiji rezultati zavise isključivo od ulaznih parametara. Ovaj mehanizam je dostupan samo za neglobalne zajedničke module.

Ako je odabrana vrijednost odgovarajućeg parametra Za trajanje poziva, keš će raditi sve dok je pokrenuta procedura iz koje je pozvana metoda General Module. Ako je odabrana vrijednost za vrijeme trajanja sesije, tada se uvjetno pretpostavlja da će keš raditi dok korisnik radi.

Međutim, postoje određena vremenska ograničenja. Keš memorija se automatski briše 20 minuta nakon što vrijednost uđe u keš memoriju.

Modul obrasca

Ovaj modul je dizajniran za obradu radnji korisnika. Na primjer, opišite algoritam kako program reaguje kada se pritisne dugme. Ili, na primjer, u trenutku unosa vrijednosti u polje, odmah provjerite ispravnost.

Pored događaja povezanih sa kontrolama obrasca (dugmad, polja za unos), postoje događaji povezani direktno sa samim obrascem.

Na primjer, možete rukovati događajem otvaranja obrasca i izvršiti početnu inicijalizaciju. Također možete upravljati događajem zatvaranja obrasca i provjeriti da li je korisnik sve ispravno unio.

Postoje kontrolisane forme i regularne forme. Moduli ovih obrazaca razlikuju se prvenstveno po tome što je modul upravljane forme jasno podijeljen na kontekst. Svaka procedura (funkcija) mora imati direktivu kompilacije. U normalnom obliku, sav kod se koristi na Klijentu.

U modulu upravljanog obrasca možete deklarirati procedure i funkcije, možete deklarirati varijable i možete opisati dio glavnog programa.

Programski kod glavnog programa će se izvršiti u trenutku inicijalizacije obrasca, tj. kada korisnik počne da ga otvara. Slika prikazuje listu standardnih događaja za upravljani obrazac.

Lista događaja upravljanog obrasca je takođe vidljiva u listi svojstava direktno za sam obrazac. Ova lista se poziva u uređivaču upravljanih obrazaca.

U upravljanom obliku, možete rukovati događajem pisanja stavke. Ovaj događaj je prisutan samo za objektne forme (direktorije, dokumente i neke druge). Ako obrazac nije vezan za određeni objekt, onda nema događaja pisanja.

Za modul regularnog oblika lista standardnih događaja je nešto manja, jer U upravljanom obliku, mnogi događaji su napravljeni da budu upareni (jedan se izvršava na klijentu, a drugi na serveru). U svom normalnom obliku, sav kod se izvršava na Klijentu.

Objektni modul

Ovi moduli su tipični za imenike, dokumente, planove za vrste kalkulacija, kontne planove i mnoge druge objekte. Objektni modul je dizajniran za rukovanje standardnim događajima. Na primjer, događaj za unos elementa direktorija, događaj za pisanje elementa, brisanje, postavljanje dokumenta itd.

U principu, događaj pisanja takođe postoji u modulu obrasca. Ali događaj pisanja u modulu obrasca se dešava tokom procesa interaktivnog snimanja, kada se radi sa određenim obrascem.

Događaj pisanja u modulu objekta će se izvršiti na bilo kojem zapisu iz bilo kojeg oblika datog objekta. Dodatno, ako je objekt napisan programski, aktivirat će se događaj modula objekta.

U slučaju pisanja modula objekta, možete ugraditi sve provjere ispravnosti podataka koji se upisuju, jer će se ova procedura izvršiti u trenutku apsolutno svakog snimanja.

Modul ovog objekta može se pozvati kroz kontekstni meni, iz palete svojstava objekta i iz prozora za uređivanje objekta.

Slika ispod prikazuje listu dostupnih događaja modula direktorija.

U Object Module možete postaviti odeljak za opisivanje varijabli, opisivanje proizvoljnih funkcija koje možda nisu povezane sa događajem, kao i deo glavnog programa.

U glavnom dijelu programa možete, na primjer, inicijalizirati lokalne varijable datog modula. Ovaj programski kod će se izvršiti kada se pristupi ovom objektnom Modulu.

Treba napomenuti da su sve procedure Object Modula kompajlirane na Serveru. Shodno tome, direktive za kompilaciju za procedure i funkcije Object Modula nisu potrebne. Neki konfiguracijski objekti nemaju objektne module.

To je zbog karakteristika samih objekata. Takvi objekti uključuju Konstante I Registri. Za Konstantno ne postoji objektni modul, ali postoji vrlo sličan modul koji se zove Modul za upravljanje vrijednostima.

IN Modul za upravljanje vrijednostima možete upravljati događajima pisanja Konstante i obrada verifikacije popunjavanja.

Cijeli kontekst modula se izvršava na Serveru.

Za registre postoji Recordset Module.

Ovaj modul također ima mogućnost rukovanja događajima pisanja i obavljanja provjera zauzetosti.

U Object Modules, Value Manager Modules (za konstante) i Recordset Modules (za registre) možete opisati metode koje se mogu izvesti za izvoz, a ove metode će biti dostupne izvana.

One. Osim korištenja fiksnih metoda klase objekata, možete kreirati dodatne metode za objekt u modulu objekta. Ovaj modul bi trebao opisati odgovarajuću proceduru sa ključnom riječi Izvoz.

Tada će biti moguće pristupiti ovoj proceduri izvana. Štaviše, ova metoda će biti prikazana u kontekstu alata. Nove metode u opisu konteksta su istaknute plavim fontom (plava ikona p() za procedure i f() za funkcije).

Slično, možete kreirati novo svojstvo deklariranjem varijable s ključnom riječi Izvoz. Ovoj imovini se može pristupiti i izvana.

Na ovaj način je moguće proširiti funkcionalnost objekata (definirati nove metode i nova svojstva). Međutim, svojstva su dinamička i nisu pohranjena u bazi podataka.

Ako trebate koristiti svojstvo za objekt koji će biti pohranjen u bazi podataka, trebali biste kreirati atribut objekta.

Menadžer modul

Ovaj modul postoji za mnoge objekte (direktorije, dokumente, registre, itd.). Modul se otvara ili preko kontekstnog menija za objekat ili preko Paleta svojstava, ili kroz prozor za uređivanje.

U modulu menadžera možete nadjačati neke standardne događaje, na primjer, in ProcessingReceivingSelectionData, kada je element odabran iz direktorija, može se izvršiti neko dodatno filtriranje ili provjera.

Osim toga, u modulu menadžera možete kreirati dodatne metode i naznačiti da su to metode za izvoz. U ovom slučaju, moguć je pristup ovim metodama izvana.

Da biste izvršili ovaj poziv, potrebno je dobiti tip podataka DirectoryManager.

Razlika između metoda izvoza modula menadžera i modula objekata je u tome što da biste pristupili metodi modula objekata, prvo morate dobiti sam objekt (to jest, nekako dobiti vezu, a zatim pretvoriti ovu vezu u objekt) .

Nakon toga će biti dostupne izvozne varijable i metode Object Modula. Za modul menadžera poziv je jednostavniji, na primjer:
Directories.Counterparties.MethodName

To su dvije različite žalbe. Pretvori iz reference u objekt (metod GetObject) je prilično ozbiljna akcija za sistem, jer se prilikom prijema objekta čitaju apsolutno svi podaci ovog objekta, što može biti prilično dugo.

Druga razlika je u tome Objektni modul naziva se u kontekstu određenog elementa. U skladu s tim, možemo pretpostaviti da je primjenjiv za dati element (u većini slučajeva, upravo je to logika koja se koristi).

Što se tiče menadžerskog modula, on opisuje neku uobičajenu radnju za grupu ili za sve elemente direktorija ili nekog dokumenta. Na primjer, ako trebate ispisati stavku direktorija, možete koristiti Objektni modul.

Ali u modulu menadžera moguće je kreirati univerzalniji mehanizam koji će ispisati, između ostalog, grupu elemenata.

Osim toga, pristup modulu objekta je i dalje duža radnja. Stoga je poželjnije riješiti ovaj problem u modulu menadžera.

Ovim završavamo naše upoznavanje sa modulima u konfiguraciji sistema 1C:Enterprise. Ako ukratko sumiramo sve navedeno, zaključak je sljedeći:

  • Softverski modul je dio konfiguracije koji može sadržavati samo tekst na ugrađenom 1C jeziku
  • Softverski moduli su klasifikovani prema tipovima o kojima smo govorili u ovom članku. Svaki pogled je određen njegovim položajem i dostupnim programskim kontekstom.
  • Struktura modula sastoji se od nekoliko sekcija, koje su raspoređene u određenom redoslijedu. Sastav sekcija je određen tipom modula.

Također imajte na umu da smo namjerno izostavili jednu vrstu modula, odnosno komandni modul. Nije ništa posebno i pozivamo vas da se upoznate sa njegovom funkcionalnošću.

Do sada smo sav naš programski kod razmatrali odvojeno od aplikativnog rješenja i, po pravilu, pisali smo ga u nekoj vlastitoj maloj test konfiguraciji. Jeste li svjesni da "ne možete jednostavno otići" i početi uređivati ​​kod standardne konfiguracije? Ne? Onda ćemo u sljedećem članku sve objasniti!

1.1. Zajednički moduli se kreiraju za implementaciju procedura i funkcija ujedinjenih prema nekim karakteristikama. Po pravilu, procedure i funkcije jednog konfiguracijskog podsistema (prodaja, nabavka) ili procedure i funkcije slične funkcionalnosti (rad sa stringovima, opće namjene) su smještene u jedan zajednički modul.

1.2. Kada razvijate dijeljene module, trebali biste odabrati jedan od četiri konteksta izvršavanja koda:

Uobičajeni tip modula Primjer imena Poziv servera Server Spoljašnji spoj Klijent
(redovna primjena)
Klijent
(upravljana aplikacija)
1. ServerOpće namjene (ili server opće namjene)
2. Server za poziv od klijentaGeneralPurposeCallServer
3. KlijentKlijent opće namjene (ili Global Purpose General)
4. Klijent-serverGeneral PurposeClientServer

2.1. Zajednički moduli servera namijenjeni su za hostovanje serverskih procedura i funkcija koje nisu dostupne za korištenje iz klijentskog koda. Oni implementiraju svu internu serversku poslovnu logiku aplikacije.
Za ispravan rad konfiguracije u eksternoj vezi, upravljani i redovni režimi aplikacije, serverske procedure i funkcije treba da budu smeštene u zajedničke module sa sledećim karakteristikama:

  • Server(kvačica za potvrdu Poziv servera resetovati),
  • Klijent (redovna aplikacija),
  • Spoljašnji spoj.

U ovom slučaju je zagarantovana mogućnost pozivanja serverskih procedura i funkcija s parametrima promjenjivih tipova (na primjer, DirectoryObject, DocumentObject i tako dalje.). Obično je ovo:

  • rukovaoci za pretplate na događaje dokumenata, direktorija, itd., koji uzimaju promjenjivu vrijednost (objekat) kao parametar.
  • serverske procedure i funkcije, kojima se objekt prosljeđuje kao parametar iz modula direktorija, dokumenata itd., kao i iz modula s pretplatama na događaje.

Zajednički moduli na strani servera imenovani su prema općim pravilima za imenovanje objekata metapodataka.
Na primjer: Rad sa datotekama, Opće namjene

U nekim slučajevima, postfix se može dodati kako bi se spriječili sukobi imena sa svojstvima globalnog konteksta "Server".
Na primjer: RoutineTasksServer, Data ExchangeServer.

2.2. Zajednički moduli servera za pozivanje od klijenta sadrže serverske procedure i funkcije koje se mogu koristiti iz klijentskog koda. Oni čine programski interfejs klijenta aplikacijskog servera.
Takve procedure i funkcije su smještene u zajedničke module sa sljedećim svojstvima:

  • Server(kvačica za potvrdu Poziv servera instaliran)

Zajednički moduli na strani servera za pozivanje od klijenta imenovani su prema općim pravilima za imenovanje objekata metapodataka i moraju biti imenovani postfiksom "CallServer".
Na primjer: Rad sa FilesCalling serverom

Imajte na umu da izvozne procedure i funkcije u takvim zajedničkim modulima ne smiju sadržavati parametre promjenjivih tipova ( DirectoryObject, DocumentObject itd.), budući da je njihov prijenos sa (ili na) klijentski kod nemoguć.

Vidi također:Ograničenje postavljanja zastavice “Poziv servera” za uobičajene module

2.3. Zajednički moduli klijenta sadrže klijentovu poslovnu logiku (funkcionalnost definirana samo za klijenta) i imaju sljedeće karakteristike:

  • Klijent (upravljana aplikacija))
  • Klijent (redovna aplikacija)

Izuzetak je kada klijentske procedure i funkcije moraju biti dostupne samo u režimu upravljane aplikacije (samo u redovnom režimu aplikacije ili samo u režimu eksterne veze). U takvim slučajevima prihvatljiva je druga kombinacija ove dvije karakteristike.

Zajednički moduli klijenta imenovani su postfiksom "klijent".
Na primjer: Rad sa FilesClientom, General PurposeClient

Vidi također: minimiziranje koda koji se izvodi na klijentu

2.4. U nekim slučajevima je dozvoljeno kreiranje zajedničkih modula klijent-server sa procedurama i funkcijama, čiji je sadržaj isti i na serveru i na klijentu. Takve procedure i funkcije su smještene u zajedničke module sa sljedećim karakteristikama:

  • Klijent (upravljana aplikacija)
  • Server(kvačica za potvrdu Poziv servera resetovati)
  • Klijent (redovna aplikacija)
  • Spoljašnji spoj

Uobičajeni moduli ovog tipa nazivaju se postfiksom "ClientServer".
Na primjer: Rad sa FilesClientom, General PurposeClientServer

Općenito, ne preporučuje se definiranje zajedničkih modula i za server i za klijenta (upravljana aplikacija). Preporučuje se implementacija funkcionalnosti definisane za klijenta i za server u različitim zajedničkim modulima - vidi paragrafe. 2.1 i 2.3. Ovo eksplicitno razdvajanje poslovne logike klijenta i servera diktirano je razmatranjima povećanja modularnosti aplikativnog rješenja, pojednostavljivanja kontrole programera nad interakcijom klijent-server i smanjenja rizika od grešaka zbog fundamentalnih razlika u zahtjevima za razvoj klijenta i servera. kod (potreba minimiziranja koda koji se izvršava na klijentu, različita dostupnost objekata i tipova platformi, itd.). U ovom slučaju, morate imati na umu neizbježno povećanje broja uobičajenih modula u konfiguraciji.

Poseban slučaj mješovitih klijent-server modula su moduli forme i komande, koji su posebno dizajnirani za implementaciju serverske i klijentske poslovne logike u jednom modulu.

3.1. Preporučuje se da imena zajedničkih modula slijede opća pravila za imenovanje objekata metapodataka. Ime općeg modula mora odgovarati imenu podsistema ili zasebnog mehanizma, čije procedure i funkcije implementira. Preporučuje se izbjegavanje općih riječi kao što su “procedure”, “funkcije”, “upravljači”, “modul”, “funkcionalnost” itd. u nazivima uobičajenih modula. i koristiti ih samo u izuzetnim slučajevima kada potpunije otkrivaju svrhu modula.

U cilju razlikovanja zajedničkih modula jednog podsistema, koji su kreirani za implementaciju procedura i funkcija koje se izvode u različitim kontekstima, preporučuje se da im se daju postfiksi opisani ranije u paragrafima. 2.1-2.4.

Šta su moduli i čemu su tačno namenjeni? Modul sadrži programski kod. Štoviše, vrijedi napomenuti da, za razliku od platforme 7.7, gdje se kod može nalaziti u svojstvima elemenata forme iu ćelijama tabela izgleda, na platformi 8.x bilo koja linija koda mora biti smještena u nekom modulu . Tipično, modul se sastoji od tri sekcije - odjeljka za opisivanje varijabli, odjeljka za opisivanje procedura i funkcija i odjeljka za glavni program. Ova struktura je tipična za skoro sve module platforme, sa nekim izuzecima. Neki moduli nemaju odjeljak opisa varijable ili glavni programski dio. Na primjer, modul sesije i bilo koji opći modul.

Kontekst izvršavanja modula općenito je podijeljen na klijenta i servera. Osim toga, neki moduli se mogu kompajlirati i na strani klijenta i na strani servera. A neki su isključivo na strani servera ili klijenta. dakle:

Aplikacioni modul

Modul je dizajniran da uhvati trenutke pokretanja aplikacije (učitavanja konfiguracije) i prestanka njenog rada. A procedure verifikacije se mogu postaviti u odgovarajuće događaje. Na primjer, prilikom pokretanja aplikacije ažurirajte neke referentne konfiguracijske podatke, a kada završite posao, pitajte je li se uopće isplati napustiti, možda radni dan još nije gotov. Osim toga, presreće događaje iz vanjske opreme, na primjer, trgovačke ili fiskalne. Vrijedi napomenuti da aplikacijski modul presreće opisane događaje samo kada se pokrene interaktivno. One. kada se kreira sam prozor programa. To se ne dešava ako je aplikacija pokrenuta u načinu com veze.

Postoje dva različita modula aplikacije u 8.2 platformi. To su modul Regularne aplikacije i modul Upravljane aplikacije. Pokreću se kada se pokrenu različiti klijenti. Ovako se pokreće 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 režimu aplikacije.

Aplikacioni modul može sadržati sve sekcije - opise varijabli, procedura i funkcija, kao i opise glavnog programa. Aplikacijski modul se kompajlira na strani klijenta, tako da nas to uvelike ograničava u dostupnosti mnogih vrsta podataka. Možete proširiti kontekst modula aplikacije koristeći metode uobičajenih modula koji imaju postavljeno svojstvo “Poziv servera”. Sve varijable i metode koje su označene kao izvoz bit će dostupne u bilo kojem konfiguracijskom modulu koji radi na strani klijenta. Međutim, koliko god primamljivo bilo, ovdje ne biste trebali objavljivati ​​veliki broj metoda. Što više koda sadrži, to je duže vrijeme kompilacije, a samim tim i vrijeme pokretanja aplikacije, što je vrlo neugodno za korisnike.

Kao što je gore navedeno, modul aplikacije upravlja događajima pokretanja i završetka aplikacije. Za rukovanje svakim od ovih događaja u aplikacijskom modulu postoji par rukovalaca Prije... i Kada... Razlike između njih su takve da prilikom izvršavanja koda u rukovatelju Prije..., akcija još nije bila dogodio i možemo odbiti da ga izvršimo. Ovo je ono čemu služi opcija Odbij. U rukovateljima On.. radnja se već dogodila i ne možemo odbiti pokretanje aplikacije ili izlazak iz nje.

Eksterni priključni modul

Svrha modula je slična svrsi aplikativnog modula. Obrađuje početnu i krajnju tačku aplikacije. Modul eksterne 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 dolazi do programskog rada sa informacijskom bazom i prozor aplikacije se ne otvara, što nameće određena ograničenja u korištenju metoda namijenjenih interaktivnom radu. U ovom režimu se ne mogu koristiti pozivi na forme za dijalog, poruke upozorenja itd. Oni jednostavno neće raditi.

Kao iu aplikacijskom modulu, ovdje su dostupne sekcije za opisivanje varijabli, metoda i odjeljak za glavni program. Također možete deklarirati izvozne varijable i metode. Razlika je u tome što se u načinu com veze sav rad sa info bazom odvija na strani servera, pa se modul eksterne veze kompajlira isključivo na serveru. Shodno tome, izvozne varijable i metode uobičajenih klijentskih modula nisu dostupne u njemu.

Modul sesije

Ovo je visoko specijalizovan modul i namenjen je isključivo za inicijalizaciju parametara sesije. Zašto ste morali da napravite sopstveni modul za ovo? To je zbog činjenice da proces inicijalizacije može zahtijevati izvršavanje nekog koda, a osim toga, aplikacija može biti pokrenuta pod različitim klijentima (što dovodi do izvršavanja različitih modula aplikacije ili eksternog modula za povezivanje), a inicijalizacija parametri sesije moraju biti urađeni u bilo kom načinu pokretanja. Stoga je bio potreban dodatni modul koji radi u bilo kojem načinu pokretanja aplikacije.

U modulu sesije postoji jedan događaj “SettingSessionParameters”, koji se izvršava vrlo prvi, čak i prije događaja modula aplikacije BeforeSystemStartOperation. Odjeljak deklaracije varijable i glavni programski odjeljak nisu dostupni u njemu. Također ne možete deklarirati metode izvoza. Modul se kompajlira na strani servera.

Ne treba vas dovoditi u iskušenje činjenica da se ovaj modul izvršava svaki put kada se aplikacija pokrene, i da u njega ne treba postavljati kod koji nije direktno povezan sa inicijalizacijom parametara sesije. Ovo je zbog činjenice da se rukovalac SetSessionParameters može više puta pozivati ​​tokom rada sistema. Na primjer, to se događa u slučajevima kada pristupamo neinicijaliziranim parametrima. I iako je moguće uhvatiti trenutak prvog pokretanja ovog događaja (RequiredParameters je tipa Undefined), treba uzeti u obzir da je ovaj modul kompajliran u privilegovanom modu, tj. ne kontroliše prava pristupa. A druga stvar je da još uvijek ne možemo biti sto posto sigurni da će sistem biti pokrenut. Odjednom dolazi do kvara u aplikacijskom modulu i pokušavamo izvršiti neke radnje s bazom podataka.

Zajednički moduli

Moduli su namijenjeni da opišu neke uobičajene algoritme koji će biti pozvani iz drugih konfiguracijskih modula. Opšti modul ne sadrži odjeljak opisa varijable i glavni programski dio. U njemu možete deklarisati metode izvoza, čiji će kontekst pristupačnosti biti određen oznakama kompilacije. Zbog činjenice da odjeljak opisa varijable nije dostupan, globalne varijable se ne mogu definirati u zajedničkim modulima. Da biste to učinili, trebate koristiti funkcije zajedničkih modula s keširanjem povratnih vrijednosti ili modul aplikacije. Vrijedno je imati na umu da čak i ako je svojstvo ponovne upotrebe dijeljenog modula postavljeno na "Za vrijeme trajanja sesije", tada u ovom slučaju životni vijek keširanih vrijednosti ne prelazi 20 minuta od trenutka posljednjeg pristupa njima.
Ponašanje zajedničkog modula zavisi od postavljenih parametara (globalno ili ne, razne zastavice kompilacije, da li je dostupan poziv servera, itd.). U ovom članku nećemo razmatrati sve vrste postavki, kao ni karakteristike ponašanja i zamke koje nastaju pri nerazumnom postavljanju zastavica svojstava. Ovo je tema za poseban članak. Zaustavimo se samo na nekoliko tačaka kojih se treba pridržavati prilikom postavljanja zastavica:

  • Dobro pravilo je da se globalna zastava ne koristi svuda. Ovo će smanjiti vrijeme pokretanja aplikacije, a također će poboljšati čitljivost koda (naravno, ako zajednički modul ima potpuno smisleno ime).
  • Nije preporučljivo koristiti više od jedne zastavice kompilacije. Ne postoji mnogo metoda koje treba izvršiti u različitim kontekstima, a ako su takve metode i dalje potrebne, onda se za njih može dodijeliti poseban zajednički modul.
  • Oznaka "Poziv servera" ima smisla samo ako je modul kompajliran "Na serveru". Stoga, sve ostale zastavice kompilacije treba ukloniti kako bi se izbjegli različiti problemi.
  • Ako metode modula uključuju ogromnu obradu podataka, čitanje i pisanje u bazu podataka, tada je za povećanje brzine rada bolje onemogućiti kontrolu prava pristupa postavljanjem zastavice „Privilegirano“. Ovaj način rada je dostupan samo za dijeljene module kompajlirane na serveru.

Modul obrasca

Dizajniran je za obradu radnji korisnika, tj. razni događaji vezani za unos podataka i obradu ispravnosti njihovog unosa. Modul uobičajenog oblika se u potpunosti sastavlja na klijentu. Modul upravljanog obrasca jasno je razgraničen kontekstom izvršavanja, tako da sve varijable i metode moraju imati direktivu kompilacije. Ako direktiva nije eksplicitno specificirana, tada će se ova varijabla ili metoda kompajlirati na strani servera. Modul forme sadrži sekcije za opise varijabli i metoda, kao i odjeljak za glavni program.

Objektni modul

Ovaj modul je tipičan za mnoge konfiguracijske objekte i općenito je namijenjen za obradu događaja objekata. Na primjer, događaji za snimanje i brisanje objekata, događaji za knjiženje dokumenata itd.

Neki događaji modula objekta dupliraju događaje modula obrasca. Na primjer, događaji povezani sa snimkom. Međutim, imajte na umu da će se događaji modula forme izvršavati isključivo na specifičnoj formi objekta. Općenito, može postojati nekoliko ovih oblika. A događaji objektnog modula će se pozivati ​​u svakom slučaju, čak i u trenutku programskog rada s objektom. Stoga, ako trebate izvršiti neki kod u svim slučajevima, onda je bolje koristiti događaj objektnog modula za ovo.

Objektni modul se kompajlira isključivo na serveru. U njemu možete definirati varijable za izvoz i metode koje će biti dostupne u drugim konfiguracijskim modulima. Koristeći ova svojstva i metode, možemo značajno proširiti funkcionalnost objekta.

Modul za upravljanje objektima

Ovaj modul postoji za mnoge konfiguracijske objekte. Glavna svrha ovog modula je da redefinira standardni događaj odabira koji se javlja prilikom ulaska u liniju i da proširi funkcionalnost menadžera. Modul se kompajlira na strani servera. Omogućava vam da definirate svojstva i metode izvoza. Pozivanje menadžerovih metoda izvoza ne zahtijeva kreiranje samog objekta.

Svemu gore navedenom možete dodati sliku nekih konfiguracijskih modula i načina međusobnog pozivanja metoda u načinu upravljanja aplikacijom. Strelica pokazuje smjer u kojem se možete okrenuti da biste pozvali odgovarajuću metodu. Kao što se može vidjeti iz dijagrama, kontekst servera je potpuno zatvoren. Ali iz konteksta klijenta moguće je pristupiti serverskim metodama.

Simboli na dijagramu: O.M. Klijent - Zajednički modul klijenta; O.M. Server - serverski zajednički modul; M.F. Klijent - Klijentske procedure modula obrasca; M.F. Server - Serverske procedure modula obrasca.

Softverski moduli sadrže izvršni kod u 1C jeziku koji je neophodan kako bi se na određeni način odgovorilo na radnje sistema ili korisnika kada alati za vizualni razvoj nisu dovoljni. Također možemo opisati vlastite metode (procedure i funkcije) u softverskim modulima.

Obično se softverski modul sastoji od tri sekcije:

  • područje deklaracije varijable;
  • područje opisa procedura i funkcija;
  • glavni tekst programa.

Primjer strukture softverskog modula:

//******************** PODRUČJE PROMJENLJIVE DEKLARACIJE ***********************

Perem Prezime Izvoz; / /ovo je globalna varijabla
Promijeniti ime, patronim; //ovo je varijabla modula
Perem puno ime; //ovo je također varijabla modula i može joj se pristupiti

//iz bilo koje procedure i funkcije našeg modula

//*************** PODRUČJE OPIS PROCEDURA I FUNKCIJA ****************

Procedura Procedura1 ()
Varijabla Ukupno ; / /Rezultat je lokalna varijabla (varijabla procedure)

Ukupno = Prezime + " "+ Ime + " "+ Srednje ime;

EndProcedure

Funkcija Funkcija1()

// operatori funkcije

Povrat (Prezime + " "+ Ime);

EndFunction

//******************** GLAVNI TEKST PROGRAMA ***********************

Prezime = "Ivanov";
Ime = "Ivan";
Patronim = "Ivanovič";

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

U određenom softverskom modulu može nedostajati bilo koje od područja.
Područje deklaracije varijable postavljen od početka teksta modula do prvog izraza procedure ili funkcije ili bilo koje izvršne naredbe. Ovaj odjeljak može sadržavati samo izjave deklaracije varijable.

Područje za opisivanje procedura i funkcija postavljen iz prve naredbe procedure ili funkcije u bilo koju izvršnu naredbu izvan tijela opisa procedure ili funkcije.

Oblast teksta glavnog programa se postavlja od prve izvršne naredbe izvan tijela procedura ili funkcija do kraja modula. Ovaj odjeljak može sadržavati samo izvršne izraze. Glavna tekstualna oblast programa se izvršava u trenutku inicijalizacije modula. Obično, u dijelu glavnog programa, ima smisla postaviti operatore za inicijalizaciju varijabli sa bilo kojim specifičnim vrijednostima koje se moraju dodijeliti prije prvog poziva procedurama ili funkcijama modula.

Softverski moduli se nalaze na onim mjestima u konfiguraciji koja mogu zahtijevati opis određenih operativnih algoritama. Ovi algoritmi trebaju biti formalizirani u obliku procedura ili funkcija koje će sam sistem pozvati u unaprijed određenim situacijama (na primjer, prilikom otvaranja obrasca direktorija, prilikom pritiska na dugme u dijaloškom okviru, prilikom promjene objekta, itd.) .

Svaki pojedinačni softverski modul sistem doživljava kao jedinstvenu cjelinu, pa se sve procedure i funkcije softverskog modula izvode u jednom kontekstu.

Kontekst izvršavanja modula podijeljen je na klijenta i servera. Osim toga, neki softverski moduli mogu se kompajlirati i na strani klijenta i na strani servera.

Aplikacioni modul (upravljani ili redovni)

Aplikacioni modul opisuje procedure (handlere) događaja koji se inicijaliziraju na početku i na kraju sistema. Na primjer, kada se aplikacija pokrene, možete ažurirati neke konfiguracijske podatke, a kada izađete iz aplikacije možete pitati da li se uopće isplati izlaziti iz programa. Osim toga, ovaj modul presreće događaje iz eksterne opreme, na primjer, trgovačke ili fiskalne. Vrijedi napomenuti da se modul aplikacije izvršava samo kada se aplikacija pokreće interaktivno, odnosno kada se pokrene prozor programa. To se ne dešava ako se aplikacija pokrene u načinu com veze.
U platformi 1C 8 postoje dva različita modula aplikacije. To su modul Regularne aplikacije i modul Upravljane aplikacije. Pokreću se kada se pokrenu različiti klijenti. Stoga se modul Managed Application aktivira 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 aplikacije. Postavka načina pokretanja aplikacije navedena je u svojstvu konfiguracije "Osnovni način pokretanja".

Aplikacioni modul može sadržati sva 3 sekcije - deklaracije varijabli, opise procedura i funkcija, kao i glavni tekst programa. Aplikacijski modul se kompajlira na strani klijenta, što uvelike ograničava našu upotrebu mnogih tipova podataka. Možete proširiti kontekst modula aplikacije koristeći metode uobičajenih modula koji imaju postavljeno svojstvo “Poziv servera”. Sve varijable i metode aplikacijskog modula koje su označene kao izvoz bit će dostupne u bilo kojem konfiguracijskom modulu koji se izvodi na strani klijenta. Međutim, koliko god primamljivo bilo, ovdje ne biste trebali postavljati veliki broj procedura i funkcija. Što više koda ima u datom modulu, to je duže vrijeme kompilacije, a samim tim i vrijeme pokretanja aplikacije.

Kao što je gore navedeno, modul aplikacije upravlja događajima pokretanja i završetka aplikacije. Za rukovanje svakim od ovih događaja u aplikacijskom modulu postoji par rukovalaca Prije... i Kada... Razlike između njih su sljedeće: kada se izvršava kod u rukovatelju Prije..., akcija još nije dogodio i možemo odbiti da ga izvršimo. Ovo je ono čemu služi opcija Odbij. U rukovateljima On.. radnja se već dogodila i ne možemo odbiti pokretanje aplikacije ili izlazak iz nje.

Eksterni priključni modul

  • može sadržavati sve 3 oblasti
  • nalazi se u korijenskom dijelu konfiguracije

Svrha modula je slična svrsi aplikativnog modula. Obrađuje početne i završne događaje aplikacije. Modul eksterne veze se pokreće kada se aplikacija pokrene u načinu com veze. Sam proces vanjskog pridruživanja nije interaktivni proces. U ovom načinu rada dolazi do programskog rada sa informacijskom bazom 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 se ne mogu koristiti pozivi na forme za dijalog, upozorenja i poruke korisniku itd. Oni jednostavno neće biti pogubljeni.

Kao iu aplikacijskom modulu, ovdje su dostupna sva tri područja: deklaracije varijabli, opisi procedura i funkcija, kao i glavni tekst programa. Glavna razlika u odnosu na modul aplikacije je u tome što se u načinu com-konekcije sav rad sa info bazom odvija na strani servera, tako da se modul eksterne veze kompajlira na strani servera. Shodno tome, izvozne varijable i metode uobičajenih klijentskih modula nisu dostupne u njemu.

Modul sesije

  • radi na strani servera
  • nalazi se u korijenskom dijelu konfiguracije

Ovo je visoko specijalizirani modul dizajniran isključivo za inicijalizaciju parametara sesije. Zašto ste morali da napravite sopstveni modul za ovo? Njegova upotreba je zbog činjenice da se sama aplikacija može pokrenuti u različitim načinima (što rezultira izvršavanjem bilo modula upravljane aplikacije, običnog aplikativnog modula ili modula eksterne veze), a inicijalizacija parametara sesije se mora izvršiti bez obzira načina pokretanja. Kako ne bismo pisali isti programski kod u sva tri ova modula, potreban nam je dodatni modul koji radi bez obzira na način pokretanja aplikacije.

U modulu sesije postoji jedan događaj “SettingSessionParameters”, koji se izvršava vrlo prvi, čak i prije događaja modula aplikacije BeforeSystemStartOperation. Odjeljak deklaracije varijable i glavni programski odjeljak nisu dostupni u njemu. Također ne možete deklarirati metode izvoza. Modul se kompajlira na strani servera.

Zajednički moduli

  • može sadržavati područje koje opisuje procedure i funkcije
  • izvršava se na strani servera ili klijenta (ovisno o postavkama modula)
  • nalazi se u grani stabla konfiguracijskih objekata “Općenito” - “Opći moduli”

Zajednički moduli su namijenjeni da opišu neke uobičajene algoritme koji će biti pozvani iz drugih konfiguracijskih modula. Opšti modul ne sadrži područja deklaracije varijabli i glavni tekst programa. U njemu možete deklarisati metode izvoza, čija će dostupnost biti određena postavkama modula (na kojoj strani se izvršava: na strani servera ili klijenta). Zbog činjenice da odjeljak opisa varijable nije dostupan, globalne varijable se ne mogu definirati u zajedničkim modulima. Za to možete koristiti modul aplikacije.

Ponašanje zajedničkog modula zavisi od postavljenih parametara (globalno ili ne, razne zastavice kompilacije, da li je dostupan poziv servera, itd.). Evo nekoliko savjeta za postavljanje uobičajenih modula:

Dobra je praksa da se globalna zastava ne koristi svuda. Ovo će smanjiti vrijeme pokretanja aplikacije, a također će poboljšati čitljivost koda (naravno, ako zajednički modul ima potpuno smisleno ime);
- Nije preporučljivo koristiti više od jedne zastavice kompilacije. Ne postoji toliko mnogo metoda koje treba izvršiti u različitim kontekstima, a ako su takve metode još uvijek potrebne, onda se za njih može dodijeliti poseban zajednički modul;
- oznaka “Call server” ima smisla samo ako je modul kompajliran “Na serveru”. Stoga, sve ostale zastavice kompilacije treba ukloniti kako bi se izbjegli različiti problemi;
- ako metode modula uključuju masovnu obradu podataka, čitanje i upisivanje u bazu podataka, onda 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 serveru.

Modul obrasca

  • može sadržavati sve 3 oblasti
  • izvršava se na strani servera i klijenta

Modul obrasca je dizajniran za obradu radnji korisnika sa ovim obrascem (obrada događaja klika na dugme, promjena atributa obrasca, itd.). Postoje i događaji povezani direktno sa samim obrascem (na primjer, njegovo otvaranje ili zatvaranje). Moduli upravljanog i regularnog oblika razlikuju se prije svega po tome što je modul upravljanog oblika jasno podijeljen na kontekst. Svaka procedura ili funkcija mora imati direktivu kompilacije. Ako direktiva kompilacije nije specificirana, tada se ova procedura ili funkcija izvršava na strani poslužitelja. U svom normalnom obliku, sav kod se izvršava na strani klijenta.

Struktura upravljanog obrasca sadrži odeljak za deklaracije varijabli, opise procedura i funkcija i glavni tekst programa (izvršen u trenutku inicijalizacije obrasca). Standardnim događajima obrasca možemo pristupiti preko liste očekivanih procedura i funkcija obrasca (Ctrl+Alt+P), ili kroz paletu svojstava samog obrasca.

Ako obrascu ima dodijeljen glavni atribut, tada svojstva i metode aplikacijskog objekta koji se koristi kao glavni atribut postaju dostupni u modulu obrasca.

Objektni modul

  • može sadržavati sve 3 oblasti
  • radi na strani servera

Ovaj modul je dostupan za većinu konfiguracijskih objekata i općenito je namijenjen za obradu događaja direktno povezanih s objektom. Na primjer, događaji snimanja i brisanja objekata, provjera kompletnosti detalja objekta, objavljivanje dokumenta itd.

Neki događaji modula objekta dupliraju događaje modula obrasca. Na primjer, događaji povezani sa snimkom. Međutim, treba shvatiti da će se događaji modula forme izvršavati isključivo u specifičnom obliku objekta, odnosno kada se specifična forma otvori. A događaji objektnog modula će se pozivati ​​u svakom slučaju, čak i u trenutku programskog rada s objektom. Stoga, ako su vam potrebne metode povezane s objektom, a da nisu vezane za određeni oblik objekta, onda je za to bolje koristiti objektni modul.

Modul za upravljanje objektima

  • može sadržavati sve 3 oblasti
  • radi na strani servera

Modul za upravljanje objektima pojavio se tek počevši od verzije 1C 8.2. Modul menadžera postoji za sve objekte aplikacije i dizajniran je za upravljanje ovim objektom kao konfiguracijskim objektom. Modul menadžera vam omogućava da proširite funkcionalnost objekta uvođenjem (pisanja) procedura i funkcija koje se ne odnose na određenu instancu objekta baze podataka, već na sam objekat konfiguracije. Modul menadžera objekata vam omogućava da postavite opšte procedure i funkcije za dati objekat i pristupite im izvana, na primer, iz obrade (naravno, ako ova procedura ili funkcija ima ključnu reč Export). Šta nam ovo novo daje? Općenito, ništa osim organiziranja procedura po objektima i pohranjivanja na odvojena mjesta - moduli za upravljanje objektima. Te procedure i funkcije možemo jednako uspješno smjestiti u opće module, ali 1C preporučuje postavljanje općih procedura i funkcija objekata u modul za upravljanje objektima. Primjeri korištenja procedura i funkcija modula za upravljanje objektima: početno popunjavanje pojedinačnih detalja direktorija ili dokumenta pod određenim uvjetima, provjera kompletnosti detalja direktorija ili dokumenta pod određenim uvjetima, itd.

Komandni modul

  • može sadržavati odjeljak koji opisuje procedure i funkcije
  • izvršeno na strani klijenta

Naredbe su objekti podređeni objektima aplikacije ili konfiguraciji u cjelini. Svaka naredba ima komandni modul u kojem se može opisati predefinirana procedura CommandProcess() za izvršavanje te naredbe.

U novim verzijama konfiguracija sistema 1C:Enterprise, mnoge funkcije i procedure su premještene sa objektnih modula (dokumenti, direktoriji, itd.) u module menadžera. Pogledajmo razlike između ova dva modula.

Prema teoriji objektno orijentisanog programiranja, objektne metode se dijele u dvije grupe: statičke i jednostavne. Jednostavne metode imaju pristup samo određenoj instanci klase. Statičke metode nemaju pristup podacima objekta, već rade sa klasom kao cjelinom.

Ako sve ovo prevedemo u termine 1C:Enterprise sistema, onda Objektni modul sadrži jednostavne metode. Da biste ih koristili, prvo morate nabaviti određeni objekt: element direktorija, dokumenta itd. Menadžer modul sadrži statičke metode. Da biste ga koristili, nema potrebe za posebnom nabavkom svakog određenog objekta, omogućava vam da radite sa cijelom kolekcijom odjednom.

Objektni modul može imati procedure i funkcije koje se mogu koristiti eksterno. U tu svrhu, takav postupak ili funkcija se označava riječju Izvoz.

Funkcija NewFunction () Izvoz

Da biste koristili takvu funkciju iz objektnog modula, morate je prvo, ako imate vezu na traženi objekt, dobiti pomoću funkcije GetObject().



Per = Objekat. NewFunction() ;

Slično, možete kreirati nove varijable koje se mogu koristiti iz različitih konfiguracijskih objekata.

Varijabla NewVariable Export

Element imenika = Direktoriji. Nomenklatura. FindByCode("000000001" ) ;
Objekt = Element direktorija. GetObject() ;
Objekt. NewVariable= ) ;

Na ovaj način možete dopuniti standardne procedure, funkcije i svojstva (varijable) objekata. Takve varijable su dinamičke, ne pohranjuju se u infobazu i postoje samo za vrijeme rada sa primljenim objektom.

Menadžer modul ima sve iste mogućnosti, jedina razlika je u tome što da biste ga koristili, ne morate da dobijete određeni objekat, modul menadžera vam omogućava da radite sa čitavom kolekcijom objekata određenog tipa.

Procedura NewProcedure() Izvoz

Element imenika = Direktoriji. Nomenklatura. NewProcedure();

Ili za varijablu:

Varijabla NewVariable Export

Element imenika = Direktoriji. Nomenklatura. newVariable;

Pogledajmo razlike u korištenju objektnog modula i modula menadžera na primjeru procedure za kreiranje štampane forme dokumenta.

Kada koristite objektni modul, kod će izgledati ovako:

Funkcija Print Document (Link) Export
//Ovoj funkciji morate proslijediti vezu do određenog dokumenta
Vrati TabDoc;
EndFunction

Na obrascu dokumenta morate kreirati proceduru koja će proslijediti vezu na dokument u funkciju ispisa.

&OnClient
Ispis procedure (naredba)
TabDoc = PrintOnServer();
TabDoc. Prikaži() ;
EndProcedure
&Na serveru
Funkcija PrintOnServer()
Doc = FormAttributesValue("Objekat") ;
Vrati Doc. PrintDocument(Object. Link) ;
EndFunction

Nedostatak ove metode je što ispisuje samo jedan objekat. Ako trebate ispisati nekoliko dokumenata odjednom, onda morate dobiti svaki od njih, a zatim pozvati funkciju iz modula objekta. Ovo zahtijeva značajne sistemske resurse jer kada se objekat dohvati, cijeli objekt se stavlja u RAM.

Sa stanovišta performansi, mnogo je bolje koristiti modul menadžera kad god je to moguće. U našem primjeru rješenje problema će izgledati ovako.
Funkcija PrintOnServer()
Povratak dokumenata. OurDocument. PrintDocument(NizLinks);
EndFunction

Ako koristite modul menadžera, procedura štampanja se može pozvati i iz obrasca dokumenta i iz obrasca liste, prosleđujući veze do nekoliko dokumenata u nizu. U ovom slučaju, sistem ne mora da pribavlja svaki dokument iz niza, što značajno štedi sistemske resurse.

Dakle, kada koristiti objektni modul, a kada koristiti modul menadžera?

Sve zavisi od zadatka. Ako je referenca na objekt dovoljna za njegovo dovršenje (na primjer, zadatak ispisa), onda je bolje koristiti modul menadžera. Ako je zadatak promijeniti podatke, na primjer popunjavanje dokumenta, onda ga morate dobiti i koristiti objektni modul.