Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Vijesti
  • 1c kako pozvati funkciju iz zajedničkog modula. Zajednički moduli

1c kako pozvati funkciju iz zajedničkog modula. Zajednički moduli

Č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 mogu vidjeti 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 se interaktivno pokretanje sistema nadgleda u modulu aplikacije.

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 izbornika 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 nalaziti posebni rukovaoci događaja.

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

Prozor Procedure i Funkcije 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đaja „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 morate 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 kompajlira u potpunosti 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 svuda 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 navedeno, 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 mod za uređivanje konfiguracije na Upravljana aplikacija i redovna aplikacija, tada će biti moguć drugi 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 opšteg modula, smatra se dobrom praksom da se ne specificiraju direktive za kompilaciju. One. Dostupnost procedura i funkcija treba da bude određena svojstvima samog modula.

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

Moduli koji imaju postavljeno nekoliko kompilacijskih zastavica koriste se izuzetno rijetko 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 servera za izvoz zajedničkog modula, ali samo ako je ovaj zajednički modul kompajliran samo na serveru. U tom slučaju je predviđena posebna zastavica koja osigurava 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 upravljati 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, u 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, a mi vas pozivamo 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!

Moduli platforme 1C:Enterprise 8.3, 8.2

Zajednički moduli

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

Takvi moduli nemaju varijabilni dio.

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

Zastava "Global"

Ako je ova zastavica postavljena, onda kontekst takvog modula postaje globalan. To jest, kada pristupate njegovim funkcijama za izvoz, ne morate navesti ime modula. Ali imena njegovih eksportnih funkcija moraju biti jedinstvena unutar globalnog konfiguracijskog konteksta.

Server flag

Funkcije takvog modula mogu se izvršavati na serveru.

Oznaka "Klijent (redovna aplikacija)".

Funkcije takvog modula mogu se izvršavati na klijentu u normalnom aplikacijskom modu.

Oznaka "Klijent (upravljana aplikacija)".

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

Oznaka "Poziv servera".

Zastava je dostupna za module sa postavljenom zastavicom "Server". Dozvoljava klijentu da pozove eksport funkcije ovog modula (koje će biti izvršene na serveru).

External Join flag

Eksportne funkcije takvog modula mogu se pozvati kada se povezujete sa eksternog izvora.

Označite "Privilegirano"

U modulu sa ovom zastavicom provjera prava će biti onemogućena. Pogodno za produktivnost ili administrativne aktivnosti.

Opcija ponovne upotrebe

Ako omogućite ovu opciju, povratne vrijednosti eksportnih funkcija bit će keširane 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.

Aplikacioni modul

Dizajniran za rukovanje događajima pokretanja i završetka aplikacije. Postoje dvije vrste: za redovne i upravljane aplikacije.

Ne biste ga trebali preopteretiti, jer to utiče na vrijeme pokretanja aplikacije.

Modul sesije

Poseban modul koji se koristi za inicijalizaciju parametara sesije. Ovo je neophodno kako bi se izbjeglo dupliciranje koda u različitim modulima aplikacije.

Treba ga pažljivo koristiti, jer se modul može izvršiti nekoliko puta, a može se izvršiti i bez daljeg pokretanja baze podataka. Izvršava se prije modula aplikacije.

S poštovanjem, (nastavnik i programer).

Ispis (Ctrl+P)

