Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Gabimet
  • Detyrat e rregullta në 1s 8.3. Detyrat e sfondit: veçoritë, aftësitë, cilësimet

Detyrat e rregullta në 1s 8.3. Detyrat e sfondit: veçoritë, aftësitë, cilësimet

" Në të do të shikojmë veçori të reja që nuk kanë të bëjnë me ndërfaqen e sistemit, por zgjerojnë ndjeshëm funksionalitetin e ofruar të platformës 1C: Enterprise 8.

Zbatueshmëria

Artikulli diskuton versionin 8.3.4.437 të platformës 1C:Enterprise. I gjithë funksionaliteti i përshkruar në artikull është përditësuar në versionin 8.3.11.

Risi të tjera në 1C: Enterprise 8.3

Le të vazhdojmë të njihemi me risitë e platformës 1C:Enterprise 8.3.

Sfondi dhe detyrat rutinë në bazën e informacionit të skedarit

Në shumë konfigurime tipike platformash 8.2 kishte një konstante që tregonte përdoruesin nën të cilin ishin ekzekutuar detyrat në versionin e skedarit.

Kur sistemi filloi të funksiononte nën këtë përdorues, u lidh një mbajtës i pritjes, i cili thirri metodën e integruar të gjuhës me një periodicitet të caktuar ExecuteTaskProcessing().

Kjo qasje krijoi vështirësi dhe shqetësime shtesë për përdorimin e detyrave rutinë në bazën e të dhënave të skedarëve.

Kjo mund të jetë veçanërisht kritike kur punoni me konfigurime si p.sh "Automatizim gjithëpërfshirës" ose “Menaxhimi i Ndërmarrjeve Prodhuese”, në të cilat detyrat rregullatore luajnë një rol mjaft të rëndësishëm.

Nëse ky është skedari IB Atëherë
=
Constants.UserForExecutingRoutineTasksInFileVariant.Get();
Nëse chValueVariable("glCurrentUser") =
UserTo ExecuteTaskRegl Pastaj
// me një interval prej sekondash quajmë procedurën e punës me detyra rutinë
SupportRegularTaskForFileVersion();
IntervalForPoll=
Constants.IntervalForPollingRoutineTasksInFileVariant.Get();
Nëse IntervalForPoll= E papërcaktuar
OSE IntervalForPoll= 0 Pastaj
IntervalForPoll= 60 ;
FundNëse;
ConnectWaitHandler("Mbështetje për RoutineTaskForFileVersion",
IntervalForPoll);
FundNëse;
FundNëse;

Në platformë 8.3 zbatoi punën e sfondit dhe punëve rutinë në bazën e informacionit të skedarit pa përdorur thirrjen e metodës globale të kontekstit ExecuteTaskProcessing().

Detyrat në sfond dhe rutinë kryhen drejtpërdrejt në një nga aplikacionet e klientit (klient i hollë, i trashë) ose nga një shtesë e serverit në internet.

Një punë në sfond e nisur nga një sesion ekzekutohet nga i njëjti aplikacion klienti që e ka iniciuar atë.

Punët në sfond ekzekutohen në mënyrë sekuenciale, d.m.th. Në një aplikacion klienti, vetëm një detyrë në sfond (përfshirë ato rutinë) mund të ekzekutohet në të njëjtën kohë.

Detyrat rutinë kryhen vetëm nga një aplikacion klienti. Për të kontrolluar nisjen e detyrave të planifikuara, përdoret një çelës i linjës së komandës /AllowExecuteScheduledJobs.

Detyrat rutinë ekzekutohen nga aplikacioni i parë i klientit në rendin e fillimit, i cili nuk është i ndaluar të ekzekutojë detyra rutinë (për të ndaluar seancën, seanca duhet të nisë me parametrin e linjës së komandës /AllowExecuteScheduledJobs -Off).

Kur përfundon ai sesion, ekzekutimi kalon në cilindo nga sesionet e mbetura të ekzekutimit.

Nëse linja e nisjes së aplikacionit të klientit tregon në mënyrë eksplicite nevojën për të ekzekutuar detyra rutinë (në vijën e komandës tregohet /AllowExecuteScheduledJobs -Force), atëherë detyrat rutinë fillojnë të ekzekutohen mbi të, pavarësisht nga prania e seancave të tjera.

