1c ponovna uporaba povratnih vrijednosti. Opći moduli. Zastava vanjske veze


   Ispis (Ctrl + P)

Objekti smješteni u granama stabla konfiguracije Općih modula namijenjeni su za postavljanje u njih tekstova funkcija i postupaka koji se mogu pozvati iz bilo kojeg drugog konfiguracijskog modula.
UPOZORENJE! Uobičajeni modul može sadržavati samo definicije postupaka i funkcija.
  Postupci i funkcije općeg modula, za koji je ključna riječ Export navedena u naslovima, dio su globalnog konteksta. Više o postupcima pisanja možete saznati u glavnom modulu u odjeljcima "Format kôda softverskog modula" i "Operatori" u ugrađenoj jezičnoj pomoći.
  Da biste uredili opći modul, u paleti svojstava objekta tipa Opći moduli u prozoru Konfiguracija, u svojstvu Modula kliknite vezu Otvori. Tekst općeg modula bit će izdan za uređivanje u uređivaču teksta 1C: Enterprise sustava u načinu uređivanja teksta softverskog modula.
  Zajednički modul, koji je dio konfiguracije, sprema se samo kao dio konfiguracije.
  Svojstvo Global određuje jesu li izvezene metode općeg modula dio globalnog konteksta.
  Ako je svojstvo Global postavljeno na True, tada su izvezene metode zajedničkog modula dostupne kao globalne metode konteksta.
  Ako je svojstvo Global postavljeno na Lažno, tada se u globalnom kontekstu stvara svojstvo s imenom koje u metapodacima odgovara imenu zajedničkog modula. Ovo svojstvo je samo za čitanje. Vrijednost ovog svojstva je objekt GeneralModule. Izvezene metode ovog općeg modula dostupne su putem ovog objekta. Dakle, poziv metodama neglobalnih zajedničkih modula izgleda kao XXXXX.YYYYY, gdje je XXXXX naziv entiteta koji odgovara kontekstu zajedničkog modula, a YYYYY je naziv izvezene metode zajedničkog modula.
  Primjer:

Radite s trgovinskom opremom. Spojite crtične kodove skenera ();

Različiti kontekst i opći moduli

Koristeći svojstva uobičajenih modula i pretprocesora upute možete organizirati izvršavanje različitih metoda zajedničkih modula u pravom kontekstu.
  Svako svojstvo zajedničkog modula odgovorno je za sposobnost sastavljanja (i izvršavanja) zajedničkog modula u određenom kontekstu.
  Dostupna su sljedeća svojstva koja su odgovorna za kontekst u kojem su dostupne uobičajene metode modula:
Klijent (redovna prijava) - metode općeg modula bit će dostupne debelom klijentu u načinu redovite aplikacije;
  ● - uobičajene modulske metode bit će dostupne za tanke klijente, web klijente i za debele klijente u sustavu
  upravljani način aplikacije;
  ● Poslužitelj - metode općeg modula bit će dostupne na poslužitelju;
Vanjska veza   - U vanjskoj vezi bit će dostupne uobičajene modulske metode.
  Ako se istovremeno postavi nekoliko svojstava, to znači da će metode zajedničkog modula biti dostupne u nekoliko konteksta.
  Ako opći modul ima svojstvo Server i neko drugo svojstvo, to znači da će opći modul biti dostupan istovremeno na poslužitelju i u odabranom klijentu. Potrebno je razumjeti da će u stvari biti nekoliko verzija sastavljenog koda (prema broju odabranih klijenata i zapravo za poslužitelj).
  Nadalje, ako se metoda koja se nalazi u tako uobičajenom modulu zove od klijenta, tada će se koristiti klijentova kopija zajedničkog modula, a ako je sa poslužitelja, poslužiteljska. U tom slučaju, pomoću naredbi pretprocesora (pogledajte ovdje za detalje), možete "zaštititi" poslužitelj od koda koji se na njemu ne može izvršiti.
  Razmotrimo primjer. Opći modul (koji se može izvesti na tankom klijentu i na poslužitelju) ima metodu koja ima malo drugačije ponašanje na strani tankog klijenta i na strani poslužitelja. Pogledajmo kako se to može učiniti:



#Ako tanki kupac onda
// Prikaži upozorenje
Obavijest o prikazivanju korisnika("O klijentu");
# endif
KonetsProtsedury
  Tada će na strani poslužitelja kôd imati sljedeći oblik:
postupak Općenita metoda modula ()   izvoz
// Tu se postavljaju razni važni kodi
KonetsProtsedury
  A na tankoj strani klijenta kod će izgledati ovako:
Opća metoda modula () Postupak izvoza
// Tu se postavljaju razni važni kodi
// Prikaži upozorenje
  Upozorenje ShowUser ("Na klijentu");
KonetsProtsedury

Postoji nekoliko načina za prijenos kontrole s klijenta na poslužitelj:
  ● nazovite uobičajeni modul poslužitelja;
  ● u obliku ili naredbenom modulu nazovite metodu kojoj prethode upute za sastavljanje & OnServer, & OnServerWithout Kontekst

Istodobno je nemoguće pozvati metode zajedničkih modula klijenta (za koje svojstvo poslužitelja nije postavljeno) i klijentske metode modula obrasca ili naredbenog modula iz poslužiteljskih postupaka. Uprava će se vratiti klijentu nakon dovršetka poziva najviše metode vanjskog poslužitelja.
  Iznimka su moduli obrasca i metode naredbenog modula, kojima su prethodile naredbe kompilacije & Na klijentu na poslužitelju, & Na klijentu na poslužitelju bez konteksta
Treba spomenuti i sljedeće točke:
  ● Ako je zajednički modul dostupan za više klijenata, tada prilikom pisanja programskog koda treba uzeti u obzir maksimalna ograničenja koja klijenti mogu nametnuti ili upotrijebiti upute precesora za "izoliranje" koda specifičnog za određenog klijenta.
  ● Upute za predprocesore također imaju smisla kada jedan zajednički modul ima nekoliko konteksta izvršenja, na primjer, vanjsku vezu i tanki klijent ili (što je mnogo češće) neki klijent i poslužitelj. U tom slučaju će upute za predprocesore uokviriti interaktivni kôd koji se ne može koristiti na poslužitelju, ali možda i na klijentu (vidi gornji primjer).
  Za više informacija o uputama pretprocesora i smjernicama sastavljanja, pogledajte odjeljak „Provođenje postupaka i funkcija“ u ugrađenoj jezičnoj pomoći.
  Svojstvo poslužiteljskog poziva koristi se za kontrolu mogućnosti pozivanja izvezenih metoda zajedničkog modula poslužitelja iz kodova klijenta.
  Ako je svojstvo postavljeno, izvezene metode zajedničkog modula na strani poslužitelja dostupne su za pozivanje od klijenta. Ako svojstvo nije postavljeno, tada se takve izvezene metode mogu pozivati \u200b\u200bsamo iz metoda servera (obje uobičajene metode modula poslužitelja i metode poslužitelja modula obrasca i naredbeni moduli).
