Įspėjimas be modalumo režimo. Kodėl atsiranda klaida „Modalinių langų naudojimas šiuo režimu draudžiamas“? Klaidos ištaisymo instrukcijos paprastiems vartotojams

Straipsnyje bus aptartos pagrindinės modalumo atsisakymo 1C:Enterprise platformoje priežastys ir pagrindiniai kodo skyrių konvertavimo į naują asinchroninį modelį metodai.

Pritaikomumas

Straipsnyje aptariamas asinchroninis verslo logikos konstravimo modelis, pridėta platforma „1C:Enterprise“ leidimas 8.3. Pateikta informacija yra svarbi dabartiniams platformos leidimams.

Atsisakymas naudoti modalinius langus platformoje 1C:Enterprise 8.3

Kuriant konfigūraciją platformoje 1C:Enterprise 8, periodiškai iškyla poreikis pristabdyti programą, kol vartotojas priims sprendimą ar atliks kokį nors veiksmą.

Pavyzdžiui, spustelėjus mygtuką užpildyti lentelės skyrių, vartotojo reikia paklausti, ar reikia išvalyti lentelės skyrių, kad nebūtų prarasti anksčiau įvesti duomenys.

Tokį elgesį galima pasiekti, pavyzdžiui, naudojant šį kodą:

&OnClient
Procedūra Užpildykite gaminius(Komanda)
Atsakymas = Klausimas („Lentelės dalis bus išvalyta. Tęsti?“, Dialogo režimasKlausimas.TaipNe);
Jei atsakymas = Dialogo grąžinimo kodas.Taip Tada
//užpildymo algoritmas
EndIf ;
Procedūros pabaiga

Dėl šio kodo fragmento programos kodo vykdymas bus sustabdytas, ekrane bus rodomas klausimas, programos sąsaja, išskyrus dialogą su klausimu, taps nepasiekiama, sistema laukia, kol vartotojas atliks sprendimą, o kodo vykdymas bus tęsiamas tik atsakius į klausimą.

Modalinių langų atidarymas iškviečiant OpenModal() metodą taip pat sukelia kodo vykdymo pauzes ir sąsajos blokavimą.

Dirbant su konfigūracija žiniatinklio kliento režimu per naršyklę, tokiu atveju atsidarys naujas langas - iššokantis langas, kuris užblokuos ne tik esamą skirtuką, bet ir visą naršyklės sąsają, įskaitant kitus atidarytus langus ir skirtukus.

Internete esantys iššokantys langai dažnai naudojami piktybiškai platinti nepageidaujamą reklamą, todėl naršyklėse yra iššokančiųjų langų blokavimo funkcijos.

Tokiu atveju, norėdami dirbti su 1C:Enterprise 8 konfigūracijomis per naršyklę, turite išjungti iššokančiųjų langų blokavimą.

Problemų kyla ir dirbant mobiliaisiais įrenginiais. Pavyzdžiui, modaliniai langai nepalaikomi iPad.

Norėdami išspręsti šias problemas, turėtumėte naudoti blokuojančius langus, o ne modalinius. Vartotojui vizualiai viskas atrodo taip pat: langas blokuoja žiniatinklio kliento sąsają.

Tačiau blokavimo langas yra „nupieštas“ pagrindinio lango viršuje ir blokuojamas tik dabartinis naršyklės skirtukas, kuriame atidaryta konfigūracija, todėl galite pereiti prie kitų skirtukų, nes modaliniai naršyklės langai nenaudojami.

Taigi naršyklėje neatsidaro iššokantys langai ir užtikrinamas darbas per žiniatinklio klientą mobiliuosiuose įrenginiuose.

Konfigūracijos šakninis elementas turi savybę „Modality mode“, kuri nustato, ar konfigūracijoje galima atidaryti modalinius langus.

Jei pasirinkta parinktis „Naudoti“, galima atidaryti modalinius langus. Jei pasirinkta parinktis „Nenaudoti“, modaliniai langai neleidžiami. Kai bandote iškviesti metodą, kuris atidaro modalinį langą, sistema parodo klaidos pranešimą:

Naudojant šią nuosavybės „Modality usage mode“ vertę, leidžiami tik blokuoti langai.

Jei pasirinkta parinktis „Naudoti su įspėjimais“, atidarius modalinius langus pranešimo lange rodomas toks tekstas:

Ši darbo parinktis gali būti naudojama kaip tarpinė, kai pertvarkoma konfigūracija, siekiant atsisakyti modalinių langų.

Pagrindinis skirtumas tarp blokuojančių langų ir modalinių langų yra tas, kad blokavimo lango atidarymas nesustabdo kodo vykdymo.

