Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Sfat
  • De ce apare eroarea „Utilizarea metodelor sincrone pe client este interzisă”? Utilizarea metodelor sincrone asupra clientului este interzisă 1s.

De ce apare eroarea „Utilizarea metodelor sincrone pe client este interzisă”? Utilizarea metodelor sincrone asupra clientului este interzisă 1s.

„Utilizarea ferestrelor modale în acest mod este interzisă” - această eroare începe acum să deranjeze utilizatorii și programatorii 1C odată cu apariția noii interfețe a platformei 1C 8.3 - „ „.

Dezvoltatorii platformei tehnologice 1C țin pasul cu vremurile, standardizându-și soluția la standardele internaționale de dezvoltare software. Toate standardele într-un fel sau altul se rezumă la o singură interfață, aproape de paginile web.

Ferestrele modale și pop-up sunt considerate în formă proastă și au încetat de mult să fie normale în dezvoltarea de software. Utilizatorii sunt obișnuiți să lucreze „într-o singură fereastră”.

În special, vedem adesea o eroare de modalitate în următoarele metode 1C:

  • Întrebare;
  • Avertizare;
  • OpenValue.

Odată cu lansarea noii interfețe „taxi”, dezvoltatorii platformei 1C 8 au luat decizia corectă - să încerce să recalifice dezvoltatorii de soluții de aplicații într-un mod nou. Au inclus o caracteristică în noua platformă - „modalitatea”.

Soluție rapidă

Dacă nu aveți timp să vă dați seama și trebuie să rezolvați rapid problema, vă oferim o soluție simplă, dar nu complet corectă. Pentru a remedia rapid eroarea, trebuie doar să schimbați modul modalității în proprietățile de configurare.

Pentru a face acest lucru, conectați-vă la sistem în modul, deschideți configurația:

Într-o configurație deschisă, apelați meniul contextual făcând clic dreapta pe rădăcina configurației și selectând „Proprietăți”:

Obțineți 267 de lecții video pe 1C gratuit:

Se vor deschide proprietățile de configurare, unde în subsol se află proprietatea care ne interesează - „Modality use mode”, selectați modul „Use”:

După aceea, salvați și aplicați modificările apăsând tasta „F7”.

Soluția corectă a problemei

Modul corect de a rezolva această problemă este modificarea configurației sau procesării externe pentru a îndeplini noile cerințe.

Avertismentul, întrebarea, casetele de dialog și alte modalități trebuie să fie rescrise într-un mod nou.

Operatorii încorporați care au numit ferestre modale trebuie înlocuiți cu funcții duplicate.

De exemplu:

  • Avertisment - ShowWarning;
  • Întrebare - ShowQuestion (detalii - );
  • — ShowInputNumbers.

În același timp, a apărut un obiect specializat - Notification Description.

Exemplu de înlocuire:

String = "" ; EnterString(Șir, „Introduceți o valoare șir”) Notify("Ați introdus " + String);

Trebuie inlocuit cu:

String = "" ; DescriptionAlerts = DescriptionAlerts noi( „TestLineInput”, Acest formular) ; ShowLineInput(DescriptionAlerts, String, „Introduceți o valoare șir”) ;

În același timp, adăugați o procedură similară pe client care va funcționa atunci când valoarea este introdusă de utilizator:

&Pe Procedura Client TestInputString(ReceivedValue, PassedParameters) Export Notify("Ați introdus " + String) ; EndProcedure

Formularele care sunt dezvoltate în cadrul configurației sunt deschise în același mod. Este suficient să înlocuiți metoda „OpenFormModal” cu „OpenForm”, specificând o descriere a alertei și noua procedură necesară pentru aceasta.

Pentru a bloca accesul la formularul apelat prin deschiderea unui formular, trebuie doar să specificați valoarea „Blocați fereastra proprietarului” în proprietatea „Mod de deschidere a ferestrei” a formularului:

Imprimare (Ctrl+P)

Lucrul cu fișiere în modul asincron este prezent doar pe partea aplicației client. În general, se recomandă utilizarea metodelor sincrone pentru lucrul pe partea de server și metode asincrone pentru lucrul pe partea aplicației client.
Să luăm în considerare un exemplu de lucru cu fișiere într-o tehnică asincronă: ștergerea tuturor fișierelor din directorul de fișiere temporare. Pentru tehnologia sincronă, această acțiune va arăta astfel:

&OnClient
Procedură Șterge (comandă)
DeleteFiles(Director de fișiere temporare(), GetMaskAllClientFiles());

EndProcedure
Tehnica asincronă va arăta diferit:

&OnClient
Procedură Șterge (comandă)
Apel invers = Nou DescriptionAlerts(„GetTemporaryFileDirectoryCompletion”, ThisObject, „DeleteError”, ThisObject);
StartGettingTemporaryFileDirectory(Callback);
EndProcedure
&OnClient
Procedură GetTemporaryFileDirectoryCompletion(TemporaryFileDirectoryName, AdditionalParameters) Export
Apel invers = Nou DescriptionAlerts(„DeleteCompletion”, ThisObject, „FileError”, ThisObject);
StartDeletingFiles(Callback, TemporaryFileDirectoryName, GetMaskAllClientFiles());
EndProcedure
&OnClient
Procedură DeleteComplete(AdditionalOptions) Export
Notify(„Eliminarea a fost finalizată cu succes”);
EndProcedure
&OnClient
Procedură FileError (ErrorInfo, StandardProcessing, AdditionalOptions) Export
Raport(„A fost întâlnită o eroare în timpul efectuării unei operațiuni cu fișierul: ” + BriefErrorIntroduction(ErrorInfo));
EndProcedure

in primul rand, trebuie remarcat faptul că aproape toate operațiunile cu fișierele au devenit asincrone. Chiar și ceva la fel de simplu ca obținerea unui director de fișiere temporare. Iar nevoia de a obține un astfel de director duce la primul apel asincron. Apoi este apelată ștergerea efectivă a tuturor fișierelor. Și gestionarea finalizării ștergerii necesită un al doilea handler, care ar trebui să găzduiască acțiunile care ar trebui să aibă loc după ce toate fișierele din directorul de fișiere temporare au fost șterse. În acest exemplu, acesta emite un mesaj despre finalizarea operațiunii.
Dacă apare o eroare în timpul efectuării operațiunilor cu fișierul, controlul va fi transferat operatorului FileError(). Vă permite să gestionați corect situația actuală.

Lucrul cu fișiere în clientul web

Lucrul cu fișiere în clientul web are o serie de caracteristici:
1. Fără a instala extensii, în orice browser web, sunt disponibile doar metodele GetFile() și StartPlaceFile(). Metoda PlaceFile() nu este acceptată atunci când lucrați cu browserul web Google Chrome și dacă configurația nu permite utilizarea metodelor modale (proprietatea de configurare a modului de utilizare a modului, consultați aici).
2. Când instalați extensia pentru lucrul cu fișiere în toate browserele web, cu excepția Google Chrome, sunt disponibile atât metode sincrone, cât și asincrone pentru lucrul cu fișiere (sincron sau asincron depinde de proprietatea de configurare a modului de utilizare a modului),
3. Doar o extensie asincronă pentru lucrul cu fișiere este disponibilă pentru browserul web Google Chrome. Funcționarea sincronă nu este acceptată.
4. Extensia de fișier nu acceptă lucrul prin protocolul HTTPS folosind un certificat de client.
Notă 1. Pentru funcționarea corectă a extensiei de gestionare a fișierelor în browserul web Microsoft Internet Explorer, se recomandă utilizarea
Bibliotecile Microsoft Core XML Services (MSXML) versiunea 4.0 sau 6.0.
Notă 2. Extensia de fișier pentru browserul web Microsoft Internet Explorer este instalată în directorul %APPDATA%\1C\1СEWebExt\FileSystemExtIE

Dacă sunteți un utilizator activ al unui produs software 1C, acest lucru este grozav. Programul este foarte bun, vă permite să efectuați mai multe sarcini rapid și cu cea mai înaltă calitate posibilă. Totul ar fi bine dacă nu ne-ar șoca din când în când cu mesaje terifiante despre erorile apărute. Este bine dacă astfel de erori au fost întâlnite anterior de dvs. personal sau de cei care lucrează lângă dvs. și vă pot explica clar cu degetele cum să remediați problema, precum și de ce a apărut.

Problema este corectată după modificarea setărilor sau a codului 1C.

Un astfel de conținut de informații vă va permite să restabiliți funcționalitatea programului 1C, precum și în viitor pentru a evita greșelile grave care provoacă probleme.

Algoritm pentru corectarea erorilor în 1C

Următoarea eroare apare și în 1C: „Utilizarea metodelor sincrone pe client este interzisă”. Nu ar trebui să vă panicați dacă apare; concentrați-vă doar asupra succesiunii acțiunilor dvs. studiind recomandările valoroase ale utilizatorilor experimentați.

Efectuarea de modificări la setările programului

Dacă ați încercat să apelați o metodă de context într-un program 1C, dar în loc de acțiunile ulterioare așteptate cu care sunteți deja obișnuiți, a apărut brusc un mesaj care spune că utilizarea metodelor sincrone pe client este interzisă, nu trebuie să vă panicați, să încercăm să descoperim această eroare software.

Inițial, faceți clic pe linia „Configurator”. După aceea, în meniul contextual deschis, accesați ultima linie „Proprietăți”, faceți clic pe ea. Acum se va deschide o fereastră în care puteți face în mod independent unele modificări ale setărilor, inclusiv ajustări ale modului de funcționare al programului.

Printre modurile propuse, găsiți linia „Mod pentru utilizarea apelurilor sincrone către extensii și componente externe”. Vă rugăm să rețineți ce valoare este setată pentru acest mod. Este important să fie selectată opțiunea „Utilizați”. Dacă vedeți ceva diferit, faceți clic pe caseta de selecție și selectați acea opțiune.

Acum închideți toate ferestrele deschise și încercați să efectuați din nou toate acțiunile dorite. Probabilitatea de a reuși este mare.

Schimbarea codului

Din păcate, nu este întotdeauna posibil să remediați eroarea „Utilizarea metodelor sincrone pe client este interzisă” după efectuarea modificărilor setărilor programului. Uneori trebuie să desfășori activități mai responsabile. În special, faceți modificări la codul programului. Utilizatorii experimentați recomandă utilizarea metodei de conectare asincronă dacă cea sincronă devine brusc interzisă.

Deschideți codul programului. Lăsați numele procedurii (Procedure OpenLiFile1()) și sfârșitul acesteia (EndProcedure) neschimbate, dar schimbați radical corpul procedurii.

Trebuie doar să scrieți trei rânduri:

Alert = New AlertDescription ("Înregistrare sau mai mult",ThisObject);
QuestionText = „Scrieți?”;
ShowQuestion(Alert, QuestionText, DialogModeQuestion.YesNo);

Dacă nu înțelegeți absolut nimic despre asta, nicio problemă, doar copiați și lipiți între numele procedurii și linia de sfârșit. Credem cu adevărat că atunci când efectuați astfel de acțiuni, totul va intra la locul lor și programul va funcționa din nou, permițându-vă să efectuați toate acțiunile la un nivel profesional înalt.

Implementat în versiunea 8.3.5.1383, 8.3.6.1977.

Tendințele moderne

Tendințele de dezvoltare a browserului conduc la un procent din ce în ce mai mare de „asincronie” în platformă. Primul pas a fost. Acum există apeluri asincrone pentru lucrul cu extensii de criptare, lucrul cu fișiere și componente externe.

Motivul următoarei mișcări către asincronizare a fost că dezvoltatorii browserului Google Chrome au abandonat suportul pentru tehnologia anterioară NPAPI (Netscape Plugin Application Programming Interface). Această tehnologie a fost folosită pentru a conecta module externe - extensii - la browser.

Astfel de extensii sunt exact ceea ce folosește 1C:Enterprise pentru a lucra cu criptografie, pentru a lucra cu fișiere și pentru a conecta componente externe. Aceasta este o funcționalitate destul de importantă. Criptografia este utilizată în gestionarea documentelor electronice și, datorită componentelor externe, aplicațiile pot funcționa cu scanere de coduri de bare și alte echipamente de vânzare cu amănuntul.

Și acum, în loc de tehnologia anterioară sincronă NPAPI, dezvoltatorii Google Chrome au creat o nouă tehnologie Native Messaging. În același timp, au recomandat cu tărie ca toți dezvoltatorii de extensii să nu folosească vechea tehnologie, deoarece aceasta nu va fi acceptată.

Fără a intra în detalii, noua tehnologie este mai bună și mai sigură. Asta e bine. Dar una dintre diferențele sale semnificative este că oferă interacțiune exclusiv asincronă cu extensiile de browser. Și aceasta necesită o schimbare radicală a tuturor metodelor existente de lucru cu extensii și componente externe în 1C:Enterprise. Pentru că toate se bazează pe interacțiune sincronă.

Metode asincrone

Am rezolvat această problemă în același mod în care am rezolvat problema apelării modale. Pentru toate metodele sincrone care utilizează tehnologia NPAPI, am creat omologii lor asincron. Ele diferă în principal prin prezența prefixului ÎNCEPEși faptul că li se transmite primul parametru Descrierealerte, din care execuția codului programului va continua după finalizarea acțiunii apelate.

De exemplu, în locul metodei Criptează() Vă recomandăm acum să utilizați metoda StartEncrypt():

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

În loc de o metodă GetFiles() - StartGettingFiles():

GetFiles(<ПолучаемыеФайлы>, <ПолученныеФайлы>, <РасположениеФайлов>, <Интерактивно>) Începeți să primiți fișiere ((<ОписаниеОповещения>, <ПолучаемыеФайлы>, <РасположениеФайлов>, <Интерактивно>)

În loc de SetExternalComponent()- StartInstallingExternalComponents():

SetExternalComponent(<Местоположение>) Începeți instalarea componentelor externe (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

De fapt, în mare, totul seamănă foarte mult cu ceea ce făceam înainte când am scăpat de modalitate. Dar funcționarea noilor metode asincrone are o caracteristică esențială pe care nu o au metodele care provoacă dialoguri non-modale.

Când apelăm asincron un dialog fără model, ne așteptăm doar la o reacție a utilizatorului și nimic mai mult. În sensul că nu se poate întâmpla nimic neașteptat.

Și în procesul de apelare a metodelor asincrone de lucru cu extensii și componente, pot apărea situații excepționale. Extensia nu s-a instalat, componenta nu s-a încărcat etc.

De obicei, oferiți tratarea acestor excepții în codul aplicației. Folosind un operator Încerc... Excepție. Dar acum acest lucru devine imposibil, deoarece la momentul apelului asincron, codul aplicației nu este executat. În consecință, operatorul nu funcționează Încerc... Excepție.

  • NameProcedureProcessingErrors;
  • ErrorProcessingModule.

Dacă ceva nu merge bine în timpul unui apel asincron și apare o excepție, procedura indicată de aceste proprietăți va fi executată. Este logic să folosiți aceste două proprietăți numai în metodele asincrone de lucru cu extensii. Când apelați dialoguri fără model, nu aveți nevoie de aceste proprietăți.

Proprietatea de configurare

Ca și în cazul respingerii modalității, întreaga soluție de aplicare în ansamblu trebuie să știe „ce este”. Fie este modal, fie non-modal. Fie este sincron, fie asincron.

Anterior, pentru a rezolva problema cu modalitatea, am adăugat o proprietate specială de configurare Modul de utilizare a modalității. Acum, pentru a rezolva problema cu sincronicitatea, am adăugat o proprietate similară în sensul acesteia Mod de utilizare a apelurilor sincrone ale extensiilor și componentelor externe.

Esența utilizării sale este următoarea:

  • Nu folosi- acesta este un mod de operare nou, asincron. Pentru configurații noi, acesta este modul standard. Este interzisă utilizarea metodelor vechi, sincrone. Ei nu trec controlul sintactic, nu sunt în indiciu de context. Încercarea de a executa o metodă sincronă aruncă o excepție.
  • Utilizați cu avertisment- acest mod este destinat dezvoltatorului. Nu împiedică utilizarea metodelor mai vechi, sincrone. Dar de fiecare dată când o metodă sincronă este apelată la client, aceasta produce un mesaj de avertizare. Vă recomandăm să utilizați acest mod în configurațiile de „reciclare”. Este convenabil pentru căutarea vizuală a apelurilor sincrone și monitorizarea acestora în timpul procesului de revizuire.
  • Utilizare- un mod care asigură compatibilitatea noii versiuni a platformei cu configurații vechi care folosesc metode sincrone de lucru cu extensii și componente externe.

Toate metodele și proprietățile despre care am vorbit până acum sunt implementate în versiune 8.3.5.1383 . Le puteți utiliza în soluțiile dvs. de aplicație. Și dezvoltatorii, de exemplu, vor trece la subsisteme de operare asincronă care folosesc instrumente de criptare, lucrează cu fișiere și componente externe.

Desigur, ca și în cazul apelurilor modale, probabil că aveți o întrebare. Trebuie să refac soluția aplicației? Și, în general, trebuie să folosesc aceste metode asincrone în noua mea soluție de aplicație?

Când este nevoie?

Răspunsul la această întrebare este în esență același cu cel pe care l-am dat înainte. Când au vorbit despre abandonarea modalității.

În primul rând, nu fiecare versiune a platformei tehnologice acceptă modul de apeluri asincrone către extensii și componente externe. Acest mod de operare există începând cu versiunea 8.3.5.1383. Prin urmare, dacă lucrați la versiuni inferioare ale platformei, nu trebuie să vă faceți griji cu privire la abandonarea metodelor sincrone pentru moment.

În al doilea rând, nu toate soluțiile de aplicație trebuie să folosească neapărat acest mod. Aplicațiile critice sunt cele cu care vor fi lucrate folosind clientul web în browserul Google Chrome. Astfel de aplicații, în mare parte, sunt aplicații care rulează. Dacă soluția dvs. de aplicație cu siguranță nu va fi utilizată în acest mod, nu puteți abandona metodele sincrone deocamdată.

Cu toate acestea, în ciuda primului și al doilea punct, există tendințe globale care vă pot afecta planurile. Noi, compania 1C, dezvoltăm toate soluțiile standard pe baza faptului că acestea pot fi utilizate în oricare dintre modurile disponibile. Prin urmare, vom implementa noi soluții de aplicație, precum și toate bibliotecile utilizate în acestea, într-un mod fără utilizarea apelurilor sincrone.

Aceasta înseamnă că este mai bine pentru tine să începi să stăpânești acum acest mod de operare. Chiar dacă aplicația dvs. poate să nu o folosească încă, vă recomandăm să începeți traducerea acum, dacă este posibil. Cu toate acestea, vă încurajăm să abordați acest proces în mod creativ. În aceeași ordine de idei ca la abandonarea modalității. Adică, nu este necesară înlocuirea mecanică a metodelor sincrone cu unele asincrone. În primul rând, este util să ne gândim dacă este posibil să schimbăm algoritmul sau scriptul, astfel încât în ​​acest loc să renunțăm complet la utilizarea metodelor sincrone?

Refactorizarea

Pe de o parte, dacă configurația este mare și există o mulțime de apeluri sincrone în ea, atunci reelaborarea „manuală” a unei astfel de configurații poate fi o sarcină care necesită mult timp.

Pe de altă parte, începând cu versiunea 8.3.5.1068, platforma are caracteristici care vă permit să convertiți apelurile sincrone în omologii lor asincron.

Prin urmare, am luat aceste instrumente deja existente, le-am extins și le-am reorientat de la „înlăturarea de la modalități” la „tranziția la asincronie”. În esență, trecerea la metodele asincrone este similară cu acțiunile care sunt efectuate la abandonarea modalității. Apelurile vechi, „la modă”, sincrone (modale) trebuie înlocuite cu apeluri noi, „la modă”, asincrone folosind Procesarea alertelor.

În această formă actualizată, instrumentele de refactorizare au devenit disponibile pentru dvs. în versiune 8.3.6.1977 .

Deoarece „accentul” acestor instrumente s-a mutat către asincronie, am redenumit unele comenzi. În loc de „non-modal”, se folosește acum expresia „deprecated synchronous”:

În plus, am adăugat o filă nouă la setările configuratorului Refactorizarea. În mod implicit, ambele transformări sunt activate. Dar, dacă aveți nevoie, cu ajutorul acestuia puteți efectua doar unul dintre tipurile de transformări în timpul refactorizării automate.

Cele mai bune articole pe această temă