Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Këshilla
  • Pse ndodh gabimi "Përdorimi i metodave sinkrone në klient është i ndaluar"? Përdorimi i metodave sinkrone te klienti është i ndaluar me 1s.

Pse ndodh gabimi "Përdorimi i metodave sinkrone në klient është i ndaluar"? Përdorimi i metodave sinkrone te klienti është i ndaluar me 1s.

"Përdorimi i dritareve modale në këtë mënyrë është i ndaluar" - ky gabim tani ka filluar të shqetësojë përdoruesit dhe programuesit 1C me ardhjen e ndërfaqes së re të platformës 1C 8.3 - " ".

Zhvilluesit e platformës së teknologjisë 1C vazhdojnë me kohën, duke e standardizuar zgjidhjen e tyre me standardet ndërkombëtare të zhvillimit të softuerit. Të gjitha standardet në një mënyrë ose në një tjetër zbresin në një ndërfaqe të vetme, afër faqeve të internetit.

Dritaret modale dhe pop-up konsiderohen si formë e keqe dhe prej kohësh kanë pushuar së qeni normale në zhvillimin e softuerit. Përdoruesit janë mësuar të punojnë "në një dritare".

Ne veçanërisht shpesh shohim një gabim modaliteti në metodat e mëposhtme 1C:

  • Pyetje;
  • Paralajmërim;
  • OpenValue.

Me lëshimin e ndërfaqes së re "taksi", zhvilluesit e platformës 1C 8 morën vendimin e duhur - të përpiqen të rikualifikojnë zhvilluesit e zgjidhjeve të aplikacioneve në një mënyrë të re. Ata përfshinin një veçori në platformën e re - "modaliteti i modalitetit".

Rregullim i shpejt

Nëse nuk keni kohë për ta kuptuar dhe keni nevojë ta zgjidhni shpejt problemin, ne ofrojmë një zgjidhje të thjeshtë, por jo plotësisht të saktë. Për të rregulluar shpejt gabimin, thjesht ndryshoni modalitetin në vetitë e konfigurimit.

Për ta bërë këtë, hyni në sistem në modalitet, hapni konfigurimin:

Në një konfigurim të hapur, thirrni menunë e kontekstit duke klikuar me të djathtën në rrënjën e konfigurimit dhe duke zgjedhur "Properties":

Merrni 267 mësime video në 1C falas:

Do të hapen vetitë e konfigurimit, ku në fund të faqes është vetia që na intereson - "Modaliteti i përdorimit të modalitetit", zgjidhni modalitetin "Përdor":

Pas kësaj, ruani dhe zbatoni ndryshimet duke shtypur tastin "F7".

Zgjidhja e duhur e problemit

Mënyra e duhur për të zgjidhur këtë problem është të modifikoni konfigurimin ose përpunimin e jashtëm për të përmbushur kërkesat e reja.

Paralajmërimet, pyetjet, kutitë e dialogut dhe modalet e tjera duhet të rishkruhen në një mënyrë të re.

Operatorët e integruar që quanin dritare modale duhet të zëvendësohen me funksione të kopjuara.

Për shembull:

  • Paralajmërim - ShowWarning;
  • Pyetje - ShowPyetje (detaje - );
  • - Shfaq numrat e hyrjes.

Në të njëjtën kohë, u shfaq një objekt i specializuar - Përshkrimi i njoftimit.

Shembull zëvendësimi:

String = "" ; EnterString(string, "Fut një vlerë vargu") Njoftoni ("Keni futur " + String) ;

Duhet të zëvendësohet me:

String = "" ; PërshkrimiAlerts = Përshkrimi i riAlerts( "TestLineInput", KyForm) ; ShowLineInput(DescriptionAlerts, String, "Fut një vlerë vargu") ;

Në të njëjtën kohë, shtoni një procedurë të ngjashme për klientin që do të funksionojë kur vlera të futet nga përdoruesi:

&Në procedurën e klientit TestInputString(ReceivedValue, PassedParameters) Njoftimi i eksportit ("Ke futur " + String) ; Fundi i procedurës

Format që zhvillohen brenda konfigurimit hapen në të njëjtën mënyrë. Mjafton të zëvendësohet metoda "OpenFormModal" me "OpenForm", duke specifikuar një përshkrim të alarmit dhe procedurën e re të kërkuar për të.

Për të bllokuar hyrjen në formularin e thirrur duke hapur një formular, thjesht specifikoni vlerën "Blloko dritaren e pronarit" në vetinë "Modaliteti i hapjes së dritares" të formularit:

Print (Ctrl+P)

Puna me skedarë në modalitetin asinkron është e pranishme vetëm në anën e aplikacionit të klientit. Në përgjithësi, rekomandohet të përdorni metoda sinkrone për të punuar në anën e serverit dhe metoda asinkrone për të punuar në anën e aplikacionit të klientit.
Le të shqyrtojmë një shembull të punës me skedarë në një teknikë asinkrone: fshirja e të gjithë skedarëve në drejtorinë e skedarëve të përkohshëm. Për teknologjinë sinkrone, ky veprim do të duket si ky:

&OnClient
Procedura Fshi (komandë)
DeleteFiles (Drejtoria e skedarëve të përkohshëm (), GetMaskAllClientFiles ());

Fundi i procedurës
Teknika asinkrone do të duket ndryshe:

&OnClient
Procedura Fshi (komandë)
Callback = E re PërshkrimiAlerts("GetTemporaryFileDirectoryCompletion", ThisObject, "DeleteError", ThisObject);
StartGettingTemporaryFileDirectory(Callback);
Fundi i procedurës
&OnClient
Procedura GetTemporaryFileDirectoryCompletion(Emri i dosjes së përkohshme, Parametrat shtesë) Eksporti
Callback = E re PërshkrimiAlerts ("Fshi Kompletion", ThisObject, "FileError", ThisObject);
StartDeletingFiles(Callback, TemporaryFileDirectoryName, GetMaskAllClientFiles());
Fundi i procedurës
&OnClient
Procedura DeleteComplete (Opsione Shtesë) Eksporto
Njoftoni ("Heqja përfundoi me sukses");
Fundi i procedurës
&OnClient
Procedura Gabim i skedarit (Info e gabimit, përpunimi standard, opsione shtesë) Eksporti
Raporti ("Një gabim u ndesh gjatë kryerjes së një operacioni skedar: " + BriefErrorIntroduction(ErrorInfo));
Fundi i procedurës

Së pari, duhet theksuar se pothuajse të gjitha operacionet e skedarëve janë bërë asinkron. Edhe diçka aq e thjeshtë sa marrja e një drejtorie skedarësh të përkohshëm. Dhe nevoja për të marrë një drejtori të tillë çon në thirrjen e parë asinkrone. Pastaj ndodh thirrja për të fshirë të gjithë skedarët. Dhe trajtimi i përfundimit të fshirjes kërkon një mbajtës të dytë, i cili duhet të strehojë veprimet që duhet të ndodhin pasi të jenë fshirë të gjithë skedarët në drejtorinë e skedarëve të përkohshëm. Në këtë shembull, ky po lëshon një mesazh për përfundimin e operacionit.
Nëse ndodh një gabim gjatë kryerjes së operacioneve të skedarit, kontrolli do të transferohet te mbajtësi Gabim skedari (). Kjo ju lejon të trajtoni saktë situatën aktuale.

Puna me skedarë në klientin në internet

Puna me skedarë në klientin në internet ka një sërë veçorish:
1. Pa instaluar shtesa, në çdo shfletues uebi, disponohen vetëm metodat GetFile() dhe StartPlaceFile(). Metoda PlaceFile() nuk mbështetet kur punoni me shfletuesin e internetit të Google Chrome dhe nëse konfigurimi nuk lejon përdorimin e metodave modale (vetia e konfigurimit të modalitetit të përdorimit të modalitetit, shihni këtu).
2. Kur instaloni shtesën për të punuar me skedarë në të gjithë shfletuesit e internetit, përveç Google Chrome, disponohen metoda sinkrone dhe asinkrone për të punuar me skedarë (sinkron ose asinkron varet nga vetia e konfigurimit të modalitetit të përdorimit të modalitetit).
3. Vetëm një shtesë asinkrone për të punuar me skedarë është e disponueshme për shfletuesin e internetit të Google Chrome. Funksionimi sinkron nuk mbështetet.
4. Shtesa e skedarit nuk e mbështet punën mbi protokollin HTTPS duke përdorur një certifikatë klienti.
Shënim 1: Për funksionimin e saktë të shtesës së menaxhimit të skedarit në shfletuesin e internetit të Microsoft Internet Explorer, rekomandohet përdorimi
Bibliotekat e Microsoft Core XML Services (MSXML) versioni 4.0 ose 6.0.
Shënim 2. Shtesa e skedarit për shfletuesin e internetit Microsoft Internet Explorer është instaluar në drejtorinë %APPDATA%\1C\1СEWebExt\FileSystemExtIE

Nëse jeni përdorues aktiv i një produkti softuer 1C, kjo është e shkëlqyeshme. Programi është vërtet i mirë, ju lejon të kryeni shumë detyra shpejt dhe me cilësinë më të lartë të mundshme. Gjithçka do të ishte mirë nëse ajo nuk do të na tronditte herë pas here me mesazhe të frikshme për gabimet që kishin lindur. Është mirë nëse gabime të tilla janë hasur më parë nga ju personalisht ose nga ata që punojnë pranë jush dhe mund të shpjegoni qartë me gishta se si ta rregulloni problemin, si dhe të shpjegoni pse u shfaq.

Problemi korrigjohet pas ndryshimit të cilësimeve ose kodit 1C.

Një përmbajtje e tillë informacioni do t'ju lejojë të rivendosni funksionalitetin e programit 1C, si dhe në të ardhmen për të shmangur gabimet serioze që provokojnë probleme.

Algoritmi për korrigjimin e gabimeve në 1C

Gabimi i mëposhtëm shfaqet gjithashtu në 1C: "Përdorimi i metodave sinkrone te klienti është i ndaluar". Ju nuk duhet të frikësoheni nëse ndodh; mjafton të lundroni në sekuencën e veprimeve tuaja duke studiuar rekomandimet e vlefshme të përdoruesve me përvojë.

Bërja e ndryshimeve në cilësimet e programit

Nëse jeni përpjekur të telefononi një metodë konteksti në një program 1C, por në vend të veprimeve të pritshme pasuese me të cilat jeni mësuar tashmë, papritmas doli një mesazh që thoshte se përdorimi i metodave sinkrone te klienti është i ndaluar, nuk duhet të bëni panik, le të përpiqemi të kuptojmë këtë dështim të softuerit.

Fillimisht, klikoni në rreshtin "Konfiguruesi". Pas kësaj, në menunë e hapur të kontekstit, shkoni te rreshti i fundit "Properties", klikoni mbi të. Tani do të hapet një dritare në të cilën mund të bëni në mënyrë të pavarur disa ndryshime në cilësimet, duke përfshirë rregullimet në mënyrën e funksionimit të programit.

Ndër mënyrat e propozuara, gjeni rreshtin "Modaliteti për përdorimin e thirrjeve sinkrone për shtesat dhe komponentët e jashtëm". Ju lutemi vini re se çfarë vlere është vendosur për këtë modalitet. Është e rëndësishme që të zgjidhet opsioni "Përdor". Nëse shihni diçka të ndryshme, klikoni në kutinë e përzgjedhjes dhe zgjidhni atë opsion.

Tani mbyllni të gjitha dritaret e hapura dhe provoni përsëri të gjitha veprimet e dëshiruara. Gjasat që të keni sukses janë të larta.

Ndryshimi i kodit

Fatkeqësisht, nuk është gjithmonë e mundur të rregullohet gabimi "Përdorimi i metodave sinkrone në klient është i ndaluar" pasi të keni bërë ndryshime në cilësimet e programit. Ndonjëherë ju duhet të kryeni aktivitete më të përgjegjshme. Në veçanti, bëni ndryshime në kodin e programit. Përdoruesit me përvojë rekomandojnë përdorimin e metodës së hyrjes asinkrone nëse ajo sinkron papritmas ndalohet.

Hapni kodin e programit. Lëreni emrin e procedurës (Procedura OpenLiFile1()) dhe fundin e saj (EndProcedure) të pandryshuar, por ndryshoni rrënjësisht trupin e procedurës.

