Kako postaviti pametne telefone i računala. 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", u njemu se detaljno raspravlja o sljedećim pitanjima:

  • Što je softverski modul i od kojih se dijelova sastoji?
  • Čemu služi aplikacijski modul? Zašto ih je dvoje? Kada se koji pokreće? Koje su suptilnosti rada?
  • Koji su događaji povezani s početkom rada sustava, kako i gdje ih obraditi?
  • Čemu služi vanjski priključni modul? Kada i kako ga koristiti?
  • Kada se koristi modul sesije?
  • Što 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 u njemu mogu obrađivati?
  • Čemu služi objektni modul? Od kojih se dijelova sastoji? Kako mogu vidjeti dostupne događaje modula?
  • Koje su suptilnosti rada s modulima upravitelja vrijednosti (za konstante) i modulima skupa zapisa (za registre)?
  • Koje su razlike između objektnog modula i upraviteljskog modula? Kada biste trebali koristiti potonje?

Primjenjivost

U članku se 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.

U Platformi postoji prilično veliki broj vrsta modula, od kojih svaki ima svoju svrhu i značajke.

Svaka linija koda mora biti u nekom modulu. Postoje moduli opće namjene i objektni moduli. Neki se moduli mogu kompajlirati i na klijentu i na poslužitelju, a neki samo na poslužitelju.

Modul se može sastojati od nekoliko dijelova. Odjeljak opisa varijabli 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 nazivu, to su dvije različite varijable: jedna se koristi unutar određene procedure, a druga se koristi izvan nje.

U nekim modulima, varijable mogu označavati lokaciju kompilacije (dostupnost) na poslužitelju ili na klijentu. Na primjer:

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

U principu, direktiva kompilacije se može izostaviti. U ovom slučaju, zadana direktiva kompilacije je poslužitelj. Međutim, radi praktičnosti analize programskog koda, preporuča se eksplicitno navesti gdje će se dati postupak prevesti. Redoslijed opisa postupaka nije bitan.

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

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

Treba napomenuti da odjeljak deklaracije varijabli i odjeljak glavnog programa ne postoje za sve module (tj. ovi odjeljci nisu važeći u nekim modulima). Odjeljak za opisivanje postupaka i funkcija može postojati u apsolutno svakom modulu.

Aplikacijski modul

Ovaj modul dizajniran je za rukovanje događajima pokretanja i prekida aplikacije. Na primjer, kada pokrenete aplikaciju, možete preuzeti tečajeve valuta s interneta. Prilikom prekida aplikacije možete potvrditi korisniku da namjerava odustati.

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

To mogu biti događaji s čitača magnetskih kartica ili fiskalnog registratora. A ti se događaji također mogu na neki način obraditi.

Imajte na umu da se u modulu aplikacije prati interaktivno pokretanje sustava.

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

Treba napomenuti da u Platformi 8.3 postoje dva različita aplikacijska modula: modul upravljane aplikacije i modul redovne aplikacije. Događaji modula upravljane aplikacije obrađuju se kada se pokrenu tanki i debeli klijent upravljane aplikacije i web klijent.

Modul Redovita primjena radi kada Debeli klijent radi u načinu rada Redovita primjena, koji sadrži uobičajeno naredbeno sučelje u obliku Glavni izbornik.

Ako je aplikacija pokrenuta Upravljano, iu načinu rada Redovita primjena, tada je potrebno opisati procedure rukovatelja kao i za modul Upravljana aplikacija, i za modul Redovita primjena.

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

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

Za otvaranje modula Redovita primjena, trebate pogledati konfiguracijske postavke (naredba Mogućnosti na jelovniku Servis).

Otvorit će se obrazac Mogućnosti. Na knjižnoj oznaci Su česti mora biti naveden način uređivanja konfiguracije Upravljana aplikacija I Redovita primjena.

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

Popis događaja za koje se može izvršiti obrada Upravljano I Redovita primjena je isti.

Ovaj modul može sadržavati odjeljak za deklaraciju varijabli, odjeljak opisa proizvoljnih postupaka i funkcija i odjeljak glavnog programa. Ali osim proizvoljnih procedura i funkcija, u modulu se mogu nalaziti i posebni rukovatelji događajima.

Popis dostupnih rukovatelja može se vidjeti pozivanjem popisa 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.

Postoje dva događaja povezana s početkom sustava ("prije" i "u"). Dva događaja povezana s gašenjem sustava ("prije" i "u"). I također obrada vanjskih događaja (na primjer, događaja komercijalne opreme).

Kada se izvrši rukovatelj događajem "prije", smatra se da se radnja još nije dogodila. Kada se izvrši rukovatelj događajem “at”, radnja je već dovršena.

Događaj Prije pokretanja sustava događa se u trenutku pokretanja Enterprise 8.3, ali se sama aplikacija još nije pojavila na ekranu. Ovaj događaj ima sljedeće parametre: Odbijanje.

Ako ovaj parametar poprimi vrijednost Pravi, tada se aplikacija neće pokrenuti. Događaj Prilikom pokretanja sustava pretpostavlja da je radnja već završena, prozor je već kreiran, iu tom slučaju možemo npr. prikazati neki poseban obrazac. Više nije moguće odbiti lansiranje.

Slično, prije gašenja sustava, aplikacija je još uvijek otvorena i možete je odbiti zatvoriti. Kada se sustav 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 Upute za prevođenje procedura i funkcija nisu specificirane, budući da se modul u cijelosti prevodi na strani klijenta. To znači da u procedurama i funkcijama modula nećemo moći izravno pristupiti npr. referentnim knjigama.

Ako iz modula Upravljana aplikacija trebate uputiti poziv poslužitelju, tada ćete za to morati stvoriti poseban sa zastavom .

U modulu Redovita primjena Ne postoje takva ograničenja, budući da će se ovaj modul kompajlirati 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.

Budući da je modul u potpunosti kompiliran 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 aplikacijskog modula iz modula forme objekta. Međutim, preporučuje se korištenje zajedničkih modula za opisivanje općih algoritama. Glavna svrha aplikacijskog modula je obrada početne i završne točke.

Po analogiji s aplikacijskim modulom, ovaj modul je dizajniran za obradu događaja otvaranja programa i događaja gašenja.

Za razliku od aplikacijskog modula koji se pokreće u trenutku interaktivnog pokretanja aplikacije, eksterni priključni modul radi u COM načinu povezivanja, tj. kada se kreira objekt 1C:Enterprise 8 i poveže s određenom bazom podataka.

Ovaj modul ima događaje: Prilikom pokretanja sustava I Nakon gašenja sustava.

Modul vanjske veze može se otvoriti pomoću kontekstnog izbornika na razini objekta konfiguracije korijena ili palete svojstava za korijenski čvor.

Sam proces vanjskog povezivanja je proces programskog rada s informacijskom bazom, a ne interaktivan. Sukladno tome, u ovom trenutku ne možete koristiti dijaloške forme niti prikazati poruke upozorenja, budući da nema korisničkog sučelja.

U Modulu vanjske veze moguće je opisati eksportne varijable i eksportne metode koje će biti dostupne na strani na kojoj se odvija eksterni poziv prema 1C:Enterprise 8.3.

Budući da u vanjskom spajanju nema korisničkog sučelja, Outer Join Module se u potpunosti kompilira na poslužitelju.

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 putem kontekstnog izbornika ili putem palete svojstava korijenskog čvora.

Modul sesije pruža događaj Postavljanje parametara sesije.

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

Modul sesije opisuje različite radnje za inicijalizaciju parametara sesije ovisno o različitim uvjetima.

Ovaj modul, u pravilu, opisuje nekoliko procedura koje se pozivaju iz procedure Postavljanje parametara sesije. Stoga su svi ti postupci izdvojeni u poseban modul.

Modul sesije uvijek radi u povlaštenom načinu rada. To znači da se prilikom pristupa bazi podataka neće izvršiti provjera dopuštenja. Modul sesije sastavlja se na poslužitelju, tj. Moguće je pristupiti bilo kojim metodama poslužitelja (uključujući čitanje vrijednosti iz baze podataka).

U Modulu sesije moguće je definirati samo procedure i funkcije, tj. ne postoji odjeljak opisa varijabli niti dio glavnog programa. Ne možete definirati metode izvoza u modulu sesije.

