Utilizarea ferestrelor modale în acest mod este interzisă Cum se activează. De ce apare eroarea „Utilizarea ferestrelor modale în acest mod este interzisă”? Instrucțiuni pentru corectarea erorii pentru utilizatorii obișnuiți

În versiunea 8.3 a platformei 1C, a apărut un nou mod de funcționare a programului - fără utilizarea modalității. Mai exact, au aparut 2 moduri noi: fara folosirea modalitatii si folosirea modalitatii, dar cu avertisment. Și vechiul mod de funcționare este indicat ca folosind modalitatea.

Ce înseamnă toate acestea?În versiunile timpurii ale platformei, am folosit diverse ferestre modale și nu ne-am gândit prea mult la asta. De exemplu, trebuie să afișați un avertisment utilizatorului sau trebuie să puneți o întrebare sau să introduceți o valoare sau să selectați un fișier. Toate acestea sunt ferestre modale.

Ce înseamnă modal? Aceasta înseamnă că, atunci când această fereastră este apelată, se suprapune pe toate celelalte ferestre, adică este afișată în partea de sus și blochează lucrul cu alte ferestre până la finalizarea lucrării cu această fereastră. Pe lângă blocarea ferestrelor, execuția codului se oprește exact în punctul în care această fereastră este apelată și execuția codului continuă numai după ce o astfel de fereastră este închisă. Din punctul în care s-a oprit execuția. Voi ilustra apelul la fereastra modală folosind exemplul de apelare a formularului de selecție a perioadei:

&OnClient

StandardProcessing = Fals;




Dacă Dialog.Edit() Atunci //Apelați forma modală. Executarea codului va continua numai după ce formularul este închis.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialogue.Period.EndDate;
endIf;

EndProcedure


După cum putem vedea, o singură procedură este suficientă pentru a procesa apelul către fereastra modală de selecție a perioadei.

De ce sunt proaste ferestrele modale? Acum să ne dăm seama de ce 1C a decis să renunțe la utilizarea ferestrelor modale. Ei bine, în primul rând, aceasta este o consecință a faptului că platforma 1C poate fi folosită nu numai în forma sa obișnuită - ca aplicație desktop, dar poate fi lansată și într-un browser și poate fi lansată ca aplicație mobilă.

Problema cu browserele este următoarea. Modalitatea ferestrei din acestea este implementată folosind ferestre pop-up separate ale browserului. Sunt acceptate de aproape toate browserele, dar din cauza utilizării frecvente a unor astfel de ferestre pentru publicitate, aproape toți dezvoltatorii de browsere se luptă cu ele și dezactivează implicit utilizarea unor astfel de ferestre. Drept urmare, pentru a ne asigura că utilizatorul 1C poate lucra în browser, este necesar să-l forțezi să permită aceste ferestre, să-l dedice tuturor complexităților muncii 1C și browserelor și, în general, să-l supraîncărcăm cu elemente inutile. informație.

O nuanță separată cu browsere pentru tablete și browsere pentru telefoane. În majoritatea cazurilor, aceste browsere nu acceptă ferestre pop-up. Interfețele (monitoarele și dispozitivele de intrare) ale unor astfel de dispozitive cu ferestre pop-up nu sunt compatibile.

Și, în sfârșit, aplicația mobilă 1C nu este în totalitate prietenoasă cu ferestrele modale.

De aici concluzia: Nu utilizați ferestre modale. Ce ar trebui să folosesc în schimb? În schimb, trebuie să utilizați aceleași ferestre, dar fără modul modality. În noua platformă, 1C a dezvoltat și un astfel de mod pentru fiecare fereastră. Este implementat ca o metodă separată pentru fiecare dialog. Acest mod vă permite să deschideți o fereastră, dar nu să opriți execuția codului programului. Din punct de vedere tehnic, browserele implementează acest lucru ca o pseudo fereastră care apare în interiorul ferestrei părinte, dar se suprapune. Faptul că codul continuă să se execute după ce fereastra este deschisă înseamnă că nu veți putea primi imediat valorile selectate în el după codul pentru apelarea ferestrei. Încă nu au fost aleși. Prin urmare, obținerea și procesarea acestor valori se realizează într-o procedură separată, care este apelată la închiderea unei astfel de ferestre, iar această procedură este specificată la apelarea metodei de deschidere a ferestrei. Să ne uităm la aceeași fereastră de selecție a perioadei ca exemplu.

