Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Programet
  • Si të thërrisni një funksion nga një modul i përbashkët. Modulet e përgjithshme

Si të thërrisni një funksion nga një modul i përbashkët. Modulet e përgjithshme

Artikulli vazhdon ciklin "Hapat e parë në zhvillim në 1C", ai diskuton në detaje çështjet e mëposhtme:

  • Çfarë është një modul softuerësh dhe nga cilat seksione përbëhet ai?
  • Për çfarë shërben moduli i aplikimit? Pse janë dy? Kur fillon? Cilat janë detajet e punës?
  • Cilat ngjarje lidhen me fillimin e sistemit, si dhe ku t'i përpunojmë ato?
  • Për çfarë shërben moduli i lidhjes së jashtme? Kur dhe si ta përdorni?
  • Kur përdoret moduli i sesionit?
  • Cilat janë modulet e përbashkëta? Cilat janë vetitë dhe rregullat e funksionimit të tij? Pse të përdorni veçorinë Reuse Return Values?
  • Kur përdoret moduli i formës dhe cilat ngjarje mund të trajtohen në të?
  • Për çfarë shërben moduli i objektit? Nga cilat seksione përbëhet? Si të shikoni ngjarjet e disponueshme të modulit?
  • Cilat janë hollësitë e punës me modulet e menaxherit të vlerave (për konstantet) dhe modulet e grupeve të të dhënave (për regjistrat)?
  • Cili është ndryshimi midis një moduli objekti dhe një moduli menaxheri? Kur duhet ta përdorni këtë të fundit?

Zbatueshmëria

Artikulli merret me platformën 1C:Enterprise 8.3.4.496. Materiali është gjithashtu i rëndësishëm për lëshimet aktuale të platformës.

Modulet në 1C: Ndërmarrja 8.3

Modulet janë ato objekte që përmbajnë kodin e programit.

Ekzistojnë një numër mjaft i madh i llojeve të moduleve në Platformë, secila prej të cilave ka qëllimin dhe veçoritë e veta.

Çdo linjë kodi duhet të jetë në një modul. Ekzistojnë module për qëllime të përgjithshme dhe module objektesh. Disa module mund të kompilohen si në Klient ashtu edhe në Server, dhe disa vetëm në Server.

Një modul mund të përbëhet nga disa seksione. Seksioni i deklarimit të variablave përshkruan variablat lokale të këtij moduli, të cilat më vonë mund të përdoren në çdo procedurë.

Brenda çdo procedure, ju mund të përdorni variablin e modulit. Përveç kësaj, brenda vetë procedurës, mund të ketë një deklaratë tjetër të një ndryshoreje me të njëjtin emër. Kjo do të jetë një variabël lokale për këtë procedurë.

Pavarësisht të njëjtit emër, këto janë dy ndryshore të ndryshme: njëra përdoret brenda një procedure të caktuar dhe tjetra përdoret jashtë saj.

Në disa module, variablat mund të vendosen në vendndodhjen e kompilimit (disponueshmërisë) në Server ose në Klient. Për shembull:

Seksioni i deklarimit të variablave pasohet nga seksioni i procedurave dhe funksioneve, i cili specifikon metodat lokale të modulit. Disa module kërkojnë që ju të specifikoni se ku do të përpilohet procedura ose funksioni.

Në parim, direktiva e përpilimit mund të hiqet. Në këtë rast, direktiva e paracaktuar e përpilimit është Server. Sidoqoftë, për lehtësinë e analizimit të kodit të programit, rekomandohet të tregohet në mënyrë eksplicite se ku do të përpilohet kjo procedurë. Rendi në të cilin përshkruhen procedurat nuk ka rëndësi.

Në fund të modulit, pas përshkrimit të të gjitha procedurave dhe funksioneve, është një seksion i programit kryesor, i cili mund të përmbajë disa operatorë, të cilët inicializojnë variablat lokale të modulit të formularit. Ky seksion ekzekutohet kur aksesohet moduli.

Kështu, për shembull, kur hapni formën e një elementi, para së gjithash ekzekutohet seksioni i programit kryesor të modulit të formularit.

Duhet të theksohet se seksioni i deklarimit të ndryshoreve dhe seksioni kryesor i programit nuk ekzistojnë për të gjitha modulet (d.m.th., këto seksione janë të pavlefshme në disa module). Një seksion i përshkrimit të procedurës dhe funksionit mund të ekzistojë absolutisht në çdo modul.

Moduli i aplikimit

Ky modul është krijuar për të trajtuar ngjarjet e nisjes dhe mbylljes së aplikacionit. Për shembull, kur filloni aplikacionin, mund të shkarkoni kurset e këmbimit nga Interneti. Në fund të aplikacionit, mund të siguroheni nga përdoruesi për qëllimet e tij për të përfunduar punën.

Gjithashtu në modulin e aplikacionit, ka mbajtës të veçantë që ju lejojnë të përgjoni ngjarjet e jashtme nga pajisja.

Këto mund të jenë ngjarje nga një lexues i kartave magnetike, një regjistrues fiskal. Dhe këto ngjarje mund të trajtohen gjithashtu në një farë mënyre.

Duhet të theksohet se është nisja interaktive e sistemit që gjurmohet në modulin e aplikacionit.

Moduli i aplikacionit nuk do të funksionojë nëse programi 1C niset, për shembull, në modalitetin e lidhjes. Në këtë rast, dritarja e programit nuk krijohet.

Duhet të theksohet se në Platformën 8.3 ekzistojnë dy module të ndryshme aplikimi: moduli i aplikacionit të menaxhuar dhe moduli i aplikacionit të rregullt. Ngjarjet e modulit të aplikacionit të menaxhuar aktivizohen kur hapen Klientët e hollë dhe të trashë të aplikacionit të menaxhuar dhe klientit në ueb.

Moduli Aplikim i përgjithshëm funksionon kur Thick Client niset në modalitet Aplikim i përgjithshëm, e cila ka ndërfaqen e zakonshme të komandës në formë menuja kryesore.