Ako je prilikom pokretanja sustava potrebno izvršiti neke radnje na poslužitelju, npr. kreirati element direktorija, tada je, kao opciju, moguće koristiti Session Module, jer kompajlira se na poslužitelju i uvijek se pouzdano izvršava pri pokretanju sustava. Međutim, potrebno je uzeti u obzir sljedeće točke:

  • postupak Postavljanje parametara sesije se izvršava ne samo pri pokretanju sustava, već i prilikom pristupa neinicijaliziranim parametrima sesije. Oni. rukovatelj SetSessionParameters može se više puta pozivati ​​tijekom rada aplikacije;
  • ako je broj elemenata u nizu parametara sesije nula (niz potrebnih parametara ima tip podataka Nedefinirano), tada je to trenutak pokretanja aplikacije;
  • budući da Session Module radi u povlaštenom načinu rada i neće biti provjere prava pristupa, trebali biste vrlo pažljivo raditi s objektima baze podataka, budući da korisnik može dobiti pristup podacima koji mu se ne bi trebali dati;
  • Kada se sustav pokrene, još se ne zna pouzdano hoće li se aplikacija pokrenuti. U tom slučaju mogu se izvršiti nepotrebne radnje u rukovatelju događajima SetSessionParameters.

Ovi moduli predstavljaju opis nekih općih algoritama, tj. procedure i funkcije koje se mogu pozivati ​​s raznih mjesta.

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

Možete dodati bilo koji broj zajedničkih modula. Kako bi metode Common Module bile dostupne negdje drugdje u konfiguraciji, moraju se definirati pomoću ključne riječi Export. Klijentske procedure zajedničkih modula bit će dostupne na Klijentu, a poslužiteljske – na Poslužitelju.

U općim modulima dostupan je samo odjeljak koji opisuje postupke i funkcije. Oni. u Općem modulu ne možete opisati varijable i ne možete opisati odjeljak glavnog programa.

Ako je potrebna globalna varijabla, možete koristiti ili parametre sesije ili varijable izvoza 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 opći modul, tada će metode izvoza deklarirane u ovom modulu biti dostupne izvana izravno, bez ikakvih dodatnih uputa.

Oni. the Opći modulće sudjelovati u formiranju globalnog konfiguracijskog konteksta.

Vlasništvo Globalno za opće module može biti korisno. Međutim, ne biste ga trebali koristiti posvuda za sve uobičajene module.

Oni , koji su označeni znakom Globalno, bit će kompiliran pri pokretanju sustava. Što je više takvih modula, program će se sporije pokretati.

Ako zastava Globalno Za Opći modul nije navedeno, tada će se kompilacija ovog modula izvršiti u trenutku prvog poziva (tj. nakon pokretanja sustava).

Osim toga, korištenje globalnih zajedničkih modula utječe na razumijevanje koda. Metode neglobalnog zajedničkog modula nazivaju se imenom Opći modul i naziv metode, na primjer:
Modul za izračun troškova.DistributeIndirectCosts();

U tom slučaju nazivi zajedničkih modula moraju odražavati sadržaj postupaka opisanih u njima. Navođenje naziva zajedničkog modula prilikom pozivanja procedure pomaže boljem razumijevanju koda.

Za Opći modul V Paleta svojstava možete postaviti svojstvo Privilegiran.

Privilegirani modul ne kontrolira prava pristupa. Ovo je neophodno ako Opći modul Potrebno je izvršiti masovnu obradu podataka, dobivanje 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 mnogo resursa. To treba učiniti što je brže moguće. Da biste to učinili, algoritmi koji izračunavaju plaće stavljaju se u povlaštene .

Istovremeno, sve procedure koje osiguravaju popunjavanje isplata plaća su izvan njih Zajednički moduli. U tim se postupcima vrši kontrola prava pristupa.

Na taj način mogu se postići značajna poboljšanja performansi. Ovo je osobito istinito kada se koristi mehanizam za kontrolu pristupa zapisima tablice red po red.

Ako je zajednički modul privilegiran, tada se procedure ovog modula mogu kompajlirati samo na poslužitelju.

Postoje situacije kada neki objekt treba biti nedostupan korisniku, na primjer, određeni direktorij. Ali prilikom izrade bilo kojeg dokumenta, potrebno je upućivanje na ovaj priručnik.

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

Da biste to učinili u povlaštenom Opći modul Trebali biste izraditi proceduru koja pristupa potrebnim podacima.

Ovaj postupak će biti pozvan iz odgovarajućeg dokumenta. Oni. korisniku su zapravo dodijeljena proširena prava u trenutku pozivanja ove procedure.

Za Zajednički moduli Moguće je odrediti mjesto kompilacije. Oznake se koriste za određivanje hoće li zajednički modul biti dostupan na klijentu (upravljanoj aplikaciji), na poslužitelju ili u načinu rada s vanjskom vezom.

Osim toga, ako prebacite način uređivanja konfiguracije na Upravljanu aplikaciju i redovnu aplikaciju, tada će biti moguć drugi kontekst kompilacije - Klijent (redovna aplikacija).

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

Uz mogućnost specificiranja oznaka kompilacije, moguće je specificirati direktive kompilacije za procedure i funkcije smještene u Common Module.

Ako je za metodu navedena direktiva kompilacije, iako je Common Module dostupan u svim navedenim kontekstima, dostupnost određene metode bit će ograničena direktivom kompilacije.

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 se kompajlirati u svim kontekstima definiranim za modul.

Oni. U biti će se izraditi više kopija postupka. Odabir određene kompilirane instance ovisi o tome gdje 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 definiranim za modul.

Generički moduli koji su istovremeno dostupni u nekoliko različitih konteksta prvenstveno su dizajnirani za stvaranje procedura koje su dostupne u više konteksta.

Prilikom stvaranja općeg modula, smatra se dobrom praksom ne specificirati direktive kompilacije. Oni. Dostupnost procedura i funkcija treba biti određena svojstvima samog modula.

S ovim pristupom, procedure klijenta bit će smještene u zasebnim zajedničkim modulima, a procedure poslužitelja bit će smještene u zasebnim zajedničkim modulima.

Moduli koji imaju nekoliko postavljenih zastavica kompilacije u praksi se iznimno rijetko koriste. Ovo su neke uobičajene akcije dostupne i na klijentu i na poslužitelju. Obično su to neki jednostavni izračuni.

Važno! Moguće je da Klijent pristupi metodama izvoznog poslužitelja Zajedničkog modula, ali samo ako je ovaj Zajednički modul kompajliran samo na poslužitelju. U tom slučaju postoji posebna zastavica za omogućavanje pristupa klijenta .

Za neglobalne zajedničke module moguće je predmemorirati vrijednosti koje vraćaju funkcije. Oni. Nakon prvog poziva funkcije, sustav može zapamtiti rezultat njenog izvršenja. Ako se ova funkcija ponovno pozove s istim parametrima, sustav će vratiti vrijednost iz predmemorije.

Svrha ovog mehanizma je ubrzati ponavljanje poziva. Da biste konfigurirali ovo ponašanje morate Paleta svojstava modula, postavite odgovarajuću vrijednost za svojstvo Ponovna upotreba povratnih vrijednosti.

Prema zadanim postavkama, ovo je svojstvo postavljeno na Ne koristi. Ostale moguće vrijednosti: cache Tijekom poziva, ili Za vrijeme trajanja sjednice.

Ovo svojstvo ima smisla koristiti samo za one funkcije čiji rezultati ovise isključivo o ulaznim parametrima. Ovaj je mehanizam dostupan samo za neglobalne zajedničke module.

Ako je odabrana vrijednost odgovarajućeg parametra Za vrijeme trajanja poziva, predmemorija ć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 predmemorija raditi dok korisnik radi.

Međutim, postoje određena vremenska ograničenja. Predmemorija se automatski briše 20 minuta nakon što vrijednost uđe u predmemoriju.

Modul obrasca

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

Osim događaja povezanih s kontrolama obrasca (gumbi, polja za unos), postoje događaji povezani izravno sa samim obrascem.

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

Postoje kontrolirani oblici i redovni oblici. Moduli ovih obrazaca razlikuju se prvenstveno po tome što je modul upravljanog obrasca 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 odjeljak glavnog programa.

Programski kod glavnog programa izvršit će se u trenutku inicijalizacije forme, tj. kada ga korisnik počne otvarati. Slika prikazuje popis standardnih događaja za upravljani obrazac.

Popis događaja upravljanog obrasca također je vidljiv na popisu svojstava izravno za sam obrazac. Ovaj popis se poziva u uređivaču upravljanih obrazaca.

U upravljanom obrascu možete rukovati događajem pisanja stavke. Ovaj događaj je prisutan samo za objektne forme (imenici, dokumenti i neki drugi). Ako obrazac nije vezan za određeni objekt, tada nema događaja pisanja.

Za modul redovnog oblika, popis standardnih događaja je nešto manji, jer U upravljanom obliku, mnogi se događaji uparuju (jedan se izvršava na klijentu, a drugi na poslužitelju). U svom normalnom obliku, sav kod se izvršava na klijentu.

Objektni modul

