Modālo logu izmantošana šajā režīmā ir aizliegta Kā iespējot. Kāpēc rodas kļūda “Modālo logu izmantošana šajā režīmā ir aizliegta”? Norādījumi kļūdas labošanai parastajiem lietotājiem

1C platformas versijā 8.3 ir parādījies jauns programmas darbības režīms - neizmantojot modalitāti. Precīzāk, ir parādījušies 2 jauni režīmi: neizmantojot modalitāti un izmantojot modalitāti, bet ar brīdinājumu. Un vecais darbības režīms ir norādīts kā modalitātes izmantošana.

Ko tas viss nozīmē? Sākotnējās platformas versijās mēs izmantojām dažādus modālos logus un par to daudz nedomājām. Piemēram, lietotājam ir jāparāda brīdinājums vai jāuzdod jautājums, jāievada kāda vērtība vai jāatlasa fails. Tie visi ir modālie logi.

Ko nozīmē modāls? Tas nozīmē, ka, izsaucot šo logu, tas pārklājas ar visiem citiem logiem, tas ir, tiek parādīts pašā augšā un bloķē darbu ar citiem logiem, līdz darbs ar šo logu ir pabeigts. Papildus logu bloķēšanai koda izpilde apstājas tieši tajā vietā, kur tiek izsaukts šis logs, un koda izpilde turpinās tikai pēc šāda loga aizvēršanas. No vietas, kur izpilde apstājās. Es ilustrēšu modālā loga izsaukumu, izmantojot perioda atlases formas izsaukšanas piemēru:

&OnClient

StandardProcessing = False;




Ja Dialog.Edit() Then //Izsauc modālo formu. Koda izpilde turpināsies tikai pēc veidlapas aizvēršanas.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialogue.Period.EndDate;
endIf;

Beigās Procedūra


Kā redzam, pietiek ar vienu procedūru, lai apstrādātu perioda atlases modālā loga izsaukumu.

Kāpēc modālie logi ir slikti? Tagad izdomāsim, kāpēc 1C nolēma atteikties no modālo logu izmantošanas. Nu, pirmkārt, tās ir sekas tam, ka 1C platformu var izmantot ne tikai tās parastajā formā – kā darbvirsmas aplikāciju, bet var palaist arī pārlūkprogrammā un palaist kā mobilo aplikāciju.

Problēma ar pārlūkprogrammām ir šāda. Logu modalitāte tajās tiek realizēta, izmantojot atsevišķus uznirstošos pārlūkprogrammas logus. Tos atbalsta gandrīz visas pārlūkprogrammas, taču, tā kā šādi logi bieži tiek izmantoti reklāmai, gandrīz visi pārlūkprogrammu izstrādātāji cīnās ar tiem un pēc noklusējuma atspējo šādu logu izmantošanu. Rezultātā, lai nodrošinātu, ka 1C lietotājs var strādāt pārlūkprogrammā, ir jāpiespiež viņš atļaut šos logus, veltīt viņam visas 1C un pārlūkprogrammu darba sarežģītības un kopumā pārslogot ar nevajadzīgu. informāciju.

Atsevišķa nianse ar pārlūkprogrammām planšetdatoriem un pārlūkprogrammām tālruņiem. Vairumā gadījumu šīs pārlūkprogrammas neatbalsta uznirstošos logus. Šādu ierīču saskarnes (monitori un ievades ierīces) ar uznirstošajiem logiem nav saderīgas.

Visbeidzot, 1C mobilā lietojumprogramma arī nav pilnībā draudzīga modālajiem logiem.

Tātad secinājums: Neizmantojiet modālos logus. Ko man vajadzētu izmantot tā vietā? Tā vietā jums ir jāizmanto tie paši logi, bet bez modalitātes režīma. Jaunajā platformā 1C ir izstrādājis arī šādu režīmu katram logam. Tas tiek ieviests kā atsevišķa metode katram dialogam. Šis režīms ļauj atvērt logu, bet ne apturēt programmas koda izpildi. Tehniski pārlūkprogrammas to īsteno kā pseido logu, kas parādās vecāklogā, bet pārklājas ar to. Fakts, ka kods turpina darboties pēc loga atvēršanas, nozīmē, ka jūs nevarēsit uzreiz saņemt tajā atlasītās vērtības pēc loga izsaukšanas koda. Viņi vēl nav izvēlēti. Tāpēc šo vērtību iegūšana un apstrāde tiek veikta atsevišķā procedūrā, kas tiek izsaukta, aizverot šādu logu, un šī procedūra tiek norādīta, izsaucot loga atvēršanas metodi. Kā piemēru aplūkosim tā paša perioda atlases logu.

