Metode asincrone 1s. De ce apare eroarea „Utilizarea metodelor sincrone pe client este interzisă”? Soluție rapidă

25.10.2019 Siguranță

Articolul va discuta principalele motive pentru abandonarea modalității în platforma 1C:Enterprise și principalele metode de conversie a secțiunilor de cod într-un nou model asincron.

Aplicabilitate

Articolul discută modelul asincron pentru construirea logicii de afaceri, platforma adăugată „1C:Enterprise” ediția 8.3. Informațiile prezentate sunt relevante pentru versiunile actuale ale platformei.

Refuzul utilizării ferestrelor modale în platforma 1C:Enterprise 8.3

La dezvoltarea unei configurații pe platforma 1C:Enterprise 8, apare necesitatea de a întrerupe periodic programul până când utilizatorul ia o decizie sau efectuează o acțiune.

De exemplu, când faceți clic pe butonul de completare a părții tabulare, utilizatorul ar trebui să fie întrebat dacă trebuie să șterge parte tabulară astfel încât datele introduse anterior să nu se piardă.

Acest comportament poate fi realizat, de exemplu, prin următorul cod:

&OnClient
Procedură Completați Produse(Echipa)
Răspuns = Întrebare („Partea tabelului va fi ștearsă. Continuați?”, Modul dialogÎntrebare.DaNu);
Dacă Răspuns = Cod de returnare dialog.Da Apoi
//algoritm de umplere
EndIf ;
Sfârșitul procedurii

Ca urmare a acestui fragment de cod, execuția codului programului va fi suspendată, o întrebare va fi afișată pe ecran, interfața aplicației cu excepția dialogului cu întrebarea va deveni indisponibilă, sistemul așteaptă ca utilizatorul să facă un decizie, iar execuția codului va continua numai după ce se răspunde la întrebare.

Deschiderea ferestrelor modale prin apelarea metodei OpenModal() provoacă, de asemenea, pauze în execuția codului și blocarea interfeței.

Când lucrați cu configurația în modul client web printr-un browser, în acest caz se va deschide o nouă fereastră - o fereastră pop-up care va bloca nu numai fila curentă, ci și întreaga interfață a browserului, inclusiv restul ferestre deschiseși file.

Ferestrele pop-up de pe Internet sunt adesea folosite pentru a distribui cu răutate reclame nedorite, motiv pentru care browserele conțin funcții de blocare a ferestrelor pop-up.

În acest caz, pentru a lucra cu configurațiile 1C:Enterprise 8 printr-un browser, trebuie să dezactivați blocarea ferestrelor pop-up.

Problemele apar și atunci când lucrați dispozitive mobile. De exemplu, ferestre modale nu sunt acceptate pe iPad.

Pentru a rezolva aceste probleme, ar trebui să utilizați blocarea ferestrelor în loc de cele modale. Pentru utilizator, vizual totul arată la fel: fereastra blochează interfața clientului web.

Cu toate acestea, fereastra de blocare este „desenată” deasupra ferestrei principale și numai fila curentă a browserului în care este deschisă configurația este blocată, permițându-vă să comutați la alte file, deoarece ferestrele de browser modale nu sunt utilizate.

Astfel, ferestrele pop-up nu se deschid în browser și este asigurată funcționarea prin clientul web pe dispozitivele mobile.

Elementul rădăcină al configurației are o proprietate „Modality mode”, care determină dacă ferestrele modale pot fi deschise în configurație.

Dacă este selectată opțiunea „Utilizați”, atunci pot fi deschise ferestre modale. Dacă este selectată opțiunea „Nu utilizați”, atunci ferestrele modale nu sunt permise. Când încercați să apelați o metodă care deschide o fereastră modală, sistemul afișează un mesaj de eroare:

Cu această valoare a proprietății „Modality usage mode”, este permisă doar blocarea ferestrelor.

Dacă este selectată opțiunea „Utilizați cu avertismente”, atunci când ferestrele modale sunt deschise, în fereastra de mesaj este afișat următorul text:

Această opțiune de lucru poate fi folosită ca una intermediară la relucrarea configurației pentru a renunța la utilizarea ferestrelor modale.

Principala diferență dintre ferestrele de blocare și ferestrele modale este că deschiderea unei ferestre de blocare nu întrerupe execuția codului.