Nëse aplikacioni është duke u ekzekutuar dhe Menaxhuar, dhe në modalitet Aplikim i përgjithshëm, atëherë është e nevojshme të përshkruhen procedurat e mbajtësit si për modulin aplikacion i menaxhuar, dhe për modulin Aplikim i përgjithshëm.

Moduli aplikacion i menaxhuar mund të zgjidhet nga menyja e kontekstit të nyjës rrënjë të konfigurimit.

Ky modul mund të hapet edhe nga paleta e vetive të elementit të konfigurimit rrënjë.

Për të hapur një modul Aplikim i përgjithshëm, duhet t'i referoheni cilësimeve të konfigurimit (komandë Opsione në meny Shërbimi).

Do të hapet një formular Opsione. Shënoni faqeshënues Gjeneral duhet të specifikohet mënyra e modifikimit të konfigurimit Aplikim i menaxhuar dhe Aplikim i Përgjithshëm.

Në këtë rast, moduli Aplikim i përgjithshëm mund të hapet edhe nga vetitë e nyjës rrënjë.

Lista e ngjarjeve për të cilat mund të përpunohen Menaxhuar dhe Aplikim i përgjithshëm e njëjta.

Në këtë modul, ju mund të vendosni një seksion të deklarimit të ndryshoreve, një seksion për përshkrimin e procedurave dhe funksioneve arbitrare dhe një seksion për programin kryesor. Por përveç procedurave dhe funksioneve arbitrare, në modul mund të vendosen mbajtës të veçantë të ngjarjeve.

Lista e mbajtësve të disponueshëm mund të shihet duke thirrur listën e procedurave dhe funksioneve të modulit aktual ndërsa moduli është i hapur.

Dritarja e hapur Procedurat dhe funksionet shfaq të gjitha procedurat dhe funksionet e këtij moduli, si dhe ngjarjet për të cilat mbajtësit nuk janë krijuar ende.

Ka dy ngjarje që lidhen me fillimin e sistemit ("para" dhe "në"). Dy ngjarje që lidhen me mbylljen e sistemit ("para" dhe "në"). Si dhe përpunimi i një ngjarjeje të jashtme (për shembull, një ngjarje e një pajisje dyqani).

Kur zbatuesi i ngjarjeve "para" ekzekutohet, konsiderohet se veprimi nuk ka ndodhur ende. Kur zbatuesi i ngjarjeve "on" ekzekutohet, veprimi tashmë ka ndodhur.

Ngjarje Para fillimit të Sistemit ndodh në momentin kur lansohet Enterprise 8.3, por vetë aplikacioni ende nuk është shfaqur në ekran. Kjo ngjarje ka një parametër të tillë si Refuzimi.

Nëse ky parametër është vendosur në E vërtetë, atëherë aplikacioni nuk do të fillojë. Ngjarje Kur filloni sistemin supozon se veprimi është kryer tashmë, dritarja tashmë është krijuar, dhe në këtë rast mund, për shembull, të shfaqim një formë të veçantë. Ju nuk mund të refuzoni më për të nisur.

Në mënyrë të ngjashme, përpara se të mbyllni sistemin, aplikacioni është ende i hapur dhe ju mund të zgjidhni të mos e mbyllni atë. Kur sistemi u mbyll, dritarja e aplikacionit ishte tashmë e mbyllur. Është e mundur vetëm të kryhen veprime shtesë, të tilla si fshirja e disa skedarëve ose dërgimi i një emaili.

Në modul aplikacion i menaxhuar Direktivat për kompilimin e procedurave dhe funksioneve nuk janë të specifikuara, pasi moduli është kompiluar tërësisht në anën e Klientit. Kjo do të thotë që në procedurat dhe funksionet e modulit, ne nuk do të kemi mundësi të aksesojmë drejtpërdrejt, për shembull, librat e referencës.

Nëse nga moduli aplikacion i menaxhuar ju duhet të bëni një thirrje Server, atëherë për këtë do t'ju duhet të krijoni speciale me një flamur të shfaqur .

Në modul Aplikim i përgjithshëm nuk ka kufizime të tilla, pasi ky modul do të përpilohet gjatë ngarkimit të Thick Client. Pothuajse të gjitha llojet e të dhënave janë të disponueshme në Thick Client.

Procedurat, funksionet dhe variablat e një moduli aplikacioni mund të përshkruhen si eksport.

Meqenëse moduli është kompiluar tërësisht në Klient, kjo do të thotë që në procedurat e klientit ne mund të aksesojmë këtë metodë dhe këtë pronë.

Për shembull, nga moduli i formës së një objekti, mund të thërrisni një procedurë ose funksion të modulit të aplikacionit. Megjithatë, rekomandohet përdorimi i moduleve të përgjithshme për të përshkruar algoritme të përgjithshme. Qëllimi kryesor i modulit të aplikimit është të trajtojë pikën e fillimit dhe pikën e fundit.

Në analogji me modulin e aplikacionit, ky modul është krijuar për të trajtuar ngjarjen e hapjes së programit dhe ngjarjen e mbylljes.

Ndryshe nga moduli i aplikacionit, i cili inicohet kur aplikacioni niset në mënyrë interaktive, moduli i lidhjes së jashtme funksionon në modalitetin e lidhjes së përbashkët, d.m.th. kur krijohet një objekt 1C: Enterprise 8 dhe bëhet një lidhje me një bazë të dhënash specifike.

Ky modul ka ngjarje: Kur filloni sistemin dhe kur fikni sistemin.

Moduli i lidhjes së jashtme mund të hapet duke përdorur ose menynë e kontekstit në nivelin e objektit të konfigurimit rrënjë ose paletën e vetive për nyjen rrënjë.

Vetë procesi i bashkimit të jashtëm është një proces i punës programatike me një infobazë, jo një proces ndërveprues. Prandaj, në këtë moment është e pamundur të përdoren format e dialogut, të shfaqen mesazhe paralajmëruese, pasi nuk ka ndërfaqe të përdoruesit.

Në modulin e lidhjes së jashtme, është e mundur të përshkruhen variablat e eksportit dhe metodat e eksportit që do të jenë të disponueshme në anën ku ndodh thirrja e jashtme në 1C:Enterprise 8.3.