Detyrat rutinë përpunohen një herë në 60 sekonda.

Vini re se detyrat rutinë të zgjidhjes së aplikacionit (në versionin e skedarit) filluan të ekzekutohen jo më herët se 1 minutë pas lançimit të aplikacionit të klientit. Duke filluar me versionin 8.3.8, kjo kohë është dyfishuar, dhe për këtë arsye detyrat rutinë fillojnë të ekzekutohen maksimumi 2 minuta pas lëshimit të klientit (në versionin e skedarit).

Ky vendim vjen për shkak të zvogëlimit të vonesës në fillimin e aplikimit. Përveç kësaj, versioni 8.3.7 shtoi mundësinë për të përcaktuar shpejt se sesioni aktual është një seancë pune në sfond. Kjo zbatohet duke përdorur metodën e re të kontekstit global GetCurrentInfoBaseSession(), si dhe një metodë të re për sesionin e bazës së informacionit GetBackgroundTask().

Më poshtë është kodi që ilustron sa më sipër:

Për ta zmadhuar, klikoni në imazh.

Llogaritja e shumave të kontrollit

Platforma tani përfshin mekanizma për llogaritjen e shumave të kontrollit të të dhënave.

Le të kujtojmë se një checksum (hash) është një vlerë e llogaritur nga një grup të dhënash duke aplikuar një algoritëm të caktuar dhe përdoret për të kontrolluar integritetin e të dhënave gjatë transmetimit ose ruajtjes.

Hashes mund të përdoren për të kontrolluar identitetin e të dhënave (për shembull, duhet të siguroheni që skedari të mos jetë dëmtuar gjatë transferimit të tij; kontrolloni nëse janë bërë ndryshime në skedar dhe nëse po, atëherë ngarkoni përsëri në bazën e të dhënave) .

Për këtë qëllim, në platformë u implementua një objekt Hashing Data, i disponueshëm në server, në klientin e trashë, lidhjen e jashtme dhe gjithashtu në serverin e aplikacionit celular.

Ky objekt ka dy mënyra: Shto () Dhe Shto skedar (), të cilat përditësojnë shumën hash duke marrë parasysh të dhënat e kaluara në parametra.

Platforma 8.3.4.437 mbështet llogaritjen e funksioneve hash të mëposhtme: CRC32, MD5, SHA1, SHA256. Por funksionet SHA1 Dhe SHA256 nuk mbështeten në platformën celulare.

Le të shohim një shembull të thjeshtë. Supozohet se në server në drejtorinë e programit ekziston një skedar " ragent.exe" Nevoja për të llogaritur MD5-shuma për këtë skedar.

Për ta bërë këtë, ne do të krijojmë një përpunim të jashtëm, në formën e të cilit do të vendosim komandën Llogaritni. Trajtuesi përmban kodin e mëposhtëm:

&OnClient
Llogaritja e procedurës (Komanda)
Rezultati = CalculateOnServer();
Raporti(String(Rezultati));
Fundi i procedurës
&Në server
Funksioni CalculateOnServer()
Hash = E re Hashing Data(HashFunction.MD5);
Hash.AddFile(Programet e Katalogut() + "ragent.exe");
Kthimi Hash.HashSum ;
Funksioni i Fundit

Në platformën e botimit 8.3.10+ në metodë Shto () Objekt Hashing Data U bë e mundur përdorimi i një rryme të dhënash binare, të cilat thjeshtuan shumë përdorimin e tyre në zgjidhjen e problemeve të ndryshme të aplikuara të përditësimit të shumave hash.

Puna me versionet e mbrojtura të protokolleve SMTP/POP3

Në platformë 8.3 u bë e mundur përdorimi i versioneve të mbrojtura të protokolleve SMTP/POP3(ka terma SMTPS/POP3S ose SSLSMTP/SSLPOP3).

Për objekt InternetMailProfile pronat e reja të zbatuara:

  • Përdorni SSLSMTP;
  • Përdor SSLPOP3;
  • Vetëm SecureAuthenticationSMTP;
  • Vetëm vërtetimi i sigurt POP3.

Vetitë Autentifikimi SMTP Dhe Autentifikimi POP3 Objekt InternetMailProfile, si dhe transfertat Metoda e vërtetimit SMTPA Dhe Metoda e vërtetimit POP3 Nuk rekomandohet përdorimi i tyre - ato mbështeten për pajtueshmëri.