&OnClient
Service ProcedureStartDateStartSelection(Element, SelectionData, StandardProcessing)

StandardProcessing = Fals;

Dialog = NewEditingDialogStandardPeriod();
StandardPeriod = New StandardPeriod();

StartDate = Items.Services.CurrentData.StartDate;
EndDate = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = StartDate;
StandardPeriod.EndDate = EndDate;
Dialog.Period = StandardPeriod;

Descriere alertă = Descriere nouă alertă(„Procesarea selecției perioadei”, ThisForm);

Dialog.Show(DescriptionAlerts)

EndProcedure

&OnClient
ProcedurePeriodSelection Procesare(Perioada,Parametri) Export

Dacă Perioada<>Nedefinit Atunci

Elements.Services.CurrentData.StartDate = Period.StartDate;
Elements.Services.CurrentData.EndDate = Period.EndDate;

endIf;

EndProcedure


După cum putem vedea, în loc de Edit(), este apelat Show(). Iar procesarea evenimentului de selecție este deja într-o altă procedură.

Deci, ne-am dat seama cum să ne descurcăm fără modalitate. Acum să ne dăm seama de ce avem nevoie de modul de utilizare a unei modalități cu avertisment. În esență, acesta este un regim de tranziție. Când nu ați reușit încă să vă convertiți întreaga configurație într-un mod fără a utiliza o modalitate, dar vă străduiți deja pentru aceasta. Și de fiecare dată când apelați o fereastră modală, programul vă va avertiza că nu este indicat să apelați ferestrele modale în acest mod.

Ei bine, să renunțăm la modalitatea și să stăpânim noile tehnologii pentru lucrul 1C în browsere și computere mobile.

În proprietățile de configurare de pe platforma 1C:Enterprise 8.3 există un Mod de utilizare a modalității. Dacă valoarea acestui câmp este „Nu utilizați”, atunci când încercați să deschideți o fereastră modală, platforma va afișa mesajul „Utilizarea ferestrelor modale în acest mod este interzisă”. În acest caz, execuția codului programului se oprește.

Acest articol arată mecanismul de modificare a codului programului, folosind exemplul unei întrebări adresate utilizatorului atunci când modul modal este dezactivat.

Din când în când, la dezvoltarea unui produs software, este nevoie să întrebați utilizatorul despre acțiunile efectuate. De exemplu, la completarea automată a părților tabelare. Când, înainte de a reumple PM, este necesar să întrebați utilizatorul despre necesitatea de a face acest lucru. Și în funcție de răspunsul lui, PM va fi șters și reumplut sau nu.

Partea de întrebare a codului ar putea arăta cam așa:

Dacă PM. Cantitate()< >0 Apoi Răspuns = Întrebare(" // Această linie va afișa o fereastră modală cu o întrebare și execuția codului se va opri până când utilizatorul răspunde Dacă Răspuns = DialogReturnCode. Nu, apoi întoarce-te; EndIf ; // Utilizatorul este de acord să continue P.M. Clar() ; EndIf ; // Efectuați acțiuni suplimentare // Programul va merge aici dacă PM era gol sau utilizatorul a răspuns pozitiv la întrebarea despre reumplere Efectuați acțiuni suplimentare () ;

Când modul modal este dezactivat, va apărea o eroare în linia de întrebări a acestui cod și execuția ulterioară va fi întreruptă. Acest lucru se va întâmpla deoarece funcția Întrebare folosește o fereastră modală.

În această situație, trebuie să utilizați procedura ShowQuestion. Această procedură nu așteaptă finalizarea răspunsului utilizatorului. Dar primul parametru al acestei proceduri este descrierea alertei, care este folosită pentru a urmări răspunsul utilizatorului.

Cum se va schimba codul scris anterior:

// Este necesar să se completeze datele PM // Verificarea PM pentru plinătate Dacă PM. Cantitate()< >0 Atunci // PM nu este gol, trebuie să întrebați utilizatorul despre reumplere Afișați întrebarea(Descriere nouăAlerte(" Reîncărcați TCCompletion" , ThisObject, AdditionalParameters) , " PM va fi reumplut. Continua ?", Modul de dialog Întrebare. DaNu) ; // Această linie va afișa o fereastră de întrebare, dar executarea codului nu se va opri In caz contrar // Programul va merge aici dacă PM-ul era gol Efectuați acțiuni suplimentare() ; EndIf ; // Programul va ajunge aici în orice caz, indiferent dacă PM era gol sau nu // (cu excepția cazului în care, desigur, a existat o eroare în codul anterior) . . . // Procedura de export în același modul // Apelat după ce utilizatorul răspunde la întrebare& Pe Procedura Client Reîncărcarea TCCompletion (Rezultatul răspunsului, parametri suplimentari) Export dacă rezultatul răspunsului = Codul de returnare a dialogului. Nu atunci // Utilizatorul a refuzat să continueÎntoarcere ; EndIf ; // Efectuați acțiuni suplimentare // Programul va merge aici dacă PM nu a fost gol și utilizatorul a răspuns pozitiv la întrebarea despre reumplere P.M. Clar() ; Efectuați acțiuni suplimentare() ; EndProcedure

Astfel, deoarece programul nu se va opri atunci când se execută procedura ShowQuestion, este necesar să se gestioneze cu atenție toate evenimentele
La rezolvarea acestei probleme, pot apărea acțiuni suplimentare atunci când au loc două evenimente:
1. Dacă PM era gol
2. Dacă PM nu era gol și utilizatorul a răspuns pozitiv la întrebare, completați din nou

Și, în consecință, deoarece programul nu încetează să aștepte răspunsul utilizatorului, apelarea acestor evenimente trebuie să fie distribuită în diferite părți ale codului.
Prin urmare, de regulă, toate metodele executabile care trebuie efectuate după verificarea completității PM sunt plasate într-o procedură separată.

Un mecanism similar este utilizat pentru funcții similare de interacțiune cu utilizatorul (SelectValue, SelectFromList etc.)

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

Când se dezvoltă o configurație pe platforma 1C:Enterprise 8, apare necesitatea de a întrerupe periodic programul până când utilizatorul ia o decizie sau realizează o acțiune.

De exemplu, când faceți clic pe butonul de completare a secțiunii tabulare, utilizatorul ar trebui să fie întrebat dacă secțiunea tabulară trebuie să fie șters, 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 ;
EndProcedure

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ă o 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 alte ferestre și file deschise.

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.

Probleme apar și atunci când lucrați pe dispozitive mobile. De exemplu, ferestrele 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);
EndProcedure
&OnClient
Procedura (rezultat, Opțiuni suplimentare) Export
Dacă Rezultatul = Cod de returnare dialog.Da Apoi
//algoritm de umplere
EndIf ;
EndProcedure

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ă într-un modul de formular gestionat, 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 Completion () î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 tabulară va fi ștearsă. Continua?" ;
Afișați întrebarea (alertă, textul întrebării, Modul dialogÎntrebare.DaNu);
EndProcedure

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);
EndProcedure
&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 ;
EndProcedure

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

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);
EndProcedure
&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 ;
EndProcedure

Î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”, , , , , , Notificare
FormWindowOpenMode.LockEntireInterface
);
EndProcedure

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
Refuza = 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 ;
EndProcedure
&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 ;
EndProcedure

Î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(Alertă, 0, „Introduceți cantitatea”, 15, 3);
EndProcedure
&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 ;
EndProcedure

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);
EndProcedure
&OnClient
Procedură ChoiceColorsCompletion(Rezultat, Opțiuni suplimentare) Export
Dacă NU Rezultat = Nedefinit, atunci
Elemente.Selectarea culorii.Culoare de fundal= Rezultat ;
EndIf ;
EndProcedure

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” o soluție rapidă la această problemă, deoarece... 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ă browserele 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ă folosească browsere mai vechi care încă acceptau apeluri modale (Mozilla Firefox versiunile 37 și mai mici, versiunile Chrome sub 37 etc.).

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

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 inserat automat în linia de comandă numai atunci când aplicația este lansată 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 toate „i-urile”, observăm că, începând cu ediția 8.3.9, proprietatea de configurare „Modul de utilizare a apelurilor sincrone ale extensiilor platformei și componentelor externe” este ignorată în clientul gros, în timp ce metodele sincrone corespunzătoare funcționează fără generare. excepții și afișarea avertismentelor. Proprietatea ignorată specificată a fost adăugată în versiunea 8.3.5 pentru a sprijini lucrul asincron cu componente externe, criptografia și extensiile pentru lucrul cu fișierele din browserul web Google Chrome. Este clar că acest lucru nu are nimic de-a face cu clientul gros și, prin urmare, ignorarea „liniștită” a acestei proprietăți a eliminat pur și simplu verificările inutile pentru utilizarea metodelor sincrone atunci când se folosește configurația.

Apropo! Datorită faptului că platforma se îndreaptă cu încredere spre web, cu versiunea 8.3.8 dezvoltatorii au introdus anumite restricții asupra codului programului care este asociat cu logica de închidere a unui formular sau a unei aplicații, executată în clienți gros și subțiri. 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ă folosim mai multe dialoguri în timpul procesului de dezvoltare. Prin urmare, în procesul de dezvoltare a soluțiilor de aplicație axate pe lucrul î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 altor abordări de organizare a interacțiunii utilizatorului.

Î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ă, au apărut o mulțime de noi funcționalități și schimbări importante. 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

Introducerea noii interfețe a platformei 1C 8.3 – „taxi” – a dus la faptul că utilizatorii și programatorii s-au confruntat cu următoarea eroare: „Utilizarea ferestrelor modale în acest mod este interzisă”.
Orez. 1

Dezvoltatorii platformei tehnologice 1C se străduiesc să urmeze tendințele globale, aducând software-ul în conformitate cu standardele internaționale. Acesta din urmă duce inevitabil la o singură interfață, apropiată de paginile web.

Ferestrele modale și pop-up, fiind un semn de prost gust, au fost mult timp considerate inacceptabile în dezvoltarea de software. Necesitatea de a lucra „într-o fereastră” este ferm înrădăcinată în mintea utilizatorilor.

Dezvoltatorii platformei 1C au făcut o încercare de a implica dezvoltatorii de soluții de aplicații în lucrul într-un „mod nou”. Odată cu introducerea noii interfețe „taxi”, au adăugat o nouă caracteristică noii platforme – „modality mode”.

Soluție rapidă

În lipsa timpului, dacă trebuie să rezolvați rapid problema, puteți recurge la o soluție destul de simplă, dar nu foarte corectă - trebuie doar să schimbați modul de modalitate în proprietățile de configurare.

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

După aceea, făcând clic dreapta pe rădăcina de configurare, deschideți meniul contextual și selectați „Proprietăți”:


Orez. 3

În proprietățile de configurare care se deschid, în file, găsiți „Modality usage mode”, selectați „Utilizare” în el:


Orez. 4

Salvați și aplicați modificările apăsând tasta „F7”.