Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • 1c krijimi i një detyre në sfond. Fillimi i një pune në sfond në mënyrë programore

1c krijimi i një detyre në sfond. Fillimi i një pune në sfond në mënyrë programore

Pastrimi periodik i regjistrave (për shembull, regjistri i informacionit "Versionet e objekteve" në konfigurimin SCP), kryerja e llogaritjeve në një orar, plotësimi i dokumenteve në një kohë të caktuar - kjo nuk është një listë e plotë e veprimeve që mund të zbatohen duke përdorur detyra rutinë 1C.

Krijo një detyrë

Qëllimi ynë nuk është të përshkruajmë kodin e modulit të ekzekutueshëm, ne do të tregojmë parimet e përgjithshme të funksionimit dhe krijimit të një detyre rutinë.

Detyra rutinë është e pazëvendësueshme:

  1. Nëse detyra në fjalë përfshin, si një nga kushtet, nevojën për të ekzekutuar në mënyrë periodike një algoritëm të caktuar;
  2. Nëse kodi duhet të ekzekutohet pavarësisht nga veprimet e operatorëve dhe përdoruesve të bazës së të dhënave;
  3. Nëse nisja e një procedure të ekzekutueshme nuk varet nga ngjarjet e jashtme që ndodhin me objektet e infobazës.

Për ta krijuar atë, duhet të shkoni në bazën e informacionit në modalitetin "Konfigurator". Më pas, gjeni degën “Rutine tasks” në pemën e konfigurimit, ato ndodhen në skedën “General” dhe klikoni butonin “Add” (Fig. 1).

Le të hedhim një vështrim më të afërt në dritaren e vetive të tij (Fig. 2):
Fig.2

  1. Emri, sinonimi dhe komenti - rregullat dhe parimet për plotësimin e këtyre fushave janë të ngjashme për të gjitha objektet e konfigurimit dhe nuk ka nevojë t'i përshkruajmë ato përsëri;
  2. Emri i metodës - një procedurë e modulit të përgjithshëm që përshkruan algoritmin e kërkuar sa më saktë që të jetë e mundur (duke klikuar në butonin e zgjedhjes hapen procedurat e disponueshme, paraqitja e të cilave përbëhet nga emri i modulit të përgjithshëm dhe emri i procedurës në kolona të ndryshme i tabelës);
  3. Çelësi – përcakton jo aq veçantinë e detyrës së planifikuar, por më tepër veçantinë e procesit të sfondit të nisur në bazë të detyrës;
  4. Orari - ne do t'i kushtojmë një paragraf të veçantë të artikullit tonë për përshkrimin e këtij elementi;
  5. Përdorimi – zgjedhja e kësaj kutie përcakton aktivitetin e detyrës, E VËRTETË do të thotë që detyra do të nisë dhe ekzekutohet sipas orarit;
  6. Të paracaktuara – nëse një element e ka këtë kuti, këto detyra nuk mund të fshihen ato krijohen automatikisht kur konfigurimi ruhet në bazën e të dhënave;
  7. Numri i përsëritjeve - nëse ndodh një përjashtim gjatë ekzekutimit, ai do të riniset, për të shmangur lakimin e pafund, programi kufizon numrin e rinisjeve;
  8. Intervali i riprovës – koha në sekonda ndërmjet rinisjeve të detyrave të kryera në mënyrë jonormale.

Le të hedhim një vështrim më të afërt në orar.

Orari i detyrave rutinë

Fig.3

Para së gjithash, duhet t'i kushtoni vëmendje pjesës së poshtme të dritares, këtu shfaqet informacioni i detajuar me një ndarje se sa shpesh dhe në cilën orë do të kryhet detyra.

Skeda "Të përgjithshme":

  • Data e fillimit të detyrës;
  • Data e përfundimit të përpunimit;
  • Frekuenca e përsëritjes së detyrës.

Nëse nuk specifikohen data në këtë skedë, atëherë nuk do të caktohet asnjë afat për detyrën.

Skeda "Ditore" (Fig. 4)
Fig.4

Përveç fushave të hyrjes për kohën e fillimit dhe përfundimit të detyrës dhe shpeshtësisë së nisjes së saj gjatë ditës, ai përmban një seksion tabelor për konfigurimin e detajuar të frekuencës së ekzekutimit.