Objekti koji se nalaze u grani Opći moduli stabla konfiguracije namijenjeni su da sadrže tekstove funkcija i procedura koje se mogu pozvati iz bilo kojeg drugog konfiguracijskog modula.
PAŽNJA! Opšti modul može sadržavati samo definicije procedura i funkcija.
Procedure i funkcije zajedničkog modula za koje je navedena ključna riječ Export u njihovim zaglavljima jedna su od komponenti globalnog konteksta. Više informacija o procedurama pisanja u opštem modulu možete pronaći u odeljcima „Format izvornih tekstova programskih modula“ i „Operatori“ ugrađene jezičke pomoći.
Da biste uredili zajednički modul, u paleti svojstava objekta tipa Common Modules u prozoru Konfiguracija, u svojstvu Modul kliknite na vezu Otvori. Tekst opšteg modula će se izdati za uređivanje u uređivaču teksta sistema 1C: Enterprise u režimu za uređivanje teksta softverskog modula.
Zajednički modul, koji je dio konfiguracije, pohranjuje se samo kao dio konfiguracije.
Svojstvo Global određuje da li su 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 kreira svojstvo u globalnom kontekstu s imenom koje odgovara imenu zajedničkog modula u metapodacima. Ovo svojstvo je samo za čitanje. Vrijednost ovog svojstva je GeneralModule objekt. Izvezene metode ovog zajedničkog modula dostupne su preko ovog objekta. Dakle, metode pristupa neglobalnim dijeljenim modulima izgledaju kao XXXXX.YYYYY, gdje je XXXXX ime svojstva koje odgovara kontekstu dijeljenog modula, a YYYYY je ime izvezene metode dijeljenog modula.
primjer:

Rad sa maloprodajnom opremom.ConnectBarcode Scanner();

Različiti konteksti i zajednički moduli

Koristeći svojstva zajedničkih modula i instrukcije predprocesora, možete organizirati izvršavanje različitih metoda zajedničkih modula u željenom kontekstu.
Svako svojstvo zajedničkog modula je odgovorno za sposobnost prevođenja (i izvršavanja) zajedničkog modula u određenom kontekstu.
Dostupna su sljedeća svojstva koja su odgovorna za kontekst u kojem su metode općeg modula dostupne:
Klijent (redovna aplikacija)– metode zajedničkog modula će biti dostupne debelom klijentu u normalnom režimu aplikacije;
● – metode opšteg modula će biti dostupne za tanki klijent, web klijent, kao i za debeli klijent u
način upravljanja aplikacijom;
● Server – metode zajedničkog modula će biti dostupne na serveru;
Spoljašnji spoj– metode zajedničkog modula će biti dostupne u vanjskoj vezi.
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 bilo koje drugo postavljeno svojstvo, to znači da će zajednički modul biti dostupan istovremeno na serveru i u odabranom klijentu. Potrebno je shvatiti da će u stvari to biti nekoliko verzija kompajliranog koda (prema broju odabranih klijenata i samom serveru).
Štaviš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 sa servera, serverska kopija. U ovom slučaju, koristeći direktive preprocesora (pogledajte ovdje za više detalja), možete „zaštititi“ server od koda koji se na njemu ne može izvršiti.
Pogledajmo primjer. U zajedničkom modulu (koji se može izvršiti na tankom klijentu i na serveru) postoji metoda koja ima malo drugačije ponašanje na strani tankog klijenta i na strani servera. Hajde da vidimo kako se to može uraditi:



#If ThinClient Onda
// Prikaži upozorenje
ShowUserAlert(“O klijentu”);
#EndIf
Kraj procedure
Tada će na strani servera kod izgledati ovako:
Procedura CommonModule() metoda Izvoz
// Različiti važni kodovi idu ovdje
Kraj procedure
A na strani tankog klijenta kod će izgledati ovako:
Procedura CommonModule Method() Izvoz
// Različiti važni kodovi idu ovdje
// Prikaži upozorenje
ShowUserAlert(“Na klijentu”);
Kraj procedure

Postoji nekoliko načina za prijenos kontrole sa klijenta na server:
● pozvati metodu zajedničkog modula servera;
● u obliku ili komandnom modulu, pozovite metodu kojoj prethode direktive kompilacije &Na serveru, &Na serveru bez konteksta