Ju duhet të shkruani vetëm tre rreshta:

Alert = New AlertDescription("RecordOrMore",ThisObject);
QuestionText = “Shkruani?”;
ShowQuestion(Alert, QuestionText, DialogModeQuestion.Po Jo);

Nëse nuk kuptoni absolutisht asgjë për këtë, nuk ka problem, thjesht kopjoni dhe ngjisni midis emrit të procedurës dhe vijës së saj përfundimtare. Ne vërtet besojmë se kur kryeni veprime të tilla, gjithçka do të bjerë në vend dhe programi do të funksionojë përsëri, duke ju lejuar të kryeni të gjitha veprimet në një nivel të lartë profesional.

Zbatuar në versionin 8.3.5.1383, 8.3.6.1977.

Tendenca moderne

Tendencat e zhvillimit të shfletuesit çojnë në një përqindje gjithnjë në rritje të "asinkronisë" në platformë. Hapi i parë ishte. Tani ka thirrje asinkrone për të punuar me shtesat e kriptografisë, për të punuar me skedarë dhe komponentë të jashtëm.

Arsyeja për lëvizjen e radhës drejt asinkronisë ishte se zhvilluesit e shfletuesit Google Chrome braktisën mbështetjen për teknologjinë e mëparshme NPAPI (Ndërfaqja e Programimit të Aplikimit të Shtojcave Netscape). Kjo teknologji u përdor për të lidhur modulet e jashtme - shtesat - me shfletuesin.

1C: Enterprise përdor shtesa të tilla për të punuar me kriptografinë, për të punuar me skedarë dhe për të lidhur komponentë të jashtëm. Ky është një funksionalitet mjaft i rëndësishëm. Kriptografia përdoret në menaxhimin elektronik të dokumenteve dhe falë komponentëve të jashtëm, aplikacionet mund të punojnë me skanerë të barkodit dhe pajisje të tjera të shitjes me pakicë.

Dhe tani, në vend të teknologjisë së mëparshme sinkrone NPAPI, zhvilluesit e Google Chrome kanë krijuar një teknologji të re të Mesazheve Native. Në të njëjtën kohë, ata rekomanduan fuqimisht që të gjithë zhvilluesit e zgjerimeve të mos përdorin teknologjinë e vjetër, sepse ajo nuk do të mbështetet.

Pa hyrë në detaje, teknologjia e re është më e mirë dhe më e sigurt. Kjo eshte mire. Por një nga ndryshimet e tij domethënëse është se ai siguron ndërveprim ekskluzivisht asinkron me shtesat e shfletuesit. Dhe kjo kërkon një ndryshim rrënjësor në të gjitha metodat ekzistuese të punës me shtesa dhe komponentë të jashtëm në 1C: Enterprise. Sepse të gjitha ato bazohen në ndërveprim sinkron.

Metodat asinkrone

Ne e zgjidhëm këtë problem në të njëjtën mënyrë që zgjidhëm problemin e thirrjes modale. Për të gjitha metodat sinkrone që përdorin teknologjinë NPAPI, ne kemi krijuar homologët e tyre asinkron. Ato kryesisht ndryshojnë në praninë e parashtesës Filloni dhe fakti që u kalohet parametri i parë PërshkrimiAlarmet, nga i cili ekzekutimi i kodit të programit do të vazhdojë pas përfundimit të veprimit të thirrur.

Për shembull, në vend të metodës Enkripto() Tani ju rekomandojmë të përdorni metodën StartEncrypt ():

Menaxheri i Kriptografisë. Enkripto(<ИсходныеДанные>, <Получатели>) Menaxheri i Kriptografisë. Filloni Enkriptimin(<ОписаниеОповещения>, <ИсходныеДанные>, <Получатели>)

Në vend të një metode GetFiles () - StartGettingFiles ():

