Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Programi
  • 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, to 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 se procedura ili funkcija kompajlirati.

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 obraditi na neki način.

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 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 (naredba 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.

Postoje dva događaja povezana sa početkom sistema („prije” i „na”). 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 u trenutku 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, 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 izvršiti samo 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 se mogu izvesti u rukovaocu 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će 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 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. Navođenje 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.

Kontrolisanje prava pristupa povećava vreme potrebno za pristup bazi podataka, a masovni algoritmi često moraju da rade što je brže moguće.

Na primjer, platni spisak 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 privilegovanom 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 kompilacijskih zastavica, 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 zasebnim 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 ovom slučaju je obezbeđ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 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 javlja se 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 Object Modula, 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, možete kreirati dodatne metode u modulu menadžera 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 nizu. 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!

Danas ćemo pogledati uobičajene module, šta su, zašto su potrebni i kako ih koristiti. Funkcije koje se koriste u nekoliko dokumenata možete staviti 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 istu šifru 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širite prozore na prozor Obrasci, dvaput kliknite na Obrazac dokumenta i u prozoru obrasca koji se otvori idite 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 postupakPriceOnChange(Element)
TabularPart Red = Elements.Materials.CurrentData;
WorkWithDocuments.CalculateSum(TabularPartRow);
Kraj procedure

Kao što ste primijetili, mijenja se samo jedna linija; na prvi pogled može izgledati da je jedna linija zamijenjena drugom. Ali ne zaboravite 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 kod biti primjetno smanjen.

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.

Zajednički moduli su odgovorni za pohranjivanje procedura i funkcija koje se pozivaju s drugih mjesta u 1C sistemu. Smatra se dobrom praksom postavljanje koda koji se poziva više puta u proceduri u zajednički modul. Ovo pravilo je univerzalno za sve konfiguracije, tako da bi svaki 1C programer trebao moći raditi s ovim konfiguracijskim objektima. Da biste to učinili, morate razumjeti sve nijanse i moći ispravno koristiti mogućnosti koje pruža platforma.

Kreiranje zajedničkog modula u 1C

Nakon kreiranja funkcije u jednom od modula objekta, pojavila se potreba za korištenjem sličnog algoritma na drugom mjestu. Najbolje što možete učiniti ovdje je prebaciti kod u zajednički modul, ali prije toga morate ga kreirati. Da bismo to učinili, moramo otići u konfigurator i pronaći karticu "Općenito" u stablu konfiguracije. Zatim odaberite "Opći moduli" i koristite dugme u obliku bijelog plusa na zelenom krugu.

Svojstva dodanog zajedničkog modula će se otvoriti sa desne strane, a mi moramo da shvatimo šta svako od njih znači. Mogu biti različitih smjerova, stoga je prije postavljanja novog objekta preporučljivo odlučiti što ćemo tamo pohraniti. Ako ništa, u budućnosti će biti moguće mijenjati svojstva u skladu sa zadacima:

  • "Globalno". Ova zastavica se postavlja ako je modul namijenjen za pohranjivanje procedura i funkcija koje se moraju pozvati bez specificiranja imena modula. Naravno, oni moraju biti izvozni, a njihova imena moraju biti jedinstvena u kontekstu cjelokupnog globalnog konteksta. Neće se razlikovati u upotrebi od standardnih funkcija platforme;
  • "Klijent". Zavisi od sistemskih postavki i reguliše da li se procedure modula mogu izvršavati na strani klijenta;
  • "Server". Označeni su opšti moduli u okviru kojih se algoritmi planiraju postaviti za izvršenje na serveru;
  • "Spoljni spoj". Procedure modula sa aktiviranim ovim svojstvom moći će da se izvrše preko veze sa eksternim izvorom;
  • "Poziv servera". Odgovoran za omogućavanje procedurama iz modula da pozivaju server dok se izvršavaju na klijentu;
  • "Privilegovani". Omogućavanje ove postavke će vam omogućiti da ne provjeravate prava pristupa prilikom pokretanja koda procedure modula. Zajednički modul sa ovom postavkom možete pozvati samo na serveru. Postavke klijenta i eksterne veze će biti resetirane;
  • "Ponovna upotreba". Može imati sljedeće vrijednosti: “Ne koristiti”, “Za vrijeme trajanja sesije”, “Za vrijeme trajanja poziva”. Prilikom višestrukog pozivanja jedne procedure, sistem može koristiti prethodno izračunate podatke unutar procedure (poziv) ili vijek trajanja cijele sesije (1C pokretanje). Trebali biste biti vrlo oprezni s ovom postavkom, jer može doći do grešaka zbog nepravilne upotrebe takvih modula.

Postoje situacije kada trebate kreirati zajednički modul sa pozivima procedura na serveru i klijentu s razlikama u algoritmu. Preprocesorske direktive sa provjerom se koriste za razgraničenje koda. Kao rezultat, to će biti jedan kod za poziv servera, a drugi za poziv klijenta.
Procedure AlgorithmServerClient() Export #If ThinClient Then // kod se izvršava ako je poziv procedure došao od klijenta ShowUserAlert("Na klijentu"); ElseIf Server Then // kod se izvršava ako je poziv procedure došao sa servera VariableServer = "Poziv servera"; #TheEndIfTheEndProcedure

Primjer prijenosa koda u uobičajeni 1C modul

Razmotrimo situaciju u kojoj imamo dva događaja na obrascu dokumenta koji uključuju jednu proceduru množenja količine i cijene u tabeli. Ovo je prilično uobičajen algoritam, jer se nalazi u mnogim dokumentima o nabavci i prodaji. Prenesimo šifru procedure u zajednički modul, koji se prvo mora kreirati da bi se ovaj kod mogao koristiti u drugim dokumentima.

&OnClient Procedure ProizvodiPriceOnChange(Element) RecalculateAmount(); Kraj procedure &OnClient procedura ProductsQuantityOnChange(Element) RecalculateAmount(); Kraj procedure &na klijentovom postupku Preračunajte iznose() Red TC = Elements.Products.CurrentData; Red PM.Iznos = Red PM.Količina * Red PM.Price; Kraj procedure

Pošto nam je za naš zadatak potreban samo poziv od klijenta, a ne trebaju nam podaci iz baze podataka, postavljamo samo oznaku „Klijent“. Ako želite da koristite isti modul u budućnosti za složenije proračune, označite “Server” u svojstvima. Pripremna faza je završena i možemo preći na pisanje koda.


Kreirajmo izvoznu proceduru u modulu i prebacimo tamo algoritam za izračunavanje iznosa iz procedure u modulu obrasca. Niz sekcije tabele će se koristiti kao parametar procedure na ulazu. U modulu obrasca dokumenta mijenjamo pozive procedura u istom modulu u poziv procedure iz opšteg modula.


Procedura CalculateRow(TabularPartRow) ExportTabularPartRow.Sum = TabularPartRow.Quantity * TabularPartRow.Price; Kraj procedure

Fragment 1

&O klijentskoj proceduri ProductsPriceWhenChanged(Element) //pozivanje procedure iz opšteg modula CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //RecalculateAmount(); Kraj procedure &na klijentskoj proceduri ProductsQuantityWhenChanging(Element) //pozivanje procedure iz opšteg modula CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //RecalculateAmount(); Kraj procedure &na klijentovom postupku Preračunajte iznose() Red TC = Elements.Products.CurrentData; Red PM.Iznos = Red PM.Količina * Red PM.Price; Kraj procedure

Fragment 2

Kada se sistem pokrene, nećemo primijetiti razliku, ali ova struktura koda je mnogo praktičnija za čitanje i održavanje. Naravno, u ovom primjeru količina koda ne može pokazati sve prednosti. U slučaju složenog algoritma za desetine konfiguracijskih objekata, dobitak u količini koda i njegovoj strukturi će također uticati na brzinu sistema. Osim toga, iskusni 1C programeri preporučuju ne opisivanje algoritama u modulima obrasca, već njihovo postavljanje u ispravno konfigurirane opće module.

Prilikom razvoja općih modula, trebali biste uzeti u obzir općeprihvaćena pravila za njihovo kreiranje:

  • Stavite procedure i funkcije koje se odnose na sličnu funkcionalnost u poseban zajednički modul;
  • Naziv modula treba da odražava njegovu pripadnost kontekstu (klijent, server) i da izbegava uobičajene reči (upravljači, procedure, itd.);
  • Odvojite internu serversku logiku aplikacije i logiku klijenta za interfejs;
  • Budite oprezni kada kreirate globalni zajednički modul. Ne mora se pozivati ​​na proceduru kroz ime modula može dovesti do zabune, posebno ako sistem podržava više razvojnih timova.

Ispravno kreirani moduli pomoći će vam da se krećete kroz konfiguracijsku strukturu i da poboljšate mnogo brže. Ako vidite priliku da korisnu funkciju učinite univerzalnom i stavite je u zajednički modul, onda to učinite. U budućnosti ćete vi i vaše kolege biti zahvalni na ovoj odluci.

Najbolji članci na ovu temu