&OnClient
Pakalpojuma procedūraStartDateStartSelection (elements, SelectionData, Standard Processing)

StandardProcessing = False;

Dialogs = NewEditingDialogStandardPeriod();
StandardPeriod = Jauns standarta periods();

Sākuma datums = Items.Services.CurrentData.StartDate;
EndDate = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = Sākuma datums;
StandardPeriod.EndDate = beigu datums;
Dialog.Period = StandardPeriod;

Brīdinājuma apraksts = Jauns brīdinājuma apraksts ("Perioda atlases apstrāde", šī veidlapa);

Dialog.Show(Description Alerts)

Beigās Procedūra

&OnClient
ProcedurePeriodAtlases apstrāde (periods, parametri) eksportēšana

Ja Periods<>Undefined Tad

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

endIf;

Beigās Procedūra


Kā redzam, Edit() vietā tiek izsaukts Show(). Un atlases pasākuma apstrāde jau ir citā procedūrā.

Tātad, mēs izdomājām, kā iztikt bez modalitātes. Tagad izdomāsim, kāpēc mums ir nepieciešams modalitātes ar brīdinājumu izmantošanas režīms. Būtībā tas ir pārejas režīms. Ja jums vēl nav izdevies pārvērst visu konfigurāciju režīmā, neizmantojot modalitāti, bet jau cenšaties pēc tā. Un katru reizi, kad izsaucat modālo logu, programma sniegs brīdinājumu, ka šajā režīmā nav ieteicams izsaukt modālos logus.

Nu, atteiksim modalitāti un apgūsim jaunas tehnoloģijas 1C darbam pārlūkprogrammās un mobilajos datoros.

Platformas 1C:Enterprise 8.3 konfigurācijas īpašībās ir modalitātes izmantošanas režīms. Ja šī lauka vērtība ir "Nelietot", tad, mēģinot atvērt modālo logu, platforma parādīs ziņojumu "Modālo logu izmantošana šajā režīmā ir aizliegta." Šajā gadījumā programmas koda izpilde tiek pārtraukta.

Šajā rakstā ir parādīts programmas koda maiņas mehānisms, izmantojot lietotāja jautājuma piemēru, kad modālais režīms ir atspējots.

Laiku pa laikam, izstrādājot programmatūras produktu, rodas nepieciešamība lietotājam pajautāt par veicamajām darbībām. Piemēram, automātiski aizpildot tabulas daļas. Kad pirms PM uzpildīšanas ir jājautā lietotājam par nepieciešamību to izdarīt. Un atkarībā no viņa atbildes PM tiks notīrīts un papildināts vai nē.

Koda jautājuma daļa varētu izskatīties šādi:

Ja PM. Daudzums ()< >0 Tad atbilde = jautājums (" // Šajā rindā tiks parādīts modāls logs ar jautājumu, un koda izpilde tiks apturēta, līdz lietotājs atbildēs Ja atbilde = DialogReturnCode. Nē, tad atgriezties; EndIf ; // Lietotājs piekrīt turpināt PM. Clear() ; EndIf ; // Veikt turpmākās darbības // Programma dosies šeit, ja PM bija tukšs vai lietotājs uz jautājumu par uzpildīšanu atbildēja pozitīvi Veikt turpmākās darbības () ;

Kad modālais režīms ir atspējots, šī koda jautājuma rindā parādīsies kļūda un turpmākā izpilde tiks pārtraukta. Tas notiks, jo funkcija Jautājums izmanto modālu logu.

Šādā situācijā jums ir jāizmanto ShowQuestion procedūra. Šī procedūra negaida, līdz tiks pabeigta lietotāja atbilde. Bet šīs procedūras pirmais parametrs ir brīdinājuma apraksts, ko izmanto, lai izsekotu lietotāja atbildi.

Kā mainīsies iepriekš uzrakstītais kods:

// Nepieciešams aizpildīt PM datus // Pārbauda PM pilnību Ja PM. Daudzums ()< >0 Tad // PM nav tukšs, par uzpildīšanu jājautā lietotājam ShowQuestion(New Description Alerts(" Uzpildiet TCompletion" , Šis objekts, papildu parametri) , " PM tiks papildināts. Turpināt ?", Dialoga režīmsJautājums. JāNē) ; // Šajā rindā tiks parādīts jautājuma logs, taču koda izpilde netiks pārtraukta Citādi // Programma dosies šeit, ja PM bija tukšs Veikt turpmākās darbības() ; EndIf ; // Programma šeit nokļūs jebkurā gadījumā neatkarīgi no tā, vai PM bija tukšs vai nē // (ja vien, protams, iepriekšējā kodā nav bijusi kļūda) . . . // Eksportēšanas procedūra tajā pašā modulī // Zvana pēc tam, kad lietotājs ir atbildējis uz jautājumu& Par klienta procedūru Atkārtoti uzpildīt TCCompletion (atbildes rezultāts, papildu parametri) Eksportēt, ja atbildes rezultāts = dialoga atgriešanas kods. Nē Tad // Lietotājs atteicās turpināt Atgriezties ; EndIf ; // Veikt turpmākās darbības // Programma dosies šeit, ja PM nebija tukšs un lietotājs pozitīvi atbildēja uz jautājumu par uzpildīšanu PM. Clear() ; Veikt turpmākās darbības() ; Beigās Procedūra

Tādējādi, tā kā programma neapstāsies, kad tiek izpildīta ShowQuestion procedūra, ir rūpīgi jāapstrādā visi notikumi
Risinot šo problēmu, var tikt veiktas turpmākas darbības, ja notiek divi notikumi:
1. Ja PM bija tukšs
2. Ja PM nebija tukšs un lietotājs uz jautājumu atbildēja pozitīvi, uzpildiet

Un attiecīgi, tā kā programma nebeidz gaidīt lietotāja atbildi, šo notikumu izsaukšana ir jāsadala dažādās koda daļās.
Tāpēc parasti visas izpildāmās metodes, kas jāveic pēc PM pilnīguma pārbaudes, tiek ievietotas atsevišķā procedūrā.

Līdzīgs mehānisms tiek izmantots līdzīgām lietotāja mijiedarbības funkcijām (SelectValue, SelectFromList utt.)

Rakstā tiks apspriesti galvenie modalitātes atteikšanās iemesli platformā 1C: Enterprise un galvenās metodes koda sadaļu konvertēšanai uz jaunu asinhrono modeli.

Piemērojamība

Rakstā apskatīts biznesa loģikas konstruēšanas asinhronais modelis, pievienotā platforma “1C:Enterprise” izdevums 8.3. Sniegtā informācija attiecas uz pašreizējiem platformas laidieniem.

Atteikums izmantot modālos logus platformā 1C:Enterprise 8.3

Izstrādājot konfigurāciju platformā 1C:Enterprise 8, periodiski rodas nepieciešamība apturēt programmu, līdz lietotājs pieņem lēmumu vai veic kādu darbību.

Piemēram, noklikšķinot uz pogas aizpildīt tabulas sadaļu, lietotājam jājautā, vai tabulas sadaļa ir jānotīra, lai iepriekš ievadītie dati nepazustu.

Šo darbību var panākt, piemēram, ar šādu kodu:

&OnClient
Procedūra Aizpildiet Produktus(Komanda)
Atbilde = Jautājums (“Tabulas daļa tiks notīrīta. Turpināt?”, Dialoga režīmsJautājums.JāNē);
Ja atbilde = Dialoga atgriešanas kods.Jā Tad
//aizpildīšanas algoritms
EndIf ;
Beigās Procedūra

Šī koda fragmenta rezultātā programmas koda izpilde tiks apturēta, ekrānā tiks parādīts jautājums, lietojumprogrammas interfeiss, izņemot dialogu ar jautājumu, kļūs nepieejams, sistēma gaida, kad lietotājs veiks lēmumu, un koda izpilde turpināsies tikai pēc atbildes uz jautājumu.

Modālo logu atvēršana, izsaucot OpenModal() metodi, arī izraisa pauzes koda izpildē un saskarnes bloķēšanu.

Strādājot ar konfigurāciju tīmekļa klienta režīmā, izmantojot pārlūkprogrammu, šajā gadījumā tiks atvērts jauns logs - uznirstošais logs, kas bloķēs ne tikai pašreizējo cilni, bet arī visu pārlūkprogrammas saskarni, ieskaitot citus atvērtos logus un cilnes.

Interneta uznirstošie logi bieži tiek izmantoti, lai ļaunprātīgi izplatītu nevēlamas reklāmas, tāpēc pārlūkprogrammās ir iekļautas uznirstošo logu bloķēšanas funkcijas.

Šajā gadījumā, lai strādātu ar 1C:Enterprise 8 konfigurācijām, izmantojot pārlūkprogrammu, ir jāatspējo uznirstošo logu bloķēšana.

Problēmas rodas arī strādājot ar mobilajām ierīcēm. Piemēram, modālie logi iPad netiek atbalstīti.

Lai atrisinātu šīs problēmas, jums vajadzētu izmantot bloķējošos logus, nevis modālos. Lietotājam vizuāli viss izskatās vienādi: logs bloķē tīmekļa klienta saskarni.

Tomēr bloķēšanas logs tiek “uzzīmēts” galvenā loga augšpusē, un tiek bloķēta tikai pašreizējā pārlūkprogrammas cilne, kurā ir atvērta konfigurācija, ļaujot pārslēgties uz citām cilnēm, jo ​​modālie pārlūkprogrammas logi netiek izmantoti.

Tādējādi pārlūkprogrammā neatveras uznirstošie logi un tiek nodrošināts darbs caur tīmekļa klientu mobilajās ierīcēs.

Konfigurācijas saknes elementam ir īpašība “Modality mode”, kas nosaka, vai konfigurācijā var atvērt modālos logus.

Ja ir atlasīta opcija “Izmantot”, var atvērt modālos logus. Ja ir atlasīta opcija “Nelietot”, modālie logi nav atļauti. Mēģinot izsaukt metodi, kas atver modālo logu, sistēma parāda kļūdas ziņojumu:

Izmantojot šo rekvizīta “Modality usage mode” vērtību, ir atļauti tikai bloķēšanas logi.

Ja ir atlasīta opcija “Izmantot ar brīdinājumiem”, tad, atverot modālos logus, ziņojuma logā tiek parādīts šāds teksts:

Šo darba opciju var izmantot kā starpposmu, pārstrādājot konfigurāciju, lai atteiktos no modālo logu izmantošanas.

Galvenā atšķirība starp bloķēšanas logiem un modālajiem logiem ir tāda, ka bloķēšanas loga atvēršana neaptur koda izpildi.

Tāpēc izstrādātājiem būs jāpārraksta programmas kods, kas izmanto modālos logus, lai ņemtu vērā šo funkciju.

Kods jāsadala divās daļās:

  • bloķējoša loga atvēršana;
  • apstrādāt lietotāja atlasi.

Raksta sākumā norādītais koda fragments ir jāpārraksta šādi:

&OnClient
Procedūra Aizpildiet Produktus(Komanda)
Brīdinājums = jauns Apraksts Alerts(, ThisObject );

Dialoga režīmsJautājums.JāNē);
Beigās Procedūra
&OnClient
Procedūra (rezultāts, Papildu iespējas) Eksportēt
Ja rezultāts = Dialoga atgriešanas kods.Jā Tad
//aizpildīšanas algoritms
EndIf ;
Beigās Procedūra

Pēc ShowQuestion() procedūras izpildes sistēma neapstājas, gaidot lietotāja atbildi, koda izpilde turpinās.

Lietotājs varēs izdarīt izvēli tikai pēc visas procedūras pabeigšanas. Šajā gadījumā tiks izsaukta eksportēšanas procedūra FillItemsQuestionComplete(). Mēs nodevām tā nosaukumu objekta DescriptionAlerts konstruktoram.

Procedūra, kas tiks izsaukta pēc atlases, var atrasties veidlapas modulī, komandu modulī vai vispārējā modulī, kas nav globāls.

Aplūkotajā piemērā izsauktā procedūra atrodas pārvaldītās formas modulī, tāpēc tika ievadīts parametrs ThisObject.

Apsvērsim iespēju izsaukt procedūru, kas atrodas vispārējā modulī. Lai to izdarītu, pievienojiet jaunu kopējo moduli Paziņojumu apstrāde, iestatiet tam karogu “Klients (pārvaldīta lietojumprogramma)” un neiestatiet karogu “Globālais”. Šajā modulī ievietosim procedūru Aizpildīt Produktu Jautājuma aizpildīšana ().

Tad aizpildīšanas komandu apstrādātājs izskatīsies šādi:

&OnClient
Procedūra Aizpildiet Produktus(Komanda)
Brīdinājums = jauns Apraksts Alerts(“Aizpildiet produkta jautājumu aizpildīšanu”,
Apstrādes brīdinājumi);
Jautājuma teksts = “Tabulas daļa tiks notīrīta. Turpināt?" ;
ShowQuestion (brīdinājums, jautājuma teksts, Dialoga režīmsJautājums.JāNē);
Beigās Procedūra

Pēc jebkuras metodes izsaukšanas, kas atver bloķēšanas logu, procedūra ir jāaizver, un kods, kas tiek palaists tālāk, jāievieto procedūrā, kas tiks izsaukta pēc loga aizvēršanas.