Skedat "Ditore" dhe "Javore" përmbajnë informacione për periudhat përkatëse.

Karakteristikat e funksionimit

Në versionin klient-server të punës, ekzekutimi i detyrave rutinë përcaktohet nga mjetet e serverit. Nga tastiera e administrimit, mund të aktivizoni ose çaktivizoni aftësinë për të ekzekutuar detyrat për një bazë të dhënash specifike.

Situata është shumë më e ndërlikuar me versionin e skedarit të punës. Përpara një lëshimi të caktuar të platformës, sfondi dhe procedurat rutinë ekzekutoheshin vetëm nëse metoda ExecuteTaskProcessing() aktivizohej kur sistemi filloi nën një përdorues të caktuar. Në këtë rast, algoritmet lansoheshin periodikisht për sa kohë që përdoruesi që inicioi metodën ishte në program.

Aktualisht, puna e punëve në sfond në versionin e skedarit të punës shpërndahet në mënyrë të barabartë midis përdoruesve të autorizuar në bazën e të dhënave, nëse programi është nisur me parametrin shtesë AllowExecuteSheduledJobs, është ky proces që do të jetë përgjegjës për mirëmbajtjen rutinë.

Mund ta çaktivizoni plotësisht sfondin dhe punën rutinë në një bazë të dhënash që funksionon në modalitetin e skedarit duke fshirë ose riemërtuar skedarin DoNotCopy.txt në dosjen me bazën e të dhënave. Prania e këtij skedari i tregon platformës se puna po kryhet në origjinal dhe jo në një kopje të bazës së të dhënave.

Për më tepër, në dërgesat standarde 1C, u bë e mundur të menaxhohej puna e planifikuar direkt nga programi, pa hyrë në "Konfigurator". Në konfigurimin "ZUP", versioni 3.1.3.223, mund të hapni formularin e menaxhimit nga menyja Administrim->Mirëmbajtja->Veprimet rutinë->Detyrat rutinë dhe në sfond (Fig. 5)
Fig.5

Formulari që hapet ka një ndërfaqe intuitive dhe ju lejon të:


Ju gjithashtu mund të filloni një detyrë direkt nga formulari.

Kur punoni në 1C, ka shumë operacione rutinë që duhet të nisen ose formohen sipas një plani për të kryer një ose një veprim tjetër, për shembull: postimi i dokumenteve ose ngarkimi i të dhënave në 1C nga një faqe interneti.

Kohët e fundit kam postuar një artikull: Është koha për ta automatizuar këtë:

Detyrat rutinë dhe në sfond

Motori i punës është krijuar për të kryer çdo aplikacion ose funksionalitet në një orar ose në mënyrë asinkrone.

Mekanizmi i detyrës zgjidh problemet e mëposhtme:

  • Aftësia për të përcaktuar procedurat rregullatore në fazën e konfigurimit të sistemit;
  • Ekzekutimi i veprimeve të specifikuara sipas planit;
  • Bërja e një thirrjeje në një procedurë ose funksion të caktuar në mënyrë asinkrone, d.m.th. pa pritur përfundimin e tij;
  • Ndjekja e progresit të një detyre specifike dhe marrja e statusit të saj të përfundimit (një vlerë që tregon nëse ishte e suksesshme apo jo);
  • Marrja e një liste të detyrave aktuale;
  • Aftësia për të pritur për të përfunduar një ose më shumë detyra;
  • Menaxhimi i punës (mundësia e anulimit, bllokimi i ekzekutimit, etj.).

Mekanizmi i punës përbëhet nga komponentët e mëposhtëm:

  • Meta të dhënat e detyrave rutinë;
  • Detyrat e rregullta;
  • Punë në sfond;
  • Programuesi i detyrave.

Punët në sfond dhe janë krijuar për të kryer detyrat e aplikacionit në mënyrë asinkrone. Detyrat e sfondit zbatohen duke përdorur gjuhën e integruar.

Detyrat e planifikuara dhe janë krijuar për të kryer detyrat e aplikimit sipas një orari. Detyrat rutinë ruhen në bazën e informacionit dhe krijohen në bazë të meta të dhënave të përcaktuara në konfigurim. Meta të dhënat e një detyre rregullatore përmbajnë informacione të tilla si emri, metoda, përdorimi, etj.

Një detyrë rutinë ka një plan që përcakton se në cilat kohë duhet të ekzekutohet metoda e lidhur me detyrën rutinë. Orari, si rregull, specifikohet në bazën e informacionit, por gjithashtu mund të specifikohet në fazën e konfigurimit (për shembull, për detyrat rutinë të paracaktuara).

Planifikuesi i detyrave përdoret për të planifikuar ekzekutimin e detyrave rutinë. Për çdo punë të planifikuar, planifikuesi kontrollon periodikisht nëse data dhe ora aktuale përputhen me orarin e punës së planifikuar. Nëse përputhet, planifikuesi e cakton atë detyrë për ekzekutim. Për ta bërë këtë, për këtë detyrë të planifikuar, planifikuesi krijon një detyrë sfondi, e cila kryen përpunimin aktual.

Unë mendoj se kjo është e mjaftueshme me përshkrimin - le të zbresim në zbatimin:

Krijimi i një detyre rutinë

Emri i metodës– rruga drejt procedurës që do të ekzekutohet në një punë në sfond sipas një plani të caktuar. Procedura duhet të jetë në një modul të përbashkët. Rekomandohet të mos përdorni module standarde të zakonshme, por të krijoni tuajat. Mos harroni se punët në sfond funksionojnë në server!

Përdorimi– shenjë e përdorimit të një detyre rutinë.

E paracaktuar– tregon nëse detyra rutinë është e paracaktuar.

Nëse dëshironi që detyra rutinë të funksionojë menjëherë pasi të vendoset në bazën e të dhënave, specifikoni atributin E paracaktuar. Përndryshe, do t'ju duhet të përdorni përpunimin "Job Console" ose të aktivizoni detyrën që të ekzekutohet në mënyrë programore.

Numri i riprovave kur një punë përfundon në mënyrë jonormale– sa herë është rifilluar puna në sfond nëse është ekzekutuar me një gabim.

Riprovoni intervalin kur puna përfundon në mënyrë jonormale– sa shpesh do të riniset puna në sfond nëse është përfunduar me një gabim.

Vendosja e një orari

Orari duke përfunduar detyrën:

Çdo orë, vetëm një ditëPeriudha e ditëve të përsëritura = 0, periudha e ditëve të përsëritura = 3600
Çdo ditë një herë në ditëPeriudha e ditëve të përsëritura = 1, periudha e ditëve të përsëritura = 0
Një ditë, një herëDitët e përsëritjes së periudhës = 0
Çdo ditë të tjera një herë në ditëPeriudha Ditë të Përsëritjes = 2
Çdo orë nga ora 01:00 deri në 07:00 çdo ditëPeriodDitët e Përsëritjes = 1PërsëritjePeriudhaGjatë Ditës = 3600Koha e Fillimit = 01.00

Koha e Fundit = 07.00

Çdo të shtunë dhe të dielë në orën 09.00Periudha e ditëve të përsëritura = 1 javë ditë = 6, 7 koha e fillimit = 09.00
Çdo ditë për një javë, kaloni një javëDitët e përsëritjes së periudhës = 1Periudhajavë = 2
Në orën 01.00 një herëOra e fillimit = 01.00
Dita e fundit e çdo muaji në orën 9:00.PeriodDitët e Përsëritjes = 1DitëNë Muaj = -1Koha e Fillimit = 09.00
Dita e pestë e çdo muaji në orën 9:00PeriodDitët e Përsëritjes = 1DitëNë Muaj = 5Koha e Fillimit = 09.00
E mërkura e dytë e çdo muaji në orën 9:00PeriodDitë Përsëritje = 1 Ditë Javë Muaj = 2 Ditë Javë = 3

Ora e fillimit = 09.00

Karakteristikat e ekzekutimit të punëve në sfond në variantet e skedarëve dhe klient-server

Mekanizmat për ekzekutimin e punëve në sfond në versionet e skedarit dhe klient-server janë të ndryshëm.

