1c odklon od modality. Čo robiť, ak je „používanie modálnych okien v tomto režime zakázané“

Zavedenie nového rozhrania platformy 1C 8.3 - "taxi" - viedlo k tomu, že používatelia a programátori čelili nasledujúcej chybe: "Používanie modálnych okien v tomto režime je zakázané."
Ryža. 1

Vývojári technologickej platformy 1C sa snažia sledovať globálne trendy tým, že softvér prispôsobujú medzinárodným štandardom. Ten nevyhnutne vedie k jedinému rozhraniu v blízkosti webových stránok.

Modálne a vyskakovacie okná, ktoré sú znakom nevkusu, sa pri vývoji softvéru dlho považovali za neprijateľné. Potreba pracovať „v jednom okne“ je pevne zakorenená v mysliach používateľov.

Vývojári platformy 1C sa pokúsili zapojiť vývojárov aplikačných riešení do práce „novým spôsobom“. S predstavením nového rozhrania „taxi“ pridali na novú platformu novú funkciu – „režim využívajúci modalitu“.

Rýchla oprava

V prípade nedostatku času, ak potrebujete rýchlo vyriešiť problém, môžete sa uchýliť k pomerne jednoduchému, ale nie veľmi správnemu riešeniu - stačí zmeniť režim modality vo vlastnostiach konfigurácie.

Ak to chcete urobiť, prihláste sa do systému v režime konfigurátora a otvorte konfiguráciu:

Potom kliknutím pravým tlačidlom myši na koreňový adresár konfigurácie otvorte kontextovú ponuku a vyberte položku „Vlastnosti“:


Ryža. 3

Vo vlastnostiach konfigurácie, ktoré sa otvoria, na kartách nájdite „Režim použitia modality“ a vyberte „Použiť“:


Ryža. 4

Uložte a použite svoje zmeny stlačením klávesu "F7".

Implementované vo verzii 8.3.3.641.

1C:Enterprise používa modálne okná v situáciách, keď sa od používateľa vyžaduje zadanie informácií, bez ktorých nie je možné vykonať ďalší algoritmus. V tomto prípade je celý zvyšok programového rozhrania úplne zablokovaný a vykonávanie programového kódu sa zastaví, kým používateľ nezatvorí modálne okno.

S príchodom webového klienta a prechodom 1C:Enterprise na mobilné platformy sa modálne okná ukázali ako zdroj veľkého množstva nepríjemností a problémov, často neriešiteľných.

„Desktop“ prehliadače, lepšie alebo horšie, spravidla podporujú modálne okná a otvárajú ich v novom okne prehliadača ako „vyskakovacie okno“:

Ale vzhľadom na skutočnosť, že technológia vyskakovacích okien sa na internete vo veľkom využíva na reklamu, takmer všetky prehliadače majú automaticky otvárané okná v predvolenom nastavení vypnuté. V drvivej väčšine prípadov bez zmeny tohto nastavenia prehliadača webový klient nebude fungovať.

Ďalším problémom je, že mobilné prehliadače vôbec nepodporujú modálne okná. A aby v nich 1C:Enterprise mohol fungovať, bol do webového klienta implementovaný špeciálny mechanizmus. Ide o pomerne zložitý mechanizmus a, žiaľ, nepokrýva všetky potrebné situácie. V dôsledku toho sa konfigurácie napríklad na iPadoch ťažko udržiavajú.

V takejto situácii možnosť prevádzky rozhrania 1C:Enterprise bez použitia modálnych okien eliminuje všetky vyššie uvedené problémy.

Zároveň nedochádza k opusteniu funkčnosti, ktorú predtým poskytovali modálne okná. Táto funkcia je však implementovaná inými technológiami, ktoré nezasahujú do prevádzky 1C: Enterprise v prehliadačoch.

V novom režime fungovania rozhrania sa okno, ktoré by predtým bolo modálne, nakreslí v nadradenom okne a rovnakým spôsobom blokuje zvyšok rozhrania webového klienta:

Ako výsledok:

  • neotvárajú sa žiadne nové okná prehliadača, čo zlepšuje výkon a stabilitu webového klienta;
  • v mnohých prípadoch sú ďalšie nastavenia prehliadača zbytočné, pretože 1C:Enterprise už nepoužíva kontextové okná;
  • akákoľvek konfigurácia pomocou webového klienta môže fungovať na iPade a iných mobilných zariadeniach.

