A modális ablakok használata ebben a módban tilos. Miért jelenik meg a „Modális ablakok használata ebben a módban tilos” hibaüzenet? Útmutató a hiba kijavításához hétköznapi felhasználók számára

Az 1C platform 8.3-as verziójában egy új programműködési mód jelent meg - modalitás nélkül. Pontosabban 2 új mód jelent meg: modalitás nélkül és modalitás használatával, de figyelmeztetéssel. A régi működési mód pedig a modalitást használja.

Mit jelent ez az egész? A platform korai verzióiban különféle modális ablakokat használtunk, és nem sokat gondolkodtunk rajta. Például figyelmeztetést kell megjelenítenie a felhasználónak, vagy fel kell tennie egy kérdést, vagy be kell írnia valamilyen értéket, vagy ki kell választania egy fájlt. Ezek mind modális ablakok.

Mit jelent a modális ? Ez azt jelenti, hogy az ablak meghívásakor átfedi az összes többi ablakot, azaz a legfelül jelenik meg, és blokkolja a többi ablakkal való munkát, amíg ezzel az ablakkal be nem fejeződik. Az ablakok blokkolása mellett a kódvégrehajtás pontosan azon a ponton áll le, ahol ezt az ablakot hívják, és a kódvégrehajtás csak az ablak bezárása után folytatódik. Onnan, ahol a végrehajtás leállt. A modális ablak hívását az időszakválasztó űrlap meghívásának példáján fogom bemutatni:

&OnClient

StandardProcessing = False;




If Dialog.Edit() Then //A modális űrlap meghívása. A kód végrehajtása csak az űrlap bezárása után folytatódik.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialog.Period.EndDate;
endIf;

Az eljárás vége


Amint látjuk, egy eljárás elegendő a periódusválasztó modális ablak hívásának feldolgozásához.

Miért rosszak a modális ablakok? Most nézzük meg, miért döntött úgy az 1C, hogy felhagy a modális ablakok használatával. Nos, ez elsősorban annak a következménye, hogy az 1C platform nem csak a megszokott formában - asztali alkalmazásként - használható, hanem böngészőben is elindítható, illetve mobilalkalmazásként is elindítható.

A böngészők problémája a következő. A bennük lévő ablakmódot felugró különálló böngészőablakok segítségével valósítják meg. Szinte minden böngésző támogatja őket, de az ilyen ablakok hirdetési célú gyakori használata miatt szinte minden böngészőfejlesztő küzd velük, és alapértelmezés szerint letiltja az ilyen ablakok használatát. Ennek eredményeként annak biztosítása érdekében, hogy az 1C felhasználó dolgozhasson a böngészőben, rá kell kényszeríteni, hogy engedélyezze ezeket az ablakokat, szentelje őt az 1C és a böngészők munkájának minden bonyodalmának, és általában túlterhelje őt feleslegesen. információ.

Külön árnyalat a táblagépekhez és a telefonokhoz való böngészőkkel. A legtöbb esetben ezek a böngészők nem támogatják az előugró ablakokat. Az ilyen felugró ablakokkal rendelkező eszközök interfészei (monitorok és beviteli eszközök) nem kompatibilisek.

És végül, az 1C mobilalkalmazás sem teljesen barátságos a modális ablakokkal.

Innen a következtetés: Ne használjon modális ablakokat. Mit használjak helyette? Ehelyett ugyanazokat az ablakokat kell használnia, de a modalitás mód nélkül. Az új 1C platformon minden ablakhoz kifejlesztettünk egy ilyen módot. Minden párbeszédpanelhez külön módszerként valósul meg. Ez a mód lehetővé teszi egy ablak megnyitását, de nem állítja le a programkód végrehajtását. Technikailag a böngészők ezt pszeudo ablakként valósítják meg, amely a szülőablakon belül jelenik meg, de átfedi azt. Az a tény, hogy a kód végrehajtása az ablak megnyitása után is folytatódik, azt jelenti, hogy az ablakhívási kód után nem tudja azonnal megkapni a benne kiválasztott értékeket. Még nem választották ki őket. Ezért ezeknek az értékeknek a megszerzése és feldolgozása külön eljárásban történik, amelyet egy ilyen ablak bezárásakor hívnak meg, és ezt az eljárást az ablaknyitási módszer meghívásakor kell megadni. Példaként nézzük meg ugyanezt az időszakválasztó ablakot.