Prin urmare, dezvoltatorii vor trebui să rescrie codul programului care utilizează ferestre modale pentru a lua în considerare această caracteristică.

Codul trebuie împărțit în două părți:

  • deschiderea unei ferestre de blocare;
  • procesarea selecției utilizatorului.

Fragmentul de cod dat la începutul articolului trebuie rescris după cum urmează:

&OnClient
Procedură Completați Produse(Echipa)
Alertă = Nou DescriereAlerte(, ThisObject );

Modul dialogÎntrebare.DaNu);
Sfârșitul procedurii
&OnClient
Procedura (rezultat, Opțiuni suplimentare) Export
Dacă Rezultatul = Cod de returnare dialog.Da Apoi
//algoritm de umplere
EndIf ;
Sfârșitul procedurii

După executarea procedurii ShowQuestion(), sistemul nu se oprește, așteptând răspunsul utilizatorului, execuția codului continuă.

Utilizatorul va putea face o alegere numai după finalizarea întregii proceduri. În acest caz, va fi apelată procedura de export FillItemsQuestionComplete(). Am transmis numele acestuia constructorului obiectului DescriptionAlerts.

Procedura care va fi apelată după efectuarea unei selecții poate fi localizată într-un modul de formular, un modul de comandă sau un modul general non-global.

În exemplul luat în considerare, procedura apelată este localizată în modul formă controlată, așa că am trecut în parametrul ThisObject.

Să luăm în considerare apelarea unei proceduri situate într-un modul general. Pentru a face acest lucru, adăugați un nou modul comun Procesare notificări, setați indicatorul „Client (aplicație gestionată)” pentru acesta și nu setați indicatorul „Global”. Să plasăm procedura Fill in Products Question Completare () în acest modul.

Apoi, handlerul de comandă de umplere va arăta astfel:

&OnClient
Procedură Completați Produse(Echipa)
Alertă = Nou DescriereAlerte(„Completați completarea întrebării despre produse”,
Procesarea alertelor);
Textul întrebării = „Partea tabelară va fi ștearsă. Continua?" ;
Afișați întrebare (alertă, text întrebare, Modul dialogÎntrebare.DaNu);
Sfârșitul procedurii

După apelarea oricărei metode care deschide o fereastră de blocare, procedura trebuie să iasă, iar codul care rulează în continuare ar trebui plasat într-o procedură care va fi apelată după ce fereastra este închisă.

Pentru a transfera context (date auxiliare, anumiți parametri, valori variabile) de la procedura care deschide fereastra modală la procedura apelată când aceasta este închisă, este furnizat un al treilea parametru opțional al constructorului de obiect: DescriptionAlerts – Additional Parameters.

Acest obiect (de orice tip) va fi trecut la procedura descrisă în Descrierea alertei ca ultimul parametru.

Folosind exemplul secțiunii de cod discutat mai sus, acest lucru se poate face astfel:

&OnClient
Procedură Completați Produse(Echipa)
Parametrul1 = 0 ;
Parametrul2 = 0 ;
Lista parametrilor= Structură nouă („Parametrul1, Parametrul2″, Parametrul1, Parametrul2);
Alertă = Nou DescriereAlerte(„Completați completarea întrebării despre produse”, ThisObject ,
Lista parametrilor);
ShowQuestion (Alerta, „Partea tabelului va fi ștearsă. Continuați?”,
Modul dialogÎntrebare.DaNu);
Sfârșitul procedurii
&OnClient
Procedură Completați Produse Întrebarea Finalizare(Rezultat, Opțiuni suplimentare) Export
Dacă Rezultatul = Cod de returnare dialog.Da Apoi
//analiza parametri suplimentari.Parametru1
//analizează parametri suplimentari.Parametru2
EndIf ;
Sfârșitul procedurii

Dacă trebuie să treceți o singură valoare, atunci nu puteți utiliza structura, ci puteți atribui această valoare parametrului Parametri suplimentari al constructorului obiectului DescriptionAlerts.

Să ne uităm la câteva exemple de lucru cu blocarea ferestrelor.

Sarcina 1: Deschideți un alt formular