Meqenëse nuk ka ndërfaqe përdoruesi në një lidhje të jashtme, Moduli i Lidhjes së Jashtme është kompiluar tërësisht në Server.

moduli i sesionit

Ky modul nevojitet për të inicializuar parametrat e sesionit. Parametrat e sesionit janë variabla të shpejtë globalë, vlerat e të cilave janë të disponueshme kudo në konfigurim.

Mund ta hapni Modulin e Sesionit ose përmes menysë së kontekstit ose përmes paletës së vetive të nyjës rrënjë.

Një ngjarje ofrohet në Modulin e Sesionit SettingSessionParameters.

Kur fillon aplikimi, kjo procedurë quhet e para. Parametrat e sesionit nevojiten për çdo funksion aplikacioni: si kur lansohet në mënyrë interaktive ashtu edhe kur lansohet në modalitetin e lidhjes së jashtme.

Moduli i Sesionit përshkruan veprime të ndryshme për të inicializuar parametrat e sesionit në varësi të kushteve të ndryshme.

Ky modul, si rregull, përshkruan disa procedura që thirren nga procedura SettingSessionParameters. Prandaj, të gjitha këto procedura janë të ndara në një modul të veçantë.

Moduli i sesionit funksionon gjithmonë në modalitetin e privilegjuar. Kjo do të thotë se nuk do të kryhet asnjë kontroll i lejes kur të hyni në bazën e të dhënave. Moduli i sesionit kompilohet në Server, d.m.th. është e mundur të telefononi çdo metodë serveri (përfshirë vlerat e leximit nga baza e të dhënave).

Është e mundur të përcaktohen vetëm procedurat dhe funksionet në Modulin e Sesionit, d.m.th. nuk ka asnjë seksion të deklarimit të ndryshoreve dhe asnjë seksion të programit kryesor. Nuk mund të deklaroni metodat e eksportit në një modul sesioni.

Nëse gjatë fillimit të sistemit është e nevojshme të kryhen disa veprime në server, për shembull, për të krijuar një element të ndonjë drejtorie, atëherë, si opsion, është e mundur të përdoret Moduli i Sesionit, sepse ai kompilohet në Server dhe ekzekutohet gjithmonë në mënyrë të besueshme në fillimin e sistemit. Sidoqoftë, pikat e mëposhtme duhet të merren parasysh:

  • procedurë SettingSessionParameters ekzekutohet jo vetëm në fillimin e sistemit, por edhe kur aksesoni parametrat e sesionit të painitializuar. Ato. mbajtësi SetSessionParameters mund të thirret disa herë gjatë ekzekutimit të aplikacionit;
  • nëse numri i elementeve në grupin e parametrave të sesionit është i barabartë me zero (vargu i parametrave të kërkuar ka llojin e të dhënave të Padefinuar), atëherë ky është momenti kur aplikacioni lëshohet;
  • meqenëse Moduli i Sesionit funksionon në modalitetin e privilegjuar dhe nuk do të ketë kontrolle të aksesit, duhet të jeni shumë të kujdesshëm kur punoni me objektet e bazës së të dhënave, pasi përdoruesi mund të ketë akses në të dhëna që nuk duhet t'i sigurohen;
  • kur sistemi fillon, nuk dihet ende me siguri nëse aplikacioni do të nisë. Në këtë rast, veprimet shtesë mund të kryhen në mbajtësin e ngjarjeve të ngjarjes SetSessionParameters.

Këto module janë përshkrime të disa algoritmeve të përgjithshme, d.m.th. procedurat dhe funksionet që mund të thirren nga vende të ndryshme.

Metodat e lidhura logjikisht mund të grupohen në module të ndryshme të përbashkëta. Këto module krijohen brenda degës General.

Mund të shtoni çdo numër modulesh të përbashkëta. Për t'i bërë të disponueshme metodat e Modulit të Përbashkët diku tjetër në konfigurim, ato duhet të përcaktohen me fjalën kyçe Export. Procedurat e klientit të moduleve të zakonshme do të jenë të disponueshme në Klient, dhe procedurat e serverit - në Server.

Në modulet e zakonshme, disponohet vetëm seksioni që përshkruan procedurat dhe funksionet. Ato. në një modul të përbashkët nuk mund të deklaroni variabla dhe nuk mund të përshkruani një seksion të programit kryesor.

Nëse nevojitet një ndryshore globale, mund të përdoren ose parametrat e sesionit ose variablat e eksportit të modulit të aplikacionit.

Për modulet e zakonshme, mund të vendosni disa parametra që do të ndikojnë në sjelljen e këtij moduli. Nëse vetia Globale është caktuar për një modul të përbashkët, atëherë metodat e eksportit të deklaruara në këtë modul do të jenë të disponueshme drejtpërdrejt nga jashtë, pa ndonjë udhëzim shtesë.

Ato. të Moduli i përgjithshëm do të marrin pjesë në formimin e kontekstit të konfigurimit global.

Prona globale për modulet e zakonshme mund të jenë të dobishme. Megjithatë, nuk duhet ta përdorni në mënyrë universale për të gjitha modulet e zakonshme.

Ato , të cilat janë shënuar me globale, do të përpilohet në fillimin e sistemit. Sa më shumë module të tilla, aq më ngadalë do të fillojë programi.

Nëse flamuri globale për Moduli i përgjithshëm nuk është specifikuar, atëherë përpilimi i këtij moduli do të kryhet në momentin e thirrjes së parë në të (d.m.th., pasi të fillojë sistemi).

Përveç kësaj, përdorimi i moduleve të përbashkëta globale ndikon në kuptimin e kodit. Thirrja e metodave të një moduli të përbashkët jo-global bëhet përmes emrit Moduli i përgjithshëm dhe emri i metodës, për shembull:
Moduli i llogaritjes së kostos Alokimi i kostove indirekte();

Në të njëjtën kohë, emrat e moduleve të Përgjithshme duhet të pasqyrojnë përmbajtjen e procedurave të përshkruara në to. Specifikimi i emrit të Modulit të Përbashkët kur thirret një procedurë e bën kodin më të lehtë për t'u kuptuar.

Për Moduli i përgjithshëmPaleta e vetive prona mund të vendoset I privilegjuar.

Të drejtat e aksesit nuk kontrollohen në një modul të privilegjuar. Kjo është e nevojshme nëse në Moduli i përgjithshëm kërkohet kryerja e përpunimit të të dhënave në masë, duke marrë të dhëna nga baza e të dhënave.

Kontrolli i aksesit rrit kohën e hyrjes në bazën e të dhënave dhe algoritmet me shumicë shpesh duhet të funksionojnë sa më shpejt që të jetë e mundur.

Për shembull, lista e pagave është një operacion intensiv i burimeve. Duhet të bëhet sa më shpejt që të jetë e mundur. Për ta bërë këtë, algoritmet që llogaritin pagat vendosen në të privilegjuar .

Në të njëjtën kohë, të gjitha procedurat që sigurojnë plotësimin e dokumenteve të listës së pagave janë jashtë këtyre Modulet e zakonshme. Pikërisht në këto procedura kryhet kontrolli i aksesit.

Në këtë mënyrë, mund të arrihet një rritje e konsiderueshme e performancës. Kjo është veçanërisht e vërtetë për rastin e përdorimit të mekanizmit të diferencimit të aksesit rresht pas rreshti në regjistrimet e tabelave.

Nëse moduli Common është i privilegjuar, atëherë procedurat e këtij moduli mund të kompilohen vetëm në Server.

Ka situata kur një objekt duhet të jetë i paarritshëm për përdoruesin, për shembull, një direktori të caktuar. Por kur zbatoni një dokument të vetëm, është e nevojshme t'i drejtoheni këtij udhëzuesi.

Ato. ka nevojë për zgjerimin e përkohshëm të të drejtave të përdoruesit, dhe më pas kthimin e tyre në gjendjen e tyre origjinale. Ky efekt mund të merret duke përdorur të privilegjuar Modulet e zakonshme.

Për ta bërë këtë, në një të privilegjuar Moduli i përgjithshëmështë e nevojshme të lëshohet një procedurë që akseson të dhënat e nevojshme.

Kjo procedurë do të thirret nga dokumenti përkatës. Ato. Përdoruesit në fakt i jepen të drejta të zgjeruara në kohën kur thirret kjo procedurë.

Për Modulet e zakonshmeështë e mundur të specifikohet vendi i përpilimit. Flamujt përdoren për të përcaktuar nëse moduli i përbashkët do të jetë i disponueshëm në Klient (aplikacion i menaxhuar), në Server, në modalitetin e lidhjes së jashtme.

Përveç kësaj, nëse kaloni modalitetin e redaktimit të konfigurimit në një aplikacion të menaxhuar dhe një aplikacion të rregullt, atëherë do të jetë i mundur një kontekst tjetër përpilimi - Klienti (aplikacioni normal).

Kështu, ekzistojnë katër opsione për funksionimin e programit. Në varësi të aplikacionit që ekzekutohet, në varësi të punës në Klient ose në Server, disa module të zakonshme do të jenë të disponueshme ose të padisponueshme.

Përveç aftësisë për të specifikuar flamujt e përpilimit, është e mundur të specifikohen direktivat e përpilimit për procedurat dhe funksionet e vendosura në modulin e përbashkët.

Nëse një direktivë përpilimi specifikohet për një metodë, atëherë megjithëse moduli Generic është i disponueshëm në të gjitha kontekstet e specifikuara, aksesueshmëria e një metode të caktuar do të kufizohet nga direktiva e përpilimit.

Në këtë rast, procedura nuk mund të aksesohet në një kontekst që nuk është i disponueshëm në përgjithësi për të gjithë modulin.

Nëse direktiva e kompilimit nuk është e specifikuar për një procedurë (funksion), atëherë ajo do të përpilohet në të gjitha kontekstet e përcaktuara për modulin.

Ato. në fakt, do të bëhen kopje të shumta të procedurës. Zgjedhja e një shembulli të caktuar të kompiluar varet nga vendi ku thirret procedura (sipas rregullit të thirrjes më të afërt). Në të njëjtën kohë, duhet pasur parasysh që kodi i një procedure të tillë duhet të shkruhet duke marrë parasysh aksesueshmërinë e tij në të gjitha kontekstet e përcaktuara për modulin.

Modulet e zakonshme që janë të disponueshme në disa kontekste të ndryshme në të njëjtën kohë janë krijuar kryesisht për të krijuar procedura që janë të disponueshme në disa kontekste.

Kur krijoni një modul të përgjithshëm, është praktikë e mirë të mos specifikoni direktivat e përpilimit. Ato. aksesueshmëria e procedurave dhe funksioneve duhet të përcaktohet nga vetitë e vetë modulit.

Me këtë qasje, procedurat e klientit do të vendosen në module të përbashkëta të veçanta, dhe procedurat e serverit do të vendosen në module të veçanta të përbashkëta.

Modulet që kanë të vendosur disa flamuj përpilimi përdoren rrallë në praktikë. Këto janë disa veprime të zakonshme të disponueshme si në Klient ashtu edhe në Server. Zakonisht, këto janë disa llogaritje të thjeshta.

E rëndësishme! Është e mundur të aksesoni metodat e serverit të eksportit të Modulit të Përbashkët nga Klienti, por vetëm nëse ky Modul i Përbashkët është përpiluar vetëm në Server. Në të njëjtën kohë, një kuti e veçantë e kontrollit synon të sigurojë akses nga Klienti. .

Për modulet e zakonshme jo-globale, është e mundur të ruhen ato vlera të kthyera nga funksionet. Ato. sistemi mund të kujtojë rezultatin e ekzekutimit të tij pas thirrjes së parë të funksionit. Nëse ky funksion thirret përsëri me të njëjtat parametra, sistemi do ta kthejë vlerën tashmë nga cache.

Qëllimi i këtij mekanizmi është të përshpejtojë thirrjet e përsëritura. Për të konfiguruar këtë sjellje, ju duhet Paleta e vetive modul për të vendosur vlerën e duhur për vetinë e ripërdorimit të vlerave të kthimit.