Duke përdorur një protokoll të sigurt SMTPS bën të mundur dërgimin e postës nga 1C duke përdorur një kuti postare Google.

Le të shohim një shembull. Në formular do të vendosim fusha për futjen e temës së letrës dhe adresën e marrësit, dhe për futjen e tekstit të letrës - një fushë dokumenti të formatuar.

Për ta zmadhuar, klikoni në imazh.

Kur shtypni butonin Dërgo Kodi i mëposhtëm do të ekzekutohet:

&OnClient
Procedura Dërgimi (Komanda) Mail = New InternetMail; Profili = I ri InternetMailProfile;
Profili.SMTPSAdresa e serverit= “smtp.googlemail.com” ;
Profili.PërdoruesiSMTP= “[email i mbrojtur]” ;
Profili.FjalëkalimiSMTP= “FALËKALIMI” ;
Profili.PërdorSSLSMTP= E vërtetë;
Profili.SMTPPport = 465 ; Përpjekje
Mail.Lidhu(Profili);
Përjashtim
Raporti(Përshkrimi i Gabimit());
Kthimi ;
Përpjekja e Fundit; MailMessageText= “” ;
Shtojcat = Struktura e re;
Teksti.GetHTML(MailMessageText, Shtojcat ); Mesazhi me postë= E re Mesazhi i Postës në Internet;
MailMessage.Marrësit.Shto(Kujt );
MailMessage.Subject= Subjekti;
MailMessage.Texts.Add(MailMessageText,
MailMessageTextType.HTML); Mail. Dërgo ( Mesazhi me postë); Postë. Shkëputeni();
Fundi i procedurës

Vini re se në shembullin tonë, nëse serveri SMTP nuk ishte në gjendje t'i dërgonte një email marrësit(ve), atëherë metoda Mail.Send(Mesazhi i Postës) hodhi një përjashtim. Kjo shkaktoi disa shqetësime për zhvilluesit, sepse... Arsyeja e hedhjes së përjashtimit nuk ishte e qartë.

Në versionin 8.3.9, kjo sjellje ka ndryshuar dhe tani metoda Send() kthen një përputhje, çelësi i së cilës është marrësi dhe vlera e së cilës është diagnostikimi nga serveri i postës. Kjo ju lejon të përcaktoni me saktësi arsyet e dështimit për t'i dërguar një mesazh emaili secilit marrës. Në modalitetin e përputhshmërisë me versionin 8.3.8, sjellja nuk ka ndryshuar.

Printim me dy anë

Në platformë 8.2 Vetë platforma nuk menaxhoi printimin dyfish; ky funksion mund të kontrollohej vetëm duke përdorur drejtuesin e printerit.

Në platformë 8.3 u bë i mundur kontrolli i printimit të dyfishtë për një dokument fletëllogaritëse, një diagram grafik (nga gjuha e integruar dhe në mënyrë interaktive) dhe një dokument teksti (vetëm interaktiv).

Regjistrimet e sistemit u shfaqën në gjuhën e integruar:

  • Lloji i printimit dyfish(Asnjë, FlipUp, FlipLeft);
  • (Auto, MirrorTop, MirrorLeft, Mos përdorni).

Dhe për objektet Dokumenti Tabelor Dhe Skema grafike u shfaqën vetitë Printim me dy anë Dhe Alternimi i rregullimeve të faqeve, me të cilin mund të ndryshoni paraqitjen e faqeve të printuara.

Në versionin 8.3.9 të platformës, numërimi i sistemit DuplexPrintType ka një vlerë të re të shtuar PërdorniPrinterSettings. Zgjedhja e kësaj vlere lejoi që cilësimet e printerit të përdoren gjatë printimit të dokumenteve të sistemit. Në modalitetin e përputhshmërisë 8.3.8, sjellja është e pandryshuar dhe cilësimet përkatëse të printerit shpërfillen.

Dialogu për publikimin e një baze informacioni në një server ueb është bërë më funksional. Tani publikimi nga konfiguruesi ju lejon të vendosni të gjithë parametrat e skedarit default.vrd.

Për dialogun për publikimin e një klienti në internet dhe shërbimeve të uebit përmes konfiguruesit, zbatohet si më poshtë:

  • aftësia për të kontrolluar disponueshmërinë e shërbimeve të uebit si parazgjedhje (atribut pointEnableCommon element ws);
  • aftësia për të kontrolluar ekzekutimin e punëve në sfond në versionin e skedarit (atribut lejoj ekzekutimin e punëve të planifikuara element ws).

Nëse kutia e kontrollit "Publikoni shërbimet e uebit sipas parazgjedhjes" në faqerojtësin "Bazë"është instaluar, atëherë kur përditësohet botimi, shërbimet e zgjedhura të ueb-it do të publikohen automatikisht.

Përndryshe, shërbimet e Uebit do të shënohen si të papublikueshme. Ky flamur korrespondon me atributin pointEnableCommon element ws në dosje default.vrd, i destinuar për konfigurimin e një klienti në internet dhe shërbimeve të uebit.

atribut pointEnableCommon Elementi ws është përgjegjës për mundësinë e përdorimit në këtë bazë informacioni shërbime ueb që publikohen pa treguar në mënyrë të qartë lejen për përdorim (atributi mundësojnë element pikë).

Nëse atributi ka një vlerë e vërtetë, pastaj të gjitha shërbimet e uebit për të cilat vlera e atributit nuk është specifikuar në mënyrë eksplicite mundësojnë element pikë, do të lejohet për përdorim.

Përndryshe, përdorimi i shërbimeve të tilla Web do të ndalohet.

Cilësimet "Punët në sfond në modalitetin e skedarit" përputhet me atributin lejoj ekzekutimin e punëve të planifikuara ws element në skedar default.vrd.

atribut lejoj ekzekutimin e punëve të planifikuara kontrollon aftësinë për të ekzekutuar detyra rutinë nga zgjerimi i serverit të uebit për versionin e skedarit të bazës së informacionit.

Atributi mund të marrë vlerat e mëposhtme:

  • fikur– në këtë rast, zgjerimi i serverit në ueb nuk do të kryejë detyra rutinë. Detyrat rutinë do të kryhen nga një aplikacion klienti (nëse ekziston), i cili lidhet drejtpërdrejt me bazën e informacionit, pa përdorur një server në internet.
  • forcë– në këtë rast, zgjerimi i serverit të uebit do të kryejë detyra rutinë.
    Nëse vlera e këtij atributi nuk është e specifikuar, atëherë detyrat rutinë do të kryhen nga aplikacioni me të cilin do të bëhet lidhja e parë me infobazën.

Dritarja e publikimit në shërbimin në internet është bërë edhe më e përshtatshme dhe ergonomike në versionin aktual të platformës. Tani parametrat që përshkruajnë vërtetimin e OpenID vendosen në një skedë të veçantë.

Numërimi i objekteve të infobazës

Në platformë 8.3 Mekanizmi për numërimin automatik të objekteve të bazës së informacionit është ripunuar. Unike e një numri ose kodi (përfshirë ato të marra si rezultat i gjenerimit automatik të një numri ose kodi) kontrollohet gjithmonë kur regjistrohet një objekt.

Një tregues se cili numër ose kod nuk është unik është shtuar në tekstin e mesazhit për shkeljen e veçantisë së një numri ose kodi.

Përdorimi i një numri ose kodi të lirë ka ndryshuar. Një numër ose kod i ri caktohet pa përdorur numra ose kode të lëshuara nëse tashmë ka numra ose kode të lëshuara me një parashtesë më të madhe (në renditje) të numrit ose kodit.

Funksionet agregate të gjuhës së shprehjes së sistemit të përbërjes së të dhënave

Funksionet e reja agregate zbatohen në gjuhën e shprehjes së sistemit të përbërjes së të dhënave:

  • Çdo ();
  • Çdo ();
  • Standard DeviationofPopulation();
  • StandardSampleDeviation();
  • VarianceSamples();
  • Varianceofpopulacioni();
  • KovariancaPopullsia();
  • SampleKovarianca();
  • Korrelacioni ();
  • RegressionSlope();
  • RegresionSegment();
  • Numri i Regresionit();
  • RegresioniR2();
  • RegressionAverageX();
  • RegresioniMesatarY();
  • RegressionAverageSXX();
  • RegressionAverageSYY();
  • RegresioniAverageSXY().

Siç tregojnë emrat, këto janë funksione statistikore, që do të thotë se zhvilluesit kanë mundësinë të krijojnë raporte komplekse pa pasur nevojë të zhvillojnë procedura për llogaritjen e të dhënave statistikore.

Për ta zmadhuar, klikoni në imazh.

Siç mund ta shihni nga figura, nuk ka funksione të reja në listën rënëse, por nëse i vendosni ato me dorë, nuk do të ketë asnjë mesazh gabimi dhe raporti do të gjenerohet:

Gjithashtu me interes është një veçori e re Klasifikimi ABC(). Rezultati i funksionit do të jetë numri i klasës, duke filluar nga 1 (1 korrespondon me klasën A, 2 me klasën B, 3 me klasën C, etj.).

Le të demonstrojmë se si funksionon ky funksion. Le të krijojmë një raport të ri të jashtëm "Klasifikimi i mallrave" në bazë të kërkesës:

ZGJIDHNI
Konsumi i produktitProduktet.Produkti,
Konsumi i produktitProduktet.Sasia
NGA
Dokumenti.Konsumimi i Mallrave.Mallrat SI Konsumi i produktitProdukte

Le të përcaktojmë një fushë të re të llogaritur Klasa:

Për ta zmadhuar, klikoni në imazh.

Le të konfigurojmë burimet si më poshtë:

Për ta zmadhuar, klikoni në imazh.

Në modalitetin e përdoruesit, raporti duket si ky:

Si përfundim, vërejmë se nga edicioni në botim në platformën 1C 8.3 mekanizmi ACS po përmirësohet dhe rafinohet vazhdimisht, dhe brenda kuadrit të artikullit tonë "i ri" nuk është e mundur të prezantohen plotësisht këto ndryshime. Po, kjo duket e panevojshme, sepse kur punoni në versionin aktual të platformës, gjithmonë mund të përdorni sisteme të ndryshme ndihmëse për t'ju ndihmuar të analizoni këtë apo atë aspekt të funksionimit të këtij mekanizmi.

Për më tepër, mos harroni për kursin tonë të veçantë Zhvillimi profesional i raporteve në 1C 8.3 mbi Sistemin e Përbërjes së të Dhënave, i cili zbërthen në atom të gjitha hollësitë dhe kurthet kur punoni me këtë mekanizëm. Shikoni vetë demonstrimin.

Pra, le të përmbledhim rezultatet e ndërmjetme. Deri në këtë pikë, jemi njohur me aftësitë e reja të ndërfaqes Taxi dhe formularët e menaxhuar, si dhe me disa aftësi të paparashikuara më parë të vetë platformës. Tani është koha për të parë se cilat veçori të përshtatshme janë bërë të disponueshme për zhvilluesin në konfigurues.

Koncepti i programimit asinkron

Koncepti i programimit asinkron është se rezultati i një funksioni nuk është i disponueshëm menjëherë, 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"); Fundi 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 afatgjatë 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 gjatë 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ë procedurën e fiksuar Connectable_CheckTaskComplete() zhvilluesit e quajnë funksionin 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.

Ndoshta, asnjë konfigurim i vetëm serioz në 1C 8.3 ose 8.2 nuk mund të bëjë pa përdorimin e detyrave rutinë dhe në sfond. Ato janë shumë të përshtatshme, pasi ato do të ekzekutohen sipas një plani të përcaktuar qartë pa ndërhyrjen e përdoruesit ose programuesit.

Për shembull, ju duhet të shkëmbeni të dhëna me një program tjetër një herë në ditë. Duke përdorur detyra rutinë dhe në sfond, 1C do të jetë në gjendje t'i kryejë këto veprime në mënyrë të pavarur, për shembull, gjatë orëve jo pune. Kjo metodë nuk do të ndikojë në asnjë mënyrë në përvojën e përdoruesit dhe do të ndihmojë në kursimin e kohës.

Së pari, le të kuptojmë se çfarë nënkuptojnë dhe cili është ndryshimi i tyre:

  • Detyrë e planifikuar ju lejon të filloni ndonjë veprim specifik sipas një plani të para-konfiguruar.
  • Punë në sfondështë një objekt që përmban veprimet që duhen kryer.

Le të supozojmë se kompania jonë shet diçka dhe ka faqen e saj të internetit në të cilën janë vendosur çmimet. Ne duam t'i ngarkojmë ato një herë në ditë për të ruajtur rëndësinë.