Lai pārsūtītu kontekstu (palīgdatus, noteiktus parametrus, mainīgās vērtības) no procedūras, kas atver modālo logu, uz procedūru, kas tiek izsaukta, kad tas ir aizvērts, tiek nodrošināts trešais neobligāts objekta konstruktora parametrs: DescriptionAlerts – Papildu parametri.

Šis objekts (jebkura veida) tiks nodots procedūrai, kas aprakstīta brīdinājuma aprakstā kā pēdējais parametrs.

Izmantojot iepriekš apskatītās koda sadaļas piemēru, to var izdarīt šādi:

&OnClient
Procedūra Aizpildiet Produktus(Komanda)
Parametrs1 = 0 ;
Parametrs2 = 0 ;
Parametru saraksts= Jauna struktūra (“Parameter1, Parameter2″, Parameter1, Parameter2);
Brīdinājums = jauns Apraksts Alerts(“Aizpildiet produkta jautājumu aizpildīšanu”, Šis objekts,
Parametru saraksts);
ShowQuestion (Brīdinājums, "Tabulas daļa tiks notīrīta. Turpināt?",
Dialoga režīmsJautājums.JāNē);
Beigās Procedūra
&OnClient
Procedūra Aizpildiet inProductsQuestionCompletion(Rezultāts, Papildu iespējas) Eksportēt
Ja rezultāts = Dialoga atgriešanas kods.Jā Tad
//analizēt Papildu parametrus.Parameter1
//analizēt Papildu parametrus. Parametrs2
EndIf ;
Beigās Procedūra

Ja jums ir jānodod tikai viena vērtība, jūs nevarat izmantot struktūru, bet piešķirt šo vērtību objekta DescriptionAlerts konstruktora parametram Papildu parametri.

Apskatīsim dažus piemērus darbam ar logu bloķēšanu.

1. uzdevums: atveriet citu veidlapu

No dokumenta formas, noklikšķinot uz pogas “Atvērt parametrus”, ir jāatver forma, kurā ir divas izvēles rūtiņas Parametrs1 un Parametrs2, kas lietotājam jāiestata. Pēc veidlapas aizvēršanas ziņojuma rindā parādiet parametru vērtības.

Mēs izveidojam vispārīgu formu “ParametersForm”, kurā ievietojam detaļas Parameter1 un Parameter2, kā arī komandu CloseForm:

Komandu apstrādātājs izskatās šādi:

Komandu apstrādātājs izskatās šādi: &OnClient
Procedūras aizvēršanas veidlapa (komanda)
Parametru saraksts= Jauna struktūra ( “Parameter1, Parameter2”, Parametrs1 , Parametrs 2 );
Aizvērt ( Parametru saraksts); Beigās Procedūra

Veidlapai iestatiet rekvizītu WindowOpenMode uz “Bloķēt visu interfeisu”:

Dokumenta veidlapā ievietojam komandu OpenParameters, kuras apstrādātājs ir aprakstīts šādi:

&OnClient
Procedūra OpenOptions(Komanda)
Brīdinājums = jauns Apraksts Alerts(“Atvērt opcijas Pabeigt”, ThisObject );
OpenForm ( “GeneralForm.FormParameters”, , , , , , Paziņojums);
Beigās Procedūra
&OnClient
Procedūra OpenOptionsComplete(Rezultāts, Papildu iespējas) Eksportēt
Ja TypeValue (rezultāts) = tips (“struktūra”), tad
Katrai atslēgas vērtībai no rezultātu cilpas
Ziņa = jauns Ziņojums lietotājam;
Message.Text = "Atslēga: "" ” + KeyValue.Key + “””, vērtība = ”
+ KeyValue.Value;
Ziņojums.Ziņojums();
EndCycle ;
EndIf ;
Beigās Procedūra

Lietotāja režīmā, palaižot konfigurāciju zem tīmekļa klienta, mēs iegūstam šādus rezultātus:

Lai palielinātu, noklikšķiniet uz attēla.

Loga atvēršanas režīmu var norādīt arī OpenForm procedūras pēdējā parametrā.

&OnClient
Procedūra OpenOptions(Komanda)
Brīdinājums = jauns Apraksts Alerts(“Atvērt opcijas Pabeigt”, ThisObject );
OpenForm ( “GeneralForm.FormParameters”, , , , , , Paziņojums
FormWindowOpenMode.LockEntireInterface
);
Beigās Procedūra

Uzdevums 2. Jautājums, aizverot veidlapu

Aizverot apstrādes logu, jautājiet lietotājam, vai viņš tiešām vēlas aizvērt logu.

Šo problēmu var atrisināt, izmantojot šādu kodu, kas atrodas apstrādes veidlapas modulī:

&OnClient
Perem Nepieciešams aizvērt veidlapu;
&OnClient
Procedūra pirms slēgšanas (neveiksme, Standarta apstrāde)
Ja nē Nepieciešams aizvērt veidlapu= Taisnība Tad
Atteikt = True ;
Brīdinājums = jauns Apraksts Alerts(“Pirms slēgšanas pabeigšanas”, ThisObject );
ShowQuestion (Brīdinājums: "Vai tiešām vēlaties aizvērt logu?",
Dialoga režīmsJautājums.JāNē
);
EndIf ;
Beigās Procedūra
&OnClient
Procedūra Pirms slēgšanas pabeigšanas(Rezultāts, Papildu iespējas) Eksportēt
Ja rezultāts = Dialoga atgriešanas kods.Jā Tad
Nepieciešams aizvērt veidlapu= Patiess ;
aizvērt ();
Citādi
Nepieciešams aizvērt veidlapu= Nedefinēts ;
EndIf ;
Beigās Procedūra

Veidlapas procedūrā BeforeClosing lietotājam tiek uzdots jautājums, atteikuma karodziņš ir iestatīts uz True, un veidlapas aizvēršana tiek atcelta.

Pēc apstiprinošas atbildes uz jautājumu mainīgais Need toCloseForm tiek iestatīts uz True, un veidlapa atkal tiek aizvērta.

3. uzdevums: Ciparu vērtības ievadīšana

Noklikšķinot uz pogas apstrādes veidlapā, atveriet standarta numura ievades dialoglodziņu.

Lai to izdarītu, EnterNumber() vietā ir jāizmanto metode ShowNumberInput(), kas atver bloķēšanas logu, nevis modālu.

&OnClient
Ciparu ievadīšanas procedūra (komanda)
Brīdinājums = jauns Apraksts Alerts(“EnterNumberComplete”, ThisObject );
ShowEnterNumbers(Brīdinājums, 0, “Ievadiet daudzumu”, 15, 3);
Beigās Procedūra
&OnClient
Procedūra EnteringNumbsCompleting(Rezultāts, Papildu iespējas) Eksportēt

Ziņa = jauns Ziņojums lietotājam;
Message.Text = "Jūs esat ievadījis daudzumu" + Rezultāts;
Ziņojums.Ziņojums();
EndIf ;
Beigās Procedūra

Pēc skaitļu ievades loga aizvēršanas tiks izsaukta procedūra, kuras pirmais parametrs būs ievadītais cipars vai Nedefinēta vērtība, ja lietotājs atteicās ievadīt.

4. uzdevums. Krāsas izvēle

Noklikšķinot uz pogas apstrādes veidlapā, izmantojot standarta krāsu izvēles dialoglodziņu, lietotājs norāda nepieciešamo krāsu. Iestatiet šo krāsu noklikšķinātās pogas fonam.

Pievienojiet veidlapai komandu SelectColor ar šādu apdarinātāju:

&OnClient
Procedūras krāsas izvēle (komanda)
Krāsu izvēles dialoglodziņš= Jauns Krāsu izvēles dialoglodziņš;
Brīdinājums = jauns Apraksts Alerts(“Krāsu izvēle ir pabeigta”, ThisObject );
Krāsu izvēles dialoglodziņš. Show(Alert);
Beigās Procedūra
&OnClient
Procedūra ChoiceColorsPabeigšana(Rezultāts, Papildu iespējas) Eksportēt
Ja NAV Rezultāts = Nedefinēts Tad
Elementi. Krāsu izvēle. Fona krāsa= Rezultāts ;
EndIf ;
Beigās Procedūra

Krāsu atlases dialoglodziņa objektiem (kā arī standarta perioda rediģēšanas dialoglodziņā, formāta līniju konstruktoram, regulārā uzdevumu grafika dialoglodziņā, fontu atlases dialoglodziņā) metode Show() atver bloķēšanas logu.

Pēc loga aizvēršanas tiks izsaukta procedūra, kuras pirmajam parametram tiks nodota izvēlētā vērtība (krāsa, fonts utt.) vai Nedefinēta vērtība, ja lietotājs no izvēles ir atteicies.

Jāatzīmē, ka FileSelectionDialog objektam nav Show() metodes, atšķirībā no krāsu vai fontu atlases dialoglodziņiem, jo ​​šo dialogu ieviešana ievērojami atšķiras.

Lai tīmekļa klientā izmantotu failu atlases dialoglodziņu, vispirms ir jāiespējo faila paplašinājums.

Dialogi, kas ieviesti, izmantojot faila paplašinājumu, nerada tādas pašas darbības problēmas kā modālie pārlūkprogrammas logi, tāpēc FileSelectionDialog objekta bloķēšanas logu atvēršana netika ieviesta.

Noslēgumā mēs atzīmējam, ka, sākot ar versiju 8.3.10, modālo logu atbalsts tīmekļa klientā ir pārtraukts. Šajā gadījumā, ja konfigurācijā tiek izsaukta modālā metode, tiek ģenerēts izņēmums. Turklāt tīmekļa klientā ir pārtraukts interfeisa režīma atbalsts Atsevišķos logos. Turklāt gan plānā, gan tīmekļa klientā formu vairs nav iespējams atvērt atsevišķā logā (strādājot grāmatzīmju interfeisa režīmā). Šādas krasas darbības ļāva atteikties no interfeisa režīma, ko vairs neatbalsta visas mūsdienu pārlūkprogrammas.

Kādus praktiskus secinājumus var izdarīt no šīs informācijas? Un secinājums ir pavisam vienkāršs - ja kāda iemesla dēļ jūsu konfigurācijā joprojām ir modālie izsaukumi, tad šajās tīmekļa klienta vietās tiks parādīts logs ar kļūdas ziņojumu. Vēlos brīdināt, ka nevajag mēģināt “Google” meklēt kādu ātru šīs problēmas risinājumu, jo... Lielākā daļa padomu attiecas uz šo recepti: konfiguratorā konfigurācijas līmenī iestatiet rekvizītu “Modality usage mode” uz “Use”. Protams, pašlaik tas nedarbosies tikai tāpēc, ka mūsdienu pārlūkprogrammas vairs neatbalsta modālos zvanus.

Un jums ir tikai divi veidi, kā atrisināt iepriekš aprakstīto problēmu:

  1. Atjauniniet platformu, lai atbrīvotu versiju 8.3.10+ (8.3.11), konfigurācijas rekvizītu “Saderības režīms” iestatiet uz “Nelietot” un pārrakstiet koda fragmentus, kuros tiek izmantotas modālas metodes, uz asinhrono biznesa loģikas modeli.
  2. Iesakiet saviem klientiem izmantot vecākas pārlūkprogrammas, kas joprojām atbalsta modālos zvanus (Mozilla Firefox versijas 37 un vecākas, Chrome versijas, kas jaunākas par 37 utt.).

Starp citu, sākot ar laidienu 8.3.11, Microsoft Internet Explorer tīmekļa pārlūkprogrammas 8. un 9. versijas vairs netiek atbalstītas.

Mēs esam tikuši galā ar tīmekļa pārlūkprogrammām, ņemot vērā modalitāti, tagad ir pienācis laiks noskaidrot situāciju ar citiem klientiem.

Sākot ar versiju 8.3.5, rekvizīts Modality Usage Mode mazajos un biezajos klientos tiek ievērots tikai tad, ja ir norādīta komandrindas opcija /EnableCheckModal. Šis parametrs tiek automātiski ievietots komandrindā tikai tad, kad lietojumprogramma tiek palaista no konfiguratora. Ja šis parametrs nav norādīts, izņēmumi netiek ģenerēti un attiecīgie brīdinājumi netiek rādīti. Tie. praksē, izmantojot biezo un plāno klientu, nav novērojamas būtiskas darbības izmaiņas, izmantojot modālo režīmu - modālie izsaukumi darbosies tāpat kā iepriekš, neradot brīdinājumus, kā tīmekļa klientā.

Lai atzīmētu visus “i”, mēs atzīmējam, ka, sākot no 8.3.9. izdevuma, biezajā klientā tiek ignorēts konfigurācijas rekvizīts “Platmas paplašinājumu un ārējo komponentu sinhrono izsaukumu izmantošanas režīms”, savukārt atbilstošās sinhronās metodes darbojas bez ģenerēšanas. izņēmumi un brīdinājumu parādīšana. Norādītais ignorētais rekvizīts tika pievienots versijā 8.3.5, lai atbalstītu asinhronu darbu ar ārējiem komponentiem, kriptogrāfiju un paplašinājumiem darbam ar failiem Google Chrome tīmekļa pārlūkprogrammā. Ir skaidrs, ka tam nav nekāda sakara ar biezo klientu, un tāpēc "klusi" ignorējot šo īpašumu, vienkārši tika novērstas nevajadzīgas sinhrono metožu izmantošanas pārbaudes, izmantojot konfigurāciju.