Ovi moduli su tipični za imenike, dokumente, planove vrsta kalkulacija, kontne planove i mnoge druge objekte. Objektni modul dizajniran je za obradu standardnih događaja. Na primjer, događaj za unos elementa imenika, događaj za pisanje elementa, brisanje, knjiženje dokumenta itd.

U principu, događaj pisanja također postoji u Modulu obrasca. Ali događaj pisanja u Modulu obrasca događa se tijekom procesa interaktivnog snimanja, kada se radi s određenim obrascem.

Događaj pisanja u objektnom modulu izvršit će se pri svakom pisanju iz bilo kojeg oblika danog objekta. Osim toga, ako je objekt napisan programski, aktivirat će se događaj modula objekta.

U događaj pisanja objektnog modula možete ugraditi sve provjere ispravnosti podataka koji se upisuju, budući da će se ovaj postupak izvršiti u vrijeme apsolutno bilo kojeg snimanja.

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

Donja slika prikazuje popis dostupnih događaja modula imenika.

U Object Module možete smjestiti odjeljak za opisivanje varijabli, opis proizvoljnih funkcija koje možda nisu povezane s događajem, kao i odjeljak glavnog programa.

U odjeljku glavnog programa možete, na primjer, inicijalizirati lokalne varijable određenog modula. Ovaj programski kod će se izvršiti kada se pristupi ovom objektnom modulu.

Treba napomenuti da su sve procedure objektnog modula kompilirane na poslužitelju. Sukladno tome, nisu potrebne direktive kompilacije za postupke i funkcije objektnog modula. 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 tzv Modul za upravljanje vrijednostima.

U Modul za upravljanje vrijednostima možete rukovati događajima pisanja Konstante i obrada provjere ispunjavanja.

Cijeli kontekst modula izvršava se na poslužitelju.

Za registre postoji Recordset Module.

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

U modulima objekata, modulima upravitelja vrijednosti (za konstante) i modulima skupa zapisa (za registre) možete opisati metode koje se mogu izvesti i te će metode biti dostupne izvana.

Oni. Uz korištenje fiksnih metoda klase objekta, možete kreirati dodatne metode za objekt u modulu objekta. Ovaj modul treba opisati odgovarajući postupak s ključnom riječi Izvoz.

Tada će ovom postupku biti moguće pristupiti izvana. Štoviše, ova će metoda biti prikazana u kontekstualnom opisu. Nove metode u kontekstualnom opisu označene su plavim fontom (plava ikona p() za postupke i f() za funkcije).

Slično tome, možete stvoriti novo svojstvo deklariranjem varijable s ključnom riječi Izvoz. Ovom posjedu također se može pristupiti 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 ne spremaju se u bazu podataka.

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

Modul upravitelja

Ovaj modul postoji za mnoge objekte (imenike, dokumente, registre itd.). Modul se otvara putem kontekstnog izbornika za objekt ili putem Paleta svojstava, ili kroz prozor za uređivanje.

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

Osim toga, možete kreirati dodatne metode u modulu upravitelja i označiti da su to metode izvoza. U ovom slučaju moguće je pristupiti ovim metodama izvana.

Za izvođenje ovog poziva potrebno je dobiti tip podataka DirectoryManager.

Razlika između metoda izvoza modula upravitelja i modula objekta je u tome što za pristup metodi modula objekta prvo morate dobiti sam objekt (to jest, nekako dobiti vezu i zatim tu vezu pretvoriti u objekt) .

Nakon toga bit će dostupne izvozne varijable i metode objektnog modula. Za modul upravitelja poziv je jednostavniji, na primjer:
Directories.Counterparties.MethodName

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

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

Što se tiče modula upravitelja, on opisuje neke zajedničke radnje za grupu ili za sve elemente imenika ili nekog dokumenta. Na primjer, ako trebate ispisati stavku imenika, možete koristiti modul objekta.

Ali u Modulu upravitelja moguće je kreirati univerzalniji mehanizam koji će ispisivati, između ostalog, grupu elemenata.

Osim toga, pristup objektu Module još uvijek je duža radnja. Stoga je bolje riješiti ovaj problem u modulu upravitelja.

Ovime završavamo naše upoznavanje s modulima u konfiguraciji sustava 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 klasificirani su prema vrstama o kojima smo govorili u ovom članku. Svaki pogled određen je njegovim položajem i dostupnim programskim kontekstom.
  • Struktura modula sastoji se od nekoliko odjeljaka, koji su raspoređeni u određenom nizu. Sastav sekcija određen je tipom modula.

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