GetFiles (<ПолучаемыеФайлы>, <ПолученныеФайлы>, <РасположениеФайлов>, <Интерактивно>) Filloni të merrni skedarë ((<ОписаниеОповещения>, <ПолучаемыеФайлы>, <РасположениеФайлов>, <Интерактивно>)

Në vend të SetExternalComponent()- StartInstallingExternalComponents():

Komponenti i jashtëm (<Местоположение>) Filloni të instaloni komponentë të jashtëm (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

Në fakt, në përgjithësi, gjithçka është shumë e ngjashme me atë që kemi bërë më parë kur hoqëm qafe modalitetin. Por funksionimi i metodave të reja asinkrone ka një veçori thelbësore që nuk e kanë metodat që shkaktojnë dialog jo-modal.

Kur thërrasim një dialog pa model në mënyrë asinkrone, ne presim vetëm një reagim të përdoruesit dhe asgjë më shumë. Në kuptimin që asgjë e papritur nuk mund të ndodhë.

Dhe në procesin e thirrjes së metodave asinkrone të punës me shtesa dhe përbërës, mund të lindin situata të jashtëzakonshme. Shtesa nuk u instalua, komponenti nuk u ngarkua, etj.

Ju zakonisht ofroni trajtimin për përjashtime të tilla në kodin e aplikacionit tuaj. Duke përdorur një operator Duke u përpjekur... Përjashtim. Por tani kjo bëhet e pamundur, sepse në momentin e thirrjes asinkrone, kodi i aplikacionit nuk ekzekutohet. Prandaj, operatori nuk funksionon Duke u përpjekur... Përjashtim.

  • NameProcedureProcessingErrors;
  • Moduli i përpunimit të gabimeve.

Nëse diçka shkon keq gjatë një thirrjeje asinkrone dhe ndodh një përjashtim, procedura e treguar nga këto veti do të ekzekutohet. Ka kuptim që këto dy veti të përdoren vetëm në metodat asinkrone të punës me zgjerime. Kur thërrisni dialog pa mode, nuk ju nevojiten këto veçori.

Vetia e konfigurimit

Ashtu si në rastin e refuzimit të modalitetit, e gjithë zgjidhja e aplikimit në tërësi duhet të dijë "çfarë është". Ose është modale ose jomodale. Ose është sinkron ose asinkron.

Më parë, për të zgjidhur problemin me modalitetin, ne shtuam një pronë të veçantë konfigurimi Mënyra e përdorimit të modalitetit. Tani, për të zgjidhur problemin me sinkronizim, ne kemi shtuar një pronë të ngjashme në kuptim Mënyra e përdorimit të thirrjeve sinkrone për shtesat dhe komponentët e jashtëm.

Thelbi i përdorimit të tij është si më poshtë:

  • Mos e përdor- kjo është një mënyrë e re, asinkrone funksionimi. Për konfigurimet e reja ky është modaliteti standard. Përdorimi i metodave të vjetra sinkrone është i ndaluar. Ata nuk e kalojnë kontrollin sintaksor, nuk janë në çelësin e kontekstit. Një përpjekje për të ekzekutuar një metodë sinkrone hedh një përjashtim.
  • Përdorni me paralajmërim- kjo mënyrë është menduar për zhvilluesin. Nuk parandalon përdorimin e metodave më të vjetra sinkrone. Por sa herë që një metodë sinkrone thirret në klient, ajo prodhon një mesazh paralajmërues. Ne rekomandojmë përdorimin e këtij modaliteti në konfigurimet e "riciklimit". Është i përshtatshëm për kërkimin vizual të thirrjeve sinkrone dhe monitorimin e tyre gjatë procesit të rishikimit.
  • Përdorni- një mënyrë që siguron përputhshmërinë e versionit të ri të platformës me konfigurimet e vjetra që përdorin metoda sinkrone për të punuar me shtesa dhe komponentë të jashtëm.

Të gjitha metodat dhe vetitë për të cilat kemi folur deri më tani janë zbatuar në version 8.3.5.1383 . Ju mund t'i përdorni ato në zgjidhjet e aplikimit tuaj. Dhe zhvilluesit, për shembull, do të kalojnë në nënsistemet e funksionimit asinkron që përdorin mjete kriptografie, punojnë me skedarë dhe komponentë të jashtëm.

Natyrisht, si me thirrjet modale, ndoshta keni një pyetje. A duhet të ribëj zgjidhjen time të aplikimit? Dhe në përgjithësi, a duhet t'i përdor këto metoda asinkrone në zgjidhjen time të re të aplikacionit?

Kur është e nevojshme?

Përgjigja për këtë pyetje është në thelb e njëjtë me atë që dhamë më parë. Kur flisnin për braktisjen e modalitetit.

Së pari, jo çdo version i platformës teknologjike mbështet mënyrën e thirrjeve asinkrone për shtesat dhe komponentët e jashtëm. Kjo mënyrë funksionimi ekziston duke filluar nga versioni 8.3.5.1383. Prandaj, nëse jeni duke punuar në versione më të ulëta të platformës, nuk duhet të shqetësoheni për braktisjen e metodave sinkrone për momentin.

Së dyti, jo të gjitha zgjidhjet e aplikacionit duhet domosdoshmërisht të përdorin këtë mënyrë. Aplikacionet kritike janë ato me të cilat do të punohet duke përdorur klientin në internet në shfletuesin Google Chrome. Aplikacione të tilla, në një pjesë të madhe, janë aplikacione që funksionojnë. Nëse zgjidhja e aplikacionit tuaj definitivisht nuk do të përdoret në këtë mënyrë, nuk mund të braktisni metodat sinkrone për momentin.

Megjithatë, pavarësisht nga pikat e para dhe të dyta, ka tendenca globale që mund të ndikojnë në planet tuaja. Ne, kompania 1C, zhvillojmë të gjitha zgjidhjet standarde bazuar në faktin se ato mund të përdoren në cilëndo nga mënyrat e disponueshme. Prandaj, ne do të implementojmë zgjidhje të reja aplikacioni, si dhe të gjitha bibliotekat e përdorura në to, në një modalitet pa përdorur thirrje sinkrone.

Kjo do të thotë që është më mirë që ju të filloni ta zotëroni këtë mënyrë funksionimi tani. Edhe pse aplikacioni juaj mund të mos e përdorë ende, ne rekomandojmë të filloni përkthimin tani nëse është e mundur. Megjithatë, ne ju inkurajojmë t'i qaseni këtij procesi në mënyrë krijuese. Në të njëjtën mënyrë si kur braktis modalitetin. Kjo do të thotë, nuk ka nevojë të zëvendësohen mekanikisht metodat sinkrone me ato asinkrone. Së pari, është e dobishme të mendoni nëse është e mundur të ndryshoni algoritmin ose skriptin në mënyrë që në këtë vend të braktisim plotësisht përdorimin e metodave sinkrone?

Rifaktorimi

Nga njëra anë, nëse konfigurimi është i madh dhe ka shumë thirrje sinkrone në të, atëherë ripërpunimi "manual" i një konfigurimi të tillë mund të jetë një detyrë që kërkon shumë kohë.

Nga ana tjetër, duke filluar nga versioni 8.3.5.1068, platforma ka veçori që ju lejojnë të konvertoni thirrjet sinkrone në homologët e tyre asinkron.

Prandaj, ne morëm këto mjete tashmë ekzistuese, i zgjeruam dhe i riorientuam nga "largimi nga modaliteti" në "kalimin në asinkroni". Në thelbin e tij, kalimi në metoda asinkrone është i ngjashëm me veprimet që kryhen kur braktisni modalitetin. Thirrjet e vjetra, "jo modë", sinkrone (modale) duhet të zëvendësohen me thirrje të reja, "të modës", asinkrone duke përdorur Përpunimi i sinjalizimeve.

Në këtë formë të përditësuar, mjetet e rifaktorimit janë bërë të disponueshme për ju në version 8.3.6.1977 .

Meqenëse "theksi" i këtyre mjeteve është zhvendosur drejt asinkronisë, ne kemi riemërtuar disa komanda. Në vend të "jo-modale", tani përdoret shprehja "sinkrone e vjetëruar":

Përveç kësaj, ne kemi shtuar një skedë të re në cilësimet e konfiguruesit Rifaktorimi. Si parazgjedhje, të dy transformimet janë të aktivizuara. Por, nëse keni nevojë për të, me ndihmën e tij mund të kryeni vetëm një nga llojet e transformimeve gjatë rifaktorimit automatik.

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