Starp citu! Sakarā ar to, ka platforma pārliecinoši virzās uz tīmekli, ar versiju 8.3.8 izstrādātāji ir ieviesuši noteiktus ierobežojumus programmas kodam, kas ir saistīts ar veidlapas vai lietojumprogrammas aizvēršanas loģiku, kas tiek izpildīta biezajos un plānos klientos. Noteikti izlasiet mūsu rakstu par šo niansi. Turklāt kursā “Profesionāla saskarņu un formu izstrāde programmā 1C: Enterprise 8.3” ir sadaļa, kas veltīta modalitātes atteikšanai, un jūs varat iegūt daudz noderīgas un būtiskas informācijas par šo tēmu.

Kolēģi, ir divas lietas, kuras varat lasīt bezgalīgi: VKontakte plūsma un izmaiņu saraksts nākamajā platformas izlaidumā, tāpēc apkoposim galīgos rezultātus;)

Apsverot piemērus, kas ļauj pāriet no sinhronā modeļa elementiem uz asinhrono, jūs, iespējams, jau pamanījāt, ka kopumā programmas koda ir vairāk. Jo vairāk koda ir, jo sarežģītāka ir tā turpmākā apkope un atkļūdošana.

Turklāt koda apjoms palielināsies vēl vairāk, ja izstrādes procesā izmantosim vairāk dialogu. Tāpēc lietojumprogrammu risinājumu izstrādes procesā, kas vērsts uz darbu tīmekļa klientā, ir jāatceras darba paradigma, kas šobrīd tiek izmantota mūsdienu tīmekļa lietojumprogrammās. Tāpēc, ja jūsu konfigurācijā ir daudz interaktīvu dialogu ar lietotāju un brīdinājumiem, ir lietderīgi pārskatīt šo funkcionalitāti par labu dažām citām pieejām lietotāja mijiedarbības organizēšanai.

Secinājuma vietā

Mūsu cikls “Pirmie soļi 1C attīstībā” ir noslēdzies. Ja izlasāt to pilnībā, tad, visticamāk, jau esat pamanījis, kā platforma pēdējā laikā attīstās lēcienveidīgi. Šīs sērijas materiāls tika uzrakstīts salīdzinoši nesen, taču bijām spiesti to nopietni atjaunināt, jo... Pat tik īsā laika posmā ir parādījies daudz jaunu svarīgu funkcionalitāti un izmaiņu. Šādas lielas izmaiņas 1C programmētājam var būt zināmā mērā mulsinošas, ja viņš visu šo laiku nav profesionāli audzis un attīstījies ar platformu.

Specializētajos interneta resursos bieži var lasīt iesācēju programmētāju un viņu nobriedušu kolēģu pieprasījumus ieteikt materiālus, kas palīdzētu izprast 1C platformas plašās un dažkārt šķietami bezgalīgās iespējas. Tradicionāli iesakām pievērst uzmanību mūsu programmēšanas kursiem

1C 8.3 platformas jaunā interfeisa ieviešana - "taksometrs" - noveda pie tā, ka lietotāji un programmētāji saskārās ar šādu kļūdu: "Modālo logu izmantošana šajā režīmā ir aizliegta."
Rīsi. 1

Tehnoloģiju platformas 1C izstrādātāji cenšas sekot līdzi globālajām tendencēm, saskaņojot programmatūru ar starptautiskajiem standartiem. Pēdējais neizbēgami noved pie viena interfeisa, kas atrodas tuvu tīmekļa lapām.

Modālie un uznirstošie logi, kas liecina par sliktu gaumi, jau sen tiek uzskatīti par nepieņemamiem programmatūras izstrādē. Nepieciešamība strādāt “vienā logā” ir stingri iesakņojusies lietotāju prātos.

1C platformas izstrādātāji mēģināja iesaistīt lietojumprogrammu risinājumu izstrādātājus darbā “jaunā veidā”. Ieviešot jauno "taksometru" saskarni, viņi pievienoja jaunajai platformai jaunu funkciju - "modalitātes režīmu".

Ātrs labojums

Ja nav laika, ja jums ātri jāatrisina problēma, varat ķerties pie diezgan vienkārša, bet ne pārāk pareiza risinājuma - jums vienkārši jāmaina modalitātes režīms konfigurācijas īpašībās.

Lai to izdarītu, piesakieties sistēmā konfiguratora režīmā un atveriet konfigurāciju:

Pēc tam, ar peles labo pogu noklikšķinot uz konfigurācijas saknes, atveriet konteksta izvēlni un atlasiet “Properties”:


Rīsi. 3

Atvērtajos konfigurācijas rekvizītos cilnēs atrodiet “Modality usage mode”, atlasiet tajā “Lietot”.


Rīsi. 4

Saglabājiet un lietojiet izmaiņas, nospiežot taustiņu "F7".