Në versionin e skedarit ju duhet të krijoni një proces të dedikuar klienti që do të kryejë punë në sfond. Për ta bërë këtë, procesi i klientit duhet të thërrasë periodikisht funksionin e kontekstit global ExecuteJobProcessing. Vetëm një proces klienti për infobazë duhet të përpunojë punët e sfondit (dhe, në përputhje me rrethanat, të thërrasë këtë funksion). Nëse një proces klienti nuk është krijuar për të përpunuar punët në sfond, atëherë kur qaseni në mënyrë programore në motorin e punës, do të shfaqet gabimi "Menaxheri i punës nuk është aktiv". Nuk rekomandohet përdorimi i një procesi klienti që përpunon punët e sfondit për funksione të tjera.

Pasi të fillojë punët e sfondit të përpunimit të procesit të klientit, proceset e tjera të klientit janë në gjendje të hyjnë në mënyrë programore në motorin e punës së sfondit, d.m.th. mund të ekzekutojë dhe menaxhojë punët në sfond.

Në versionin klient-server Për të ekzekutuar punët në sfond, përdoret një programues detyrash, i cili ndodhet fizikisht në menaxherin e grupit. Për të gjitha punët e sfondit në radhë, planifikuesi merr procesin e punës më pak të ngarkuar dhe e përdor atë për të ekzekutuar punën përkatëse të sfondit. Procesi i punëtorit ekzekuton punën dhe njofton planifikuesin për rezultatet e ekzekutimit.

Në versionin klient-server, është e mundur të bllokohet ekzekutimi i detyrave rutinë. Ekzekutimi i detyrave rutinë bllokohet në rastet e mëposhtme:

  • Një bllokim i qartë i detyrave rutinë është instaluar në bazën e informacionit. Kyçja mund të vendoset nëpërmjet tastierës së grupit;
  • Ekziston një bllok lidhjesh në bazën e informacionit. Kyçja mund të vendoset nëpërmjet tastierës së grupit;
  • Metoda SetExclusiveMode() me parametrin True u thirr nga gjuha e integruar;
  • Në disa raste të tjera (për shembull, kur përditësoni konfigurimin e bazës së të dhënave).

Përpunimi i nisjes dhe shikimit të detyrave të planifikuara mund ta shkarkoni këtu.

Zakonisht punë në sfond në 1C: Ndërmarrjet nisen sipas rregulloreve.

Kjo do të thotë, në fillimin, një detyrë rutinë gjeneron një detyrë në sfond. Por nëse është e nevojshme
ne mund të ekzekutojmë një punë në sfond edhe në mënyrë programore.
Në të njëjtën kohë, ai mund të përdorë çdo metodë dhe veçori të disponueshme në server, sepse dhe funksionon në server.
Në fakt, vetë puna e sfondit nuk kryen asnjë veprim. Sapo nis
për të ekzekutuar një procedurë nga një modul i përbashkët. Nëse procedura përdor parametra,
ato gjithashtu mund të dërgohen kur fillon një punë në sfond.

Le të shohim një shembull të thjeshtë. Le të krijojmë një përpunim që do të ekzekutojë sfondin
detyrë, e cila nga ana tjetër do të bëjë një regjistrim në librin e ditarit.

Sepse
për një punë në sfond na duhet një procedurë e përbashkët e modulit, le të krijojmë këtë modul të përbashkët
me aftësinë për të ekzekutuar procedurat e tij në server.

Le të krijojmë një procedurë në këtë modul të përgjithshëm që do të regjistrojë në regjistër
regjistrimin

Procedura RecordInRegistrationLog(par_EventName, par_Comment) ExportRecordLog(par_EventName, , , , par_Komenti) ; Përfundimi i procedurës

Siç mund ta shihni, procedura ka parametra. Kjo do të thotë që detyra e sfondit do të duhet t'i bëjë ato disi
mënyra për të kaluar në procedurë.

Tani do të krijojmë një përpunim me të cilin do të nisim një detyrë në sfond.

Ne do ta bëjmë atë në një formë të kontrolluar, por për format e zakonshme nuk do të ketë asnjë ndryshim thelbësor,
përdoren të njëjtat metoda. Le të krijojmë një formë të thjeshtë me një komandë:


Në modulin e formularit shkruajmë kodin e mëposhtëm:

Procedura &OnServer Shkruani JROnServer() Vargu i parametrave = Array i ri; Vargu i parametrave. Shto( "Ngjarja. Puna në sfond përfundoi me sukses") ; Vargu i parametrave. Shto( "Koment. Kontrollimi i punës së sfondit") ; Detyrat e Sfondit. Vraponi ( "site_RoutineTasks.RecordInRegistrationJournal", Vargu i parametrave); Fundi i procedurës &Në procedurën e klientit Shkruani JR (Komandë) Shkruani JR në Server () ; Përfundimi i procedurës

Filloni një punë në sfond duke përdorur metodën Vraponi ()
menaxher i punës në sfond.

Parametri i parë i kësaj metode është
emri i modulit të përbashkët dhe emri i procedurës që do të ekzekutohet, shkruani - string.
Parametri i dytë është një grup me vlerat e parametrave për procedurën e thirrur.
Rendi i elementeve në grup duhet të përputhet me rendin e parametrave në
procedurë.
Mund të tregohet gjithashtu Celës Dhe Emri punë në sfond.

Tani le të testojmë përpunimin. Le ta hapim atë në modalitetin 1C: Enterprise dhe
Le të fillojmë ekzekutimin. Tjetra, hapni regjistrin e regjistrimit dhe shikoni se detyra
punoi me sukses dhe bëri një hyrje përkatëse në regjistër.

Koncepti i programimit asinkron

Koncepti i programimit asinkron është se rezultati i një funksioni nuk është menjëherë i disponueshëm, por pas njëfarë kohe në formën e një thirrjeje asinkrone (duke shkelur rendin normal të ekzekutimit).

ato. Ideja kryesore e programimit asinkron është të lëshoni thirrje individuale me metodë dhe të vazhdoni të kryeni punë të tjera paralelisht pa pritur që thirrjet të përfundojnë.

Disa metoda që minimizojnë gjasat e përjashtimeve nuk kërkojnë një qasje asinkrone, por të tjerat e kërkojnë atë që në fillim të zhvillimit.

Siç shihet nga grafikët, nuk ka koeficient të veprimeve të dobishme ndërvepruese të përdoruesit me një model programimi sinkron, pasi sistemi bllokon ndërfaqen e përdoruesit, ndërsa me një model asinkron, përdoruesi vazhdon të punojë në mënyrë aktive në sistem.

Kur funksionon në mënyrë sinkrone, aplikacioni ka vetëm një thread. Me modelin e programimit asinkron, ju mund të ekzekutoni paralelisht fije të shumta dhe të reagoni ndaj veprimeve të përdoruesve të rinj ndërsa ato ekzekutohen. Pasi të ekzekutohet n-thread, ju e shfaqni rezultatin në ekran.

Detyrat e sfondit në 1C: Ndërmarrja 8

Në 1C: Enterprise 8, punët në sfond janë krijuar për të kryer detyrat e aplikacionit në mënyrë asinkrone. Ata mund të gjenerojnë punë në sfond për fëmijë, për shembull, për të paralelizuar llogaritjet komplekse nëpër serverë të ndryshëm të punës të grupit në një mënyrë funksionimi klient-server.

Është e mundur të kufizohet ekzekutimi i punëve në sfond që kanë të njëjtat metoda bazuar në një kriter specifik aplikimi. Krijimi dhe menaxhimi programatik i punëve në sfond është i mundur nga çdo lidhje përdoruesi me bazën e informacionit të sistemit. Puna e sfondit funksionon në emër të përdoruesit që e ka krijuar atë.

Mekanizmi i detyrave funksionon si në modalitetin klient-server ashtu edhe në mënyrën e funksionimit të skedarit, por aftësitë për administrimin dhe ekzekutimin e detyrave në të dy versionet janë disi të ndryshme.

Opsioni klient-server

Në versionin klient-server, planifikimi i detyrave kryhet nga programuesi i detyrave, i cili ndodhet fizikisht në menaxherin e grupit.