Hapni konfigurimin dhe shtoni një detyrë të planifikuar.

Vendosja e vetive

Le të shohim parametrat më të rëndësishëm që duhet të plotësohen në vetitë e tij.

  • në fushë" Emri i metodës» zgjedh procedurën e një moduli specifik të përgjithshëm që do të ekzekutohet drejtpërdrejt. Ai do të tregojë të gjitha hapat për ngarkimin e çmimeve në faqen tonë të internetit. Ju lutemi vini re se ekzekutimi do të bëhet në server. Kjo është logjike, sepse operacionet rutinë kryhen pa pjesëmarrjen e përdoruesit.
  • Detyra e planifikuar mund të çaktivizohet ose aktivizohet sipas nevojës. Nuk ka nevojë të redaktoni orarin e tij çdo herë. Për ta bërë këtë, në paletën e vetive, vendosni ose pastroni flamurin " Përdorimi».
  • Një tjetër gjë e rëndësishme është të vendosni nëse kjo detyrë rutinë do të jetë të paracaktuara, ose jo. Detyrat e paracaktuara të planifikuara nisen automatikisht. Nëse kjo veçori nuk është e instaluar, atëherë do t'ju duhet t'i hapni ato në mënyrë programore ose të përdorni përpunimin "Task Console" me ITS.
  • Ju gjithashtu mund të specifikoni numri i përsëritjeve dhe intervali ndërmjet tyre në rast të ndërprerjes jonormale. Ndërprerja jonormale i referohet atyre situatave kur punët nuk u kryen për shkak të një gabimi.

Vendosja e një orari

Hapi i fundit është krijimi i një plani për ngarkimin tonë në sajt duke përdorur lidhjen përkatëse në paletën e vetive.

Do të shihni një cilësim tipik të orarit në 1C 8.3. Nuk ka asgjë të komplikuar këtu. Në këtë shembull, ne vendosëm nisjen e ngarkimit tonë të çmimeve në faqe çdo ditë nga pesë deri në shtatë të mëngjesit. Në rast se detyra e planifikuar nuk ka kohë për t'u kryer para orës 7:00, ajo do të përfundojë që të nesërmen.

Bllokimi i detyrave të planifikuara

Drejtoni programin standard "Administrimi i serverëve të ndërmarrjeve 1C" dhe hapni vetitë e bazës së informacionit ku keni krijuar detyrën rutinë (për versionet klient-server të 1C).

Në dritaren që hapet (pasi të keni futur hyrjen dhe fjalëkalimin tuaj për të hyrë në sigurinë e informacionit), kontrolloni që kutia e kontrollit "Bllokimi i detyrave rutinë është aktivizuar" nuk është zgjedhur. Nëse hasni në një situatë ku detyra nuk funksionon, kontrolloni fillimisht këtë cilësim.

Në të njëjtën mënyrë, mund të çaktivizoni plotësisht detyrat rutinë në 1C 8.3. Për të çaktivizuar punë specifike në sfond, mund të përdorni përpunimin "Background Job Console" të integruar në versionet më të fundit.

Sfondi dhe detyrat e planifikuara në modalitetin e skedarit

Në këtë mënyrë, konfigurimi dhe nisja e këtyre detyrave është shumë më e vështirë për t'u organizuar. Më shpesh, krijohet një llogari shtesë, seanca e së cilës do të jetë gjithmonë e hapur.

Në këtë rast, detyrat rutinë aktivizohen duke përdorur metodën "RunTaskProcessing()".

Ju gjithashtu mund të përdorni ndërtimin e mëposhtëm:

Si emër i procedurës, duhet të specifikoni emrin e procedurës së klientit që do të ekzekutohet. Intervali tregon se sa sekonda më vonë do të bëhet ekzekutimi. Parametri "Një herë" nuk kërkohet. Ai pasqyron nëse kjo procedurë do të kryhet një herë apo disa herë.

Gjurmimi i gabimeve në punët e sfondit

Ju mund të shikoni përparimin e punëve në sfond, si dhe praninë e gabimeve të mundshme, në regjistër. Në filtër, zgjidhni aplikacionin "Puna në sfond" dhe, nëse është e nevojshme, zgjidhni rëndësinë e interesit, për shembull, vetëm "Gabimet".