Todėl kūrėjai turės perrašyti programos kodą, kuris naudoja modalinius langus, kad atsižvelgtų į šią funkciją.

Kodą reikia padalyti į dvi dalis:

  • blokuojančio lango atidarymas;
  • apdoroja vartotojo pasirinkimą.

Straipsnio pradžioje pateiktą kodo fragmentą reikia perrašyti taip:

&OnClient
Procedūra Užpildykite gaminius(Komanda)
Įspėjimas = Naujas AprašymasAlerts(, ThisObject );

Dialogo režimasKlausimas.TaipNe);
Procedūros pabaiga
&OnClient
Procedūra (rezultatas, Papildomos parinktys) Eksportas
Jei rezultatas = Dialogo grąžinimo kodas.Taip Tada
//užpildymo algoritmas
EndIf ;
Procedūros pabaiga

Atlikus ShowQuestion() procedūrą, sistema nesustoja, laukdama vartotojo atsakymo, kodo vykdymas tęsiamas.

Vartotojas galės pasirinkti tik po to, kai bus baigta visa procedūra. Tokiu atveju bus iškviesta eksportavimo procedūra FillItemsQuestionComplete(). Perdavėme jo pavadinimą „DescriptionAlerts“ objekto konstruktoriui.

Procedūra, kuri bus iškviesta atlikus pasirinkimą, gali būti formos modulyje, komandų modulyje arba bendrame nepasauliniame modulyje.

Nagrinėjamame pavyzdyje iškviesta procedūra yra valdomos formos modulyje, todėl perdavėme parametrą ThisObject.

Apsvarstykime galimybę iškviesti procedūrą, esančią bendrame modulyje. Norėdami tai padaryti, pridėkite naują bendrą modulį Pranešimų apdorojimas, nustatykite jam žymą „Klientas (valdoma programa)“ ir nenustatykite žymos „Global“. Šiame modulyje patalpinkime procedūrą Užpildykite gaminių klausimo užpildymą ().

Tada užpildymo komandų tvarkytuvas atrodys taip:

&OnClient
Procedūra Užpildykite gaminius(Komanda)
Įspėjimas = Naujas AprašymasAlerts(„Užpildykite gaminių klausimo užpildymą“,
Perspėjimai apie apdorojimą);
Klausimo tekstas = „Lentelinė dalis bus išvalyta. Tęsti?" ;
ShowQuestion (perspėjimas, klausimo tekstas, Dialogo režimasKlausimas.TaipNe);
Procedūros pabaiga

Iškvietus bet kurį metodą, kuris atidaro blokavimo langą, procedūra turi baigtis, o toliau paleistas kodas turi būti įtrauktas į procedūrą, kuri bus iškviesta uždarius langą.

Kontekstui (pagalbiniams duomenims, tam tikrus parametrus, kintamąsias reikšmes) perkelti iš modalinį langą atidarančios procedūros į procedūrą, iškviestą jį uždarius, pateikiamas trečiasis pasirenkamas objekto konstruktoriaus parametras: DescriptionAlerts – Papildomi parametrai.

Šis objektas (bet kokio tipo) bus perduotas procedūrai, aprašytai įspėjimo aprašyme kaip paskutinis parametras.

Naudojant pirmiau aptarto kodo skyriaus pavyzdį, tai galima padaryti taip:

&OnClient
Procedūra Užpildykite gaminius(Komanda)
Parametras1 = 0 ;
2 parametras = 0 ;
Parametrų sąrašas= Nauja struktūra („Parameter1, Parameter2“, Parameter1, Parameter2);
Įspėjimas = Naujas AprašymasAlerts(„Užpildykite gaminių klausimo užpildymą“, šis objektas,
Parametrų sąrašas);
ShowQuestion (Perspėjimas, "Lentelės dalis bus išvalyta. Tęsti?",
Dialogo režimasKlausimas.TaipNe);
Procedūros pabaiga
&OnClient
Procedūra Užpildykite inProductsQuestionCompletion(Rezultatas , Papildomos parinktys) Eksportas
Jei rezultatas = Dialogo grąžinimo kodas.Taip Tada
//analizuokite papildomus parametrus.1 parametras
//analizuokite papildomus parametrus.2 parametras
EndIf ;
Procedūros pabaiga

Jei reikia perduoti tik vieną reikšmę, tuomet negalite naudoti struktūros, o priskirti šią reikšmę objekto DescriptionAlerts konstruktoriaus parametrui Papildomi parametrai.

Pažvelkime į keletą darbo su langų blokavimo pavyzdžių.