Prirodzene, zázraky sa nedejú a nový prevádzkový režim nie je možné aktivovať „maním čarovného prútika“. Vyžaduje sa zmena logiky práce s novými, blokujúcimi oknami. Dobrou správou však je, že tieto zmeny nie sú náročné a je možné sledovať všetky „podozrivé“ miesta v programe. Platforma implementuje špeciálny mechanizmus, ktorý vám umožňuje vo fáze vývoja skontrolovať, či celá konfigurácia používa nové mechanizmy a bude fungovať bez modálnych okien.

Potreba zmeniť logiku práce s takýmito oknami je spôsobená skutočnosťou, že nový režim prevádzky rozhrania poskytuje modalitu iba pre používateľa. Pre vývojára sa však vykonávanie programového kódu nezastaví, keď sa zobrazí blokovacie okno.

To znamená, že algoritmus, ktorý bol predtým jedným celkom, bude teraz musieť byť rozdelený na dve časti. Jeden, ktorý končí otvorením blokovacieho okna, a druhý, ktorý sa vykoná, keď používateľ toto okno zavrie. Aby systém vedel, kde má pokračovať vo vykonávaní programového kódu, blokovaciemu oknu sa priradí názov procedúry, ktorá sa má vykonať, keď používateľ toto okno zavrie.

Podstatu týchto zmien je najjednoduchšie vidieť na príklade. Stará procedúra, ktorá otvorila modálne okno a spracovala prijaté údaje, môže vyzerať takto:

V novej verzii pre formulár FormTextInput (ktoré sa otvorí v blokovacom okne) musíte nastaviť vlastnosť Režim otvárania okna vo význame BlockAllInterface . Používateľovi to poskytne modalitu:

A kód programu namiesto jedného postupu, ako predtým, bude obsahovať dva postupy:

V prvom postupe otvorte formulár. V tomto prípade mu v poslednom parametri odovzdáme umiestnenie druhej procedúry, ktorá sa vykoná po zatvorení okna používateľom. V tomto prípade sa tento postup nachádza v rovnakom module, ale vo všeobecnosti môže byť umiestnený v inom module.

Keď používateľ zadá údaje a zatvorí formulár, spracuje sa v druhom nami špecifikovanom postupe, do ktorého sme jednoducho preniesli „starý“ kód, ktorý spracováva prijaté údaje.

Okrem formulárov, ktoré môže vývojár otvárať v modálnom režime (podľa ľubovôle), existujú vstavané jazykové metódy, ktoré vždy, bez ohľadu na želanie vývojára, otvárajú modálne formuláre na zadávanie alebo výber údajov. Napríklad metóda EnterValue() .

Použitie takýchto metód v nemodálnom režime je ešte jednoduchšie. Pre všetky takéto metódy má platforma duplicitné metódy, pri ich volaní musíte uviesť aj umiestnenie procedúry, ktorá sa vykoná po zatvorení okna používateľom.

Napríklad nižšie je znázornené použitie starej metódy EnterValue() a jeho nový spôsob zálohovania ShowInputValue() :

Treba povedať, že okrem vymenovaných prípadov niektoré mechanizmy platformy využívajú na interakciu s používateľom aj modálne okná. A to už nezávisí od konania vývojára.

Preto boli všetky takéto systémové dialógy platformy tiež prevedené do nemodálneho režimu prevádzky.

Plánuje sa postupné ukončenie používania modálnych okien v aplikačných riešeniach. Z dôvodu kompatibility s aplikačnými riešeniami napísanými skôr si platforma zachováva schopnosť pracovať v starej verzii rozhrania pomocou modálnych okien.

Ak sa pri dokončovaní lekcií stretnete s takouto chybou, je veľmi jednoduché ju opraviť.

Vráťte sa do konfigurátora a vyberte položku ponuky „Konfigurácia“ -> „Otvoriť konfiguráciu“:

V okne, ktoré sa otvorí, kliknite pravým tlačidlom myši na položku „Konfigurácia“ a z ponuky, ktorá sa otvorí, vyberte položku „Vlastnosti“:

Otvorí sa okno s konfiguračnými vlastnosťami (vpravo):

Prejdite úplne dole a nájdite tam položku „Režim modality“:

Nastavte jeho hodnotu na "použiť":

Pozor! Upozorňujeme, že ak používate platformu 1C odlišnú od tej, ktorú sme si stiahli v prvej lekcii (neskoršia verzia), budete mať k dispozícii aj pole „Režim používania synchrónnych hovorov...“. Tiež je potrebné nastaviť na "Použiť".

Nakoniec vyberte položku ponuky „Konfigurácia“ -> „Uložiť konfiguráciu“:

Pripravený! Teraz sa chyba už nebude vyskytovať.

Vysvetlivky nižšie - pre tých, ktorých zaujíma, čo sme urobili.

V našej konfigurácii sme povolili režim modality. V predvolenom nastavení je tento režim zakázaný a to nám neumožňuje používať príkazy ako EnterNumber, EnterString, EnterDate, OpenValue.

Faktom je, že tieto príkazy sú modálne. Ich vyvolaním sa pred používateľom objaví okno (napríklad na zadávanie informácií), ktoré blokuje možnosť práce s programom až do zatvorenia okna.

A keďže prítomnosť takýchto okien je pri práci s 1C prostredníctvom webového prehliadača mimoriadne nežiaduca, pri vývoji nových konfigurácií je režim modality štandardne vypnutý.

Pokojne to môžeme zaradiť, keďže píšeme vzdelávacie príklady, ktoré nie sú určené na prácu na internete.

Vo vlastnostiach konfigurácie na platforme 1C:Enterprise 8.3 je režim pre použitie modality. Ak je hodnota tohto poľa "Nepoužívať", potom pri pokuse o otvorenie modálneho okna platforma zobrazí správu "Používanie modálnych okien v tomto režime je zakázané." V tomto prípade sa vykonávanie programového kódu zastaví.

Tento článok ukazuje mechanizmus zmeny programového kódu pomocou príkladu otázky používateľovi, keď je modálny režim zakázaný.

Pri vývoji softvérového produktu je z času na čas potrebné spýtať sa používateľa na vykonávané akcie. Napríklad pri automatickom vypĺňaní tabuľkových častí. Keď je pred doplnením PM potrebné opýtať sa užívateľa na potrebu tak urobiť. A v závislosti od jeho odpovede bude PM vymazaný a znovu naplnený alebo nie.

Časť kódu s otázkami môže vyzerať asi takto:

Ak PM. množstvo ()< >0 Potom odpoveď = otázka(" // Tento riadok zobrazí modálne okno s otázkou a vykonávanie kódu sa zastaví, kým používateľ neodpovie Ak odpoveď = DialogReturnCode. Nie Potom sa vráťte; Koniec Ak ; // Používateľ súhlasí s pokračovaním POPOLUDNIE. Jasný() ; Koniec Ak ; // Vykonajte ďalšie akcie // Program sem prejde, ak bol PM prázdny alebo používateľ odpovedal kladne na otázku o doplnení Vykonajte ďalšie akcie () ;

Keď je modálny režim zakázaný, v riadku otázok tohto kódu sa vyskytne chyba a ďalšie vykonávanie sa preruší. Stane sa to preto, že funkcia Otázka používa modálne okno.

V tejto situácii musíte použiť procedúru ShowQuestion. Tento postup nečaká na dokončenie odpovede používateľa. Ale prvým parametrom tohto postupu je popis upozornenia, ktorý slúži na sledovanie odozvy používateľa.

Ako sa zmení predtým napísaný kód:

// Je potrebné vyplniť údaje PM // Kontrola úplnosti PM Ak PM. množstvo ()< >0 Potom // PM nie je prázdna, musíte sa spýtať užívateľa na doplnenie ShowQuestion(New DescriptionAlerts(" Doplňte TCompletion" , ThisObject, AdditionalParameters) ," PM sa doplní. Ďalej ?", Dialógový režimOtázka. ÁnoNie) ; // Tento riadok zobrazí okno s otázkou, ale kód sa nezastaví Inak // Program pôjde sem, ak bude PM prázdny Vykonať ďalšie akcie() ; Koniec Ak ; // Program sa sem dostane v každom prípade, či už bol PM prázdny alebo nie // (pokiaľ, samozrejme, nebola chyba v predchádzajúcom kóde) . . . // Procedúra exportu v rovnakom module // Volané po tom, ako používateľ odpovie na otázku& Na klientskej procedúre Doplnenie TCCompletion (výsledok odpovede, dodatočné parametre) Exportujte, ak výsledok odpovede = návratový kód dialógu. Nie Potom // Používateľ odmietol pokračovať Návrat ; Koniec Ak ; // Vykonajte ďalšie akcie // Program prejde sem, ak PM nebol prázdny a používateľ odpovedal kladne na otázku o doplnení POPOLUDNIE. Jasný() ; Vykonať ďalšie akcie() ; Koniec procedúry

Keďže sa program nezastaví po vykonaní procedúry ShowQuestion, je potrebné starostlivo spracovať všetky udalosti
Pri riešení tohto problému môžu nastať ďalšie akcie, keď nastanú dve udalosti:
1. Ak bol PM prázdny
2. Ak PM nebol prázdny a používateľ odpovedal na otázku kladne, doplňte ho

A keďže program neprestáva čakať na odpoveď používateľa, volanie týchto udalostí musí byť distribuované v rôznych častiach kódu.
Preto sa spravidla všetky spustiteľné metódy, ktoré je potrebné vykonať po kontrole úplnosti PM, umiestnia do samostatného postupu.

Podobný mechanizmus sa používa pre podobné funkcie interakcie používateľa (SelectValue, SelectFromList atď.)

Pomocník syntaxe pre tieto príkazy uvádza, že ak vlastnosť konfigurácie Spôsob použitiaModality nainštalovaný v Nepoužívať, potom by ste mali vo svojom programovom kóde použiť ďalšie príkazy, ako napr ShowQuestion(), ShowWarning(), ShowNumberInput():

Na prácu s týmito situáciami poskytuje program 1C 8.3 nový systémový objekt „Description of Alerts“, ktorý sa používa na popis volania procedúry programového modulu, keď nastane akákoľvek očakávaná udalosť, ako je zatvorenie formulára alebo nemodálne dialógové okno. :

Toto je vnútorný pohľad na problém pre tých, ktorí sa chcú dostať k hlavnej príčine. V prvom rade pre 1C programátorov. Ako môžu v tejto situácii bežní používatelia opraviť chybu bez práce na kóde programu? Existuje veľmi jednoduchá metóda.

Pokyny na opravu chyby pre bežných používateľov

Krok 1: Dokončiť:

Krok 2. Vráťte sa do ponuky Štart a spustite konfiguráciu. Vyberte položku ponuky „Konfigurácia“:

Krok 3. Otvorte „Konfigurátor“: na hornom paneli nájdeme tlačidlo „Konfigurácia“ av navrhovanom zozname vyberte ponuku „Otvoriť konfiguráciu“:

Krok 4. Umiestnite kurzor na Konfigurácia a kliknutím pravým tlačidlom myši vyvolajte kontextové menu, v ktorom vyberieme položku „Vlastnosti“:

Krok 5. Otvorte formulár „Vlastnosti“:

Krok 6. Nájdite riadok „Režim používania modality“ (v spodnej časti zoznamu):

Štandardne je v programe 1C 8.3 hodnota „Nepoužívať“. Preveďte hodnotu „Nepoužívať“ na hodnotu „Použiť“:

výsledok:

Ak chyba „Používanie modálnych okien v tomto režime je zakázané“ v 1C 8.3 zmizla, môžete pokračovať v práci. To sa zvyčajne stáva.

Ak však chyba modality v 1C zostane aj po vykonaní všetkých týchto krokov, mali by ste kontaktovať programátorov, ktorí obsluhujú a podporujú váš program 1C.

Ako pracovať v rozhraní „Taxi“, ako si prispôsobiť pracovisko, prispôsobiť si navigačnú lištu Obľúbené, ako vykonávať fulltextové vyhľadávanie, techniky práce s protokolmi, tlačidlo „vybrať“ v dokumentoch, posielanie odkazov na dokumenty, overovanie a ďalšie funkcie v novom rozhraní – to všetko sa dozviete z nášho videa:

Viac podrobností o tom, ako správne a rýchlo organizovať navigáciu v programe 1C 8.3 pomocou nového rozhrania TAXI, o nových príležitostiach pri používaní známych nástrojov, ako je vstavaná kalkulačka, kalendár, porovnávanie súborov, prenos odkazov na dokumenty kolegom, sú uvedené v náš kurz „“


Ohodnoťte prosím tento článok: