Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Savjet
  • Zašto se pojavljuje greška "Upotreba sinhronih metoda na klijentu je zabranjena"? Upotreba sinhronih metoda na klijentu je zabranjena 1s.

Zašto se pojavljuje greška "Upotreba sinhronih metoda na klijentu je zabranjena"? Upotreba sinhronih metoda na klijentu je zabranjena 1s.

„Korišćenje modalnih prozora u ovom režimu je zabranjeno“ - takva greška sada počinje da smeta korisnicima i 1C programerima pojavom novog sučelja platforme 1C 8.3 - „“.

Programeri tehnološke platforme 1C idu u korak s vremenom, standardizirajući svoja rješenja prema svjetskim standardima razvoja softvera. Svi standardi se nekako svode na jedno sučelje, blizu web stranica.

Modalni i iskačući prozori smatraju se lošim oblikom i odavno su prestali biti normalni u razvoju softvera. Korisnici su navikli da rade "u jednom prozoru".

Posebno često vidimo grešku modaliteta u sljedećim 1C metodama:

  • Pitanje;
  • Upozorenje;
  • OpenValue.

Objavljivanjem novog taksi sučelja, programeri 1C 8 platforme donijeli su ispravnu odluku - pokušati preobučiti programere aplikativnih rješenja na novi način. Uključili su funkciju u novu platformu - "modality use mode".

Quick Fix

Ukoliko nemate vremena da to shvatite i morate brzo riješiti problem, nudimo jednostavno, ali ne sasvim ispravno rješenje. Da biste brzo ispravili grešku, samo promijenite modalitet u svojstvima konfiguracije.

Da biste to učinili, prijavite se na sistem u načinu rada, otvorite konfiguraciju:

U otvorenoj konfiguraciji, pozovite kontekstni meni desnim klikom na korijen konfiguracije i odabirom "Svojstva":

Nabavite 267 1C video lekcija besplatno:

Otvorit će se svojstva konfiguracije, gdje se u podnožju nalazi svojstvo koje nas zanima - “Modality use mode”, odaberite način “Use”:

Nakon toga, sačuvajte i primijenite promjene pritiskom na tipku "F7".

Ispravno rješenje problema

Ispravan način za rješavanje ovog problema je modifikacija konfiguracije ili eksterne obrade kako bi se zadovoljili novi zahtjevi.

Upozorenje, pitanje, dijaloški okviri i drugi modalni prozori - sve ovo treba prepisati na novi način.

Ugrađeni operatori koji su zvali modalni prozori trebali bi biti zamijenjeni dupliranim funkcijama.

Na primjer:

  • Upozorenje - ShowWarning;
  • Pitanje - ShowQuestion (detalji - );
  • — ShowInputNumbers.

Istovremeno se pojavio specijalizovani objekat - AlertDescription.

Primjer zamjene:

String = "" ; EnterString(String, "Unesite vrijednost niza") Izvještaj("Uneli ste " + String);

Treba zamijeniti sa:

String = "" ; DescriptionNotifications = Nova DescriptionNotifications( "TestInputString", ThisForm) ; ShowInputStrings(DescriptionAlerts, String, "Unesite vrijednost niza") ;

Istovremeno dodajte sličnu proceduru na klijenta, koja će raditi kada korisnik unese vrijednost:

&Na klijentskoj proceduri TestStringInput(ReceivedValue, PassedParameters) Izvoz izvještaja("Uneli ste " + String) ; EndProcedure

Obrasci koji su dizajnirani unutar konfiguracije otvaraju se na potpuno isti način. Dovoljno je zamijeniti metodu "OpenFormModally" sa "OpenForm", navodeći opis obavijesti i novu proceduru koja je potrebna za to.

Da bi obrazac za otvaranje zatvorio pristup pozvanoj formi, dovoljno je u svojstvu forme u svojstvu "WindowOpening Mode" navesti vrijednost "Blokiraj prozor vlasnika":

Ispis (Ctrl+P)

Rad sa datotekama u asinkronom režimu dostupan je samo na strani klijentske aplikacije. Općenito, preporučuje se korištenje sinkronih metoda za rad na strani servera i asinhronih metoda za rad na strani klijentske aplikacije.
Razmotrimo primjer rada s datotekama u asinkronoj tehnici: brisanje svih datoteka u direktoriju privremenih datoteka. Za sinkronu tehnologiju, takva akcija bi izgledala ovako:

&AtClient
Procedura Izbriši (naredba)
DeleteFiles(TempFilesDirectory(), GetClientAllFilesMask());

EndProcedure
Asinhrona tehnika bi izgledala drugačije:

&AtClient
Procedura Izbriši (naredba)
Povratni poziv = Novo AlertDescription("GetTempFilesDirectoryCompletion", ThisObject, "DeleteError", ThisObject);
StartGetTempFilesDirectory(povratni poziv);
EndProcedure
&AtClient
Procedura GetTempFilesDirectoryFinish(TempFilesDirectoryName, AdditionalParameters) Izvoz
Povratni poziv = Novo AlertDescription("DeleteEnd", ThisObject, "FileError", ThisObject);
StartDeletingFiles(Callback, TempFilesDirectoryName, GetClientAllFilesMask());
EndProcedure
&AtClient
Procedura DeleteFinish(Napredne opcije) Izvoz
alert("Uklanjanje je uspješno završeno");
EndProcedure
&AtClient
Procedura FileError(ErrorInfo, StandardProcessing, AdvancedParameters) Izvoz
Obavijesti(“Došlo je do greške prilikom izvođenja operacije datoteke: ” + BriefErrorRepresentation(ErrorInfo));
EndProcedure

Kao prvo, trebali biste primijetiti da su gotovo sve operacije s datotekama postale asinhrone. Čak i nešto tako jednostavno kao što je dobivanje direktorija privremenih datoteka. A potreba da se dobije takav direktorij vodi do prvog asinhronog poziva. Tada se poziva stvarno brisanje svih datoteka. A obrada završetka brisanja zahtijeva drugi rukovalac, koji bi trebao sadržavati akcije koje bi se trebale dogoditi nakon brisanja svih datoteka u direktoriju privremenih datoteka. U ovom primjeru, ovo je izdavanje poruke o završetku operacije.
Ako dođe do greške prilikom izvođenja operacija s datotekama, kontrola će se prenijeti na rukovatelja FileError(). Može ispravno da se nosi sa trenutnom situacijom.

Rad sa fajlovima u web klijentu

Rad sa fajlovima u web klijentu ima niz karakteristika:
1. Bez instaliranja ekstenzija, u bilo kojem web pretraživaču, dostupne su samo metode GetFile() i StartPuttingFile(). Metoda PlaceFile() nije podržana kada se radi s web pretraživačem Google Chrome i ako konfiguracija ne dozvoljava korištenje modalnih metoda (konfiguracijsko svojstvo Modality Usage Mode, pogledajte ovdje).
2. Prilikom instaliranja ekstenzije za rad sa fajlovima u svim web pretraživačima osim Google Chrome-a, dostupni su i sinhroni i asinhroni načini rada sa fajlovima (sinhroni ili asinhroni ovisno o svojstvu konfiguracije Modality usage mode),
3. Za web pretraživač Google Chrome dostupna je samo ekstenzija asinhrone datoteke. Sinhroni rad nije podržan.
4. Ekstenzija za rad s datotekama ne podržava rad preko HTTPS protokola korištenjem certifikata klijenta.
Napomena 1. Za ispravan rad ekstenzije datoteke u web pretraživaču Microsoft Internet Explorer preporučuje se korištenje
Biblioteke Microsoft Core XML Services (MSXML) verzije 4.0 ili 6.0.
Napomena 2: Ekstenzija datoteke za Microsoft Internet Explorer web pretraživač je instalirana u %APPDATA%\1C\1SEWebExt\FileSystemExtIE direktorij

Ako ste aktivni korisnik softverskog proizvoda 1C, ovo je sjajno. Program je zaista dobar, omogućava brzo i efikasno obavljanje više zadataka. Sve bi bilo u redu da povremeno nije šokirala zastrašujućim porukama o grešci. Dobro je ako ste se s takvim greškama ranije susreli vi lično ili oni koji rade pored vas i na prstima mogu jasno objasniti kako riješiti problem, kao i objasniti zašto je nastao.

Problem je riješen nakon promjene postavki ili 1C koda.

Takav informativni sadržaj omogućit će 1C programu da se vrati u radnu sposobnost, kao i da u budućnosti izbjegne ozbiljne greške koje izazivaju probleme.

Algoritam za ispravljanje grešaka u 1C

Pojavljuje se u 1C i takva greška "Korištenje sinhronih metoda na klijentu je zabranjeno." Ne biste trebali paničariti kada se to dogodi, dovoljno je da se krećete redoslijedom svojih radnji, proučivši vrijedne preporuke iskusnih korisnika.

Izmjena postavki programa

Ako ste pokušali pozvati kontekstualnu metodu u programu 1C, ali umjesto očekivanih naknadnih radnji na koje ste već navikli, iznenada se pojavila poruka u kojoj se navodi da je upotreba sinkronih metoda na klijentu zabranjena, ne biste trebali panika, hajde da pokušamo da shvatimo ovaj softverski kvar.

Prvo kliknite na liniju "Konfigurator". Nakon toga, u otvorenom kontekstualnom meniju idite na posljednji red "Svojstva", kliknite na njega. Sada će se otvoriti prozor u kojem možete samostalno izvršiti neke promjene postavki, uključujući podešavanja i način rada programa.

Među predloženim načinima pronađite redak "Režim za korištenje sinkronih poziva ekstenzijama i vanjskim komponentama." Obratite pažnju koja je vrijednost postavljena za ovaj način rada. Važno je da je postavljena opcija "Koristi". Ako vidite nešto drugo, kliknite na okvir za odabir i odaberite tu opciju.

Sada zatvorite sve otvorene prozore i pokušajte ponovo izvršiti sve željene radnje. Vjerovatnoća da ćete uspjeti je velika.

Promjena koda

Nažalost, nije uvijek moguće ispraviti grešku "Upotreba sinhronih metoda na klijentu je zabranjena" nakon izmjene postavki programa. Ponekad morate preduzeti odgovornije mjere. Konkretno, da izvršite promjene u programskom kodu. Iskusni korisnici preporučuju korištenje asinhrone metode prijave ako je sinhrona odjednom postala zabranjena.

Otvorite programski kod. Ime procedure (Procedure OpenLiFile1()) i njen kraj (EndProcedure) ostavite nepromenjene i promenite telo procedure radikalno.

Morate napisati samo tri reda:

Alert = New AlertDescription("WriteWhetherOther",ThisObject);
QuestionText = "Sačuvaj?";
ShowQuestion(Alert,QuestionText,DialogueModeQuestion.YesNo);

Ako apsolutno ništa ne razumijete o ovome, nema veze, samo kopirajte i zalijepite između naziva procedure i njenog posljednjeg reda. Čvrsto vjerujemo da će kada izvršite takve radnje sve doći na svoje mjesto i program će ponovo raditi, omogućavajući vam da sve radnje izvedete na profesionalnom nivou.

Implementirano u verziji 8.3.5.1383, 8.3.6.1977.

Moderne tendencije

Trendovi razvoja pretraživača dovode do toga da se procenat "asinhronosti" povećava u platformi. Prvi korak je bio. Sada postoje asinhroni pozivi za rad sa kriptografskim ekstenzijama, rad sa datotekama i eksternim komponentama.

Razlog za naredni pokret ka asinhroniji bio je taj što su programeri pretraživača Google Chrome odbili da podrže prethodnu NPAPI (Netscape Plugin Application Programming Interface) tehnologiju. Ova tehnologija je korištena za povezivanje eksternih modula - ekstenzija za pretraživač.

1C:Enterprise koristi takve ekstenzije za rad s kriptografijom, rad s datotekama i povezivanje vanjskih komponenti. Ovo je prilično važna funkcionalnost. Kriptografija se koristi u elektronskom upravljanju dokumentima, a zahvaljujući vanjskim komponentama aplikacije mogu raditi sa skenerima bar kodova i drugom komercijalnom opremom.

I sada, umjesto prethodne, sinhrone NPAPI tehnologije, programeri Google Chrome-a kreirali su novu Native Messaging tehnologiju. Istovremeno, snažno su preporučili da svi programeri ekstenzija ne koriste staru tehnologiju, jer neće biti podržana.

Ne ulazeći u detalje, nova tehnologija je bolja i sigurnija. Ovo je dobro. Ali jedna od njegovih značajnih razlika je u tome što omogućava isključivo asinkronu interakciju sa ekstenzijama pretraživača. A to zahtijeva temeljnu promjenu u svim metodama rada s ekstenzijama i vanjskim komponentama koje postoje u 1C:Enterprise. Zato što su svi zasnovani na sinhronoj interakciji.

Asinhrone metode

Ovaj problem smo riješili na isti način kao što smo riješili problem modalnih poziva. Za sve sinhrone metode koje koriste NPAPI tehnologiju, kreirali smo njihove asinhrone parnjake. U osnovi se razlikuju po prisutnosti prefiksa Početi i činjenica da im se prosljeđuje prvi parametar DescriptionAlerts, iz koje će se izvršavanje programskog koda nastaviti nakon završetka pozvane akcije.

Na primjer, umjesto metode šifriraj() sada preporučujemo korištenje metode StartEncryption():

Cryptography Manager.Encrypt(<ИсходныеДанные>, <Получатели>) Cryptography Manager.Start Encryption(<ОписаниеОповещения>, <ИсходныеДанные>, <Получатели>)

Umjesto metode GetFiles() - StartGettingFiles():

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

Umjesto SetExternalComponent()- StartInstallingExternalComponent():