1 užduotis: atidarykite kitą formą

Iš dokumento formos, paspaudus mygtuką „Atidaryti parametrus“, reikia atidaryti formą, kurioje yra du žymimieji langeliai Parametras1 ir Parametras2, kuriuos vartotojas turi nustatyti. Uždarę formą pranešimo eilutėje parodykite parametrų reikšmes.

Sukuriame bendrąją formą „ParametersForm“, kurioje pateikiame detales Parameter1 ir Parameter2 bei komandą CloseForm:

Komandų tvarkytuvas atrodo taip:

Komandų tvarkytuvė atrodo taip: &OnClient
Procedūros uždarymo forma (komanda)
Parametrų sąrašas= Nauja struktūra ( „1 parametras, 2 parametras“, Parametras1 , Parametras 2 );
Uždaryti ( Parametrų sąrašas); Procedūros pabaiga

Formai nustatykite WindowOpenMode ypatybę į „Blokuoti visą sąsają“:

Dokumento formoje dedame komandą OpenParameters, kurios tvarkytuvas aprašytas taip:

&OnClient
Procedūra OpenOptions(Komanda)
Įspėjimas = Naujas AprašymasAlerts(„Atidaryti parinktys baigti“, ThisObject );
OpenForm ( „GeneralForm.FormParameters“, , , , , , Pranešimas);
Procedūros pabaiga
&OnClient
Procedūra OpenOptionsComplete(Rezultatas , Papildomos parinktys) Eksportas
Jei TypeValue (Result) = tipas ("Struktūra") Tada
Kiekvienai rakto vertei iš rezultato ciklo
Žinutė = Nauja Pranešimas vartotojui;
Message.Text = "Raktas: "" " + KeyValue.Key + """, vertė = "
+ KeyValue.Value;
Pranešimas.Pranešti();
EndCycle ;
EndIf ;
Procedūros pabaiga

Vartotojo režimu, vykdydami konfigūraciją pagal žiniatinklio klientą, gauname šiuos rezultatus:

Norėdami padidinti, spustelėkite paveikslėlį.

Lango atidarymo režimą galima nurodyti ir paskutiniame OpenForm procedūros parametre.

&OnClient
Procedūra OpenOptions(Komanda)
Įspėjimas = Naujas AprašymasAlerts(„Atidaryti parinktys baigti“, ThisObject );
OpenForm ( „GeneralForm.FormParameters“, , , , , , Budrus
FormWindowOpenMode.LockEntireInterface
);
Procedūros pabaiga

Užduotis 2. Klausimas uždarant formą

Uždarydami apdorojimo langą paklauskite vartotojo, ar jis tikrai nori uždaryti langą.

Šią problemą galima išspręsti naudojant šį kodą, esantį apdorojimo formos modulyje:

&OnClient
Perem Reikia uždaryti formą;
&OnClient
Procedūra prieš uždarant (gedimas, Standartinis apdorojimas)
Jei ne Reikia uždaryti formą= Tiesa Tada
Nesėkmė = Tiesa ;
Įspėjimas = Naujas AprašymasAlerts(„Prieš uždarymą, pabaiga“, ThisObject );
ShowQuestion (Perspėjimas: „Ar tikrai norite uždaryti langą?“,
Dialogo režimasKlausimas.TaipNe
);
EndIf ;
Procedūros pabaiga
&OnClient
Procedūra Prieš uždarymo pabaigą(Rezultatas , Papildomos parinktys) Eksportas
Jei rezultatas = Dialogo grąžinimo kodas.Taip Tada
Reikia uždaryti formą= Tiesa ;
Uždaryti();
Priešingu atveju
Reikia uždaryti formą= Neapibrėžta ;
EndIf ;
Procedūros pabaiga

Formos procedūroje BeforeClosing vartotojui užduodamas klausimas, atmetimo vėliavėlė nustatoma į True, o formos uždarymas atšaukiamas.

Teigiamai atsakius į klausimą, kintamasis Need toCloseForm nustatomas į True, o forma vėl uždaroma.

3 užduotis: Skaitmeninės reikšmės įvedimas

Kai paspausite apdorojimo formoje esantį mygtuką, atidarykite standartinį skaičių įvedimo dialogo langą.

Norėdami tai padaryti, turite naudoti ShowNumberInput() metodą, o ne EnterNumber(), kuris atveria blokavimo langą, o ne modalinį.

&OnClient
Skaičių įvedimo procedūra (komanda)
Įspėjimas = Naujas AprašymasAlerts(„EnterNumberComplete“, ThisObject );
ShowEnterNumbers(Įspėjimas, 0, „Įveskite kiekį“, 15, 3);
Procedūros pabaiga
&OnClient
Procedūra Skaičių įvedimasBaigiamas(Rezultatas , Papildomos parinktys) Eksportas

Žinutė = Nauja Pranešimas vartotojui;
Message.Text = "Įvedėte kiekį" + Rezultatas;
Pranešimas.Pranešti();
EndIf ;
Procedūros pabaiga

Uždarius skaičių įvedimo langą, bus iškviesta procedūra, kurios pirmasis parametras bus įvestas skaičius arba reikšmė Neapibrėžta, jei vartotojas atsisakė įvesti.

4 užduotis. Spalvos parinkimas

Spustelėjus mygtuką apdorojimo formoje, naudodamas standartinį spalvų pasirinkimo dialogą, vartotojas nurodo reikiamą spalvą. Nustatykite šią spustelėto mygtuko fono spalvą.

Pridėkite komandą SelectColor prie formos naudodami šią tvarkyklę:

&OnClient
Spalvos pasirinkimo procedūra (komanda)
Spalvų pasirinkimo dialogas= Nauja Spalvų pasirinkimo dialogas;
Įspėjimas = Naujas AprašymasAlerts(„Spalvų pasirinkimas baigtas“, ThisObject );
Spalvų pasirinkimo dialogas. Rodyti (Perspėjimas);
Procedūros pabaiga
&OnClient
Procedūra PasirinkimasSpalvosUžbaigimas(Rezultatas , Papildomos parinktys) Eksportas
Jei NE Rezultatas = Neapibrėžta Tada
Elementai. Spalvų pasirinkimas. Fono spalva= Rezultatas ;
EndIf ;
Procedūros pabaiga

Spalvų pasirinkimo dialogo lango objektams (taip pat standartinio laikotarpio redagavimo dialogo langui, formato eilutės konstruktoriui, įprasto užduočių tvarkaraščio dialogui, šrifto pasirinkimo dialogui) metodas Show() atveria blokavimo langą.

Uždarius langą bus iškviesta procedūra, kurios pirmam parametrui bus perduota pasirinkta reikšmė (spalva, šriftas ir kt.) arba reikšmė Neapibrėžta, jei vartotojas pasirinkimo atsisakė.

Reikėtų pažymėti, kad FileSelectionDialog objektas neturi Show() metodo, skirtingai nei spalvų ar šriftų pasirinkimo dialogai, nes šių dialogų įgyvendinimas labai skiriasi.

Norėdami naudoti failų pasirinkimo dialogo langą žiniatinklio kliento programoje, pirmiausia turite įjungti failo plėtinį.

Dialogai, įdiegti naudojant failo plėtinį, nesukelia tų pačių veikimo problemų kaip modaliniai naršyklės langai, todėl objekto FileSelectionDialog blokavimo langų atidarymas nebuvo įgyvendintas.

Baigdami pažymime, kad nuo 8.3.10 leidimo modalinių langų palaikymas žiniatinklio kliente buvo nutrauktas. Tokiu atveju, jei konfigūracijoje iškviečiamas modalinis metodas, sugeneruojama išimtis. Be to, žiniatinklio kliento sąsajos režimo palaikymas buvo nutrauktas Atskiruose languose. Be to, tiek plonosiose, tiek žiniatinklio programose nebegalima atidaryti formos atskirame lange (dirbant žymių sąsajos režimu). Tokie drastiški žingsniai leido atsisakyti sąsajos režimo, kurio nebepalaiko visos šiuolaikinės naršyklės.

Kokią praktinę išvadą galima padaryti iš šios informacijos? Ir išvada gana paprasta - jei dėl kokių nors priežasčių jūsų konfigūracijoje vis dar yra modalinių skambučių, tada šiose žiniatinklio kliento vietose bus rodomas langas su klaidos pranešimu. Norėčiau perspėti, kad nebandytumėte „Google“ ieškoti greito šios problemos sprendimo, nes... Dauguma patarimų yra susiję su šiuo receptu: konfigūracijos lygiu konfigūravimo priemonėje nustatykite ypatybę „Modality usage mode“ į „Naudoti“. Natūralu, kad šiuo metu tai neveiks tik todėl, kad pačios šiuolaikinės naršyklės nebepalaiko modalinių skambučių.

Ir jūs turite tik du būdus, kaip išspręsti aukščiau aprašytą problemą:

  1. Atnaujinkite platformą, kad išleistumėte 8.3.10+ (8.3.11), konfigūracijos ypatybę „Suderinamumo režimas“ nustatykite į „Nenaudoti“ ir perrašykite kodo fragmentus, kuriuose naudojami modaliniai metodai, į asinchroninį verslo logikos modelį.
  2. Rekomenduokite savo klientams naudoti senesnes naršykles, kurios vis dar palaiko modalinius skambučius (37 ir senesnės versijos „Mozilla Firefox“, senesnės nei 37 versijos „Chrome“ ir kt.).

Beje, nuo 8.3.11 leidimo Microsoft Internet Explorer 8 ir 9 versijos nebepalaikomos.

Su interneto naršyklėmis susidorojome atsižvelgdami į modalumą, dabar laikas išsiaiškinti situaciją su kitais klientais.

Pradedant nuo 8.3.5 versijos, ypatybė Modality Usage Mode plonuose ir storuose klientuose atsižvelgiama tik tada, jei nurodyta komandų eilutės parinktis /EnableCheckModal. Šis parametras automatiškai įterpiamas į komandų eilutę tik tada, kai programa paleidžiama iš konfigūratoriaus. Jei šis parametras nenurodytas, išimtys negeneruojamos ir atitinkami įspėjimai nerodomi. Tie. praktikoje naudojant storą ir ploną klientą, naudojant modalinį režimą esminių veikimo pasikeitimų nepastebėta - modaliniai skambučiai veiks taip pat, kaip ir anksčiau, nesukeldami jokių įspėjimų, kaip žiniatinklio kliente.

Norėdami pažymėti i, atkreipkite dėmesį, kad nuo 8.3.9 versijos storasis klientas nepaiso konfigūracijos ypatybės „Sinchroninių iškvietimų į platformos plėtinius ir išorinius komponentus naudojimo režimas“, o atitinkami sinchroniniai metodai veikia negeneruodami išimčių ir nerodydami įspėjimų. Nurodyta ignoruojama ypatybė buvo pridėta 8.3.5 versijoje, kad būtų palaikomas asinchroninis darbas su išoriniais komponentais, kriptografija ir plėtiniais, skirtais darbui su failais „Google Chrome“ žiniatinklio naršyklėje. Akivaizdu, kad tai neturi nieko bendra su storu klientu, todėl „tyliai“ ignoruojant šią savybę paprasčiausiai buvo pašalintos nereikalingos sinchroninių metodų naudojimo patikros naudojant konfigūraciją.

Beje! Dėl to, kad platforma užtikrintai juda žiniatinklio link, 8.3.8 versijoje kūrėjai įvedė tam tikrus programos kodo apribojimus, kurie yra susiję su formos ar programos uždarymo logika, vykdoma storuose ir plonuosiuose klientuose. Būtinai perskaitykite mūsų straipsnį, kuriame išsamiai aprašomas šis niuansas. Be to, kurse „Profesionalus sąsajų ir formų kūrimas 1C: Enterprise 8.3“ yra skyrius, skirtas modalumo atsisakymui, ir jūs galite surinkti daug naudingos ir svarbios informacijos šia tema.

Kolegos, yra du dalykai, kuriuos galite skaityti be galo: „VKontakte“ kanalas ir pakeitimų sąrašas kitoje platformos laidoje, todėl apibendrinkime galutinius rezultatus;)

Nagrinėdami pavyzdžius, leidžiančius pereiti nuo sinchroninio modelio elementų prie asinchroninio, tikriausiai jau pastebėjote, kad apskritai programinio kodo yra daugiau. Kuo daugiau kodo, tuo sudėtingesnė jo tolesnė priežiūra ir derinimas.

Be to, kodo kiekis dar labiau padidės, jei kūrimo proceso metu naudosime daugiau dialogų. Todėl kurdami taikomųjų programų sprendimus, orientuotus į darbą žiniatinklio kliente, turite atsiminti darbo paradigmą, kuri šiuo metu naudojama šiuolaikinėse žiniatinklio programose. Todėl, jei jūsų konfigūracijoje yra daug interaktyvių dialogų su vartotoju ir įspėjimų, prasminga persvarstyti šią funkciją ir naudoti kai kuriuos kitus vartotojo sąveikos organizavimo būdus.

Vietoj išvados

Mūsų ciklas „Pirmieji žingsniai kuriant 1C“ baigėsi. Jei perskaitėte jį visą, greičiausiai jau pastebėjote, kaip platforma pastaruoju metu vystosi nepaprastai greitai. Šios serijos medžiaga parašyta palyginti neseniai, tačiau buvome priversti ją rimtai atnaujinti, nes... Net per tokį trumpą laiką atsirado daug naujų svarbių funkcijų ir pakeitimų. Tokie dideli pokyčiai gali šiek tiek gluminti 1C programuotoją, jei jis visą tą laiką profesionaliai neaugo ir nesitobulino su platforma.

Specializuotuose interneto šaltiniuose dažnai galite perskaityti pradedančiųjų programuotojų ir jų brandesnių kolegų prašymus rekomenduoti medžiagą, kuri padėtų jiems suprasti plačias ir kartais, atrodo, begales 1C platformos galimybes. Tradiciškai rekomenduojame atkreipti dėmesį į mūsų programavimo kursus

14
Norėdami priversti įmonę paleisti įprastoje arba valdomoje programoje, naudokite šiuos klavišus: /RunModeOrdinaryApplication paleiskite storąjį klientą įprastu režimu, nepaisant konfigūracijos nustatymų ir... 3
Būtina, kad vartotojai negalėtų pakeisti jiems sukonfigūruotos sąsajos! Sprendimas: Norėdami jį išjungti, turite pašalinti „Įrašyti vartotojo duomenis“ tiesiai iš šakninio konfigūracijos elemento prieigos teisių. ... 2
Dabartiniame darbe vartotojas dažniausiai atidaro kelis objektus. Tai gali būti dokumentas, žinynas, ataskaita ir kt. Ankstesnėje sąsajoje nebuvo jokių problemų greitai surasti atvirą objektą ir jį atnaujinti... 2
Ankstesniame straipsnyje: Adresų klasifikatoriaus (KLADR) įdiegimas 1C, aš jums pasakiau, kas yra KLADR ir kaip jį įkelti į 1C įprastas formas (8.0-8.2). Šiame straipsnyje aš jums pasakysiu, kaip įkelti adresų klasifikatorių (KLADR) į... 2
Dažnai kurdami tam tikrą konfigūraciją vartotojai nori pridėti nuotraukas prie katalogo elemento ir saugoti jas duomenų bazėje. Šiame straipsnyje aš jums pasakysiu, kaip prijungti statybos objektus prie katalogo...

Šių komandų sintaksės pagalbininkas nurodo, kad jei konfigūracijos ypatybė Naudojimo būdasModalumasįdiegta Nenaudokite, tuomet savo programos kode turėtumėte naudoti kitas komandas, pvz RodytiKlausimą(), Rodyti įspėjimą (), ShowNumberInput():

Norint dirbti su tokiomis situacijomis, 1C 8.3 programa pateikia naują sistemos objektą „Įspėjimų aprašymas“, kuris naudojamas aprašyti programos modulio procedūros iškvietimą, kai įvyksta bet koks numatomas įvykis, pvz., uždarant formą arba nemodalinį dialogą. :

Tai yra vidinis problemos žvilgsnis tiems, kurie nori rasti pagrindinę priežastį. Visų pirma, 1C programuotojams. Kaip šioje situacijoje paprasti vartotojai gali ištaisyti klaidą nedirbdami su programos kodu? Yra labai paprastas metodas.

Klaidos ištaisymo instrukcijos paprastiems vartotojams

1 veiksmas: užbaikite:

2 veiksmas. Norėdami pradėti konfigūraciją, grįžkite į pradžios meniu. Pasirinkite meniu elementą „Konfigūracija“:

3 veiksmas. Atidarykite „Configurator“: viršutiniame skydelyje randame mygtuką „Konfigūracija“, o siūlomame sąraše pasirinkite meniu „Atidaryti konfigūraciją“:

4 veiksmas. Užveskite žymeklį ant Konfigūracijos ir dešiniuoju pelės mygtuku spustelėkite, kad iškviestumėte kontekstinį meniu, kuriame pasirenkame elementą „Ypatybės“:

5 veiksmas. Atidarykite formą „Ypatybės“:

6 veiksmas. Raskite eilutę „Modalumo naudojimo būdas“ (sąrašo apačioje):

Pagal numatytuosius nustatymus programoje 1C 8.3 reikšmė yra „Nenaudoti“. Konvertuokite reikšmę „Nenaudoti“ į reikšmę „Naudoti“:

Rezultatas:

Jei klaida „Modalinių langų naudojimas šiuo režimu draudžiamas“ 1C 8.3 išnyko, galite tęsti darbą. Dažniausiai taip nutinka.

Bet jei atlikus visus šiuos veiksmus 1C modalumo klaida išlieka, turėtumėte susisiekti su programuotojais, kurie aptarnauja ir palaiko jūsų 1C programą.

Kaip dirbti „Taxi“ sąsajoje, kaip pritaikyti darbo vietą, tinkinti parankinių naršymo juostą, kaip atlikti viso teksto paiešką, darbo su žurnalais būdai, mygtukas „pasirinkti“ dokumentuose, nuorodų į dokumentus siuntimas, tikrinimas ir kitos naujos sąsajos funkcijos – visa tai galite sužinoti iš mūsų vaizdo įrašo:

Daugiau informacijos apie tai, kaip teisingai ir greitai organizuoti naršymą per programą 1C 8.3 naudojant naująją TAXI sąsają, apie naujas galimybes naudojant pažįstamus įrankius, tokius kaip įtaisytas skaičiuotuvas, kalendorius, failų palyginimas, nuorodų į dokumentus perkėlimas kolegoms. mūsų kurse ""


Įvertinkite šį straipsnį:

„Modalinių langų naudojimas šiuo režimu yra draudžiamas“ - ši klaida dabar pradeda varginti 1C vartotojus ir programuotojus, kai atsiranda nauja 1C 8.3 platformos sąsaja - „ “.

1C technologijų platformos kūrėjai žengia koja kojon su laiku, standartizuodami savo sprendimą pagal tarptautinius programinės įrangos kūrimo standartus. Visi standartai vienaip ar kitaip susiveda į vieną sąsają, artimą tinklalapiams.

Modaliniai ir iššokantys langai laikomi bloga forma ir jau seniai nebėra normalūs kuriant programinę įrangą. Vartotojai yra įpratę dirbti „viename lange“.

Ypač dažnai matome modalumo klaidą šiuose 1C metoduose:

  • Klausimas;
  • Įspėjimas;
  • OpenValue.

Išleisdami naują „taksi“ sąsają, 1C 8 platformos kūrėjai priėmė teisingą sprendimą – bandė permokyti taikomųjų programų sprendimų kūrėjus nauju būdu. Jie įtraukė naujos platformos funkciją - „modalumo režimą“.

Greitas pataisymas

Jei neturite laiko išsiaiškinti ir reikia greitai išspręsti problemą, siūlome paprastą, bet ne iki galo teisingą sprendimą. Norėdami greitai ištaisyti klaidą, tiesiog pakeiskite modalumo režimą konfigūracijos ypatybėse.

Norėdami tai padaryti, prisijunkite prie sistemos režimu, atidarykite konfigūraciją:

Atviroje konfigūracijoje iškvieskite kontekstinį meniu dešiniuoju pelės mygtuku spustelėdami konfigūracijos šaknį ir pasirinkę „Ypatybės“:

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

Atsidarys konfigūracijos ypatybės, kurių poraštėje yra mus dominanti savybė - „Modality use mode“, pasirinkite režimą „Naudoti“:

Po to išsaugokite ir pritaikykite pakeitimus paspausdami klavišą „F7“.

Teisingas problemos sprendimas

Tinkamas būdas išspręsti šią problemą yra pakeisti konfigūraciją arba išorinį apdorojimą, kad atitiktų naujus reikalavimus.

Įspėjimas, klausimas, dialogo langai ir kiti būdai turi būti perrašyti nauju būdu.

Įtaisytuosius operatorius, kurie vadino modaliniais langais, reikia pakeisti pasikartojančiomis funkcijomis.

Pavyzdžiui:

  • Įspėjimas – ShowWarning;
  • Klausimas - ShowQuestion (detaliau - );
  • — ShowInputNumbers.

Tuo pačiu metu pasirodė specializuotas objektas - Pranešimo aprašymas.

Pakeitimo pavyzdys:

String = "" ; EnterString(styga, „Įveskite eilutės reikšmę“) Notify("Jūs įvedėte " + String) ;

Turi būti pakeistas:

String = "" ; DescriptionAlerts = Nauji aprašymo įspėjimai( „TestLineInput“, ši forma); ShowLineInput(Aprašymo įspėjimai, eilutė, „Įveskite eilutės reikšmę“) ;

Tuo pačiu metu kliente pridėkite panašią procedūrą, kuri veiks, kai vartotojas įves vertę:

&Kliento procedūroje TestInputString(Gauta vertė, PassedParameters) Export Notify("Įvedėte " + String) ; Procedūros pabaiga

Konfigūracijos metu sukurtos formos atidaromos tokiu pačiu būdu. Pakanka „OpenFormModal“ metodą pakeisti „OpenForm“, nurodant įspėjimo aprašymą ir jam reikalingą naują procedūrą.

Norėdami užblokuoti prieigą prie iškviestos formos atidarydami formą, tiesiog nurodykite reikšmę „Blokuoti savininko langą“ formos ypatybėje „Lango atidarymo režimas“:

1C:Enterprise 8.3 platformos konfigūracijos ypatybėse yra modalumo naudojimo režimas. Jei šio lauko reikšmė yra „Nenaudoti“, bandant atidaryti modalinį langą, platforma parodys pranešimą „Modalinių langų naudojimas šiuo režimu yra draudžiamas“. Tokiu atveju programos kodo vykdymas sustoja.

Šiame straipsnyje parodytas programos kodo keitimo mechanizmas, naudojant klausimo vartotojui pavyzdį, kai modalinis režimas išjungtas.

Retkarčiais, kuriant programinės įrangos produktą, atsiranda poreikis paklausti vartotojo apie atliekamus veiksmus. Pavyzdžiui, automatiškai pildant lentelės dalis. Kai prieš pildant PM reikia paklausti vartotojo apie būtinybę tai padaryti. Ir priklausomai nuo jo atsakymo, PM bus išvalytas ir papildytas arba ne.

Kodo klausimo dalis gali atrodyti maždaug taip:

Jei PM. Kiekis ()< >0 Tada atsakymas = Klausimas (" // Šioje eilutėje bus rodomas modalinis langas su klausimu ir kodo vykdymas bus sustabdytas, kol vartotojas atsakys Jei atsakymas = DialogReturnCode. Ne, tada grįžti; EndIf ; // Vartotojas sutinka tęsti PM. Išvalyti () ; EndIf ; // Atlikite tolesnius veiksmus // Programa eis čia, jei PM buvo tuščias arba vartotojas teigiamai atsakė į klausimą apie papildymą Atlikti tolesnius veiksmus () ;

Išjungus modalinį režimą, šio kodo klausimų eilutėje įvyks klaida ir tolesnis vykdymas bus nutrauktas. Taip atsitiks, nes funkcija Klausimas naudoja modalinį langą.

Esant tokiai situacijai, turite naudoti ShowQuestion procedūrą. Ši procedūra nelaukia, kol baigsis vartotojo atsakymas. Tačiau pirmasis šios procedūros parametras yra įspėjimo aprašymas, naudojamas vartotojo atsakymui sekti.

Kaip pasikeis anksčiau parašytas kodas:

// Būtina užpildyti PM duomenis // Tikrinama, ar PM pilna Jei PM. Kiekis ()< >0 Tada // PM nėra tuščias, dėl papildymo reikia paklausti vartotojo ShowQuestion(New DescriptionAlerts(" Užpildykite TCompletion" , Šis objektas, papildomi parametrai) , " PM bus papildytas. Tęsti ?", Dialogo režimasKlausimas. TaipNe) ; // Šioje eilutėje bus rodomas klausimo langas, bet kodas nenustos vykdyti Priešingu atveju // Programa eis čia, jei PM buvo tuščias Atlikite tolesnius veiksmus() ; EndIf ; // Programa čia pateks bet kuriuo atveju, nesvarbu, ar PM buvo tuščias, ar ne // (nebent, žinoma, ankstesniame kode buvo klaida) . . . // Eksportavimo procedūra tame pačiame modulyje // Skambinama vartotojui atsakius į klausimą& Kliento procedūroje Pakartotinis užpildymas TCCompletion (atsakymo rezultatas, papildomi parametrai) Eksportuoti, jei atsakymo rezultatas = dialogo grąžinimo kodas. Ne Tada // Vartotojas atsisakė tęsti Grįžti ; EndIf ; // Atlikite tolesnius veiksmus // Programa eis čia, jei PM nebuvo tuščias ir vartotojas teigiamai atsakė į klausimą apie papildymą PM. Išvalyti () ; Atlikite tolesnius veiksmus() ; Procedūros pabaiga

Taigi, kadangi programa nesustos, kai bus vykdoma ShowQuestion procedūra, būtina atidžiai tvarkyti visus įvykius
Sprendžiant šią problemą, tolesni veiksmai gali būti atliekami, kai įvyksta du įvykiai:
1. Jei PM buvo tuščias
2. Jei PM nebuvo tuščias ir vartotojas teigiamai atsakė į klausimą, papildykite

Ir atitinkamai, kadangi programa nenustoja laukti vartotojo atsakymo, šių įvykių iškvietimas turi būti paskirstytas skirtingose ​​kodo dalyse.
Todėl, kaip taisyklė, visi vykdomieji metodai, kuriuos reikia atlikti patikrinus PM išsamumą, yra įtraukiami į atskirą procedūrą.

Panašus mechanizmas naudojamas panašioms vartotojo sąveikos funkcijoms (SelectValue, SelectFromList ir kt.)

mob_info