Si parazgjedhje, kjo veti është caktuar në Mos përdor. Vlerat e tjera të mundshme: cache Në momentin e thirrjes, ose Për kohëzgjatjen e seancës.

Kjo veti ka kuptim të përdoret vetëm për ato funksione, rezultati i të cilave varet vetëm nga parametrat e hyrjes. Ky mekanizëm është i disponueshëm vetëm për modulet e zakonshme jo-globale.

Nëse zgjidhet vlera e parametrit përkatës Për kohëzgjatjen e thirrjes, atëherë cache do të jetë aktive për aq kohë sa është duke u ekzekutuar procedura nga e cila është thirrur metoda e modulit Common. Nëse vlera është Për kohëzgjatjen e seancës, atëherë cache konsiderohet me kusht të jetë aktive ndërsa përdoruesi është duke punuar.

Megjithatë, ka kufizime të caktuara kohore. Memoria e memories pastrohet automatikisht 20 minuta pasi vlera të ruhet në memorie.

Moduli i formularit

Ky modul është krijuar për të përpunuar veprimet e përdoruesit. Për shembull, përshkruani algoritmin e reagimit të programit kur shtypet një buton. Ose, për shembull, në momentin e futjes së vlerës në fushë, kontrolloni menjëherë për korrektësinë.

Përveç ngjarjeve që lidhen me kontrollet e formularit (butonat, fushat e hyrjes), ka ngjarje të lidhura drejtpërdrejt me vetë formularin.

Për shembull, mund të trajtoni ngjarjen e hapur të formës dhe të bëni disa inicializime fillestare. Ju gjithashtu mund të trajtoni ngjarjen e mbylljes së formularit dhe të kontrolloni nëse përdoruesi ka futur gjithçka saktë.

Ka forma të menaxhuara dhe forma normale. Modulet e të dhënave të formularit ndryshojnë kryesisht në atë që moduli i formës së menaxhuar është i ndarë qartë në një kontekst. Çdo procedurë (funksion) duhet të ketë një direktivë përpilimi. Në formën e tij normale, i gjithë kodi përdoret në Klient.

Në një modul të formës së menaxhuar, mund të deklaroni procedura dhe funksione, mund të deklaroni variabla dhe mund të përshkruani një seksion të programit kryesor.

Kodi i programit të programit kryesor do të ekzekutohet në momentin e inicializimit të formularit, d.m.th. kur përdoruesi e hap atë. Figura tregon një listë të ngjarjeve standarde për një formë të menaxhuar.

Lista e ngjarjeve të formave të menaxhuara është gjithashtu e dukshme në listën e vetive për vetë formularin. Kjo listë thirret në redaktuesin e formës së menaxhuar.

Në një formë të menaxhuar, ju mund të trajtoni ngjarjen e shkrimit të artikullit. Kjo ngjarje është e pranishme vetëm për format e objekteve (libra referencë, dokumente dhe disa të tjera). Nëse forma nuk është e lidhur me një objekt specifik, atëherë nuk ka ngjarje të shkrimit.

Për një modul të rregullt të formës, lista e ngjarjeve standarde është disi më e vogël, sepse në një formë të menaxhuar, shumë ngjarje bëhen në çifte (njëra ekzekutohet në Klient dhe tjetra në Server). Në formën e zakonshme, i gjithë kodi ekzekutohet në Klient.

Moduli i objektit

Këto module janë tipike për drejtoritë, dokumentet, planet e llojeve të llogaritjeve, skemat e llogarive dhe shumë objekte të tjera. Moduli i objektit është krijuar për të trajtuar ngjarje standarde. Për shembull, një ngjarje për futjen e një elementi drejtorie, një ngjarje për shkrimin e një elementi, fshirjen, postimin e një dokumenti, etj.

Në parim, ngjarja e shkrimit ekziston edhe në modulin e formularit. Por ngjarja e shkrimit në modulin e formës ndodh gjatë shkrimit interaktiv, kur punoni me një formë specifike.

Ngjarja e shkrimit në modulin e objektit do të aktivizohet në çdo shkrim nga çdo formë e objektit të dhënë. Gjithashtu, nëse objekti është shkruar në mënyrë programore, ngjarja e modulit të objektit do të aktivizohet në atë rast.

Në rastin e shkrimit të Modulit të Objekteve, mund të futni të gjitha kontrollet për korrektësinë e të dhënave që po shkruhen, pasi kjo procedurë do të funksionojë në kohën e absolutisht çdo shkrimi.

Moduli i këtij objekti mund të thirret nëpërmjet menysë së kontekstit, nga paleta e vetive të objektit dhe nga dritarja e redaktimit të objektit.

Figura më poshtë tregon një listë të ngjarjeve të disponueshme të modulit të drejtorisë.

Në modulin e objektit, mund të vendosni një seksion për përshkrimin e variablave, të përshkruani funksione arbitrare që mund të mos shoqërohen me një ngjarje, si dhe një seksion të programit kryesor.

Në seksionin kryesor të programit, ju mund, për shembull, të inicializoni variablat lokale të këtij moduli. Ky kod programi do të ekzekutohet kur të aksesohet ky Modul i Objektit.

Duhet të theksohet se të gjitha procedurat e Modulit të Objekteve janë përpiluar në Server. Prandaj, direktivat e përpilimit nuk kërkohen për procedurat dhe funksionet e Modulit të Objektit. Disa objekte të konfigurimit nuk kanë module objektesh.

Kjo është për shkak të veçorive të vetë objekteve. Objekte të tilla përfshijnë Konstante dhe Regjistrat. Për Konstante nuk ka asnjë modul objekti, por ekziston një modul shumë i ngjashëm i quajtur Moduli i menaxherit të vlerës.

AT Moduli i menaxherit të vlerës ju mund të merreni me regjistrimin e ngjarjeve Konstante dhe procesimi i plotësimit të çekut.

I gjithë konteksti i modulit ekzekutohet në Server.

Për regjistrat, ekziston një Modul Recordset.

Ky modul ka gjithashtu aftësinë për të trajtuar ngjarjet e shkrimit dhe për të kryer një kontroll të popullsisë.