Regjistri do të tregojë të gjitha shënimet që përputhen me zgjedhjen tuaj, së bashku me një koment që do t'ju ndihmojë të kuptoni arsyen e gabimit.

Pyetja që kemi vënë në titullin e artikullit është e rëndësishme për shumë administratorë të sistemit që punojnë me këtë produkt. Për aq sa është e mundur, ne përpiqemi të flasim për parametrat që ndikojnë në performancën e 1C dhe hedhin poshtë mitet e njohura. Sot, duke përdorur shembullin e një rasti të fundit, duam t'ju tregojmë për një aspekt tjetër që mund të ndikojë seriozisht në produktivitet - detyrat rutinë.

Le të fillojmë me një rast real. Jo shumë kohë më parë, një nga klientët tanë na kontaktoi me një ankesë për "frenat" 1C të një prej punonjësve të tij. Simptomat ishin se pas një periudhe të caktuar kohe, konfigurimi i Trade Management 10 filloi të ngadalësohej shumë, ose, më thjesht, ngriu për ca kohë.

Një analizë më e detajuar e situatës zbuloi se kjo i ndodh vetëm një punonjësi, dhe në çdo vend pune, ka ndodhur për një kohë të gjatë, por nëse më parë "frenat" zgjatën rreth një sekondë, tani, pas përditësimit, ata mund të zgjasin deri në 15-20 sekonda, gjë që e bën punën jashtëzakonisht të pakëndshme.

Në parim, të dhënat fillestare tashmë janë të mjaftueshme për të nxjerrë përfundimet e para. Le t'i rendisim përsëri:

  • "Frenat" ndodhin vazhdimisht, me një frekuencë të caktuar
  • Ngadalësohet vetëm për një përdorues
  • "Ndalohet" në çdo vend pune

Për të konfirmuar supozimet tona, le të shohim Cilësimet e Kontabilitetit:

Në të vërtetë, përdoruesi "problem" renditet si përdorues për kryerjen e detyrave rutinë. Siç doli, një herë e një kohë një detyrë e shkëmbimit automatik të RIB po ekzekutohej në emër të këtij përdoruesi. Mbetet për t'u parë se cili ka qenë saktësisht shkaku i “frenimit” episodik. Kjo është gjithashtu e lehtë për t'u bërë:

Dhe këtu është "heroi i rastit" - detyra e azhurnimit të indeksit të kërkimit të tekstit të plotë, i cili u lançua një herë në 2.5 minuta. Në këtë rast, problemi u zgjidh plotësisht duke çaktivizuar ekzekutimin e detyrave rutinë nën këtë përdorues, por kjo nuk është gjithmonë e mundur ose e këshillueshme, kështu që më poshtë do të shikojmë se si mund të menaxhoni detyrat rutinë dhe si të siguroheni që ato të mos bëjnë kanë një ndikim negativ në performancën.

Aplikim i rregullt

Në konfigurimet e bazuara në një aplikacion të rregullt, nuk ka asnjë mjet të vetëm për menaxhimin e detyrave rutinë. Kjo është kryesisht për shkak të faktit se në kohën e zhvillimit të tyre fillestar, vetë koncepti i detyrave rutinë ishte zhvilluar mjaft dobët.

Shumë detyra rutinë menaxhohen nëpërmjet vendosjes së nënsistemeve të lidhura me to. Për shembull, cilësimet për detyrat rregullatore që lidhen me shkëmbimin e të dhënave duhet të kërkohen në cilësimet e shkëmbimit të lidhura me Sistemin e Informacionit të Automatizuar të Shtetit të Unifikuar në cilësimet e tregtimit të alkoolit, etj.

Në pamje të parë, gjithçka është mjaft logjike, por mungesa e një mjeti të vetëm e bën të vështirë kontrollin e detyrave rutinë të konfiguruara dhe optimalitetin e cilësimeve të tyre. Është mirë nëse ka një ose dy detyra, por nëse ka më shumë prej tyre ose, si në rastin tonë, ekziston dyshimi për një nga detyrat e planifikuara, por nuk e keni idenë se kush ka konfiguruar çfarë në këtë bazë të dhënash.

Në këtë rast, duhet të përdorni përpunim të jashtëm ConsoleTasks (Konsola e Punës), i cili përfshihet në grupin e përpunimit standard në diskun ITS. Përpunimi ofron një ndërfaqe të vetme për të gjitha punët dhe i lejon ato të konfigurohen në qendër, si dhe të kontrollojnë punët që po ekzekutohen aktualisht.