Do sada smo sav svoj programski kod razmatrali odvojeno od aplikativnog rješenja, te smo ga u pravilu pisali u nekoj vlastitoj maloj testnoj 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, što su oni, 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 Otpuštanje robe u skladište. Oba dokumenta imaju postupke koji izračunavaju iznos u tabličnom retku.

Svaki dokument sadrži istu šifru za izračun iznosa.

Postupak MaterialsPriceOnChange(Element)
TabularPart Row = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Kraj postupka

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

Izrađujemo opći modul za izračun iznosa

I tako počnimo, prvo morate stvoriti zajednički modul. Da biste to učinili, idite na 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đer provjerite da li ste potvrdili okvire uz Klijent (upravljana aplikacija) i Poslužitelj u prozoru svojstava.

Sada morate malo promijeniti kod u modulu obrasca dokumenta. Lijevo u konfiguraciji tražimo dokument Dolazak robe, širimo prozore na prozor Obrasci, dva puta kliknemo na Obrazac dokumenta i u prozoru obrasca koji se otvori idemo na karticu Moduli na dnu. Imamo ovaj kod

Ovaj postupak radi kada mijenjate Količina u tabelarnom dijelu dokumenta Prijem robe i izračunava iznos.

&NaKlijentu



Kraj postupka

I ova procedura počinje raditi kada se Cijena promijeni u tabelarnom dijelu dokumenta Prijem robe i izračuna iznos.

&NaKlijentu

TabularPart Row = Elements.Materials.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Kraj postupka

Zamijenite ga ovim

&NaKlijentu
Procedura MaterialsQuantityOnChange(Element)
TabularPart Row = Elements.Materials.CurrentData;

Kraj postupka
&NaKlijentu
Postupak MaterialsPriceOnChange(Element)
TabularPart Row = Elements.Materials.CurrentData;
Rad s dokumentima.Izračunaj zbroj(Red tabličnogdijela);
Kraj postupka

Kao što ste primijetili, mijenja se samo jedan redak; na prvi pogled može se činiti da je jedan redak zamijenjen drugim. Ali ne zaboravite da je ovo primjer. Zapravo, količina koda može biti puno veća ako ste, na primjer, izvršili izračune pomoću složene formule, u kojem slučaju će se kod znatno smanjiti.

Isto radimo i za dokument Otpust robe iz skladišta, pokrećemo i provjeravamo funkcionalnost šifre. Dakle, vi i ja smo napravili prvi zajednički modul, nadam se da će moj članak biti koristan nekome.

Zajednički moduli odgovorni su za pohranjivanje procedura i funkcija koje se pozivaju s drugih mjesta u sustavu 1C. Smatra se dobrom praksom postavljanje koda koji se poziva više puta u proceduru u zajednički modul. Ovo je pravilo univerzalno za sve konfiguracije, tako da bi svaki programer 1C 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.

Stvaranje 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. Ovdje je najbolje prenijeti kod u zajednički modul, no prije toga ga morate izraditi. Da bismo to učinili, moramo otići u konfigurator i pronaći karticu "Općenito" u konfiguracijskom stablu. Zatim odaberite “Opći moduli” i upotrijebite gumb u obliku bijelog plusa na zelenom krugu.

Desno će se otvoriti svojstva dodanog zajedničkog modula, a mi moramo otkriti što svaki 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 drugo, u budućnosti će biti moguće promijeniti svojstva u skladu sa zadacima:

  • "Globalno". Ova se zastavica postavlja ako je modul namijenjen za pohranjivanje procedura i funkcija koje se moraju pozvati bez navođenja naziva modula. Naravno, 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". Ovisi o postavkama sustava i regulira mogu li se procedure modula izvršavati na strani klijenta;
  • "Poslužitelj". Označeni su opći moduli unutar kojih se algoritmi planiraju postaviti za izvođenje na poslužitelju;
  • "Vanjsko spajanje". Procedure modula s aktiviranim ovim svojstvom moći će se izvršiti putem veze vanjskog izvora;
  • "Poziv poslužitelja". Odgovoran za dopuštanje procedurama iz modula da pozovu poslužitelj dok se izvode na klijentu;
  • "Privilegiran". Omogućavanje ove postavke omogućit će vam da ne provjeravate prava pristupa prilikom pokretanja koda procedure modula. Možete pozvati zajednički modul s ovom postavkom samo na poslužitelju. Postavke klijenta i vanjske veze bit će resetirane;
  • "Ponovna upotreba". Može imati sljedeće vrijednosti: "Ne koristi", "Za vrijeme trajanja sesije", "Za vrijeme trajanja poziva". Prilikom višestrukog pozivanja jedne procedure sustav može koristiti prethodno izračunate podatke unutar procedure (poziv) ili život cijele sesije (pokretanje 1C). Trebali biste biti vrlo oprezni s ovom postavkom, jer može doći do pogrešaka zbog neispravne upotrebe takvih modula.

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