Din formularul de document, făcând clic pe butonul „Deschideți parametri”, trebuie să deschideți un formular pe care există două casete de selectare Parametrul1 și Parametrul2, pe care utilizatorul trebuie să le seteze. După închiderea formularului, afișați valorile parametrilor în linia de mesaje.

Creăm un formular general „ParametersForm”, pe care plasăm detaliile Parameter1 și Parameter2, precum și comanda CloseForm:

Managerul de comandă arată astfel:

Managerul de comandă arată astfel: &OnClient
Procedura CloseForm (comandă)
Lista parametrilor= Structură nouă ( „Parametrul 1, Parametrul 2”, Parametrul 1 , Parametrul 2 );
Închide ( Lista parametrilor); Sfârșitul procedurii

Pentru formular, setați proprietatea WindowOpenMode la „Blocați întreaga interfață”:

Pe formularul de document plasăm comanda OpenParameters, al cărei handler este descris după cum urmează:

&OnClient
Procedură OpenOptions(Echipa)
Alertă = Nou DescriereAlerte(„Opțiuni deschise Terminare”, ThisObject );
OpenForm ( „GeneralForm.FormParameters”, , , , , , Notificare);
Sfârșitul procedurii
&OnClient
Procedură OpenOptionsComplete(Rezultat, Opțiuni suplimentare) Export
Dacă TypeValue (Rezultat) = Type („Structură”), atunci
Pentru fiecare KeyValue From Result Loop
Mesaj = Nou Mesaj pentru utilizator;
Message.Text = „Cheie: „” ” + KeyValue.Key + “””, valoare = ”
+ KeyValue.Value;
Mesaj.Raport();
EndCycle ;
EndIf ;
Sfârșitul procedurii

În modul utilizator, rulând configurația sub clientul web, obținem următoarele rezultate:

Pentru marire, click pe imagine.

Modul de deschidere a ferestrei poate fi specificat și în ultimul parametru al procedurii OpenForm.

&OnClient
Procedură OpenOptions(Echipa)
Alertă = Nou DescriereAlerte(„Opțiuni deschise Terminare”, ThisObject );
OpenForm ( „GeneralForm.FormParameters”, , , , , , Alerta
FormWindowOpenMode.LockEntireInterface
);
Sfârșitul procedurii

Sarcina 2. Întrebare la închiderea formularului

Când închideți o fereastră de procesare, întrebați utilizatorul dacă dorește cu adevărat să închidă fereastra.

Această problemă poate fi rezolvată folosind următorul cod aflat în modulul formular de procesare:

&OnClient
Perem Trebuie să închideți formularul;
&OnClient
Procedura înainte de închidere (Eșec, Procesare standard)
Dacă nu Trebuie să închideți formularul= Adevărat Atunci
Eșec = Adevărat;
Alertă = Nou DescriereAlerte(„Înainte de Închidere Finalizare”, ThisObject );
ShowQuestion (Alerta, „Sunteți sigur că doriți să închideți fereastra?”,
Modul dialogÎntrebare.DaNu
);
EndIf ;
Sfârșitul procedurii
&OnClient
Procedură Înainte de Închidere Finalizare(Rezultat, Opțiuni suplimentare) Export
Dacă Rezultatul = Cod de returnare dialog.Da Apoi
Trebuie să închideți formularul= Adevărat;
Închide();
In caz contrar
Trebuie să închideți formularul= nedefinit ;
EndIf ;
Sfârșitul procedurii

În procedura de formular BeforeClosing, utilizatorului i se pune o întrebare, indicatorul Refuz este setat la True și închiderea formularului este anulată.

După un răspuns afirmativ la întrebare, variabila Need toCloseForm este setată la True, iar formularul este închis din nou.

Sarcina 3: Introducerea unei valori numerice

Când faceți clic pe butonul de pe formularul de procesare, deschideți un dialog standard de introducere a numărului.

Pentru a face acest lucru, trebuie să utilizați metoda ShowNumberInput() în loc de EnterNumber(), care deschide o fereastră de blocare în loc de una modală.

&OnClient
Procedura de introducere a numerelor (comandă)
Alertă = Nou DescriereAlerte(„EnterNumberComplete”, ThisObject );
Afișați EnterNumbers(Alerta, 0, „Introduceți cantitatea”, 15, 3);
Sfârșitul procedurii
&OnClient
Procedură Introducerea numerelor În curs de finalizare(Rezultat, Opțiuni suplimentare) Export