Vijeće. Preporučuje se postavljanje svojstva poslužitelja poziva na False u slučajevima kada zajednički modul poslužitelja sadrži metode koje je nepoželjno pozivati \u200b\u200bod klijenta (na primjer, iz sigurnosnih razloga).
primjedba, Ako su svojstva postavljena u isto vrijeme Klijent (redovna prijava), Klijent (upravljana aplikacija), Vanjska veza, tada se svojstvo poslužiteljskog poziva automatski vraća. Ako je postavljeno svojstvo poslužiteljskog poziva, svojstva se automatski vraćaju Klijent (redovna prijava), Klijent (upravljana aplikacija)   i Vanjska vezaako su ta svojstva postavljena u isto vrijeme.
  svojstvo privilegovan   osmišljen tako da onemogući kontrolu pristupa prilikom izvršavanja metoda općeg modula.
  NAPOMENA. Ako je posjed privilegovan   instalirano, tada se svojstvo Server automatski postavlja na opći modul, a preostala svojstva se resetiraju ( Klijent (redovna prijava), Klijent (upravljana aplikacija)   i B vanjska veza). Povlašteni zajednički modul može se izvršiti samo na poslužitelju.

Ponovna upotreba povratnih vrijednosti

Ako zajednički modul nije globalan, tada postaje svojstvo Ponovna upotreba povratnih vrijednosti. Ovo svojstvo može uzeti sljedeće vrijednosti:
  ● Ne koristi - ponovna uporaba povratnih vrijednosti za funkcije ovog općeg modula se ne koristi.
● U vrijeme poziva i U vrijeme sesije - metoda za određivanje ponovne upotrebe podataka koristi se za opći modul. Suština ove metode je da tijekom izvršavanja koda sustav pamti parametre i rezultat funkcija nakon prvog poziva funkcije. Kada se funkcija ponovo pozove s istim parametrima, pohranjena vrijednost se vraća (od prvog poziva) bez izvršenja same funkcije. Ako funkcija tijekom izvršavanja promijeni vrijednosti parametara, ponovno pozivanje funkcije to neće učiniti.
  Mogu se razlikovati sljedeće značajke spremanja rezultata poziva:
  ● ako se funkcija izvršava na poslužitelju i poziva iz koda poslužitelja, vrijednosti parametara i rezultat poziva pamte se za trenutnu sesiju na strani poslužitelja;
  ● ako se funkcija vrši na debelom ili tankom klijentu, vrijednosti parametara i rezultata poziva pohranjuju se na strani klijenta;
  ● ako se funkcija vrši na strani poslužitelja i poziva se iz klijentovog koda, tada se parametri poziva pamte i na strani klijenta i na strani poslužitelja (za trenutnu sesiju).
  Spremljene vrijednosti se brišu:
  ● ako je svojstvo postavljeno na Tijekom trajanja poziva:
  ● na strani poslužitelja - kad se kontrola vrati s poslužitelja;
  ● na strani klijenta - nakon završetka postupka ili funkcije ugrađenog jezika najviše razine (sustav ga zove iz sučelja, a ne iz drugog postupka ili funkcije ugrađenog jezika);
  ● ako je zajedničko svojstvo modula postavljeno na Vrijeme sesije:
  ● na strani poslužitelja - na kraju sesije;
  ● na strani klijenta - pri zatvaranju klijentske aplikacije.
  Spremljene vrijednosti bit će izbrisane:
  ● na poslužitelju, u debelom klijentu, u vanjskoj vezi, u tankom klijentu i na web klijentu s uobičajenom brzinom veze - 20 minuta nakon izračuna uskladištene vrijednosti ili 6 minuta nakon zadnje upotrebe;
  ● za tankog i web klijenta s malom brzinom veze - 20 minuta nakon izračuna pohranjene vrijednosti;
  ● s nedostatkom RAM-a u tijeku rada na poslužitelju;
  ● prilikom ponovnog pokretanja tijeka rada;
  ● Prilikom prebacivanja klijenta u drugi tijek rada.
  Nakon brisanja vrijednosti, poziv izvezene funkcije izvodi se kao prvi poziv.
  Ovo svojstvo zajedničkih modula ne utječe na izvršenje postupaka - postupci se uvijek izvršavaju.

Ako je opći modul postavio ponovnu upotrebu povratnih vrijednosti, tada vrste parametara izvezenih funkcija podliježu brojnim ograničenjima. Vrste parametara mogu biti samo:
  ● primitivni tipovi ( Nedefinirano, NULL, Boolean, broj, string, datum).
  ● Sve reference na objekte baze podataka.
  ● Strukture s vrijednostima svojstava navedenih vrsta. U ovom slučaju identitet parametara kontrolira se "u skladu sa sadržajem" struktura.
  Ako izvezena funkcija vrati objekt, tada se zapravo vraća referenca na objekt pohranjen u predmemoriji. Ako se nakon primanja ove veze stanje objekta promijeni, naknadni poziv istoj funkciji vraća vezu na već izmijenjeni objekt, a da se funkcija zapravo ne izvrši. To će se ponašanje promatrati sve dok pohranjena vrijednost nije izbrisana (iz bilo kojeg razloga). Drugim riječima, promjena stanja objekta dobivena kao rezultat funkcijskog poziva iz zajedničkog modula uz opetovano korištenje vraćenih vrijednosti nije osnova za stvarni poziv funkcije. Također biste trebali zapamtiti da je predmemorija vraćenih predmeta ravnodušna
  povlašteno stanje načina u trenutku poziva funkcije uz opetovanu upotrebu vraćenih vrijednosti. Ova značajka može dovesti do sljedećeg ponašanja:
  ● Stvarno izvršavanje funkcionalnog poziva uz opetovanu upotrebu povratnih vrijednosti (prvi poziv) izvedeno je kad je omogućen povlašteni način rada.
  ● Prilikom izvršavanja funkcije primljen je objekt koji se ne može dobiti s isključenim povlaštenim načinom rada.
  ● Naknadni pozivi s funkcijama upućeni su bez postavljanja privilegiranog načina.
  ● Međutim, sve dok se ne očisti predmemorija vraćenih predmeta ili se stvarni poziv ne ponovi, funkcija će vratiti formalno nepristupačan objekt.
  ● Obrnuto ponašanje vrijedi i kad je prvi poziv upućen bez postavljanja privilegiranog načina, a u povlaštenom načinu se objekt koji bi mogao biti primljen u povlaštenom načinu ne vraća.

Ako opći modul ima svojstvo Ponovna upotreba povratnih vrijednosti   postavljeno na Tijekom trajanja sesije, tada se vrijednosti tipa ne mogu koristiti u vrijednostima koje vraćaju funkcije takvog modula Voditelj privremenih tablica.
Ako se funkcija zajedničkog modula, sa skupom ponovne upotrebe, poziva iz istog općeg modula (na primjer, s nazivom CommonModule), trebali biste zapamtiti sljedeću značajku: ako se funkcija zove imenom MyFunction (), tada će se funkcija izvršavati svaki put kada se funkcija poziva , Kako bi se koristile pohranjene vrijednosti, funkciju treba nazvati svojim punim nazivom:
CommonModule.MoyFunction ().
  Globalna metoda konteksta briše sve ponovne vrijednosti, kako na strani poslužitelja tako i na strani klijenta, bez obzira na to gdje se metoda zove. Nakon izvršenja metode RefreshValues \u200b\u200b()   prvi poziv funkcije bit će u potpunosti izvršen.

Opći moduli 1C   - objekt konfiguracije metapodataka 1C 8.3 i 8.2, koji pohranjuje programski kod koji se u konfiguraciji često naziva. Funkcija / postupak može se pozvati s bilo kojeg mjesta u konfiguraciji (ako se izvozi).

Kako se koristi zajednički modul

Dobra je praksa da se postupak ili funkcija stave u zajednički modul ako se on zove na više mjesta. Prvo, ako se postupak prilagodi, treba ga ispraviti samo na jednom mjestu. Drugo, ovim se postiže veći red u kodu.

Tipičan primjer općeg modula je obrada transakcije u nekom registru, dobivanje iznosa razlike u radnim danima, pretvaranje valutnih tečajeva, pretvaranje količine / cijene / iznosa u tabelarni odjeljak i druge funkcije.

Uobičajena svojstva modula

Jedna od glavnih značajki zajedničkih modula drugih modula je ta što ne možete deklarirati zajedničke varijable.

Besplatno preuzmite 267 video lekcija:

Razmotrimo paletu svojstava općeg modula detaljnije:

  • globalan   - ako se postavi zastava, funkcije i postupci ovog modula postaju dostupni u globalnom kontekstu. tj mogu se pozvati bilo gdje u konfiguraciji i pristupiti bez naziva zajedničkog modula. Međutim, dodan je uvjet - naziv postupaka i funkcija u ovom općem modulu mora biti jedinstven u globalnom kontekstu.
  • server   - Postupci i funkcije ovog općeg modula mogu se izvoditi na poslužitelju.
  • Vanjska veza   - programski kodovi ovog općeg modula mogu se izvršiti kada su spojeni na vanjski izvor (na primjer, COM).
  • Klijent (upravljana aplikacija)   - postupci i funkcije ovog općeg modula mogu se koristiti u debelom klijentu u upravljanom načinu aplikacije.
  • Klijent (redovna prijava)   - programski kodovi ovog općeg modula mogu se koristiti u debelom klijentu u redovnom načinu aplikacije.
  • Poziv na poslužitelju   - zastava koja omogućava klijentu da koristi postupke i funkcije iz ovog općeg modula.
  • - ako je postavljeno True, provjera autorizacije bit će onemogućena u ovom općem modulu.
  • recikliranje   - određuje postavke vraćenih vrijednosti, ako je opcija omogućena, sustav će nakon prvog izvršenja upamtiti vrijednost za dane ulazne parametre i vratiti gotovu vrijednost. Može preuzeti sljedeće vrijednosti: ne koristi   - isključivanje, tijekom poziva   - tijekom određenog postupka, za vrijeme trajanja sesije   - dok korisnik ne zatvori sesiju (program).