U isto vrijeme, nemoguće je pozvati metode zajedničkih modula klijenta (koji nemaju postavljeno svojstvo Server) i klijentske metode modula obrasca ili komandnog modula iz serverskih procedura. Kontrola će se vratiti klijentu nakon što se završi poziv metode najudaljenijeg servera.
Izuzetak su metode modula forme i komandnog modula, kojima prethode direktive kompilacije &OnClientOnServer, &OnClientOnServerBithout Context
Treba napomenuti i sljedeće tačke:
● Ako je zajednički modul dostupan za više od jednog klijenta, onda kada pišete programski kod, trebate uzeti u obzir maksimalna ograničenja koja mogu nametnuti klijenti, ili koristiti instrukcije predprocesora da “izolujete” klijentski specifičan kod.
● Instrukcije pretprocesora također imaju smisla kada jedan zajednički modul ima nekoliko konteksta izvršavanja, na primjer, eksternu vezu i tanki klijent, ili (što je mnogo češće) neki klijent i server. U ovom slučaju, instrukcije pretprocesora će uokviriti interaktivni kod koji se ne može koristiti na serveru, ali se može koristiti na klijentu (vidi primjer iznad).
Za više informacija o instrukcijama predprocesora i direktivama kompilacije, pogledajte odjeljak “Izvršavanje procedura i funkcija” pomoći za ugrađeni jezik.
Svojstvo Call Server je namijenjeno za kontrolu mogućnosti pozivanja eksportiranih metoda zajedničkog modula poslužitelja iz klijentskog koda.
Ako je svojstvo postavljeno, tada su izvezene metode zajedničkog modula servera dostupne za pozivanje od klijenta. Ako svojstvo nije postavljeno, tada se takve izvezene metode mogu pozvati samo iz metoda na strani servera (i metode zajedničkih modula na strani servera i metode modula obrazaca i komandnih modula na strani servera).
Savjet. Preporučuje se da svojstvo Poziv servera postavite na False u slučajevima kada zajednički modul servera 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 aplikacija), Klijent (upravljana aplikacija), Spoljašnji spoj, tada se svojstvo servera poziva automatski resetuje. Ako je postavljeno svojstvo poslužitelja poziva, svojstva se automatski resetiraju Klijent (redovna aplikacija), Klijent (upravljana aplikacija) I Spoljašnji spoj, ako su ova svojstva postavljena u isto vrijeme.
Nekretnina Privilegovani je namijenjen za onemogućavanje kontrole prava pristupa prilikom izvršavanja metoda zajedničkog modula.
BILJEŠKA. Ako je imovina Privilegovani instaliran, tada se svojstvo Servera automatski postavlja za zajednički modul, a preostala svojstva se resetiraju ( Klijent (redovna aplikacija), Klijent (upravljana aplikacija) i B eksternu vezu). Privilegirani zajednički modul može se izvršiti samo na serveru.

Ponovno korištenje povratnih vrijednosti