Kjo listë duhet të studiohet me kujdes, duhet të çaktivizohen të gjitha detyrat e panevojshme dhe orari i atyre që janë të nevojshme duhet të përputhet me nevojat imediate dhe sensin e shëndoshë. Për shembull, në rastin tonë, nuk ka nevojë të përpunoni përgjigjet EGAIS një herë në 30 sekonda (ky cilësim është bërë për testim) dhe në modalitetin e funksionimit do të jetë mjaft e mjaftueshme për ta bërë këtë, të themi, një herë në gjysmë ore.

Aplikim i menaxhuar

Në konfigurimet e bazuara në një aplikacion të menaxhuar, detyrave rutinë u caktohet një rol më domethënës; me ndihmën e tyre, mund të kryhen detyra të ndryshme për të ruajtur bazën e informacionit dhe për ta mbajtur atë të përditësuar, por në të njëjtën kohë, janë detyra rutinë që shumica shpesh bëhen shkak i "frenave".

Ekziston një artikull i veçantë në meny për të menaxhuar detyrat rutinë Administrim - Mbështetje dhe Mirëmbajtje.

Mund të vërehet menjëherë se numri i detyrave është rritur ndjeshëm (për shembull, ne morëm të njëjtin konfigurim - Shitje me pakicë) dhe konfigurimi i duhur i tyre mund të përmirësojë ndjeshëm performancën e bazës së informacionit. Cilësimet e paracaktuara bëhen nga 1C bazuar në nevojat e një kompanie mesatare sferike në vakum dhe nuk janë as afër optimales.

Para së gjithash, ne çaktivizojmë atë që është qartësisht e panevojshme, me atë që nuk punoni. Pastaj ne optimizojmë orarin e funksioneve të përdorura rrallë, për shembull, përditësimi i klasifikuesit të bankës në Shitje me pakicë, si dhe kontrollimi i palëve, mund të kryhet një herë në javë gjatë orarit jo të punës ose në fund (fillim) të ditës së punës.

Vëmendje e veçantë duhet t'i kushtohet gjithçkaje që lidhet me indeksin e kërkimit. Kërkimi në tekst të plotë është sigurisht një gjë e përshtatshme, por puna me indeksin e tij është një detyrë shumë, shumë intensive me burime. Prandaj, nuk duhet të shkoni në ekstrem dhe ta braktisni atë, por duhet të rishikoni seriozisht dhe të rregulloni parametrat e tij.

Le të fillojmë me nxjerrja e tekstit, ky operacion ju lejon të kërkoni në përmbajtjen e skedarëve të bashkangjitur, kështu që nëse nuk i përdorni, mos kërkoni nëpër to ose keni vetëm imazhe atje, atëherë ky operacion mund të çaktivizohet; në çdo rast, duke e kryer atë një herë në 85 sekondat janë qartësisht të tepërta.

Përditësimi i indeksit PPD- një nga operacionet më intensive të burimeve, i kryer një herë në minutë si parazgjedhje.

Tani le të mendojmë se sa shpesh informacioni që kërkoni më shpesh shtohet ose përditësohet në bazën e të dhënave? Natyrisht jo çdo minutë, kështu që do të jetë mjaft e mjaftueshme për të përditësuar indeksin shumë më rrallë: një herë në orë, një herë në ditë ose edhe një herë në javë.

E njëjta gjë vlen edhe për bashkimi i indeksit PPD Nëse e përditësoni indeksin një herë në ditë, duhet të konfiguroni shkrirjen që të funksionojë një herë në javë, duke zgjedhur kohën më pak përçarëse për të filluar punën.

Këto operacione të thjeshta do t'ju lejojnë, pa dëmtuar shumë funksionalitetin e konfigurimit, të ngrini komoditetin e punës me të në një nivel të ri duke refuzuar të kryeni shpesh operacione mjaft intensive me burime. Thjesht mos shkoni në ekstreme; gjykoni me mençuri se sa shumë keni nevojë për aftësi të caktuara dhe sa shpesh duhet të kryeni detyra që lidhen me to.

  • Etiketa:

Ju lutemi aktivizoni JavaScript për të parë

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