Planifikuesi kontrollon periodikisht për të parë nëse është marrë ndonjë kërkesë për të ekzekutuar punët në sfond. Nëse ka punë që duhet të ekzekutohen, planifikuesi përcakton proceset më pak të ngarkuara të punëtorëve në grup dhe i cakton në mënyrë sekuenciale secilit prej tyre detyrën e tij për të ekzekutuar. Kështu, i njëjti proces punonjës mund të ekzekutojë paralelisht disa punë. Pasi të merret një punë nga një proces punonjës, procesi i punëtorit krijon një lidhje me bazën e informacionit dhe ekzekuton punën brenda asaj lidhjeje. Pas përfundimit të punës, procesi i punëtorit njofton planifikuesin nëse puna ka përfunduar me sukses ose pa sukses.

Opsioni i skedarit

Duke filluar me versionin 8.3.3.641 të platformës, zhvilluesit kanë thjeshtuar ndjeshëm punën me punët në sfond në versionin e skedarit.

Më parë, për të ekzekutuar automatikisht detyrat, ishte e nevojshme të niste një sesion i veçantë, shtesë 1C: Enterprise, i përdorur si një programues detyrash. Dhe në këtë seancë ishte e nevojshme të ekzekutohej periodikisht metoda e integruar e gjuhës ExecuteTaskProcessing(). Kjo qasje ishte mjaft e rëndë, e papërshtatshme dhe e kufizoi shumë përdorimin e sfondit dhe detyrave rutinë në versionin e skedarit të punës.

Tani gjithçka është bërë shumë më e lehtë. Nëse fillon një klient i hollë ose i trashë, dhe gjithashtu nëse serveri në internet ka lidhje me klientin, atëherë në secilin prej këtyre aplikacioneve një fill tjetër hapet automatikisht me një lidhje me bazën e të dhënave. Këto fije janë të angazhuara në kryerjen e detyrave në sfond dhe rutinë.

Secili nga aplikacionet e listuara kryen detyrat e veta në sfond. Nëse një aplikacion ka iniciuar disa punë në sfond, ato ekzekutohen në mënyrë sekuenciale, sipas radhës që janë marrë.

Disavantazhi i dukshëm i punëve në sfond 1C: meqenëse ato ekzekutohen në anën e serverit, nuk ka mundësi për punë interaktive me përdoruesin (për shembull, është e pamundur të shfaqet një mesazh ose ndonjë informacion tjetër; të gjitha këto të dhëna duhet të ruhen brenda bazës së informacionit dhe të përpunohen më tej në në një farë mënyre).

Duhet të theksohet se punët në sfond janë objekte thjesht softuerike dhe nuk mund të ruhen në bazën e të dhënave. Kjo do të thotë, ne mund të krijojmë vetëm një shembull të një klase, të inicializojmë vetitë e saj dhe ta nisim atë për ekzekutim.

Një shembull i ekzekutimit të kodit asinkron në 1C: Enterprise 8

“Shkrimi i programeve në të cilat rezultati i një thirrjeje funksioni arrin i panjohur kur është shumë më i vështirë se ato të zakonshmet. Thirrjet e ndërlidhura, trajtimi i gabimeve, kontrolli mbi atë që po ndodh - gjithçka bëhet më e ndërlikuar," këtë do ta thonë vetëm ata që nuk dinë të përdorin siç duhet aftësitë e platformës, por jo ne!

Le të demonstrojmë thjeshtësinë dhe elegancën e ekzekutimit të kodit asinkron në 1C: Enterprise 8!

Hapi 1. Le të krijojmë një sistem të ri të sigurisë së informacionit për zhvillimin e konfigurimit

Hapi 2. Në konfigurim do të shtojmë modulin e përgjithshëm "Transmetuesit asinkron"

Pse shtuam një modul të përbashkët? Gjithçka është e thjeshtë këtu: për të kryer operacione asinkrone në 1C: Enterprise 8, përdoren punë në sfond, të cilat kanë menaxherin e tyre - "BackgroundTask Manager". Ky objekt ka një metodë "Run", me ndihmën e së cilës niset detyra e sfondit.

Le të kthehemi te asistenti i sintaksës.

Pra, do të na duhet një modul i përbashkët.

Hapi 3. Në modulin e përgjithshëm "Transmetuesit asinkron" do të shtojmë procedurën e eksportit OurLongOperation()