Ako zajednički modul nije globalan, svojstvo Ponovna upotreba povratnih vrijednosti postaje dostupno. Ovo svojstvo može imati sljedeće vrijednosti:
● Ne koristi - Nema ponovne upotrebe povratnih vrijednosti za funkcije u ovom zajedničkom modulu.
● Po pozivu i po sesiji – dijeljeni modul koristi metodu za određivanje ponovne upotrebe podataka. Suština ove metode je da tokom izvršavanja koda sistem pamti parametre i rezultat funkcija nakon prvog poziva funkcije. Kada se funkcija ponovo pozove s istim parametrima, pohranjena vrijednost (iz prvog poziva) se vraća bez izvršavanja same funkcije. Ako funkcija promijeni vrijednosti parametara tokom svog izvršavanja, to neće učiniti ponovnim pozivanjem funkcije.
Sljedeće karakteristike čuvanja rezultata poziva mogu se istaknuti:
● ako se funkcija izvršava na serveru i poziva iz serverskog koda, tada se vrijednosti parametara i rezultat poziva pamte za trenutnu sesiju na strani servera;
● ako se funkcija izvršava na debelom ili tankom klijentu, tada se vrijednosti parametara i rezultati poziva pamte na strani klijenta;
● ako se funkcija izvršava na strani servera i poziva iz klijentskog koda, tada se vrijednosti parametara poziva pamte i na strani klijenta i na strani servera (za trenutnu sesiju).
Sačuvane vrijednosti se brišu:
● ako je svojstvo postavljeno na Za vrijeme trajanja poziva:
● na strani servera – prilikom vraćanja kontrole sa servera;
● na strani klijenta – kada se završi procedura ili funkcija ugrađenog jezika najvišeg nivoa (poziva sistem iz interfejsa, a ne iz druge ugrađene jezičke procedure ili funkcije);
● ako je svojstvo dijeljenog modula postavljeno na Za vrijeme trajanja sesije:
● na strani servera – na kraju sesije;
● na strani klijenta – prilikom zatvaranja klijentske aplikacije.
Sačuvane vrijednosti će biti izbrisane:
● na serveru, u debelom klijentu, u vanjskoj vezi, u tankom klijentu i u web klijentu sa normalnom brzinom veze - 20 minuta nakon izračunavanja pohranjene vrijednosti ili 6 minuta nakon posljednje upotrebe;
● u tankom klijentu i web klijentu sa malom brzinom veze – 20 minuta nakon izračunavanja sačuvane vrijednosti;
● ako postoji nedostatak RAM-a u procesu rada servera;
● prilikom ponovnog pokretanja toka posla;
● kada se klijent prebaci na drugi tok posla.
Nakon što se vrijednosti uklone, poziva se eksportovana funkcija kao u prvom pozivu.
Ovo svojstvo zajedničkih modula ne utiče na izvršavanje procedura – procedure se uvek izvršavaju.

Ako je zajednički modul postavljen da ponovno koristi povratne vrijednosti, tada se nameću brojna ograničenja na tipove parametara koje eksportuje funkcija. Tipovi parametara mogu biti samo:
● Primitivni tipovi ( Nedefinirano, NULL, Boolean, broj, niz, datum).
● Sve reference na objekte baze podataka.
● Strukture sa vrijednostima svojstava gore navedenih tipova. U ovom slučaju, identitet parametara kontroliše „sadržaj“ struktura.
Ako izvezena funkcija vraća objekt, ona zapravo vraća referencu na objekt pohranjen u predmemoriji. Ako se, nakon primanja ove reference, stanje objekta promijeni, onda će naknadni poziv iste funkcije vratiti referencu na već izmijenjeni objekt bez stvarnog izvršavanja funkcije. Ovo ponašanje će se nastaviti sve dok se pohranjena vrijednost ne izbriše (iz bilo kojeg razloga). Drugim riječima, promjena stanja objekta kao rezultat poziva funkcije iz zajedničkog modula s ponovnom upotrebom povratnih vrijednosti nije osnova za stvarni poziv funkcije. Također treba imati na umu da je keš vraćenih objekata indiferentan
stanje privilegiranog režima u trenutku kada je funkcija pozvana, ponovo koristeći povratne vrijednosti. Ova funkcija može dovesti do sljedećeg ponašanja:
● Stvarno izvršenje poziva funkcije sa ponovnim korištenjem povratnih vrijednosti (prvi poziv) izvršeno je sa uključenim privilegiranim načinom rada.
● Prilikom izvršavanja funkcije primljen je objekat koji se ne može primiti sa onemogućenim privilegovanim režimom.
● Naknadni pozivi funkciji su obavljeni bez postavljanja privilegovanog režima.
● Međutim, dok se predmemorija povratnog objekta ne obriše ili se stvarni poziv ponovo ne uputi, funkcija će vratiti formalno nedostupan objekat.
● Obrnuto ponašanje je takođe tačno, kada je prvi poziv upućen bez postavljanja privilegovanog režima, a u privilegovanom režimu se ne vraća objekat koji je mogao biti primljen u privilegovanom režimu.