&OnClient
Service ProcedureStartDateStartSelection (Elem, SelectionData, Standard Processing)

StandardProcessing = False;

Dialog = NewEditingDialogStandardPeriod();
StandardPeriod = Új StandardPeriod();

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

StandardPeriod.StartDate = KezdőDátum;
StandardPeriod.EndDate = EndDate;
Dialog.Period = StandardPeriod;

Alert Description = Új figyelmeztetés leírása("Időszakkiválasztás feldolgozása", ThisForm);

Dialog.Show (Leírásfigyelmeztetések)

Az eljárás vége

&OnClient
ProcedurePeriodSelection Processing (Period,Parameters) Exportálás

Ha időszak<>Undefined Akkor

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

endIf;

Az eljárás vége


Amint látjuk, az Edit() helyett a Show() függvény kerül meghívásra. A kiválasztási esemény feldolgozása pedig már egy másik eljárásban van.

Tehát kitaláltuk, hogyan tegyünk modalitás nélkül. Most nézzük meg, miért van szükségünk a figyelmeztetéssel ellátott modalitás használatának módjára. Lényegében ez egy átmeneti rendszer. Amikor még nem sikerült a teljes konfigurációját modalitás nélkül módba konvertálnia, de már erre törekszik. És minden alkalommal, amikor meghív egy modális ablakot, a program figyelmeztetést ad, hogy ebben a módban nem tanácsos modális ablakokat hívni.

Nos, hagyjuk fel a modalitást, és sajátítsuk el az új technológiákat az 1C böngészőkben és mobil számítógépekben történő munkához.

Az 1C:Enterprise 8.3 platform konfigurációs tulajdonságaiban található egy mód a modalitás használatához. Ha ennek a mezőnek az értéke "Do not use", akkor amikor megpróbál megnyitni egy modális ablakot, a platform a "Modális ablakok használata ebben a módban tilos" üzenetet jeleníti meg. Ebben az esetben a programkód végrehajtása leáll.

Ez a cikk bemutatja a programkód megváltoztatásának mechanizmusát a felhasználóhoz intézett kérdés példáján keresztül, amikor a modális mód le van tiltva.

Egy szoftvertermék fejlesztése során időről időre meg kell kérdezni a felhasználót az elvégzett műveletekről. Például táblázatos részek automatikus kitöltésekor. Amikor a PM újratöltése előtt meg kell kérdezni a felhasználót ennek szükségességéről. És a válaszától függően a PM törlődik és feltöltődik vagy sem.

A kód kérdés része valahogy így nézhet ki:

Ha PM. Mennyiség()< >0 Akkor válasz = Kérdés(" // Ebben a sorban megjelenik egy modális ablak egy kérdéssel, és a kód végrehajtása leáll, amíg a felhasználó nem válaszol Ha Answer = DialogReturnCode. Nem, majd vissza; EndIf ; // A felhasználó beleegyezik a folytatásba DÉLUTÁN. Egyértelmű() ; EndIf ; // További műveletek végrehajtása // Ide megy a program, ha a PM üres volt, vagy a felhasználó pozitívan válaszolt az utántöltésre vonatkozó kérdésre További műveletek végrehajtása () ;

Ha a modális mód le van tiltva, hiba lép fel a kód kérdéssorában, és a további végrehajtás megszakad. Ez azért történik, mert a Kérdés függvény modális ablakot használ.

Ebben a helyzetben a ShowQuestion eljárást kell használnia. Ez az eljárás nem várja meg a felhasználó válaszának befejezését. Ennek az eljárásnak az első paramétere azonban a riasztás leírása, amely a felhasználó válaszának nyomon követésére szolgál.

Hogyan fog változni a korábban írt kód:

// A PM adatok kitöltése szükséges // A PM teltségének ellenőrzése Ha PM. Mennyiség()< >0 Akkor // A PM nem üres, az utántöltésről meg kell kérdezni a felhasználót ShowQuestion(New DescriptionAlerts(" Töltse fel a TCompletion-t" , ThisObject, AdditionalParameters) , " A PM újratöltve lesz. Folytatni ?", PárbeszédmódKérdés. IgenNem) ; // Ebben a sorban megjelenik egy kérdésablak, de a kód végrehajtása nem áll le Másképp // Ide fog menni a program, ha a PM üres volt További műveletek végrehajtása() ; EndIf ; // Ide minden esetben eljut a program, akár üres volt a PM, akár nem // (kivéve persze, ha az előző kódban volt hiba) . . . // Exportálási eljárás ugyanabban a modulban // Azután hívják, hogy a felhasználó válaszolt a kérdésre& Az ügyféleljárásról Újratöltés TCCompletion (válasz eredménye, további paraméterek) Exportálás, ha válasz eredménye = Párbeszéd visszatérési kódja. Nem Akkor // A felhasználó megtagadta a folytatást Visszatérés ; EndIf ; // További műveletek végrehajtása // Ide fog menni a program, ha a PM nem volt üres és a felhasználó pozitívan válaszol az újratöltésre vonatkozó kérdésre DÉLUTÁN. Egyértelmű() ; További műveletek végrehajtása() ; Az eljárás vége

Így, mivel a program nem áll le a ShowQuestion eljárás végrehajtásakor, gondosan kell kezelni az összes eseményt
A probléma megoldása során további műveletekre kerülhet sor, ha két esemény történik:
1. Ha a PM üres volt
2. Ha a PM nem volt üres, és a felhasználó pozitívan válaszolt a kérdésre, töltse újra

És ennek megfelelően, mivel a program nem áll le a felhasználó válaszára várva, ezeknek az eseményeknek a meghívását a kód különböző részein kell elosztani.
Ezért általában az összes végrehajtható metódus, amelyet a PM teljességének ellenőrzése után végre kell hajtani, egy külön eljárásba kerül.

Hasonló mechanizmust használnak a hasonló felhasználói interakciós funkciókhoz (SelectValue, SelectFromList stb.)

A cikk megvitatja a modalitás elhagyásának fő okait az 1C:Enterprise platformon, valamint a kódszakaszok új aszinkron modellre konvertálásának fő módszereit.

Alkalmazhatóság

A cikk az üzleti logika felépítésének aszinkron modelljét, a hozzáadott platform „1C:Enterprise” 8.3-as kiadását tárgyalja. A bemutatott információk az aktuális platformkiadásokra vonatkoznak.

A modális ablakok használatának megtagadása az 1C:Enterprise 8.3 platformon

Amikor egy konfigurációt fejlesztünk az 1C:Enterprise 8 platformon, időnként fel kell függeszteni a programot, amíg a felhasználó döntést hoz vagy valamilyen műveletet nem hajt végre.

Például a táblázatos rész kitöltése gombra kattintva meg kell kérdezni a felhasználót, hogy a táblázatos részt törölni kell-e, hogy a korábban megadott adatok ne vesszenek el.

Ez a viselkedés például a következő kóddal érhető el:

&OnClient
Eljárás Töltse ki a Termékeket(csapat)
Válasz = Kérdés ("A táblázat rész törlődik. Folytatás?", Dialógus módKérdés.IgenNem);
Ha Válasz = Dialógus visszatérési kódja.Igen Akkor
//kitöltési algoritmus
EndIf ;
Az eljárás vége

Ennek a kódrészletnek a hatására a programkód végrehajtása felfüggesztésre kerül, egy kérdés jelenik meg a képernyőn, az alkalmazás felülete a kérdéssel való párbeszéd kivételével elérhetetlenné válik, a rendszer megvárja, hogy a felhasználó egy döntést, és a kód végrehajtása csak a kérdés megválaszolása után folytatódik.

A modális ablakok megnyitása az OpenModal() metódus meghívásával szintén szüneteket okoz a kód végrehajtásában és blokkolja a felületet.

Amikor a konfigurációval webkliens módban dolgozik böngészőn keresztül, ebben az esetben egy új ablak nyílik meg - egy felugró ablak, amely nemcsak az aktuális lapot, hanem a teljes böngészőfelületet is blokkolja, beleértve a többi nyitott ablakot és lapokat is.

Az interneten található felugró ablakokat gyakran használják nemkívánatos hirdetések rosszindulatú terjesztésére, ezért a böngészők tartalmaznak pop-up blokkoló funkciókat.

Ebben az esetben az 1C:Enterprise 8 konfigurációkkal való együttműködéshez a böngészőn keresztül ki kell kapcsolnia az előugró ablakok blokkolását.

Problémák merülnek fel a mobileszközökön végzett munka során is. Például az iPad nem támogatja a modális ablakokat.

A problémák megoldásához használjon blokkoló ablakokat a modális ablakok helyett. A felhasználó számára vizuálisan minden ugyanúgy néz ki: az ablak blokkolja a webes kliens felületet.

A blokkolóablak azonban a főablak tetejére „rajzolódik”, és csak az aktuális böngészőfül, amelyen a konfiguráció nyitva van, blokkolva van, ami lehetővé teszi, hogy más lapokra váltson, mivel a modális böngészőablakok nincsenek használatban.

Így a felugró ablakok nem nyílnak meg a böngészőben, és a mobileszközökön a webes kliensen keresztül történő munkavégzés biztosított.

A konfiguráció gyökérelemének van egy „Modality mode” tulajdonsága, amely meghatározza, hogy a konfigurációban meg lehet-e nyitni a modális ablakokat.

Ha a „Használat” opciót választja, akkor modális ablakok nyithatók meg. Ha a „Ne használja” opciót választja, akkor a modális ablakok nem engedélyezettek. Amikor megpróbál meghívni egy modális ablakot megnyitó metódust, a rendszer hibaüzenetet jelenít meg:

A „Modality usage mode” tulajdonság ezen értékével csak az ablakok blokkolása engedélyezett.

Ha a „Felhasználás figyelmeztetésekkel” opciót választja, akkor a modális ablakok megnyitásakor a következő szöveg jelenik meg az üzenetablakban:

Ez a munkalehetőség köztesként használható a konfiguráció átdolgozásakor a modális ablakok használatának elhagyása érdekében.

A fő különbség a blokkoló ablakok és a modális ablakok között az, hogy a blokkoló ablak megnyitása nem szünetelteti a kódvégrehajtást.

Ezért a fejlesztőknek át kell írniuk a modális ablakokat használó programkódot, hogy figyelembe vegyék ezt a funkciót.

A kódot két részre kell osztani:

  • blokkoló ablak kinyitása;
  • felhasználó kiválasztásának feldolgozása.

A cikk elején megadott kódrészletet a következőképpen kell átírni:

&OnClient
Eljárás Töltse ki a Termékeket(csapat)
Figyelmeztetés = Új LeírásFigyelmeztetések(, ThisObject );

Dialógus módKérdés.IgenNem);
Az eljárás vége
&OnClient
Eljárás (eredmény, Extra lehetőségek) Exportálás
Ha Eredmény = Dialógus visszatérési kódja.Igen Akkor
//kitöltési algoritmus
EndIf ;
Az eljárás vége