Mesaj = Nou Mesaj pentru utilizator;
Message.Text = „Ați introdus o cantitate” + Rezultat;
Mesaj.Raport();
EndIf ;
Sfârșitul procedurii

După închiderea ferestrei de introducere a numărului, va fi apelată o procedură, primul parametru al căruia va fi numărul introdus sau valoarea Nedefinită dacă utilizatorul a refuzat să intre.

Sarcina 4. Alegerea unei culori

Când faceți clic pe butonul de pe formularul de procesare, folosind dialogul standard de selecție a culorii, utilizatorul specifică culoarea necesară. Setați această culoare pentru fundalul butonului apăsat.

Adăugați comanda SelectColor la formular cu următorul handler:

&OnClient
Procedura de selectare a culorii (comandă)
Dialog de selectare a culorii= Nou Dialog de selectare a culorii;
Alertă = Nou DescriereAlerte(„Selectarea culorilor finalizată”, ThisObject );
Dialog de selectare a culorii. Afișează (Alerta);
Sfârșitul procedurii
&OnClient
Procedură ChoiceColorsCompletion(Rezultat, Opțiuni suplimentare) Export
Dacă NU Rezultat = Nedefinit, atunci
Elemente.Selectarea culorii.Culoare de fundal= Rezultat ;
EndIf ;
Sfârșitul procedurii

Pentru obiectele Dialog de selecție a culorii (precum și Dialogul de editare a perioadei standard, Constructorul de linie de format, Dialogul de programare a sarcinilor obișnuite, Dialogul de selecție a fontului), metoda Show() deschide o fereastră de blocare.

După închiderea ferestrei, va fi apelată o procedură, primului parametru căruia i se va trece valoarea selectată (culoare, font etc.) sau valoarea Nedefinită dacă utilizatorul a refuzat alegerea.

Trebuie remarcat faptul că obiectul FileSelectionDialog nu are o metodă Show(), spre deosebire de casetele de dialog de selecție a culorilor sau a fontului, deoarece implementarea acestor dialoguri este semnificativ diferită.

Pentru a utiliza dialogul de selectare a fișierelor pe clientul web, trebuie mai întâi să activați extensia fișierului.

Dialogurile implementate prin extensia de fișier nu creează aceleași probleme operaționale ca ferestrele de browser modale, astfel încât deschiderea ferestrelor de blocare pentru obiectul FileSelectionDialog nu a fost implementată.

În concluzie, observăm că, începând cu versiunea 8.3.10, suportul pentru ferestrele modale a fost întrerupt în clientul web. În acest caz, dacă în configurație este apelată o metodă modală, se generează o excepție. De asemenea, suportul pentru modul de interfață a fost întrerupt în clientul web În ferestre separate. În plus, atât în ​​clientul subțire, cât și în cel web, nu mai este posibilă deschiderea unui formular într-o fereastră separată (când se lucrează în modul de interfață Bookmarks). Astfel de pași drastici au făcut posibilă abandonarea modului de interfață, care nu mai este acceptat de toate browserele moderne.

Ce concluzie practică se poate trage din aceste informații? Și concluzia este destul de simplă - dacă din anumite motive există încă apeluri modale în configurația dvs., atunci în aceste locuri din clientul web va fi afișată o fereastră cu un mesaj de eroare. Aș dori să avertizez împotriva încercării de a „Google” unele decizie rapidă această problemă, pentru că Cele mai multe sfaturi se rezumă la această rețetă: în configurator la nivelul de configurare, setați proprietatea „Modality usage mode” la „Utilizare”. Desigur, în acest moment, acest lucru nu va funcționa doar pentru că browsere moderne nu mai acceptă apeluri modale.

Și aveți doar două moduri de a rezolva problema descrisă mai sus:

  1. Actualizați platforma pentru lansarea 8.3.10+ (8.3.11), setați proprietatea de configurare „Mod de compatibilitate” la „Nu utilizați” și rescrieți fragmente de cod care utilizează metode modale într-un model logic de afaceri asincron
  2. Recomandați clienților dvs. să le folosească browsere învechite, unde apelurile modale erau încă acceptate ( Mozilla Firefox versiunile 37 și mai mici, versiunile Chrome sub 37 etc.).