Procedura OurLongOperation(Duration) Export // Simulimi i një veprimi afatgjatë (Kohëzgjatja sek.). OperacioniStartDate = CurrentDate(); Ndërsa CurrentDate() - Data e fillimit të operacionit< Длительность Цикл КонецЦикла; КонецПроцедуры

Hapi 4. Shtoni përpunimin "Koncepti i Programimit Asinkron" në konfigurim (mund të krijoni përpunim të jashtëm)

Shtoni një atribut në formular:

Kohëzgjatja (Numri)

dhe dy ekipe

Kryeni LongOperation;

Kryeni një operacion afatgjatë në mënyrë asinkrone.

Hapi 5. Sipas asistentit të sintaksës, plotësoni modulin e formularit

&Në procedurën e klientit Kryeni Operacionin afatgjatë (Komanda) Ekzekutoni Operacionin me Ekzekutim të gjatëOnServer(); EndProcedura &OnServer Procedura ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Fundi i procedurës &Për procedurën e klientit Kryerja e funksionimit afatgjatë në mënyrë asinkrone (komandë) Kryerja e funksionimit afatgjatë në mënyrë asinkrone në server (); Fundi i procedurës &Në procedurën e serverit Kryerja e një operacioni afatgjatë në mënyrë asinkrone në server () Parametrat = Array i ri; Parametrat.Add(Duration); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parametrat, New UniqueIdentifier, "Shembull i konceptit të programimit asinkron"); Përfundimi i procedurës

Hapi 6 Le të nisim dhe të kontrollojmë!

Rezultati:

Nëse klikojmë në butonin "Kryen operacion të gjatë", atëherë ndërfaqja e përdoruesit bllokohet për sekonda "Duration";

Nëse klikojmë në butonin “Kryerja e funksionimit të gjatë në mënyrë asinkrone”, ndërfaqja e përdoruesit nuk bllokohet dhe kodi i programit ekzekutohet paralelisht.

Mund të verifikojmë që kodi i programit është ekzekutuar në mënyrë asinkrone duke parë regjistrin.

Ne mund të korrigjojmë kodin e programit që funksionon në "background" nëse vendosim vetinë e duhur në parametrat e korrigjimit.

Një shembull i ekzekutimit të kodit asinkron në 1C: Enterprise 8 duke përdorur BSP

Le të shqyrtojmë një shembull të zbatimit të konceptit të programimit asinkron në 1C: Ndërmarrja 8 në BSP duke përdorur shembullin e përpunimit të "Çështjeve aktuale".

Logjika është si më poshtë: kur programi niset, zona e punës e faqes fillestare inicializohet, ku mund të shfaqet forma e përpunimit "Çështjet aktuale". Ky formular plotësohet nga çështjet aktuale të përdoruesit dhe duhet kohë për ta plotësuar. Nëse zhvilluesit nuk do të kishin aftësinë për të ekzekutuar kodin në mënyrë asinkrone, atëherë ndërfaqja e përdoruesit do të bllokohej për të gjithë kohën e plotësimit të formularit të përpunimit!

Le të analizojmë kodin e programit të formularit.

Ngjarja e formës "When CreatedOnServer" quan procedurën "RunBackgroundTask" - kjo është ajo që na nevojitet.

Pa u hutuar nga nuancat, le të analizojmë këtë procedurë

Dhe këtu shohim se është përdorur menaxheri i punës në sfond dhe metoda e tij "Run". Vini re se zhvilluesit ruajnë një ID unike për punën e sfondit.

Për ta bërë këtë, zhvilluesit përdorin metodën ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



Në një procedurë të lidhur Connectable_CheckTaskComplete() zhvilluesit thërrasin një funksion Puna e përfunduar (ID-ja e detyrës)


Ky funksion kontrollon ekzekutimin e një pune në sfond sipas identifikuesit.

Duhet të theksohet se BSP ka zhvilluar module të përgjithshme për të mbështetur operacionet afatgjata të serverit.

Kështu, koncepti i programimit asinkron në 1C: Enterprise 8 rrit paksa kompleksitetin e zgjidhjes së problemeve për zhvilluesin, por përmirëson ndjeshëm funksionalitetin e programit nga këndvështrimi i përdoruesit.

Artikujt më të mirë mbi këtë temë