Te Modulet e Objekteve, Modulet e Menaxherit të Vlerave (për konstantet) dhe Modulet e grupit të Regjistrimeve (për regjistrat), mund të përshkruani metoda që mund të bëhen të eksportueshme dhe këto metoda do të jenë të disponueshme nga jashtë.

Ato. Përveç përdorimit të metodave fikse të një klase objekti, mund të krijoni metoda shtesë për një objekt në Modulin e Objekteve. Ky modul duhet të përshkruajë procedurën përkatëse me fjalën kyçe Eksporto.

Atëherë do të jetë e mundur t'i referohemi kësaj procedure nga jashtë. Për më tepër, kjo metodë do të shfaqet në këshillën e veglave të kontekstit. Metodat e reja në udhëzuesin e kontekstit theksohen me blu (ikona blu p() për procedurat dhe f() për funksionet).

Në mënyrë të ngjashme, ju mund të krijoni një pronë të re duke deklaruar një variabël me fjalën kyçe Eksporto. Kjo pronë mund të aksesohet edhe nga jashtë.

Kështu, është e mundur të zgjerohet funksionaliteti i objekteve (shtoni metoda të reja dhe veti të reja). Karakteristikat janë dinamike dhe nuk ruhen në bazën e të dhënave.

Nëse keni nevojë të përdorni një pronë për një objekt që do të ruhet në bazën e të dhënave, duhet të krijoni një atribut të objektit.

Moduli i menaxherit

Ky modul ekziston për shumë objekte (drejtori, dokumente, regjistra, etj.). Moduli hapet ose përmes menysë së kontekstit për objektin, ose përmes Paleta e vetive, ose përmes dritares së redaktimit.

Në modulin e menaxherit, mund të anashkaloni disa ngjarje standarde. Për shembull, në Përpunimi Marrja e të Dhënave Zgjedhja, kur një element zgjidhet nga fjalori, mund të bëni disa filtrim ose kontroll shtesë.

Përveç kësaj, ju mund të krijoni metoda shtesë në modulin e menaxherit dhe të specifikoni se ato janë metoda të eksportit. Në këtë rast, është e mundur të qaseni në këto metoda nga jashtë.

Për të kryer këtë telefonatë, duhet të merrni llojin e të dhënave Drejtori i Drejtorisë.

Dallimi midis metodave të eksportit të Modulit Menaxher dhe Modulit të Objekteve është se për të thirrur metodën e Modulit të Objektit, së pari duhet të merrni vetë objektin (d.m.th., të merrni disi një lidhje dhe më pas ta shndërroni këtë lidhje në një Objekt).

Pas kësaj, variablat e eksportit dhe metodat e Modulit të Objektit do të jenë të disponueshme. Për modulin e menaxherit, thirrja është më e thjeshtë, për shembull:
Drejtoritë.Llogaritë.Emri i metodës

Këto janë dy ankesa të ndryshme. Konvertoni nga referenca në objekt (metoda GetObject) është një veprim mjaft serioz për sistemin, pasi kur merret një objekt, lexohen absolutisht të gjitha të dhënat e këtij objekti, të cilat mund të jenë mjaft të gjata.

Dallimi i dytë është se ObjectModule thirret në kontekstin e një elementi të caktuar. Prandaj, mund të supozojmë se është i zbatueshëm për këtë element (në shumicën e rasteve, kjo është logjika e përcaktuar).

Sa i përket modulit të menaxherit, ai përshkruan disa veprime të përgjithshme për një grup ose për të gjithë elementët e një drejtorie ose një dokumenti. Për shembull, nëse keni nevojë të printoni një artikull referimi, mund të përdorni Modulin e Objekteve.

Por në modulin e menaxherit është e mundur të bëhet një mekanizëm më universal që do të printojë, ndër të tjera, një grup elementësh.

Për më tepër, qasja në Modulin e objektit është ende një veprim më i gjatë. Prandaj, është më e preferueshme që ky problem të zgjidhet në modulin e menaxherit.

Kjo përfundon njohjen tonë me modulet në konfigurimin e sistemit 1C: Enterprise. Nëse përmbledhim të gjitha sa më sipër, atëherë përfundimi është përfundimet e mëposhtme:

  • Një modul softuerësh është një pjesë e konfigurimit që mund të përmbajë tekst vetëm në gjuhën e integruar 1C
  • Modulet e programit klasifikohen sipas llojeve që kemi shqyrtuar në këtë artikull. Çdo pamje përcaktohet nga vendosja e saj dhe konteksti i disponueshëm i programimit.
  • Struktura e modulit përbëhet nga disa seksione, të cilat janë rregulluar në një sekuencë të caktuar. Përbërja e seksioneve përcaktohet nga lloji i modulit.

Vini re gjithashtu se ne kemi hequr qëllimisht një lloj moduli, përkatësisht modulin e komandës. Nuk përfaqëson asgjë të jashtëzakonshme dhe ju sugjerojmë që të njiheni me funksionalitetin e tij.

Deri më tani, ne kemi shqyrtuar të gjithë kodin tonë të programit në mënyrë fragmentare nga zgjidhja e aplikuar dhe, si rregull, e kemi shkruar atë në një lloj konfigurimi të vogël provë tonën. A jeni të vetëdijshëm se "nuk mund ta pranoni atë" dhe të filloni të redaktoni kodin e një konfigurimi tipik? Jo? Më pas në artikullin vijues do t'i shpjegojmë të gjitha!

Sot do të merremi me modulet e zakonshme, cilat janë ato, pse nevojiten dhe si t'i përdorim ato. Ju mund të zhvendosni funksionet që përdoren në disa dokumente në një modul të përbashkët. Për shembull, llogaritja e shumës në pjesën tabelare të dokumentit.

Për shembull, le të marrim konfigurimin tonë të vjetër, të cilin e kam përdorur në artikujt e mëparshëm. Ne kemi dy dokumente në të - Ardhja e Mallrave në magazinë dhe Lëshimi i mallrave në magazinë. Të dy dokumentet kanë procedura që llogaritin shumën në një rresht të seksionit tabelor.

Çdo dokument ka të njëjtin kod për llogaritjen e shumës.