Primjer prijenosa koda u uobičajeni 1C modul

Razmotrimo situaciju u kojoj imamo dva događaja na obrascu dokumenta koji uključuju jedan postupak za množenje količine i cijene u tabličnom dijelu. Ovo je prilično uobičajen algoritam jer se nalazi u mnogim dokumentima o nabavi i prodaji. Prenesimo kod procedure u zajednički modul, koji se prvo mora kreirati da bi se ovaj kod mogao koristiti u drugim dokumentima.

&OnClient Procedure ProductsPriceOnChange(Element) RecalculateAmount(); Kraj postupka &OnClient postupak ProductsQuantityOnChange(Element) RecalculateAmount(); Kraj procedure &Na klijentskoj proceduri Ponovno izračunaj iznose() Redak TC = Elements.Products.CurrentData; Line PM.Amount = Line PM.Quantity * Line PM.Price; Kraj postupka

Budući da nam za naš zadatak treba samo poziv klijenta i ne trebaju nam podaci iz baze podataka, postavili smo samo oznaku “Klijent”. Ako želite koristiti isti modul u budućnosti za složenije izračune, označite "Poslužitelj" u svojstvima. Pripremna faza je završena i možemo prijeći na pisanje koda.


Kreirajmo proceduru izvoza u modulu i tamo prenesimo algoritam za izračun iznosa iz procedure u modulu obrazac. Niz odjeljka tablice koristit će se kao parametar procedure na ulazu. U modulu obrasca dokumenta mijenjamo pozive procedura u istom modulu u pozive procedura iz općeg modula.


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

Fragment 1

&Na postupku klijenta ProductsPriceWhenChanged(Element) //pozivanje procedure iz općeg modula CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //Ponovo izračunajiznos(); Kraj procedure &Na klijentskoj proceduri ProductsQuantityWhenChanging(Element) //pozivanje procedure iz općeg modula CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //Ponovo izračunajiznos(); Kraj procedure &Na klijentskoj proceduri Ponovno izračunaj iznose() Redak TC = Elements.Products.CurrentData; Line PM.Amount = Line PM.Quantity * Line PM.Price; Kraj postupka

Fragment 2

Kada se sustav pokrene, nećemo primijetiti razliku, ali ova je struktura koda mnogo praktičnija za čitanje i održavanje. Naravno, u ovom primjeru količina koda ne može prikazati sve prednosti. U slučaju složenog algoritma za desetke konfiguracijskih objekata, dobitak u količini koda i njegovoj strukturi također će utjecati na brzinu sustava. Osim toga, iskusni programeri 1C preporučuju da se algoritmi ne opisuju u modulima obrazaca, već da se postavljaju u ispravno konfigurirane opće module.

Prilikom izrade općih modula trebali biste uzeti u obzir općeprihvaćena pravila za njihovu izradu:

  • Stavite procedure i funkcije povezane sa sličnim funkcijama u zasebni zajednički modul;
  • Naziv modula trebao bi odražavati njegovu pripadnost kontekstu (klijent, poslužitelj) i izbjegavati uobičajene riječi (rukovatelji, procedure itd.);
  • Odvojite internu poslužiteljsku logiku aplikacije i klijentsku logiku za sučelje;
  • Budite oprezni pri izradi globalnog zajedničkog modula. Nepotrebno pozivanje na proceduru kroz naziv modula može dovesti do zabune, posebno ako sustav podržava više razvojnih timova.

Ispravno kreirani moduli pomoći će vam da se krećete kroz strukturu konfiguracije i puno brže napravite poboljšanja. Ako vidite priliku da korisnu funkciju učinite univerzalnom i stavite je u zajednički modul, učinite to. Ubuduće ćete vi i vaši kolege biti zahvalni na ovoj odluci.

Najbolji članci na temu