Ako počnete učiti 1C programiranje, preporučujemo naš besplatni tečaj (ne zaboravite

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

  • Što je softverski modul i od kojih se dijelova sastoji?
  • Čemu služi aplikacijski modul? Zašto postoje dvije? Kada se izvodi? Koje su suptilnosti rada?
  • Koji su događaji povezani s pokretanjem sustava, kako i gdje ih obraditi?
  • Za što se koristi vanjski priključni modul? Kada i kako ga koristiti?
  • Kada se koristi modul sesije?
  • Što su generički moduli? Koja su njegova svojstva i pravila rada? Zašto koristiti svojstvo "Ponovno korištenje povratnih vrijednosti"?
  • Kada se koristi modul obrasca i koji se događaji u njemu mogu obraditi?
  • Za što je objektni modul namijenjen? Od kojih se dijelova sastoji? Kako pregledati dostupne događaje modula?
  • Koje suptilnosti rada postoje s modulima za upravljanje vrijednosnim papirima (za konstante) i modulima za snimanje (za registre)?
  • Koje su razlike između objektnog modula i upravljačkog modula? Kada koristiti potonje?

primjenjivost

U članku se govori o platformi 1C: Enterprise 8.3.4.496. Materijal je relevantan za trenutna izdanja platforme.

Moduli u 1C: Enterprise 8.3

Moduli su oni objekti u kojima se nalazi programski kod.

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

Svaka linija koda treba biti u nekom modulu. Razlikovati između modula opće namjene i objektnih modula. Neki se moduli mogu sastaviti i na klijentu i na poslužitelju, a neki samo na poslužitelju.

Modul se može sastojati od nekoliko odjeljaka. Odjeljak opis varijable opisuje lokalne varijable ovog modula koje se kasnije mogu koristiti u bilo kojem postupku.

Unutar svakog postupka možete pristupiti varijabli modula. Pored toga, unutar samog postupka može postojati još jedna varijabla s istim nazivom. Ovo će biti lokalna varijabla ovog postupka.

Unatoč istom nazivu, to su dvije različite varijable: jedna se koristi unutar određenog postupka, a druga izvan nje.

U nekim modulima može se navesti mjesto sastavljanja (dostupnost) na poslužitelju ili na klijentu za varijable. Na primjer:

Nakon poglavlja za opis varijabli slijedi odjeljak postupaka i funkcija, gdje su naznačene lokalne metode ovog modula. Neki moduli trebaju naznačiti gdje će se sastaviti postupak ili funkcija.

U principu, direktiva za sastavljanje može se izostaviti. U ovom je slučaju zadana smjernica za kompilaciju Server. Međutim, radi praktičnosti analize programskog koda, preporučuje se izričito navesti gdje će se ovaj postupak sastaviti. Redoslijed opisivanja postupaka nije važan.

Na kraju modula, nakon opisa svih postupaka i funkcija, nalazi se odjeljak glavnog programa, u kojem se mogu nalaziti neki operatori, a lokalne varijable modula obrasca se inicijaliziraju. Ovaj se odjeljak izvodi pri pristupu modulu.

Tako, na primjer, kada otvorite oblik elementa, prvo se izvršava odjeljak glavnog programa modula oblika.

Treba napomenuti da odjeljak varijable deklaracije i odjeljak glavnog programa ne postoje za sve module (tj., U nekim modulima ti odjeljci nisu dopušteni). Odjeljak koji opisuje postupke i funkcije može postojati u apsolutno bilo kojem modulu.

Aplikacijski modul

Ovaj je modul dizajniran za obradu događaja pokretanja i dovršetka aplikacije. Na primjer, kada pokrenete aplikaciju, tečajeve možete preuzeti s interneta. Na kraju aplikacije možete s korisnikom provjeriti njegove namjere za dovršetak djela.

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

To mogu biti događaji iz čitača magnetske kartice, fiskalnog registra. I tim se događajima također može na neki način obraditi.

Treba napomenuti da se pokretanje interaktivnog sustava nadgleda u aplikacijskom modulu.

Aplikacijski modul neće raditi ako se program 1C pokrene, primjerice, u načinu povezivanja. U ovom se slučaju programski prozor ne stvara.

Treba imati na umu da u Platformi 8.3 postoje dva različita aplikacijska modula: Upravljani aplikacijski modul i Normalni aplikacijski modul. Događaji upravljanog aplikacijskog modula obrađuju se kada se pokrenu Thin and Thick klijent upravljane aplikacije i Web klijenta.

modul Redovita primjena   djeluje kada pokreće Debelog klijenta u načinu rada Redovita primjenau kojem se u obliku nalazi redovito naredbeno sučelje Glavni izbornik.

Ako se aplikacija pokreće upravlja, i u Redovita primjena, potrebno je opisati postupke za upravljanje kao za modul Upravljana aplikacijapa za modul Redovita primjena.

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

Ovaj modul možete otvoriti i iz palete svojstava stavke korijenske konfiguracije.

Za otvaranje modula Redovita primjena, trebali biste se obratiti konfiguracijskim postavkama (naredba parametriu izborniku usluga).

Obrazac će se otvoriti parametri, Na oznaku zajedničkamora biti naveden način uređivanja konfiguracije Upravljana aplikacija   i Redovita primjena.

U ovom slučaju modul Redovita primjena   također se može otvoriti iz svojstava korijenskog čvora.

Popis događaja koji se mogu obraditi upravljai Redovita primjena   isto.

U ovaj modul možete postaviti odjeljak za deklariranje varijabli, odjeljak za opis arbitrarnih postupaka i funkcija i odjeljak za glavni program. No osim proizvoljnih postupaka i funkcija, u modulu se mogu nalaziti i posebni alati za obradu događaja.

Popis dostupnih alata za upravljanje možete vidjeti ako pozovete popis postupaka i funkcija trenutnog modula kad je modul otvoren.

Otvara se prozor Procedura i funkcije koji prikazuju sve postupke i funkcije ovog modula kao i događaje za koje rukovaoci još nisu stvoreni.

Postoje dva događaja koji se odnose na pokretanje sustava („prije“ i „kada“). Dva događaja povezana s gašenjem sustava ("prije" i "kada". Kao i obrada vanjskih događaja (na primjer, događaji trgovačke opreme).

Kad se obradnik događaja "prije" izvrši, smatra se da akcija još nije završena. Kada se rukovoditelj događaja "kada" izvrši, radnja je već završena.

događaj Prije nego što pokreneteSistemenastaje u trenutku kada se pokreće Enterprise 8.3, ali sama aplikacija još se nije pojavila na ekranu. Ovaj događaj ima parametar kao što je neuspjeh.

Ako ovaj parametar postane Istina, aplikacija se neće pokrenuti. događaj POČETAK SUSTAVApretpostavlja da je radnja već završena, prozor je već stvoren 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 sustava, aplikacija je i dalje otvorena i možete je odbiti dovršiti. Kad se sustav isključi, prozor programa se već zatvorio. Moguće je izvoditi samo dodatne radnje, na primjer, izbrisati neke datoteke ili poslati e-poštu.

U modulu Upravljana aplikacija   upute za sastavljanje postupaka i funkcija nisu naznačene, budući da se modul u potpunosti sastavlja na strani klijenta. To znači da u postupcima i funkcijama modula nećemo moći izravno pristupiti, primjerice, referentnim knjigama.

Ako iz modula Upravljana aplikacija   trebate uputiti poslužiteljski poziv, tada ćete za to trebati stvoriti poseban   s oznakom setu .

U modulu Redovita primjena   Takvih ograničenja nema jer će se ovaj modul sastaviti nakon učitavanja Debelog klijenta. U Debelom klijentu dostupne su gotovo sve vrste podataka.

Postupci, funkcije i varijable aplikacijskog modula mogu se opisati kao izvezeni.

Budući da je modul u potpunosti sastavljen na Klijentu, to znači da se u postupcima klijenta možemo odnositi na ovu metodu i ovo svojstvo.

Na primjer, iz modula obrasca objekta možete nazvati postupak ili funkciju aplikacijskog modula. No, preporuča se korištenje uobičajenih modula za opis uobičajenih algoritama. Glavna svrha aplikacijskog modula je obraditi početnu i krajnju točku.

Analogno aplikacijskom modulu, ovaj je modul dizajniran za rukovanje događajem otvorenog programa i događajem isključivanja.

Za razliku od aplikacijskog modula, koji se pokreće u trenutku interaktivnog pokretanja aplikacije, modul vanjskog povezivanja djeluje u načinu kombinirane veze, tj. kada se stvori objekt 1C: Enterprise 8 i uspostavi veza s određenom bazom.

U ovom modulu postoje događaji: POČETAK SUSTAVAi Po završetku sustava.

Vanjski modul povezivanja može se otvoriti pomoću kontekstnog izbornika na razini objekta konfiguracije korijena ili palete svojstava korijenskog čvora.

Proces vanjske veze proces je rada na programu s informacijskom bazom, a ne interaktivni. Prema tome, u ovom trenutku ne možete koristiti dijaloške obrasce ili prikazivati \u200b\u200bupozoravajuće poruke, jer ne postoji korisničko sučelje.

U modulu vanjske veze moguće je opisati izvozne varijable i načine izvoza koji će biti dostupni na strani na kojoj se obavlja vanjski poziv 1C: Enterprise 8.3.

Budući da u vanjskoj vezi nema korisničkog sučelja, modul vanjske veze u potpunosti se sastavlja na poslužitelju.

Sesijski modul

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

Sesijski modul možete otvoriti bilo kroz kontekstni izbornik ili kroz paletu svojstava korijenskog čvora.

Session Module pruža događaj Postavljanje postavki sesije.

Kada aplikacija počne, ovaj se postupak naziva najprije. Parametri sesije potrebni su tijekom bilo kojeg rada aplikacije: i tijekom interaktivnog pokretanja i kod pokretanja u načinu vanjske veze.

Session Module opisuje različite akcije za inicijalizaciju parametara sesije ovisno o različitim uvjetima.

Ovaj modul u pravilu opisuje nekoliko postupaka koji se pozivaju iz postupka Postavljanje postavki sesije, Stoga su svi ovi postupci raspoređeni u zasebnom modulu.

Modul sesije uvijek se izvodi u povlaštenom načinu. To znači da kontrola pristupa neće biti izvršena prilikom pristupa bazi podataka. 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 Session moguće je definirati samo postupke i funkcije, tj. ne postoji odjeljak koji opisuje varijable i nema odjeljak glavnog programa. Ne možete opisati metode izvoza u sesijskom modulu.

Ako je pri pokretanju sustava potrebno izvesti neke radnje na Poslužitelju, na primjer, stvoriti element neke mape, tada je, kao opcija, moguće koristiti modul Session, kao sastavlja se na poslužitelju i uvijek se pouzdano izvršava pri pokretanju sustava. Međutim, moraju se uzeti u obzir sljedeće točke:

  • postupak Postavljanje postavki sesijeizvodi se ne samo pri pokretanju sustava, već i kada pristupa neinicijaliziranim parametrima sesije. tj sesiju za postavljanje parametara sesije može se pozivati \u200b\u200bviše puta tijekom rada aplikacije;
  • ako je broj elemenata u nizu parametara sesije jednak nuli (niz potrebnih parametara ima vrstu podataka nedefiniran), tada je aplikacija pokrenuta;
  • budući da sesijski modul radi u povlaštenom načinu i neće biti kontrole pristupa, trebali biste vrlo pažljivo raditi s objektima baze podataka, jer korisnik može dobiti pristup podacima koji mu se ne smiju pružiti;
  • kada se sustav pokrene, još nije poznato hoće li se aplikacija pokrenuti. Istodobno, u alatu za upravljanje događajima za postavljanje parametara sesije mogu se obavljati nepotrebne radnje.

Ovi moduli su opis nekih uobičajenih algoritama, tj. postupke i funkcije na koje se može pozivati \u200b\u200bs raznih mjesta.

Logično povezane metode mogu se grupirati u različite opće module. Ovi moduli su stvoreni unutar ogranka General.

Možete dodati bilo koji broj uobičajenih modula. Kako bi metode Generalnih modula bile dostupne na drugim mjestima u konfiguraciji, morate ih definirati ključnom riječju Export. Klijentske procedure općih modula bit će dostupne na Klijentu, a poslužiteljske procedure na Poslužitelju.

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

Ako je potrebna globalna varijabla, tada se mogu koristiti ili parametri sesije ili izvozne varijable aplikacijskog modula.

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

tj Opći modul   sudjelovat će u formiranju globalnog konteksta konfiguracije.

svojstvo globalanza opće module mogu biti korisni. No, ne biste ga trebali koristiti univerzalno za sve uobičajene module.

oni označen sa globalansastavit će se pri pokretanju sustava. Što je više takvih modula, program će sporije pokrenuti.

Ako zastava globalanza Opći modulnije specificirano, tada će se kompilacija ovog modula izvoditi u vrijeme prvog poziva na njega (tj., nakon pokretanja sustava).

Uz to, korištenje globalnih zajedničkih modula utječe na razumijevanje koda. Ne-globalne metode generičkog modula nazivaju se pomoću imena Opći modul   i naziv metode, na primjer:
Modul trošenja. Distribuirati neizravne troškove ();

Nazivi modula Općenito trebaju odražavati sadržaj opisanih postupaka. Određivanje naziva modula Općenito pri pozivanju postupka doprinosi boljem razumijevanju koda.

za Opći modul   u Paleta svojstava   može postaviti svojstvo privilegovan.

Povlašteni modul ne kontrolira prava pristupa. Ovo je potrebno ako u Uobičajeni modul   Za to se zahtijeva masovna obrada podataka, primanje podataka iz baze podataka.

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

Na primjer, rad koji zahtijeva velike resurse je plaća. Mora se dovršiti što je brže moguće. Za to su algoritmi koji izračunavaju plaće stavljeni u povlaštene .

Štoviše, svi postupci koji osiguravaju popunjavanje dokumenata o platnim spisima su izvan ovih Uobičajeni moduli, Upravo se u tim postupcima provodi kontrola pristupa.

Na taj način može se postići značajno povećanje performansi. To se posebno odnosi na slučaj primjene mehanizma linijskog nadzora pristupa na unose u tablicu.

Ako je modul Općenito privilegiran, postupci ovog modula mogu se sastaviti samo na Poslužitelju.

Postoje situacije kada neki objekt mora biti nedostupan korisniku, na primjer, određeni direktorij. Ali prilikom provođenja jednog dokumenta potrebno je uputiti se na ovaj direktorij.

tj treba privremeno proširiti korisnikova prava i vratiti ih u prvobitno stanje. Taj se učinak može dobiti korištenjem povlaštenih Uobičajeni moduli.

Za to privilegirano Uobičajeni modul   treba sastaviti postupak koji adresira potrebne podatke.

Taj će se postupak pozivati \u200b\u200biz odgovarajućeg dokumenta. tj korisniku se u trenutku pozivanja na ovaj postupak stvarno daju proširena prava.

za Uobičajeni moduli   Moguće je navesti mjesto sastavljanja. Pomoću zastava postavlja se: hoće li modul Općenito biti dostupan na Klijentu (upravljanoj aplikaciji), na Poslužitelju, u načinu rada Vanjska veza.

Pored toga, ako način uređivanja konfiguracije prebacite na Upravljani program i običnu aplikaciju, bit će moguć i drugi kontekst kompilacije - Klijent (redovna aplikacija).

Dakle, postoje četiri mogućnosti za funkcioniranje programa. Ovisno o pokrenutoj aplikaciji, ovisno o radu na klijentu ili poslužitelju, određeni moduli Općenito bit će dostupni ili nepristupačni.

Pored mogućnosti određivanja kompilacijskih zastava, moguće je odrediti kompilacijske smjernice za postupke i funkcije smještene u modulu Općenito.

Ako je za neku metodu navedena direktiva kompilacije, iako je općeniti modul dostupan u svim određenim kontekstima, dostupnost određene metode bit će ograničena direktivom za kompilaciju.

Međutim, postupak možda nije dostupan u kontekstu koji nije dostupan općenito za cijeli modul.

Ako direktiva kompilacije za postupak (funkciju) nije navedena, tada će se sastaviti u svim kontekstima definiranim za modul.

tj zapravo će biti napravljeno nekoliko primjeraka postupka. Izbor određene sastavljene instance ovisi o mjestu poziva postupka (u skladu s pravilom najbližeg poziva). Treba imati na umu da kôd takvog postupka treba pisati uzimajući u obzir njegovu dostupnost u svim kontekstima definiranim za modul.

Opći moduli koji su istovremeno dostupni u nekoliko različitih konteksta uglavnom su namijenjeni stvaranju postupaka koji su dostupni u nekoliko konteksta.

Prilikom stvaranja modula Općenito, smatra se dobrom praksom ne precizirati smjernice sastavljanja. tj dostupnost postupaka i funkcija trebala bi se odrediti svojstvima samog modula.

S ovim pristupom, klijentski postupci bit će smješteni u zasebnim General modulima, a poslužiteljske procedure u zasebnim General modulima.

Moduli s nekoliko postavljenih zastava za kompilaciju rijetko se koriste u praksi. Ovo su neke uobičajene radnje dostupne i na klijentu i na poslužitelju. Obično su to jednostavni proračuni.

Važno! Moguće je pristupiti metodama izvoznog poslužitelja modula Općenito od Klijenta, ali samo ako je ovaj modul Općenito sastavljen samo na Serveru. U isto vrijeme se postavlja posebna zastava za pristup Klijenta .

Za ne-globalne module General mogu se keširati vrijednosti koje vraćaju funkcije. tj nakon prvog poziva funkcije sustav može upamtiti rezultat svog izvršavanja. Ako se ova funkcija ponovno pozove s istim parametrima, sustav će vratiti vrijednost već iz predmemorije.

Cilj ovog mehanizma je ubrzati ponovljene pozive. Da biste konfigurirali ovo ponašanje, morate Paleta svojstava   modula za postavljanje odgovarajuće vrijednosti za svojstvo Ponovna uporaba povratnih vrijednosti.

Ovo je svojstvo prema zadanim postavkama postavljeno na Ne koristi. Ostale moguće vrijednosti: predmemorija Tijekom pozivaili Za vrijeme trajanja sesije.

Ima smisla koristiti ovo svojstvo samo za one funkcije čiji rezultat ovisi isključivo o ulaznim parametrima. Ovaj je mehanizam dostupan samo za ne-globalne module General.

Ako je odabrana vrijednost odgovarajućeg parametra U vrijeme poziva predmemorija će ostati aktivna dok se ne izvrši postupak odakle je upućen poziv općenitoj modulu. Ako je odabrana vrijednost tijekom sesije, uvjetno se smatra da će predmemorija djelovati dok korisnik radi.

Međutim, postoje određena vremenska ograničenja. Čišćenje predmemorije automatski se događa 20 minuta nakon što vrijednost pogodi predmemoriju.

Modul obrasca

Ovaj je modul dizajniran za obradu korisničkih radnji. Na primjer, opišite algoritam reakcije programa kad se pritisne gumb. Ili, na primjer, u trenutku unosa vrijednosti u polje, odmah provjerite ispravnost.

Uz događaje povezane s kontrolama obrasca (gumbi, polja unosa), postoje događaji koji su povezani izravno sa samim obrascem.

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

Postoje upravljani oblici i obični obrasci. Moduli ovih oblika uglavnom se razlikuju po tome što je modul upravljanog oblika jasno podijeljen u kontekst. Svaki postupak (funkcija) mora imati uputu o sastavljanju. U uobičajenom obliku, na Klijentu se koristi sav kod.

U upravljanom modulu obrasca možete deklarirati postupke i funkcije, možete deklarirati varijable i opisati odjeljak glavnog programa.

Programski kod glavnog programa izvršit će se u vrijeme kada se obrazac inicijalizira, tj. kad ga korisnik počne otvarati. Na slici je prikazan popis standardnih događaja za upravljani obrazac.

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

U upravljanom obliku možete upravljati događajem pisanja predmeta. Ovaj je događaj prisutan samo za oblike objekata (direktorije, dokumente i neke druge). Ako obrazac nije vezan za određeni objekt, tada nema zapisa.

Za modul redovnog obrasca popis standardnih događaja je nešto manji, jer u upravljanom obliku su mnogi događaji upareni (jedan se izvršava na klijentu, a drugi na poslužitelju). U uobičajenom obliku, sav se kod izvršava na Klijentu.

Objektni modul

Ti su moduli tipični za direktorije, dokumente, planove tipova naselja, planove računa i mnoge druge objekte. Objektni modul dizajniran je za obradu standardnih događaja. Na primjer, događaj za unos stavke u imeniku, događaj za snimanje stavke, brisanje, držanje dokumenta itd.

U principu, događaj snimanja postoji i u modulu obrasca. No događaj snimanja u modulu obrasca događa se u procesu interaktivnog snimanja, kada se radi s određenim oblikom.

Događaj snimanja u objektnom modulu izvršit će se na bilo kojem snimanju iz bilo kojeg oblika ovog objekta. Pored toga, ako se objekt snima programsko, u ovom slučaju će se pokrenuti događaj objektnog modula.

U slučaju snimanja objektnog modula možete ugraditi sve provjere ispravnosti snimljenih podataka, jer će ovaj postupak djelovati u trenutku 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.

Na donjoj slici prikazan je popis dostupnih događaja modula direktorija.

U objektni modul možete smjestiti odjeljak za opisivanje varijabli, opisati proizvoljne funkcije koje možda nisu povezane s događajem, kao i odjeljak glavnog programa.

Na primjer, u odjeljku glavnog programa, možete inicijalizirati lokalne varijable određenog modula. Ovaj programski kod izvršit će se prilikom pristupa ovom modulu objekta.

Treba primijetiti da su svi postupci modula objekta sastavljeni na poslužitelju. U skladu s tim, upute za sastavljanje postupka i funkcija objektnog modula nisu potrebne. Neki konfiguracijski objekti nemaju Object Modules.

To je zbog osobina samih objekata. Takvi objekti uključuju konstantei registri, za Constansane postoji objektni modul, ali postoji vrlo sličan modul koji se zove Modul menadžera vrijednosti.

Modul menadžera vrijednosti   moguće je obraditi događaje snimanja konstantei obrada čekova punjenja.

Cjelokupni kontekst modula izvršava se na Serveru.

Za registre postoji Modul za snimanje.

Ovaj modul također ima mogućnost obrade događaja snimanja i obavljanja provjere ispunjavanja.

U objektnim modulima, modulima upravitelja vrijednosti (za konstante) i modulima za snimanje zapisa (za registre) možete opisati metode koje možete izvesti, a ove metode će biti dostupne izvana.

tj Pored korištenja fiksnih metoda klase objekta, možete stvoriti dodatne metode za objekt u modulu objekta. Ovaj modul treba opisati odgovarajući postupak s ključnom riječi izvoz.

Tada će se ovom postupku moći pristupiti izvana. Nadalje, ova će metoda biti prikazana u kontekstu pomoći. Nove metode pomoći u kontekstu označene su plavom bojom (plava ikona p ()   za postupke i f ()za funkcije).

Slično tome, možete stvoriti novo svojstvo proglašavanjem varijable s ključnom riječi izvoz, Ovom se objektu može pristupiti i izvana.

Dakle, moguće je proširiti funkcionalnost objekata (definirati nove metode i nova svojstva). Međutim, svojstva su dinamična i ne pohranjuju se u bazu podataka.

Ako želite koristiti svojstvo koje će biti spremljeno u bazi podataka za objekt, morate kreirati svojstvo objekta.

Modul menadžera

Ovaj modul postoji za mnoge objekte (direktorije, dokumente, registre itd.). Modul se otvara bilo kroz kontekstni izbornik za objekt, ili kroz Paleta svojstavaili kroz prozor za uređivanje.

U modulu upravitelja možete nadjačati neke standardne događaje. Na primjer, u Obrada primanja podatakakad je stavka odabrana u imeniku, možete izvršiti dodatno filtriranje ili provjeru.

Pored toga, u modulu upravitelja možete stvoriti dodatne metode i naznačiti da se izvoze. U ovom je slučaju moguće pristupiti tim metodama izvana.

Za obavljanje ovog poziva potrebno je dobiti vrstu podataka SpravochnikMenedzher.

Razlika između načina izvoza modula upravitelja i objektnog modula je ta da bi pristupili metodi objektnog modula, najprije morate dobiti sam objekt (to jest, nekako dobiti vezu, a zatim pretvoriti ovu vezu u objekt).

Nakon toga bit će dostupne izvozne varijable i metode objektnog modula. Za modul menadžera žalba je jednostavnija, na primjer:
Katalozi. Protivnici. Naziv metode

To su dvije različite žalbe. Pretvaranje iz veze u objekt (metoda GetObject) - ovo 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 je razlika u tome Objektni modulpozvani u kontekstu određenog elementa. Prema tome, možemo pretpostaviti da je on primjenjiv za ovaj element (u većini slučajeva je takva logika propisana).

Što se tiče modula upravitelja, on opisuje neke opće akcije za grupu ili za sve elemente direktorija ili nekog dokumenta. Na primjer, ako želite ispisati stavku imenika, možete koristiti modul Object.

Ali u modulu upravitelja moguće je napraviti univerzalniji mehanizam koji će ispisivati, uključujući skupinu elemenata.

Uz to, pristup objektnom modulu još je duža akcija. Stoga je za rješavanje ovog problema u upravljačkom modulu poželjnije.

Ovim se zaključuje naše upoznavanje s modulima u konfiguraciji 1C: Enterprise sustava. Ako sažete gornji sažetak, u nastavku su sljedeći zaključci:

  • Softverski modul dio je konfiguracije koja može sadržavati tekst samo na ugrađenom jeziku 1C
  • Softverski moduli klasificiraju se prema vrstama koje smo ispitali u ovom članku. Svaki pogled se određuje položajem i dostupnim kontekstom programa.
  • Struktura modula sastoji se od nekih odjeljaka koji su raspoređeni u određenom slijedu. Sastav odjeljaka određuje se prema vrsti modula.

Također primjećujemo da smo namjerno propustili jednu vrstu modula, naime naredbeni modul. Ne predstavlja ništa izvanredno, a predlažemo da se samostalno upoznate s njegovom funkcionalnošću.

Do sada smo sav naš programski kod fragmentarno pogledali iz primijenjenog rješenja i u pravilu ga zapisali u nekoj maloj konfiguraciji testa. Znate li da "ne možete samo to uzeti" i započeti uređivanje standardnog konfiguracijskog koda? Ne? Zatim ćemo u sljedećem članku sve ovo objasniti!

Često, tijekom izvođenja programa, moramo dobiti vrijednosti koje su pohranjene u bazi podataka i ne mijenjaju se godinama. Životni primjer je vrijednost konstanti. Dijelom, ovdje je moguće klasificirati pretraživanje elementa direktorija ili čvora razmjene plana prema šifri, dobivajući vrijednosti detalja o objektima referencom.

Bez razmišljanja, „u letu“ se takvi zadaci rješavaju konstrukcijama forme:

Ako je Datum dokumenta\u003e Konstante.Zadnji datumAplikacijeRezultati1137.Get () Zatim

Kao rezultat toga, svaki put kada se ovaj kôd izvrši, baza podataka "kreće".

Programeri koji su pažljiviji u vezi sa svojim kodom izvršavaju jedan upit u bazi podataka, predmemoriraju sve potrebne podatke, ali ovaj pristup ne vodi uvijek do željenog istovara baze podataka:

  1. Ciklus izvršenja koda može se podrazumijevati (na primjer, grupno ponovno dokumentiranje)
  2. Dobivanje strogog skupa podataka (ne više i manje), koji će biti potreban kasnije, ponekad je teško ili čak nemoguće.
  3. Predmemorirane vrijednosti trebaju se upotrebljavati u različitim pozivima / oblicima

Modul ponovne upotrebe povratne vrijednosti

Da bi se riješili opisani problemi, platforma ima module sa ponovnom upotrebom povratnih vrijednosti. Zapravo, ovo je uobičajeni zajednički modul (klijent ili poslužitelj) u kojem je Ponovna upotreba povratnih vrijednosti postavljena na "U vrijeme poziva" ili "U vrijeme sesije". U samom modulu postupci i funkcije opisani su kao i obično.

Cijela poanta je u tome što kada opetovano pozivate izvozne funkcije takvih modula - prvi put se stvarno obavi onako kako očekujemo, a svi sljedeći pozivi dovode do vraćanja predmemorirane vrijednosti bez da se zapravo izvrši funkcijski kod. Taj se učinak može primijetiti pri mjerenju performansi.

Vraćene vrijednosti su prirodno predmemorirane vrijednostima proslijeđenih parametara, tj. pri izvršavanju koda

Node1 \u003d OurModule.GetNode of ExchangeWith Accounting ("0001"); Node2 \u003d OurModule.GetNode of ExchangeWith Accounting ("0002");

Oba poziva zapravo će dovesti do izvršenja odgovarajućeg postupka i vratiti različite veze, a u kasnijim pokušajima da se čvor dobije s kodom 0001 ili 0002, odgovarajući čvorovi će se vratiti bez pozivanja postupka i, kao rezultat, baze podataka.

Vrijednosti se predmemoriraju odvojeno za svaku sesiju na klijentu ili poslužitelju (ovisno o tome je li klijent ili poslužiteljski modul). tj ako postoje značajke postavljanja prava pristupa ili druga ovisnost primljene vrijednosti od trenutnog korisnika, sve će raditi ispravno.

Što se ne može učiniti

Postoji jedno ograničenje. Kao parametri funkcija mogu se odrediti samo jednostavne vrste. Nedefinirano, , boolean, datum, string, broj, poveznica. Nema struktura, tablica vrijednosti, objekata itd. Ako pokušate proslijediti, na primjer, strukturu kao parametar, sve će uspjeti, ali možete zaboraviti na ponovno korištenje rezultirajuće vrijednosti.

Povratna vrijednost može biti bilo koje vrste.

Također obratite pažnju na veličinu podataka koje predmemorirate. Malo je vjerojatno da ćete ubiti svu memoriju poslužitelja, ali vrijedi zapamtiti da resursi nisu beskrajni.

Bug ili značajka od 1C

Vrijednosti za višekratnu upotrebu imaju zanimljivo svojstvo. Ova buba ili značajka nisu jasni, ali znajući o tome neće naštetiti. Ako izvršite sljedeći kod:

ValueStructure1 \u003d OurModule.GetStructure ofValues \u200b\u200bof Requisites (LinkOnObject); Struktura vrijednosti 1. Name \u003d "Novo ime"; ValueStructure2 \u003d OurModule.GetStructureValues \u200b\u200bof Requisites (LinkOnObject);

To će u ValueStructure2.Name ležati upravo "Novo ime". U principu, to se može koristiti za ažuriranje vrijednosti koje su zapravo promijenjene u bazi podataka, ali kada je zatvorena i je li klupa zatvorena, nije jasno. Kada se razvijaju standardna rješenja, to je zabranjeno.

Što učiniti kada mijenjate predmemorirane podatke

Postoji samo jedna "legitimna" metoda za obradu situacije s promjenom predmemorirane vrijednosti u bazi podataka. Ovo je metoda RefreshValues \u200b\u200b(). Vrijednosti svih funkcija za sve parametre svih modula vratit će se na zadano. Ažuriranje po određenim vrijednostima / funkcijama / modulima parametara nije moguće.

U skladu s tim, zbog ovog volonterističkog pristupa potrebno je vrlo pažljivo koristiti ovu funkciju: cijeli sustav će biti znatno sporiji neko vrijeme nakon korištenja.

Mi kršimo sveto: pišemo zahtjev u petlju

Uz očite mogućnosti za korištenje funkcija s opetovanom uporabom povratnih vrijednosti, postoji i mnogo zanimljivih, univerzalnih, nestandardnih pristupa, uključujući:

  • Pisanje univerzalnih postupaka koji vraćaju detalje proizvoljnih veza (dostupnih u BSP-u)
  • Postupci pisanja koji vraćaju vrijednosti konstanta imenom konstante (postoje u većini tipičnih)
  • Vraćajući "malo veću" količinu podataka nego što je potrebno za smanjenje broja poziva (na primjer, ako želite dobiti tarife nekoliko valuta odjednom, ima smisla nazvati funkciju prema datumu bez odabira valute, nabaviti stope svih valuta i zatim "razvrstati" u koju valutu potreban je sadašnji trenutak)
  • Pisanje postupka koji izvršava upit s keširanjem rezultata (ulazni parametri bit će tekst upita i par naziva i vrijednosti parametara)

Ali postoji još jedan pristup koji bih se želio detaljno zaustaviti. Ovo je uporaba funkcije koja sadrži DB poziv, s ponovljenom uporabom povratne vrijednosti u petlji. tj to je zapravo zahtjev u petlji. Općenito, naučili su nas da to ne činimo, ali postoje slučajevi kada će takva konstrukcija koda dovesti do boljih performansi ako:

  1. Broj različitih vrijednosti ulaznih parametara koji se javljaju unutar ciklusa je mali i velika većina kombinacija s velikom vjerojatnošću dobivene su ranije u ovoj sesiji.
  2. Teško je dobiti strogi skup kombinacija vrijednosti ulaznih parametara u ciklusu unaprijed, a dobivanje vrijednosti za sve moguće kombinacije vrijednosti ulaznih parametara dovest će do čitanja velike količine podataka iz baze podataka

Kao što vidite, formulacije nisu točne i više su poput riječi razdvajanja nego pravila. Stoga uvijek imajte na umu kontekst, procijenite trenutnu sliku, razmislite o uvjetima u kojima će vaš kôd raditi.

U članku se daje kratki pregled i mogućnosti takve funkcionalnosti kao što su Ponovna upotreba povratnih vrijednosti uobičajenih modula.

Problemi pri radu s 1C

Često se pri radu s programom 1C traži da se vrijednosti pohranjene u bazi podataka ne mijenjaju godinama. Primjer bi bila vrijednost konstanti. U ovu skupinu vrijednosti može se uvjetno rangirati potraga za jednim od elemenata direktorija ili potraga za čvorom plana razmjene pomoću koda, kao i potreba za dobivanjem vrijednosti detalja svojstva.

Takvi se zadaci rješavaju brzo i jednostavno upotrebom konstrukcija sljedećeg tipa:

Ako je Datum dokumenta\u003e Konstante.Zadnji datumAplikacijeRezultati1137.Get () Zatim

Ali svaki put kada se ovaj kôd izvršava, pristupa se bazi podataka.

Mnogi programeri koriste sljedeću metodu za učitavanje baze podataka. Ispunjavaju samo jedan upit u KB i predmemoriraju podatke koji su im možda potrebni. Međutim, ova metoda ne opterećuje bazu podataka do željene vrijednosti. Razlozi za to mogu biti sljedeći:

· Ne baš jasan ciklus izvršenja koda (na primjer, u slučaju grupnog ponovnog slanja dokumenata);

· Dobivanje strogog skupa podataka koji trenutno nije potreban ponekad je nemoguće ili teško;

· Upotreba već spremljenih podataka u različitim oblicima / pozivima.

Modul ponovne upotrebe povratne vrijednosti

Rješavanje gore opisanih problema pomoći će u korištenju modela s opetovanom uporabom povratnih vrijednosti. Što je ovo Ovo je opći klijent ili poslužiteljski modul u kojem bi trebalo biti postavljeno "Ponovna upotreba povratnih vrijednosti" u funkcijama "Za vrijeme poziva" ili "Za vrijeme sesije". Sve operacije i funkcije izravno u modulu opisane su kao i prije.

Nedvojbena prednost ove metode je u tome što se povraćaj spremljene vrijednosti događa bez stvarnog izvršavanja funkcijskog koda. To se događa sa svim narednim pozivima na izvozne funkcije ovih modula. Isti učinak može se vidjeti i pri mjerenju performansi.

Kad se kôd izvrši, vraćene vrijednosti predmemoriraju se kroz vrijednosti prenesenih parametara. Ovo se događa izravno tijekom izvršavanja koda.

Node1 \u003d OurModule.GetNode of ExchangeWith Accounting ("0001");

   Node2 \u003d OurModule.GetNode of ExchangeWith Accounting ("0002");

I jedan i drugi poziv vode u odgovarajuću operaciju i vraćaju različite reference. Međutim, već pri sljedećim pozivima čvorovi s kodom 0001 ili 0002 vratit će se bez izazivanja ponovljene operacije i, u skladu s tim, bez pristupa bazi podataka.

Vrijednosti će se spremiti izolirano tijekom svake sesije i na klijentu i na poslužitelju (to ovisi o tome je li poziv upućen od klijenta ili modula poslužitelja). Sve će raditi besprijekorno ako postoje neke značajke u postavkama prava pristupa ili bilo koja druga ovisnost dobivene vrijednosti.

Nekoliko ALI

Kao i kod svakog pravila, i ove metode postoje iznimke. Složeni tipovi ne smiju se specificirati u parametrima funkcija, već jednostavni tipovi poput datuma, broja, nesigurnosti i tako dalje. Ne pokušavajte odrediti kao parametre, na primjer, strukturu, objekt ili tablicu vrijednosti. Rezultat ćete dobiti prvi put, ali ništa razumno neće izaći drugi put.

Povratna vrijednost može biti bilo koje vrste.

Uz to, ne zaboravite obratiti pažnju na veličinu podataka koje predmemorirate, jer memorija poslužitelja, iako ogromna, nije neograničena.

Značajka ili bug od 1C

Ponovno korištene vrijednosti imaju zanimljivu značajku. Može se pretpostaviti da je to značajka ili bug, ali u svakom slučaju vrijedi obratiti pažnju.

Unosom sljedećeg koda:

ValueStructure1 \u003d OurModule.GetStructure ofValues \u200b\u200bof Requisites (LinkOnObject);
   Struktura vrijednosti 1. Name \u003d "Novo ime";
   ValueStructure2 \u003d OurModule.GetStructureValues \u200b\u200bof Requisites (LinkOnObject);

u ValueStructure2.Name točno pojavit će se Novo ime. To se može koristiti za ažuriranje vrijednosti koje su zapravo izmijenjene u bazi podataka, ali nije poznato koliko se dugo to može učiniti. Jer kod stvaranja standardnih rješenja to se ne može učiniti.

Ako su promijenjeni predmemorirani podaci

Ako su predmemorirane vrijednosti promijenjene u bazi podataka, postoji samo jedan način da se oni koriste - metoda RefreshValues. U ovom se slučaju postavke svih funkcija vraćaju u sve module. Ne postoji mogućnost ažuriranja neke od nekih vrijednosti parametara, bilo funkcija ili modula.

Kako se postavlja zahtjev u petlji

Ako ne želite koristiti funkciju s opetovanom uporabom vraćenih vrijednosti, nudimo vam nekoliko kreativnijih pristupa za rješenje problema.

· Univerzalni postupci koji vraćaju detalje proizvoljnih veza.

· Stvaranje postupaka koji vraćaju stalne vrijednosti svojim imenom. Usput, takvi postupci su u standardnim verzijama.

· Povratak glasnoće nešto većeg od iznosa potrebnog za smanjenje broja poziva. Na primjer, ako je potrebno istovremeno dobiti tečaj više valuta, preporučljivo je nazvati funkciju isključivo prema datumu, bez odabira valute. Nakon svih tečajeva, utvrdite koja vam je valuta sada potrebna, a koja nije.

· Stvaranje postupka koji će izvršiti zahtjev dok kešira rezultat (dolazni parametri - tekst zahtjeva, nekoliko naziva i vrijednosti parametara).

Želio bih detaljnije razgovarati o drugoj metodi. Ova metoda temelji se na upotrebi funkcije koja sadrži poziv baze podataka, s ponovljenim korištenjem povratne vrijednosti izravno u petlji, odnosno svojevrsnom upitu u petlji. U nekim slučajevima takva konstrukcija može poboljšati izvedbu. Treba ispuniti sljedeći uvjet: mora postojati mali broj različitih vrijednosti ulaznih parametara u ciklusu, a većina kombinacija barem jednom već je dobijena ranije u ovoj sesiji. Treba imati na umu da je izuzetno teško unaprijed dobiti određeni skup kombinacija svih vrijednosti ulaznih parametara, a pokušaji dobivanja vrijednosti za sve vrste kombinacija mogu dovesti do čitanja previše podataka iz baze podataka.

Dali smo vam samo uzorke funkcija i metoda. Stoga prije upotrebe procijenite uvjete u kojima će vaš kôd raditi.