Postavi vanjsku komponentu(<Местоположение>) Počnite instalirati eksternu komponentu (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

U stvari, sve je uglavnom slično onome što smo radili prije kada smo se riješili modaliteta. Ali funkcionisanje novih asinkronih metoda ima suštinsku karakteristiku koju nemaju metode koje pozivaju dijaloge bez modela.

Prilikom asinhronog pozivanja dijaloga bez mode, očekujemo samo neku reakciju korisnika i ništa drugo. U smislu da se ništa nepredviđeno ne može dogoditi.

A u procesu pozivanja asinhronih metoda rada sa ekstenzijama i komponentama mogu se pojaviti izuzeci. Ekstenzija nije instalirana, komponenta nije učitana itd.

Obično obrađujete ove izuzetke u kodu aplikacije. Uz pomoć operatera Pokušavam... Izuzetak. Ali sada to postaje nemoguće, jer u vrijeme asinhronog poziva, kod aplikacije se ne izvršava. Shodno tome, operater ne radi Pokušavam... Izuzetak.

  • NameProcedureProcessingErrors;
  • ModuleProcessingErrors.

Ako tokom asinhronog poziva „nešto krene po zlu“ i dođe do izuzetka, tada će se izvršiti procedura naznačena ovim svojstvima. Ima smisla koristiti ova dva svojstva samo u asinkronim metodama proširenja. Kada pozivate dijaloge bez modela, ova svojstva vam nisu potrebna.

Svojstvo konfiguracije

Kao iu slučaju napuštanja modaliteta, cjelokupno aplikativno rješenje u cjelini mora znati „šta je to“. Ili je modalan ili nemodalan. Ili je sinhrona ili asinhrona.

Ranije, da bismo riješili problem s modalitetom, dodali smo posebno svojstvo konfiguracije Način korištenja modaliteta. Sada, da bismo riješili problem sinhronizma, dodali smo osobinu koja mu je po značenju slična Način korištenja sinkronih poziva ekstenzijama i vanjskim komponentama.

Suština njegove upotrebe je sljedeća:

  • Nemojte koristiti je novi, asinhroni način rada. Za nove konfiguracije, ovo je standardni način rada. Zabranjena je upotreba starih sinhronih metoda. Ne prolaze sintaksičku kontrolu, nisu u kontekstu pomoći. Pokušaj izvršavanja sinhrone metode dovodi do izuzetka.
  • Koristite uz upozorenje- ovaj način je namijenjen programeru. To ne sprječava korištenje starih, sinhronih metoda. Ali svaki put kada se sinhroni metod pozove na klijentu, on šalje poruku upozorenja. Preporučujemo korištenje ovog načina rada u konfiguracijama koje se mogu reciklirati. Pogodan je za vizuelno pretraživanje sinhronih poziva i njihovu kontrolu u toku završetka.
  • Koristi- način rada koji osigurava kompatibilnost nove verzije platforme sa starim konfiguracijama koje koriste sinhrone metode za rad s ekstenzijama i vanjskim komponentama.

Sve metode i svojstva o kojima smo do sada govorili implementirani su u verziju 8.3.5.1383 . Možete ih koristiti u svojim aplikativnim rješenjima. A programeri će, na primjer, prenijeti podsisteme koristeći kriptografske alate, operacije sa datotekama i eksterne komponente u asinhroni rad.

Naravno, kao iu slučaju modalnih poziva, vjerovatno imate pitanje. Da li trebam redizajnirati svoje aplikativno rješenje? I općenito, da li trebam koristiti ove asinkrone metode u svom novom rješenju aplikacije?

Kada je to potrebno?

Odgovor na ovo pitanje je u suštini isti kao što smo dali ranije. Kada su govorili o odbijanju modaliteta.

Prvo, ne podržava svaka verzija tehnološke platforme način asinhronih poziva ekstenzijama i vanjskim komponentama. Ovaj način rada postoji od verzije 8.3.5.1383. Stoga, ako radite na mlađim verzijama platforme, možda još nećete biti zbunjeni odbacivanjem sinhronih metoda.

Drugo, ne moraju sva primijenjena rješenja koristiti ovaj način bez greške. Aplikacije koje će se raditi pomoću web klijenta u pregledniku Google Chrome su kritične. Takve aplikacije, uglavnom, su aplikacije koje se pokreću. Ako se vaša aplikacija neće koristiti u ovom načinu rada, još uvijek možete koristiti sinhrone metode za sada.

Međutim, uprkos prvoj i drugoj tački, postoje globalni trendovi koji mogu uticati na vaše planove. Mi, 1C, razvijamo sva standardna rješenja na osnovu činjenice da se mogu koristiti na bilo koji od dostupnih načina. Stoga ćemo nova primijenjena rješenja, kao i sve biblioteke koje se u njima koriste, implementirati u režimu bez korištenja sinhronih poziva.

Dakle, bolje je da sada počnete savladavati ovaj način rada. Čak i ako je vaša aplikacija možda još ne koristi, preporučujemo da počnete s prevođenjem sada ako je moguće. Međutim, preporučujemo vam da budete kreativni s ovim procesom. Na isti način kao i sa odbacivanjem modaliteta. Odnosno, nema potrebe da se sinhrone metode mehanički zamene asinhronim. Prvo, korisno je razmisliti o tome da li je moguće promijeniti algoritam, skriptu tako da se u ovom trenutku potpuno napusti korištenje sinhronih metoda?

Refaktoring

S jedne strane, ako je konfiguracija velika i u njoj ima puno sinkronih poziva, onda "ručna" izmjena takve konfiguracije može biti vrlo dugotrajan zadatak.

S druge strane, počevši od verzije 8.3.5.1068, na platformi postoje koje vam omogućavaju da konvertujete sinhrone pozive u njihove asinhrone kolege.

Stoga smo uzeli ove postojeće alate, proširili ih i ponovo fokusirali sa „izbjegavanja modaliteta“ na „prelazak na asinhroniju“. U svojoj srži, prijelaz na asinhrone metode sličan je radnjama koje se izvode kada se modalitet napusti. Stare, "van mode" sinkrone (modalne) pozive treba zamijeniti novim, "modnim" asinkronim pozivima koristeći ProcessingAlerts.

U ovom ažuriranom obliku, alati za refaktoriranje postali su vam dostupni u verziji 8.3.6.1977 .

Kako se "naglasak" ovih alata pomjerio ka asinhroniji, preimenovali smo neke od naredbi. Umjesto riječi "bez mode", sada se koristi izraz "zastarjeli sinhroni":

Osim toga, dodali smo novu karticu u postavke konfiguratora Refaktoring. Podrazumevano, obje transformacije su omogućene na njemu. Ali, ako vam zatreba, sa njim možete izvesti samo jednu od vrsta transformacija sa automatskim refaktoriranjem.

Top Related Articles