Ako zajednički modul ima svojstvo Ponovno korištenje povratnih vrijednosti je postavljeno na Za vrijeme trajanja sesije, tada se vrijednosti tipa ne mogu koristiti u vrijednostima koje vraćaju funkcije takvog modula TimeTable Manager.
Ako se funkcija zajedničkog modula, sa skupom mogućnosti ponovne upotrebe, poziva iz istog dijeljenog modula (na primjer, pod nazivom GeneralModule), treba imati na umu sljedeće upozorenje: ako je funkcija pozvana imenom MyFunction(), tada će se funkcija izvršavati svaki put kada se funkcija pozove. Da bi se pohranjene vrijednosti koristile, funkcija mora biti pozvana punim imenom:
GeneralModule.MyFunction().
Metoda globalnog konteksta uklanja sve ponovno korištene vrijednosti, i na strani servera i na strani klijenta, bez obzira na to gdje je metoda pozvana. Nakon izvršenja metode UpdateReusableValues() prvi poziv funkcije će biti izvršen u potpunosti.

Danas ćemo pogledati uobičajene module, šta su, zašto su potrebni i kako ih koristiti. Funkcije koje se koriste u više dokumenata mogu se smjestiti u zajednički modul. Na primjer, izračunavanje iznosa u tabelarnom dijelu dokumenta.

Na primjer, uzmimo našu staru konfiguraciju koju sam koristio u prethodnim člancima. U njemu imamo dva dokumenta: dolazak robe u skladište i puštanje robe u skladište. Oba dokumenta imaju procedure koje izračunavaju iznos u tabelarnom redu.

Svaki dokument sadrži isti kod za obračun iznosa.

Materijali za postupakPriceOnChange(Element)
TabularPart Red = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Kraj procedure

Danas ćemo ga premjestiti u zajednički modul i pozvati ga iz dokumenta.

Kreiramo opći modul za izračunavanje iznosa

I tako da počnemo, prvo morate kreirati zajednički modul. Da biste to učinili, idite u konfigurator, potražite stavku Opći moduli, kliknite desnom tipkom miša i dodajte nove, napišite naziv WorkWithDocuments. U njega unosimo sljedeći kod.

Takođe obavezno označite polja pored Klijent (upravljana aplikacija) i Server u prozoru sa svojstvima.

Sada morate malo promijeniti kod u modulu obrasca dokumenta. Na lijevoj strani u konfiguraciji tražimo dokument Dolazak robe, proširimo prozore na prozor Obrasci, dvaput kliknemo na Obrazac dokumenta i u prozoru obrasca koji se otvori idi na karticu Modul na dnu. Imamo ovaj kod

Ova procedura radi kada se mijenja količina u tabelarnom dijelu dokumenta prijema robe i izračunava iznos.

&OnClient



Kraj procedure

A ova procedura počinje da radi kada se cena promeni u tabelarnom delu dokumenta Prijem robe i izračuna iznos.

&OnClient

TabularPart Red = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Kraj procedure

Zamijenite ga ovim

&OnClient
Procedura MaterialsQuantityOnChange(Element)
TabularPart Red = Elements.Materials.CurrentData;

Kraj procedure
&OnClient
Materijali za proceduruPriceOnChange(Element)
TabularPart Red = Elements.Materials.CurrentData;
WorkWithDocuments.CalculateSum(TabularPartRow);
Kraj procedure

Kao što ste primijetili, samo jedna linija se mijenja na prvi pogled može izgledati da je jedna linija zamijenjena drugom. Ali nemojte zaboraviti da je ovo primjer. U stvari, količina koda može biti mnogo veća ako, na primjer, izvršite proračune koristeći složenu formulu, u kom slučaju će se kod značajno smanjiti.

Isto radimo za dokument Otpuštanje robe iz skladišta, pokrećemo i provjeravamo funkcionalnost koda. Dakle, ti i ja smo napravili prvi zajednički modul, nadam se da će moj članak nekome biti od koristi.

Najbolji članci na ovu temu