Materialet e procedurësÇmimiOnChange(artikull)
TabularPartString = Elements.Materials.CurrentData;
TabularPartString.Sum = TabularPartString.Sasia * TabularPartString.Price;
Përfundimi i procedurës

Sot do ta transferojmë në modulin e përbashkët dhe do ta thërrasim nga dokumenti.

Ne krijojmë një modul të përbashkët për llogaritjen e shumës

Dhe kështu le të fillojmë, së pari ju duhet të krijoni një modul të përbashkët. Për ta bërë këtë, shkoni te konfiguruesi, kërkoni artikullin Common modules, kliko me të djathtën dhe shtoni një të ri, shkruani emrin WorkWithDocuments. Futni kodin e mëposhtëm në të.

Sigurohuni gjithashtu të kontrolloni kutitë pranë Klientit (Aplikacioni i menaxhuar) dhe Serveri në dritaren e vetive.

Tani duhet të ndryshojmë pak kodin në modulin e formës së dokumentit. Në të majtë në konfigurim, ne kërkojmë dokumentin Arrival of Goods, zgjeroni dritaret në dritaren Forms, klikoni dy herë në Document Form dhe në dritaren e formularit që hapet, shkoni në skedën Module nga poshtë. Ne kemi këtë kod

Kjo procedurë funksionon kur Sasia ndryshohet në seksionin tabelor të dokumentit të marrjes së mallrave dhe llogarit shumën.

&AtClient



Përfundimi i procedurës

Dhe kjo procedurë fillon të funksionojë kur Çmimi ndryshon në seksionin tabelor të dokumentit të marrjes së mallrave dhe llogarit shumën.

&AtClient

TabularPartString = Elements.Materials.CurrentData;
TabularPartString.Sum = TabularPartString.Sasia * TabularPartString.Price;
Përfundimi i procedurës

Ne e zëvendësojmë atë me këtë

&AtClient
Materialet e procedurësSasiaOnChange(artikull)
TabularPartString = Elements.Materials.CurrentData;

Përfundimi i procedurës
&AtClient
Materialet e procedurësÇmimiOnChange(artikull)
TabularPartString = Elements.Materials.CurrentData;
Puna me dokumente.CalculateSum(Linja e Pjesës Tabelore);
Përfundimi i procedurës

Siç e keni vënë re, vetëm një rresht ndryshon në shikim të parë, mund të duket se një rresht është zëvendësuar nga një tjetër. Por mbani mend se ky është një shembull. Në fakt, sasia e kodit mund të jetë shumë më e madhe nëse, për shembull, keni bërë llogaritjet duke përdorur një formulë komplekse, në këtë rast kodi do të reduktohet ndjeshëm.

Ne bëjmë të njëjtën gjë për dokumentin e lëshimit të mallrave nga magazina, ekzekutojmë dhe kontrollojmë kodin për funksionalitet. Kështu që ne bëmë modulin e parë të përbashkët, shpresoj se artikulli im do të jetë i dobishëm për dikë.

Modulet e zakonshme janë përgjegjëse për ruajtjen e procedurave dhe funksioneve që thirren nga vende të tjera në sistemin 1C. Konsiderohet praktikë e mirë vendosja e kodit që thirret shumë herë në një procedurë në një modul të përbashkët. Ky rregull është universal për të gjitha konfigurimet, kështu që çdo zhvillues 1C duhet të jetë në gjendje të punojë me këto objekte konfigurimi. Për ta bërë këtë, ju duhet të kuptoni të gjitha nuancat dhe të jeni në gjendje të përdorni siç duhet mundësitë e ofruara nga platforma.

Krijimi i një moduli të përbashkët në 1C

Pas krijimit të një funksioni në një nga modulet e objektit, lindi nevoja për të përdorur një algoritëm të ngjashëm diku tjetër. Gjëja më e saktë për të bërë këtu është transferimi i kodit në një modul të përbashkët, por para kësaj ju duhet ta krijoni atë. Për ta bërë këtë, duhet të shkojmë te konfiguruesi dhe të gjejmë skedën "General" në pemën e konfigurimit. Pastaj zgjidhni "Modulet e përgjithshme" dhe përdorni butonin në formën e një plusi të bardhë në një rreth të gjelbër.

Në të djathtë, do të hapen vetitë e modulit të përbashkët të shtuar dhe ne duhet të kuptojmë se çfarë do të thotë secila prej tyre. Ato mund të jenë të drejtimeve të ndryshme, prandaj, para se të vendosni një objekt të ri, këshillohet të vendosni se çfarë do të ruajmë atje. Nëse ka ndonjë gjë, në të ardhmen do të jetë e mundur të ndryshohen pronat në përputhje me detyrat:

  • "Global". Ky flamur vendoset nëse moduli synon të ruajë procedurat dhe funksionet që duhet të thirren pa specifikuar emrin e modulit. Natyrisht, ato duhet të jenë të eksportueshme dhe emrat e tyre duhet të jenë unikë në kontekstin e të gjithë kontekstit global. Për sa i përket përdorimit, ato nuk do të ndryshojnë nga funksionet standarde të platformës;
  • "Klient". Varet nga cilësimet e sistemit dhe rregullon nëse procedurat e modulit mund të ekzekutohen në anën e klientit;
  • "Server". Janë shënuar modulet e zakonshme, në të cilat planifikohet vendosja e algoritmeve për ekzekutim në server;
  • "Lidhja e jashtme". Procedurat e modulit me këtë veçori të aktivizuar mund të ekzekutohen përmes një lidhjeje me burim të jashtëm;
  • Thirrja e serverit. Përgjegjës për lejimin e procedurave nga një modul për të thirrur serverin gjatë ekzekutimit në klient;
  • "I privilegjuar". Aktivizimi i këtij cilësimi do të lejojë që kodi i procedurës së modulit të mos kontrollojë të drejtat e aksesit gjatë ekzekutimit. Mund të telefononi vetëm një modul të përbashkët me këtë cilësim në server. Cilësimet e "Klientit" dhe "Lidhja e jashtme" do të rivendosen;
  • "Ripërdorim". Mund të marrë vlerat e mëposhtme: "Mos përdor", "Për kohëzgjatjen e seancës", "Për kohëzgjatjen e telefonatës". Kur thirrni një procedurë disa herë, sistemi mund të përdorë të dhëna të llogaritura më parë brenda procedurës (thirrjes) ose jetëgjatësisë së të gjithë seancës (duke filluar 1C). Duhet të jeni shumë të kujdesshëm me këtë cilësim, pasi mund të ndodhin gabime për shkak të përdorimit të gabuar të moduleve të tilla.