A ShowQuestion() eljárás végrehajtása után a rendszer nem áll le, a felhasználó válaszára várva a kódvégrehajtás folytatódik.

A felhasználó csak a teljes eljárás befejezése után tud választani. Ebben az esetben a FillItemsQuestionComplete() exportálási eljárás kerül meghívásra. Nevét átadtuk a DescriptionAlerts objektum konstruktorának.

A kijelölés után meghívott eljárás egy űrlapmodulban, egy parancsmodulban vagy egy általános, nem globális modulban található.

A vizsgált példában a meghívott eljárás egy felügyelt űrlapmodulban található, így a ThisObject paramétert adtuk át.

Vegyük fontolóra egy közös modulban található eljárás meghívását. Ehhez adjon hozzá egy új, közös értesítésfeldolgozási modult, állítsa be a „Client (managed application)” jelzőt, és ne állítsa be a „Globális” jelzőt. Helyezzük el ebbe a modulba a Termékek kitöltése Kérdés kitöltése () eljárást.

Ezután a kitöltési parancskezelő így fog kinézni:

&OnClient
Eljárás Töltse ki a Termékeket(csapat)
Figyelmeztetés = Új LeírásFigyelmeztetések(„Töltse ki a termékekre vonatkozó kérdés kitöltését”,
Riasztások feldolgozása);
Question Text = „A táblázatos rész törlődik. Folytatni?" ;
ShowQuestion (figyelmeztetés, kérdés szövege, Dialógus módKérdés.IgenNem);
Az eljárás vége

A blokkoló ablakot megnyitó metódusok meghívása után az eljárásnak ki kell lépnie, és a következő kódot egy olyan eljárásba kell helyezni, amely az ablak bezárása után kerül meghívásra.

A kontextus (kiegészítő adatok, bizonyos paraméterek, változóértékek) átviteléhez a modális ablakot megnyitó eljárásból a bezárásakor meghívott eljárásba, az objektumkonstruktor harmadik opcionális paramétere biztosított: DescriptionAlerts – További paraméterek.

Ez az objektum (bármilyen típusú) az utolsó paraméterként kerül átadásra a Figyelmeztetés leírásában leírt eljáráshoz.

A fent tárgyalt kódrészlet példáján ezt a következőképpen lehet megtenni:

&OnClient
Eljárás Töltse ki a Termékeket(csapat)
Paraméter1 = 0 ;
Paraméter2 = 0 ;
Paraméterek listája= Új struktúra (“Paraméter1, Paraméter2”, Paraméter1, Paraméter2);
Figyelmeztetés = Új LeírásFigyelmeztetések(„Töltse ki a termékekre vonatkozó kérdés kitöltését”, Ez az objektum,
Paraméterek listája);
ShowQuestion (Figyelmeztetés: "A táblázat rész törlődik. Folytatás?",
Dialógus módKérdés.IgenNem);
Az eljárás vége
&OnClient
Eljárás Töltse ki az inProductsQuestionCompletion elemet(Eredmény, Extra lehetőségek) Exportálás
Ha Eredmény = Dialógus visszatérési kódja.Igen Akkor
//További paraméterek elemzése.Parameter1
//További paraméterek elemzése.Parameter2
EndIf ;
Az eljárás vége

Ha csak egy értéket kell átadnia, akkor nem használhatja a struktúrát, hanem ezt az értéket rendelheti hozzá a DescriptionAlerts objektum konstruktorának További paraméterek paraméteréhez.

Nézzünk néhány példát az ablakok blokkolásával kapcsolatos munkára.

1. feladat: Nyiss meg egy másik űrlapot

A bizonylatlapról a „Paraméterek megnyitása” gombra kattintva meg kell nyitni egy űrlapot, amelyen két Paraméter1 és Paraméter2 jelölőnégyzet található, amelyeket a felhasználónak be kell állítania. Az űrlap bezárása után jelenítse meg a paraméterértékeket az üzenetsorban.

Létrehozunk egy „ParametersForm” általános űrlapot, amelyen elhelyezzük a Parameter1 és Parameter2 részleteket, valamint a CloseForm parancsot:

A parancskezelő így néz ki:

A parancskezelő így néz ki: &OnClient
Eljárás CloseForm (parancs)
Paraméterek listája= Új struktúra ( "Parameter1, Parameter2", Paraméter1 , Paraméter 2 );
Bezárás ( Paraméterek listája); Az eljárás vége

Az űrlapon állítsa a WindowOpenMode tulajdonságot „Teljes felület blokkolása” értékre:

A dokumentum űrlapon elhelyezzük az OpenParameters parancsot, melynek kezelője a következőképpen írható le:

&OnClient
Eljárás OpenOptions(csapat)
Figyelmeztetés = Új LeírásFigyelmeztetések(„Open Options Finish”, ThisObject );
OpenForm ( "GeneralForm.FormParameters", , , , , , Értesítés);
Az eljárás vége
&OnClient
Eljárás OpenOptionsComplete(Eredmény, Extra lehetőségek) Exportálás
Ha TypeValue (Eredmény) = Type ("Struktúra") Akkor
Minden egyes kulcsértékhez az eredményhurokból
Üzenet = Új Üzenet a felhasználónak;
Message.Text = "Kulcs: "" ” + KeyValue.Key + „””, érték = ”
+ Kulcsérték.Érték;
Üzenet.Jelentés();
EndCycle ;
EndIf ;
Az eljárás vége

Felhasználói módban a webes kliens alatt futtatva a konfigurációt a következő eredményeket kapjuk:

Nagyításhoz kattintson a képre.

Az ablak megnyitási módja az OpenForm eljárás utolsó paraméterében is megadható.

&OnClient
Eljárás OpenOptions(csapat)
Figyelmeztetés = Új LeírásFigyelmeztetések(„Open Options Finish”, ThisObject );
OpenForm ( "GeneralForm.FormParameters", , , , , , Értesítés
FormWindowOpenMode.LockEntireInterface
);
Az eljárás vége

2. feladat. Kérdés az űrlap bezárásakor

Feldolgozó ablak bezárásakor kérdezze meg a felhasználót, hogy valóban be akarja-e zárni az ablakot.

Ez a probléma megoldható a következő kóddal, amely a feldolgozási űrlap modulban található:

&OnClient
Perem Be kell zárni az űrlapot;
&OnClient
Eljárás zárás előtt (hiba, Standard Processing)
Ha nem Be kell zárni az űrlapot= Akkor igaz
Refuse = Igaz ;
Figyelmeztetés = Új LeírásFigyelmeztetések(„Bezárás előtt Befejezés”, ThisObject );
ShowQuestion (Figyelmeztetés: "Biztosan bezárja az ablakot?",
Dialógus módKérdés.IgenNem
);
EndIf ;
Az eljárás vége
&OnClient
Eljárás Zárás előtt Befejezés(Eredmény, Extra lehetőségek) Exportálás
Ha Eredmény = Dialógus visszatérési kódja.Igen Akkor
Be kell zárni az űrlapot= Igaz ;
Bezárás();
Másképp
Be kell zárni az űrlapot= Undefined ;
EndIf ;
Az eljárás vége

A BeforeClosing űrlap eljárásban a felhasználónak feltesz egy kérdést, a Refusal jelző True értékre van állítva, és az űrlap bezárása törlődik.

A kérdésre adott igenlő válasz után a Need toCloseForm változót True értékre állítjuk, és az űrlapot ismét bezárjuk.

3. feladat: Numerikus érték megadása

Amikor a feldolgozási űrlapon a gombra kattint, nyisson meg egy szabványos számbeviteli párbeszédpanelt.

Ehhez az EnterNumber() helyett a ShowNumberInput() metódust kell használni, ami modális helyett blokkoló ablakot nyit meg.

&OnClient
Számok beviteli eljárása (parancs)
Figyelmeztetés = Új LeírásFigyelmeztetések("EnterNumberComplete", ThisObject );
ShowEnterNumbers(Figyelmeztetés, 0, „Mennyiség megadása”, 15, 3);
Az eljárás vége
&OnClient
Eljárás Entering NumbersCompleting(Eredmény, Extra lehetőségek) Exportálás

Üzenet = Új Üzenet a felhasználónak;
Message.Text = "Mennyiséget adott meg" + Eredmény;
Üzenet.Jelentés();
EndIf ;
Az eljárás vége

A számbeviteli ablak bezárása után egy eljárás hívódik le, melynek első paramétere a beírt szám, illetve a beírás megtagadása esetén az Undefined érték lesz.

4. feladat Színválasztás

Amikor a feldolgozási űrlapon a gombra kattint, a szabványos színválasztó párbeszédablakban a felhasználó megadja a kívánt színt. Állítsa be ezt a színt a kattintott gomb hátteréhez.

Adja hozzá a SelectColor parancsot az űrlaphoz a következő kezelővel:

&OnClient
Színválasztási eljárás (parancs)
Színválasztó párbeszédablak= Új Színválasztó párbeszédablak;
Figyelmeztetés = Új LeírásFigyelmeztetések(„A színválasztás kész”, ThisObject );
Színválasztó párbeszédablak. Show(Alert);
Az eljárás vége
&OnClient
Eljárás ChoiceColorsBefejezés(Eredmény, Extra lehetőségek) Exportálás
Ha NEM Eredmény = Undefined Akkor
Elements.Color Selection.Background Color= Eredmény ;
EndIf ;
Az eljárás vége

A Színválasztó párbeszédpanel objektumok (valamint a szabványos periódusszerkesztő párbeszédpanel, a Formátumvonal-konstruktor, a Rendszeres feladatütemezési párbeszédpanel, a Betűtípus-kiválasztási párbeszédpanel) esetén a Show() metódus blokkoló ablakot nyit meg.

Az ablak bezárása után egy eljárás hívódik meg, melynek első paramétere a kiválasztott értéket (szín, betűtípus stb.) vagy a Undefined értéket adja át, ha a felhasználó visszautasította a választást.

Meg kell jegyezni, hogy a FileSelectionDialog objektum nem rendelkezik Show() metódussal, ellentétben a szín- vagy betűtípus-kiválasztó párbeszédablakkal, mivel ezeknek a párbeszédablaknak a megvalósítása jelentősen eltér.

A webes kliens fájlkiválasztó párbeszédpaneljének használatához először engedélyeznie kell a fájlkiterjesztést.

A fájlkiterjesztésen keresztül megvalósított párbeszédpanelek nem okoznak ugyanazokat a működési problémákat, mint a modális böngészőablakok, így a FileSelectionDialog objektum blokkoló ablakainak megnyitása nem történt meg.

Végezetül megjegyezzük, hogy a 8.3.10-es kiadástól kezdve a modális ablakok támogatása megszűnt a webes kliensben. Ebben az esetben, ha egy modális metódust hívunk meg a konfigurációban, kivétel keletkezik. Ezenkívül a webes kliensben megszűnt az interfész mód támogatása Külön ablakokban. Ráadásul a vékony és webes kliensekben sem lehet többé külön ablakban megnyitni egy űrlapot (Könyvjelzők felület módban). Az ilyen drasztikus lépések lehetővé tették az interfész mód elhagyását, amelyet már nem minden modern böngésző támogat.

Milyen gyakorlati következtetést lehet levonni ebből az információból? És a következtetés meglehetősen egyszerű - ha valamilyen oknál fogva még mindig vannak modális hívások a konfigurációban, akkor a webes kliens ezeken a helyeken egy hibaüzenetet tartalmazó ablak jelenik meg. Szeretnék óva inteni attól, hogy megpróbáljunk valami gyors megoldást „Google”-ba keresni erre a problémára, mert... A legtöbb tanács ehhez a recepthez kapcsolódik: a konfigurációs szinten lévő konfigurátorban állítsa a „Modality use mode” tulajdonságot „Use”-ra. Természetesen jelenleg ez csak azért nem fog működni, mert maguk a modern böngészők már nem támogatják a modális hívásokat.

És csak két módja van a fent leírt probléma megoldására:

  1. Frissítse a platformot a 8.3.10+ (8.3.11) kiadásra, állítsa a „Kompatibilitási mód” konfigurációs tulajdonságot „Ne használja” értékre, és írja át a modális módszereket használó kódrészleteket egy aszinkron üzleti logikai modellre
  2. Javasolja ügyfeleinek, hogy olyan régebbi böngészőket használjanak, amelyek továbbra is támogatják a modális hívásokat (Mozilla Firefox 37-es és régebbi verziói, 37-es alatti Chrome-verziók stb.).

Egyébként a 8.3.11-es kiadástól kezdődően a Microsoft Internet Explorer 8-as és 9-es verziója már nem támogatott.

A webböngészőkkel a modalitás tükrében foglalkoztunk, most itt az ideje, hogy más kliensekkel is tisztázzuk a helyzetet.

A 8.3.5-ös verziótól kezdve a Modality Usage Mode tulajdonság vékony és vastag klienseknél csak akkor érvényesül, ha az /EnableCheckModal parancssori beállítás meg van adva. Ez a paraméter csak akkor kerül automatikusan a parancssorba, ha az alkalmazást a konfigurátorból elindítják. Ha ez a paraméter nincs megadva, akkor nem jön létre kivétel, és nem jelennek meg a megfelelő figyelmeztetések. Azok. a gyakorlatban vastag és vékony kliens használatakor nem figyelhető meg alapvető változás a működésben a modális mód használatakor - a modális hívások ugyanúgy működnek, mint korábban, figyelmeztetések nélkül, mint a webes kliensben.

Az összes „i” pontozáshoz megjegyezzük, hogy a 8.3.9-es kiadástól kezdődően a „Platformbővítmények és külső összetevők szinkronhívásának módja” konfigurációs tulajdonságot figyelmen kívül hagyja a vastag kliensben, míg a megfelelő szinkron metódusok generálás nélkül működnek. kivételek és figyelmeztetések megjelenítése. A megadott figyelmen kívül hagyott tulajdonság a 8.3.5-ös verzióban lett hozzáadva, hogy támogassa az aszinkron munkát a külső összetevőkkel, a titkosítással és a Google Chrome webböngészőben lévő fájlokkal való munka kiterjesztéseivel. Nyilvánvaló, hogy ennek semmi köze a vastag klienshez, ezért ennek a tulajdonságnak a „csendben” figyelmen kívül hagyása egyszerűen kiküszöbölte a szinkron metódusok használatának szükségtelen ellenőrzését a konfiguráció használatakor.