Apropo, începând cu versiunea 8.3.11, browserele web Microsoft nu mai sunt acceptate Internet Explorer versiunile 8 și 9.

Ne-am ocupat de browsere web în lumina modalității, acum este timpul să clarificăm situația cu alți clienți.

Începând cu versiunea 8.3.5, proprietatea Modality Usage Mode în clienții thin și thick este respectată numai dacă este specificată opțiunea de linie de comandă /EnableCheckModal. Acest parametru este înlocuit automat în Linie de comanda doar la lansarea aplicației din configurator. Dacă acest parametru nu este specificat, atunci nu sunt generate excepții și nu sunt afișate avertismentele corespunzătoare. Acestea. în practică, atunci când se folosește un client gros și subțire, nu se observă o schimbare fundamentală în funcționare atunci când se utilizează modul modal - apelurile modale vor funcționa la fel ca înainte, fără a produce avertismente, ca în clientul web.

Pentru a puncta i-urile, rețineți că, începând cu versiunea 8.3.9, clientul gros ignoră proprietatea de configurare „Modul de utilizare a apelurilor sincrone către extensiile platformei și componentele externe”, în timp ce metodele sincrone corespunzătoare funcționează fără a genera excepții și afisare avertismente. Proprietatea ignorată specificată a fost adăugată în versiunea 8.3.5 pentru a sprijini lucrul asincron cu componente externe, criptare și extensii pentru lucrul cu fișiere într-un browser web Google Chrome. Este clar că acest lucru nu are nimic de-a face cu clientul gras și, prin urmare, ignorarea „în liniște”. a acestei proprietati a eliminat pur și simplu verificările inutile pentru utilizarea metodelor sincrone la utilizarea configurației.

Apropo! Datorită faptului că platforma se îndreaptă cu încredere spre web, din versiunea 8.3.8 dezvoltatorii au introdus anumite restricții asupra codului programului care este asociat cu logica închiderii unui formular sau aplicație, executată în grosime și clienti slabi. Asigurați-vă că citiți articolul nostru care acoperă această nuanță în detaliu. În plus, în cursul „Dezvoltarea profesională a interfețelor și formularelor în 1C: Enterprise 8.3”, există un capitol dedicat abandonării modalității și puteți aduna o mulțime de informații utile și relevante pe această temă.

Colegii, există două lucruri pe care le puteți citi la nesfârșit: feedul VKontakte și lista modificărilor din următoarea ediție a platformei, așa că să rezumam rezultatele finale;)

În procesul de luare în considerare a exemplelor care vă permit să treceți de la elementele unui model sincron la unul asincron, probabil ați observat deja că în cazul general există mai mult cod de program. Cu cât există mai mult cod, cu atât crește complexitatea întreținerii și depanării sale ulterioare.

În plus, cantitatea de cod va crește și mai mult dacă vom folosi cantitate mare dialoguri. Prin urmare, în procesul de dezvoltare solutii aplicative orientat să lucreze într-un client web, trebuie să vă amintiți paradigma de lucru care este utilizată în prezent în aplicațiile web moderne. Prin urmare, dacă configurația dvs. are o mulțime de dialoguri interactive cu utilizatorul și avertismente, atunci este logic să reconsiderați această funcționalitate în favoarea unor alte abordări de organizare a interacțiunii cu utilizatorul.

În loc de o concluzie

Ciclul nostru „Primii pași în dezvoltarea 1C” s-a încheiat. Dacă l-ați citit în întregime, atunci cel mai probabil ați observat deja modul în care platforma s-a dezvoltat treptat în ultimul timp. Materialul din această serie a fost scris relativ recent, dar am fost nevoiți să-l actualizăm serios, pentru că... chiar și într-o perioadă atât de scurtă de timp, o mulțime de noi importante funcţionalitate si schimbari. Astfel de schimbări majore pot fi oarecum nedumeritoare pentru un programator 1C dacă nu a crescut și s-a dezvoltat profesional cu platforma în tot acest timp.

Pe resursele de internet specializate puteți citi adesea solicitări de la programatori începători și de la colegii lor mai maturi de a recomanda materiale care să-i ajute să înțeleagă capabilitățile extinse și uneori aparent nesfârșite ale platformei 1C. În mod tradițional, vă recomandăm să acordați atenție cursurilor noastre de programare

De ce apare eroarea „Utilizarea metodelor sincrone pe client este interzisă”?

Dacă întâmpinați o astfel de eroare în timp ce finalizați lecțiile, este foarte ușor să o remediați.

Reveniți la configurator și selectați elementul de meniu „Configurare” -> „Deschideți configurația”:

În fereastra care se deschide, faceți clic dreapta pe elementul „Configurare” și selectați „Proprietăți” din meniul care se deschide:

Se va deschide o fereastră cu proprietăți de configurare (dreapta):

Derulați până în partea de jos și găsiți elementul „Modalitate” acolo:

Setează-i valoarea la "Utilizare":

Atenţie! Vă rugăm să rețineți că, dacă utilizați o platformă 1C diferită de cea pe care am descărcat-o în prima lecție (versiunea ulterioară), atunci veți avea și câmpul „Mod pentru utilizarea apelurilor sincrone...”. De asemenea, trebuie setat la „Utilizare”.

În cele din urmă, selectați elementul de meniu „Configurare” -> „Salvare configurație”:

Gata! Acum eroarea nu va mai apărea.

Explicații mai jos - pentru cei care sunt interesați de ceea ce am făcut.

Am activat modul modalitate în configurația noastră. În mod implicit, acest mod este dezactivat și acest lucru nu ne permite să folosim comenzi precum EnterNumber, EnterString, EnterDate, OpenValue.

Cert este că aceste comenzi sunt modale. Apelarea acestora duce la apariția unei ferestre în fața utilizatorului (de exemplu, pentru introducerea de informații), care blochează capacitatea de a lucra cu programul până când fereastra este închisă.

Și, deoarece prezența unor astfel de ferestre este extrem de nedorită atunci când lucrați cu 1C printr-un browser web, atunci când dezvoltați noi configurații, modul modality este dezactivat implicit.

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());

Sfârșitul procedurii
Tehnica asincronă va arăta diferit:

&OnClient
Procedură Șterge (comandă)
Apel invers = Nou DescriptionAlerts(„GetTemporaryFileDirectoryCompletion”, ThisObject, „DeleteError”, ThisObject);
StartGettingTemporaryFileDirectory(Callback);
Sfârșitul procedurii
&OnClient
Procedură GetTemporaryFileDirectoryCompletion(TemporaryFileDirectoryName, AdditionalParameters) Export
Apel invers = Nou DescriptionAlerts(„DeleteCompletion”, ThisObject, „FileError”, ThisObject);
StartDeletingFiles(Callback, TemporaryFileDirectoryName, GetMaskAllClientFiles());
Sfârșitul procedurii
&OnClient
Procedură DeleteComplete(AdditionalOptions) Export
Notify(„Eliminarea a fost finalizată cu succes”);
Sfârșitul procedurii
&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));
Sfârșitul procedurii

in primul rand, trebuie remarcat faptul că aproape toate operațiunile cu fișierele au devenit asincrone. Chiar și așa pași simpli cum ar fi obținerea directorului de fișiere temporare. Iar nevoia de a obține un astfel de director duce la primul apel asincron. Apoi are loc apelul de a șterge efectiv toate fișierele. Ș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 în acest exemplu Acesta este un mesaj care indică 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.
Nota 1: Pentru ca extensia de gestionare a fișierelor să funcționeze corect într-un browser web Microsoft Internet Utilizare recomandată de Explorer
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

„Folosirea ferestrelor modale în acest mod 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 globale 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 în noua platforma oportunitate - „mod de utilizare a unei modalități”.

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 prelucrare externă la noile cerinţe.

Avertisment, intrebare, casete de dialogși alte ferestre modale - toate acestea trebuie 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) ; Sfârșitul procedurii

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:

Dacă sunteți un utilizator activ produs software 1C, e 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ă intrați în panică dacă apare; este suficient să navigați în secvența 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 ar trebui să vă panicați, să încercăm să descoperim această eroare software.

Inițial, faceți clic pe linia „Configurator”. După aceasta, în aer liber meniul contextual mergeți la 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 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. Utilizatori avansați Se 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 să scrieți doar 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 său și programul va funcționa din nou, permițându-vă să efectuați toate acțiunile la un nivel profesional înalt.