Ka situata kur dëshironi të krijoni një modul të përbashkët me thirrje procedurash në server dhe klient me ndryshime në algoritëm. Për të kufizuar kodin, përdoren direktivat e paraprocesorit me kontroll. Si rezultat, për një thirrje serveri do të jetë një kod, dhe për një thirrje klienti do të jetë një tjetër.
Procedura AlgorithmServerClient() Export #If ThinClient Pastaj // kodi ekzekutohet nëse thirrja e procedurës erdhi nga klienti ShowUserAlert("Në klientin"); ElseIf Server Pastaj // kodi ekzekutohet nëse thirrja e procedurës ka ardhur nga serveri VariableServer = "Thirrje serveri"; #EndIf EndProcedura

Një shembull i transferimit të kodit në një modul të përbashkët 1C

Le të shqyrtojmë një situatë ku kemi dy ngjarje në formën e një dokumenti që përfshijnë një procedurë për shumëzimin e sasisë dhe çmimit në seksionin tabelor. Ky është një algoritëm mjaft i zakonshëm, pasi gjendet në shumë dokumente prokurimi dhe zbatimi. Le të transferojmë kodin e procedurës në një modul të përbashkët, i cili fillimisht duhet të krijohet në mënyrë që të mund të përdoret ky kod në dokumente të tjera.

&Në procedurën e klientit Çmimi i mallraveOnChange(Elementi) RillogaritjaShuma(); Procedura e Fundit &Procedura e Klientit MallratSasiaNdërrim(Elementi) RillogaritjaShuma(); Fundi i procedurës &Në procedurën e klientit Rillogaritja e shumës() Vargu PM = Elementet.Mallrat.Të dhënat aktuale; Vargu PM.Sum = Vargu PM.Sasia * Vargu PM.Çmimi; Përfundimi i procedurës

Meqenëse për detyrën tonë na duhet një telefonatë nga klienti dhe nuk kemi nevojë për të dhëna nga baza e të dhënave, vendosim vetëm flamurin "Klient". Nëse dëshironi të përdorni të njëjtin modul për llogaritjet më komplekse në të ardhmen, atëherë kontrolloni edhe "Server" në vetitë. Faza përgatitore ka përfunduar dhe ne mund të kalojmë në shkrimin e kodit.


Le të krijojmë një procedurë eksporti në modul dhe të transferojmë atje algoritmin për llogaritjen e shumës nga procedura në modulin e formularit. Vargu i seksionit tabelor do të përdoret si parametër i procedurës në hyrje. Në modulin e formës së dokumentit, ne ndryshojmë thirrjet e procedurës në të njëjtin modul në një thirrje procedurale nga moduli i përgjithshëm.


Procedura CalculateRow(TablePartRow) ExportTablePartRow.Sum = TablePartRow.Sasia *TablePartRow.Çmimi; Përfundimi i procedurës

Fragmenti 1

Procedura &AtClient GoodsPriceOnChange(Artikulli) //thirrni procedurën nga moduli i përbashkët CalculationsInSystem.CalculateString(Items.Goods.CurrentData); //RillogaritjaShuma(); Fundi i procedurës &Në procedurën e klientit GoodsQuantityOnChange(Artikulli) //thirrni procedurën nga moduli i përbashkët CalculationsInSystem.CalculateString(Items.Goods.CurrentData); //RillogaritjaShuma(); Fundi i procedurës &Në procedurën e klientit Rillogaritja e shumës() Vargu PM = Elementet.Mallrat.Të dhënat aktuale; Vargu PM.Sum = Vargu PM.Sasia * Vargu PM.Çmimi; Përfundimi i procedurës

Fragmenti 2

Ne nuk do të vërejmë ndonjë ndryshim kur sistemi të fillojë, por kjo strukturë kodi është shumë më e lehtë për t'u lexuar dhe ruajtur. Sigurisht, në këtë shembull, sasia e kodit nuk mund të tregojë të gjitha përfitimet. Në rastin e një algoritmi kompleks për dhjetëra objekte konfigurimi, fitimi në sasinë e kodit dhe strukturën e tij do të ndikojë gjithashtu në performancën e sistemit. Për më tepër, zhvilluesit me përvojë 1C rekomandojnë të mos përshkruajnë algoritme në modulet e formës, por t'i vendosin ato në module të zakonshme të konfiguruara siç duhet.

Gjatë zhvillimit të moduleve të përbashkëta, duhet të merren parasysh rregullat e pranuara përgjithësisht për krijimin e tyre:

  • Vendosni procedurat dhe funksionet që lidhen me funksionalitete të ngjashme në një modul të përbashkët të veçantë;
  • Në emër të modulit, pasqyroni përkatësinë e tij në kontekst (Klient, Server) dhe shmangni fjalët e zakonshme (trajtues, procedura, etj.);
  • Ndani logjikën e brendshme të serverit të aplikacionit dhe logjikën e klientit për ndërfaqen;
  • Kini kujdes kur krijoni një modul të përbashkët global. Të mos i referohesh një procedure nëpërmjet emrit të modulit mund të jetë konfuze, veçanërisht nëse sistemi mbështetet nga shumë ekipe zhvillimi.

Modulet e krijuara siç duhet do t'ju ndihmojnë të navigoni strukturën e konfigurimit shumë më shpejt dhe të bëni përmirësime. Nëse shihni një mundësi për ta bërë një funksion të dobishëm gjenerik dhe për ta zhvendosur atë në një modul të përbashkët, atëherë bëjeni. Në të ardhmen, ju dhe kolegët tuaj do të jeni mirënjohës për këtë vendim.

Artikujt kryesorë të lidhur