Apropó! Tekintettel arra, hogy a platform magabiztosan halad a web felé, a 8.3.8-as verzióval a fejlesztők bizonyos megszorításokat vezettek be a programkódra, amely a vastag és vékony kliensekben végrehajtott űrlap vagy alkalmazás bezárásának logikájához kapcsolódik. Feltétlenül olvassa el cikkünket, amely részletesen lefedi ezt az árnyalatot. Ezenkívül az „Interfészek és űrlapok professzionális fejlesztése az 1C: Enterprise 8.3-ban” kurzusban van egy fejezet, amely a modalitás feladásáról szól, és sok hasznos és releváns információt gyűjthet össze erről a témáról.

Kollégák, két dolgot olvashattok vég nélkül: a VKontakte hírfolyamát és a platform következő kiadásában megjelenő változások listáját, szóval foglaljuk össze a végeredményt;)

Az olyan példák vizsgálata során, amelyek lehetővé teszik a szinkron modell elemeiből az aszinkronba való áttérést, valószínűleg már észrevette, hogy általában több programkód van. Minél több kód van, annál bonyolultabb a további karbantartása és hibakeresése.

Ráadásul a kód mennyisége még jobban megnő, ha több párbeszédablakot használunk a fejlesztési folyamat során. Ezért a webes kliensben végzett munkavégzésre összpontosító alkalmazási megoldások fejlesztése során emlékeznie kell a modern webes alkalmazásokban jelenleg használt munkaparadigmára. Ezért, ha a konfigurációban sok interaktív párbeszédpanel van a felhasználóval és figyelmeztetések, akkor érdemes átgondolni ezt a funkciót a felhasználói interakció megszervezésének más megközelítései helyett.

Konklúzió helyett

„Az 1C fejlesztés első lépései” ciklusunk a végéhez ért. Ha teljes egészében elolvastad, akkor valószínűleg már észrevetted, hogy az utóbbi időben ugrásszerűen fejlődik a platform. Ennek a sorozatnak az anyaga viszonylag nemrég íródott, de kénytelenek voltunk komolyan frissíteni, mert... Még ilyen rövid idő alatt is rengeteg új fontos funkció és változás jelent meg. Az ilyen jelentős változások némileg zavarba ejtőek lehetnek egy 1C programozó számára, ha mindeddig nem nőtt és nem fejlődött szakmailag a platformmal.

A speciális internetes forrásokon gyakran olvashat a kezdő programozóktól és érettebb kollégáiktól olyan anyagok ajánlására, amelyek segítik őket megérteni az 1C platform kiterjedt és néha végtelennek tűnő képességeit. Hagyományosan javasoljuk, hogy fordítson figyelmet programozó tanfolyamainkra

Az 1C 8.3 platform új felületének - "taxi" - bevezetése arra a tényre vezetett, hogy a felhasználók és a programozók a következő hibával szembesültek: "A modális ablakok használata ebben az üzemmódban tilos."
Rizs. 1

Az 1C technológiai platform fejlesztői a globális trendek követésére törekednek a szoftver nemzetközi szabványokhoz való igazításával. Ez utóbbi elkerülhetetlenül egyetlen felülethez vezet, közel a weboldalakhoz.

A rossz ízlés jeleként a modális és felugró ablakokat régóta elfogadhatatlannak tartják a szoftverfejlesztésben. Az „egy ablakban” való munkavégzés szükségessége szilárdan rögzült a felhasználók tudatában.

Az 1C platform fejlesztői kísérletet tettek arra, hogy az alkalmazási megoldások fejlesztőit „új módon” vonják be a munkába. Az új "taxi" felület bevezetésével egy új funkcióval egészítették ki az új platformot - "mode using modality".

Gyors javítás

Idő hiányában, ha gyorsan meg kell oldania a problémát, meglehetősen egyszerű, de nem túl helyes megoldáshoz folyamodhat - csak meg kell változtatnia a modalitási módot a konfigurációs tulajdonságokban.

Ehhez konfigurátor módban jelentkezzen be a rendszerbe, és nyissa meg a konfigurációt:

Ezután kattintson a jobb gombbal a konfigurációs gyökérre, nyissa meg a helyi menüt, és válassza a „Tulajdonságok” lehetőséget:


Rizs. 3

A megnyíló konfigurációs tulajdonságokban a lapokon keresse meg a „Modality use mode” (Modalitáshasználati mód) elemet, és válassza a „Használat” lehetőséget:


Rizs. 4

Mentse el és alkalmazza a változtatásokat az "F7" billentyű lenyomásával.