Internet Windows Android

Cum se elimină ferestrele modale în 1s. De ce apare eroarea „Utilizarea ferestrelor modale este interzisă în acest mod”? Remediere rapidă a problemei

14
Pentru a forța o întreprindere să pornească într-o aplicație normală sau gestionată, sunt utilizate următoarele chei: / RunModeOrdinaryApplication pornește clientul gros în modul normal, în ciuda setărilor de configurare și ... 3
Este necesar ca utilizatorii să nu poată schimba interfața configurată pentru ei! Soluție: Pentru a o dezactiva, trebuie să eliminați „Salvare date utilizator” chiar în drepturile de acces ale elementului de configurare rădăcină. ... 2
În lucrarea curentă, utilizatorul deschide de obicei mai multe obiecte. Poate fi un document, o carte de referință, un raport etc. În interfața anterioară, nu au existat probleme în găsirea rapidă a unui obiect deschis și actualizarea acestuia pentru ... 2
În ultimul articol: Instalarea unui clasificator de adrese (KLADR) în 1C, v-am spus ce este Kladr și cum să îl încărcați în formulare regulate 1C (8.0-8.2). În acest articol vă voi arăta cum să încărcați clasificatorul de adrese (KLADR) în ... 2
Adesea, atunci când dezvoltă o anumită configurație, utilizatorii doresc să atașeze fotografii la un element din director și astfel încât să fie stocate în baza de date. În acest articol vă voi spune cum să conectați obiecte de construcție la cartea de referință ...

Introducerea unei noi interfețe a platformei 1C 8.3 - „taxi” - a condus la faptul că utilizatorii și programatorii au întâmpinat o eroare cu următorul conținut: ferestre modale v acest mod interzis".
Orez. 1

Dezvoltatorii platformei tehnologice 1C se străduiesc să reușească în tendințele globale aducând softwareîn conformitate cu standardele internaționale. Acesta din urmă va conduce inevitabil la o interfață unificată aproape de paginile web.

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

Dezvoltatorii platformei 1C au încercat să introducă dezvoltatorii de soluții aplicate pentru a lucra într-un „mod nou”. Odată cu introducerea noii interfețe taxi, acestea au completat noua platformă funcție nouă- „modul de utilizare a modalității”.

Remediere rapidă a problemei

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

În acest scop, accesați sistemul în modul configurator, deschideți configurația:

După aceea, faceți clic dreapta pe rădăcina de configurare pentru a deschide meniul contextual, selectați „Proprietăți”:


Orez. 3

În proprietățile de configurare deschise în file găsiți „Modul de utilizare a modalității”, selectați „Utilizați”:


Orez. 4

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

Implementat în versiunea 8.3.3.641.

1C: Enterprise folosește ferestre modale în situațiile în care utilizatorul este obligat să introducă informații, fără de care este imposibilă executarea suplimentară a algoritmului. În acest caz, întregul rest al interfeței programului este complet blocat, iar executarea codului programului se oprește până când utilizatorul închide fereastra modală.

Odată cu apariția clientului web și tranziția 1C: Enterprise la platforme mobile, modurile s-au dovedit a fi sursa un numar mare inconveniente și probleme, adesea de nerezolvat.

De regulă, browserele „desktop” sunt mai bune sau mai rele, dar acceptă ferestre modale și le deschid într-o fereastră nouă a browserului ca „fereastră pop-up”:

Dar, datorită faptului că tehnologia pop-up este utilizată pe scară largă pe internet pentru publicitate, ferestrele pop-up sunt dezactivate în mod implicit în aproape toate browserele. În majoritatea covârșitoare a cazurilor, fără a modifica această setare a browserului, funcționarea clientului web devine imposibilă.

O altă problemă este că browsere mobile nu acceptă modurile deloc. Și pentru ca 1C: Enterprise să poată funcționa în ele, un client special a fost implementat în clientul web. Acesta este un mecanism destul de complicat și, din păcate, nu acoperă toate situațiile necesare. Ca urmare, configurațiile de pe un iPad, de exemplu, sunt dificil de lucrat.

Într-o astfel de situație, opțiunea 1C: Operațiunea interfeței Enterprise fără a utiliza ferestre modale elimină toate problemele enumerate mai sus.

Acest lucru nu abandonează funcționalitatea oferită anterior de ferestrele modale. Dar această funcționalitate este implementată de alte tehnologii care nu interferează cu funcționarea 1C: Enterprise în browsere.

În noul mod de interfață, fereastra, care ar fi fost modală anterior, este desenată în fereastra părinte și, în același mod, blochează restul interfeței clientului web:

Ca urmare:

  • nu sunt deschise noi ferestre de browser, ceea ce îmbunătățește performanța și stabilitatea clientului web;
  • În multe cazuri personalizare suplimentară browserul devine inutil, deoarece 1C: Enterprise nu mai folosește ferestre pop-up;
  • orice configurație care utilizează clientul web poate funcționa pe iPad și alte dispozitive mobile.

În mod firesc, minunile nu se întâmplă, iar noul mod de funcționare nu poate fi pornit cu un „val de baghetă magică”. Este necesar să se schimbe logica de lucru cu ferestre noi de blocare. Vestea bună este că aceste modificări nu sunt dificile și este posibil să se controleze toate părțile „suspecte” ale programului. Platforma implementează un mecanism special care permite în etapa de dezvoltare să verifice dacă întreaga configurație utilizează mecanisme noi și va funcționa fără ferestre modale.

Necesitatea de a schimba logica de lucru cu astfel de ferestre se datorează faptului că noul mod de operare a interfeței oferă modalitate doar pentru utilizator. Cu toate acestea, pentru dezvoltator, în momentul în care este afișată fereastra de blocare, executarea codului programului nu se oprește.

Aceasta înseamnă că algoritmul, care a fost un întreg, acum trebuie împărțit în două părți. Una, care se încheie cu deschiderea unei ferestre de blocare, și a doua, care va fi executată atunci când utilizatorul închide această fereastră. Pentru ca sistemul să știe unde să continue executarea codului programului, numele procedurii care trebuie executată atunci când utilizatorul închide această fereastră este trecut la fereastra de blocare.

Esența acestor schimbări este cel mai ușor de văzut cu un exemplu. O procedură veche care deschidea o fereastră modală și prelucra datele primite ar putea arăta astfel:

În noua versiune pentru formular Intrare FormText (care se va deschide într-o fereastră de blocare) trebuie să setați proprietatea Modul WindowOpen În valoare BlockAllInterface ... Aceasta va oferi modalitate utilizatorului:

Și codul programului în loc de o singură procedură, ca și până acum, va conține deja două proceduri:

În prima procedură, deschidem formularul. În acest caz, în ultimul parametru, îi trecem locația celei de-a doua proceduri, care va fi executată după ce utilizatorul închide fereastra. În acest caz, această procedură este localizată în același modul, dar, în general, poate fi localizată în altul.

Când utilizatorul introduce date și închide formularul, acestea vor fi procesate în a doua procedură pe care am specificat-o, în care am transferat pur și simplu codul „vechi” care procesează datele primite.

În plus față de formularele pe care un dezvoltator le poate deschide în modul modal (după bunul plac), există metode de limbaj încorporate care deschid întotdeauna, indiferent de dorințele dezvoltatorului, forme modale pentru introducerea sau selectarea datelor. De exemplu, metoda Introduceți valoarea () .

Este și mai ușor să folosiți astfel de metode în modul non-modal. Pentru toate aceste metode, platforma a realizat metode duplicat, atunci când le apelați, trebuie să indicați și locația procedurii care va fi executată după ce utilizatorul închide fereastra.

De exemplu, mai jos arată utilizarea vechii metode Introduceți valoarea () și noua sa metodă de rezervă ShowEnterValues ​​() :

Trebuie să spun că, pe lângă cazurile enumerate, unele mecanisme ale platformei folosesc și ferestre modale pentru a interacționa cu utilizatorul. Și acest lucru nu depinde în niciun fel de acțiunile dezvoltatorului.

Prin urmare, toate aceste dialoguri de sistem ale platformei sunt, de asemenea, transferate într-o versiune non-modală a lucrării.

Este planificată abandonarea treptată a utilizării ferestrelor modale în soluțiile aplicate. Prin urmare, pentru compatibilitatea cu soluțiile aplicate scrise anterior, platforma își păstrează capacitatea de a lucra în versiunea veche a interfeței, utilizând ferestre modale.

Î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ă”. Aceasta oprește executarea codului programului.

Acest articol prezintă mecanismul pentru schimbarea codului programului, utilizând exemplul unei întrebări adresate utilizatorului, atunci când modul modal este dezactivat.

Din când în când, atunci când dezvoltați un produs software, este necesar să întrebați utilizatorul despre acțiunile care trebuie efectuate. De exemplu, cu umplere automată secțiuni tabulare... 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 său, prim-ministrul va fi curățat și reumplut sau nu.

Partea codului cu întrebarea ar putea arăta cam așa:

Dacă PM. Cantitate()< >0 Apoi Răspunde = Întrebare (" // Această linie va afișa o fereastră modală cu o întrebare și executarea codului se va opri până când utilizatorul răspunde Dacă Răspuns = DialogReturnCode. Nu, atunci rambursare; EndIf; // Utilizatorul a fost de acord să continue P.M. Clar (); EndIf; // Luați măsuri suplimentare // Programul va ajunge aici dacă PM a fost gol sau dacă utilizatorul a răspuns pozitiv la întrebarea despre supraumplere Efectuarea de acțiuni ulterioare ();

Dacă modul modal este dezactivat, va apărea o eroare în linia cu întrebarea acestui cod și executarea ulterioară va fi întreruptă. Acest lucru se datorează faptului că funcția Întrebare utilizează o fereastră modală.

În această situație, trebuie să utilizați procedura ShowQuestion. Atunci când se utilizează această procedură, utilizatorul nu este de așteptat să finalizeze un răspuns. Cu toate acestea, primul parametru al acestei proceduri este descrierea alertei care urmărește răspunsul utilizatorului.

Cum se va modifica codul scris anterior:

// Este necesar să completați PM cu date // Verificați PM pentru plenitudine Dacă PM. Cantitate()< >0 Atunci // PM nu este gol, trebuie să întrebați utilizatorul despre depășire ShowQuestion (New DescriptionAlert (" OverflowPTC complete", ThisObject, AdditionalParameters)," PM va fi supraumplut. Continua ?", Dialogue ModeQuestion. Da Nu); // Această linie va afișa o fereastră cu o întrebare, dar executarea codului nu se va opri In caz contrar // Programul va ajunge aici dacă PM a fost gol PerformFogetherActions (); EndIf; // Programul va ajunge aici în orice caz, indiferent dacă PM a fost gol sau nu // (cu excepția cazului în care, desigur, nu a existat nicio eroare în codul anterior) . . . // Procedura de export în același modul // Apelat după ce utilizatorul răspunde la întrebare& OnClient Procedure Overflow POFCompletion (ResponseResult, AdditionalParameters) Export dacă ResponseResult = DialogReturnCode. Nu atunci // Utilizatorul a refuzat să continueÎntoarcere ; EndIf; // Efectuați acțiuni suplimentare // Programul va ajunge aici dacă PM nu a fost gol și utilizatorul a răspuns pozitiv la întrebarea despre supraumplere P.M. Clar (); PerformFogetherActions (); Sfârșitul procedurii

Astfel, deoarece programul nu se va opri când se execută procedura ShowQuestion, toate evenimentele trebuie tratate cu atenție
La rezolvarea acestei probleme, executarea de acțiuni ulterioare poate avea loc în două evenimente:
1. Dacă PM era gol
2. Dacă PM nu a fost gol și utilizatorul a răspuns pozitiv la întrebarea de depășire

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

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

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

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

Ferestrele modale și ferestrele pop-up sunt considerate de 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ă”.

Mai ales de multe ori vedem o eroare de modalitate în urmând metode 1C:

  • Întrebare;
  • Un avertisment;
  • OpenValue.

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

Remediere rapidă a problemei

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

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

În configurația deschisă, apelați meniul contextual făcând clic dreapta pe rădăcina de configurare și selectând „Proprietăți”:

Obțineți gratuit 267 tutoriale video 1C:

Proprietățile de configurare se vor deschide, unde în subsol există o proprietate care ne interesează - „Mod de utilizare a modalității”, selectați modul „Utilizare”:

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 de a modifica configurația sau prelucrare externă pentru cerințe noi.

Avertisment, întrebare, casete de dialogși alte moduri - toate acestea trebuie rescrise într-un mod nou.

Operatorii încorporați care numesc modale trebuie înlocuiți cu funcții duplicate.

De exemplu:

  • Avertisment - Afișați avertisment;
  • Întrebare - Afișați întrebarea (în detaliu -);
  • - Afișați numerele de intrare.

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

Exemplu de înlocuire:

String = ""; EnterString (String, „Introduceți valoarea șirului”) Raport („Ai introdus” + Șir);

Trebuie înlocuit cu:

String = ""; Alert Description = Descriere Alertă nouă ( „TestInputString”, Acest formular); ShowInputString (Alert Description, String, „Introduceți valoarea șirului”) ;

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

& OnClient Procedură TestInputString (ReceivedValue, PassedParameters) Raport de export („ai introdus” + Șir); Sfârșitul procedurii

Formularele care sunt dezvoltate în interiorul configurației se deschid în același mod. Este suficient să înlocuiți metoda „OpenFormModal” cu „OpenForm”, specificând descrierea notificării și noua procedură necesară pentru aceasta.

Pentru a închide accesul la formularul apelat prin formularul de deschidere, este suficient să specificați în proprietatea „WindowOpening Mode” valoarea „Lock window window” în proprietatea formularului: