Upozorenje bez modaliteta. Zašto se pojavljuje greška "Upotreba modalnih prozora u ovom načinu rada je zabranjena"? Upute za ispravljanje greške za obične korisnike

U članku će se raspravljati o glavnim razlozima napuštanja modaliteta na platformi 1C:Enterprise i glavnim metodama za pretvaranje dijelova koda u novi asinhroni model.

Primjenjivost

U članku se govori o asinkronom modelu za izgradnju poslovne logike, dodanoj platformi “1C:Enterprise” izdanje 8.3. Prikazane informacije su relevantne za trenutna izdanja platforme.

Odbijanje korištenja modalnih prozora na platformi 1C:Enterprise 8.3

Prilikom razvoja konfiguracije na platformi 1C:Enterprise 8, periodično se javlja potreba za pauziranjem programa dok korisnik ne donese odluku ili izvrši neku radnju.

Na primjer, kada se klikne na dugme za popunjavanje tabelarnog odeljka, korisnik treba da bude upitan da li tabelarni deo treba da se obriše kako se prethodno uneti podaci ne bi izgubili.

Ovo ponašanje se može postići, na primjer, sljedećim kodom:

&OnClient
Procedura Popunite Proizvodi(tim)
Odgovor = Pitanje (“Deo tabele će biti obrisan. Nastaviti?”, Dialogue ModeQuestion.DaNe);
Ako je odgovor = Dialogue Return Code. Da Onda
//algoritam popunjavanja
EndIf ;
EndProcedure

Kao rezultat ovog fragmenta koda, izvršenje programskog koda će biti obustavljeno, pitanje će biti prikazano na ekranu, interfejs aplikacije osim dijaloga sa pitanjem će postati nedostupan, sistem čeka da korisnik napravi odluka, a izvršavanje koda će se nastaviti tek nakon što se odgovori na pitanje.

Otvaranje modalnih prozora pozivanjem metode OpenModal() također uzrokuje pauze u izvršavanju koda i blokiranje sučelja.

Prilikom rada s konfiguracijom u načinu web klijenta kroz pretraživač, u ovom slučaju će se otvoriti novi prozor - iskačući prozor koji će blokirati ne samo trenutnu karticu, već i cijelo sučelje preglednika, uključujući druge otvorene prozore i kartice.

Iskačući prozori na Internetu se često koriste za zlonamjernu distribuciju neželjenih reklama, zbog čega pretraživači sadrže funkcije blokiranja iskačućih prozora.

U ovom slučaju, da biste radili s konfiguracijama 1C:Enterprise 8 putem preglednika, morate onemogućiti blokiranje iskačućih prozora.

Problemi se javljaju i pri radu na mobilnim uređajima. Na primjer, modalni prozori nisu podržani na iPadu.

Da biste riješili ove probleme, trebali biste koristiti blokirajuće prozore umjesto modalnih. Za korisnika vizuelno sve izgleda isto: prozor blokira interfejs web klijenta.

Međutim, prozor za blokiranje je „nacrtan“ na vrhu glavnog prozora, a blokira se samo trenutna kartica pretraživača u kojoj je konfiguracija otvorena, što vam omogućava da se prebacite na druge kartice, pošto se modalni prozori pretraživača ne koriste.

Tako se iskačući prozori ne otvaraju u pretraživaču i osigurava se rad preko web klijenta na mobilnim uređajima.

Korijenski element konfiguracije ima svojstvo “Modality mode”, koje određuje da li se modalni prozori mogu otvoriti u konfiguraciji.

Ako je odabrana opcija “Koristi”, tada se mogu otvoriti modalni prozori. Ako je odabrana opcija “Ne koristiti”, modalni prozori nisu dozvoljeni. Kada pokušate pozvati metodu koja otvara modalni prozor, sistem prikazuje poruku o grešci:

Sa ovom vrijednošću svojstva “Modality usage mode”, dozvoljeni su samo prozori za blokiranje.

Ako je odabrana opcija “Koristi s upozorenjima”, onda kada se otvore modalni prozori, u prozoru poruke se prikazuje sljedeći tekst:

Ova radna opcija se može koristiti kao srednja pri preradi konfiguracije kako bi se napustilo korištenje modalnih prozora.

Glavna razlika između blokirajućih prozora i modalnih prozora je u tome što otvaranje blokirajućeg prozora ne pauzira izvršavanje koda.

Stoga će programeri morati ponovo napisati programski kod koji koristi modalne prozore kako bi uzeli u obzir ovu osobinu.

Kod je potrebno podijeliti na dva dijela:

  • otvaranje prozora koji blokira;
  • obrada odabira korisnika.

Fragment koda dat na početku članka potrebno je prepisati na sljedeći način:

&OnClient
Procedura Popunite Proizvodi(tim)
Upozorenje = Novo DescriptionAlerts(, OvajObjekat );

Dialogue ModeQuestion.DaNe);
EndProcedure
&OnClient
Postupak (rezultat, Dodatne opcije) Izvoz
Ako je rezultat = Dialogue Return Code. Da Onda
//algoritam popunjavanja
EndIf ;
EndProcedure

Nakon izvršenja ShowQuestion() procedure, sistem se ne zaustavlja, čeka se odgovor korisnika, izvršavanje koda se nastavlja.

Korisnik će moći da napravi izbor tek nakon što se kompletna procedura završi. U ovom slučaju, eksportna procedura FillItemsQuestionComplete() će biti pozvana. Njegovo ime smo prenijeli konstruktoru objekta DescriptionAlerts.

Procedura koja će biti pozvana nakon odabira može se nalaziti u modulu obrasca, komandnom modulu ili općem neglobalnom modulu.

U razmatranom primjeru, pozvana procedura se nalazi u modulu upravljanog obrasca, pa smo proslijedili parametar ThisObject.

Razmotrimo pozivanje procedure koja se nalazi u zajedničkom modulu. Da biste to učinili, dodajte novi zajednički modul Obrada obavijesti, postavite zastavicu „Klijent (upravljana aplikacija)” za njega i nemojte postavljati zastavicu „Globalno”. Postavimo proceduru Popuni proizvode Dovršenje pitanja () u ovaj modul.

Tada će rukovalac naredbe popunjavanja izgledati ovako:

&OnClient
Procedura Popunite Proizvodi(tim)
Upozorenje = Novo DescriptionAlerts(“Popunite pitanje o proizvodima”,
ProcessingAlerts);
Tekst pitanja = „Tabelarni dio će biti obrisan. Nastaviti?" ;
ShowQuestion (Upozorenje, Tekst pitanja, Dialogue ModeQuestion.DaNe);
EndProcedure

Nakon pozivanja bilo koje metode koja otvara blokirajući prozor, procedura mora izaći, a kod koji se sljedeći treba staviti u proceduru koja će biti pozvana nakon što se prozor zatvori.

Za prijenos konteksta (pomoćnih podataka, određenih parametara, vrijednosti varijabli) iz procedure koja otvara modalni prozor u proceduru koja se zove kada je zatvorena, obezbjeđen je treći opcioni parametar konstruktora objekta: DescriptionAlerts – Dodatni parametri.

Ovaj objekt (bilo kojeg tipa) će biti proslijeđen proceduri opisanoj u Opisu upozorenja kao posljednji parametar.

Koristeći primjer odjeljka koda koji je gore razmotren, to se može učiniti na sljedeći način:

&OnClient
Procedura Popunite Proizvodi(tim)
Parametar1 = 0;
Parametar2 = 0;
Lista parametara= Nova struktura (“Parametar1, Parametar2″, Parametar1, Parametar2);
Upozorenje = Novo DescriptionAlerts(“Popunite pitanje o proizvodima”, ThisObject ,
Lista parametara);
ShowQuestion (Upozorenje, "Deo tabele će biti obrisan. Nastaviti?",
Dialogue ModeQuestion.DaNe);
EndProcedure
&OnClient
Procedura PopuniteProductsQuestionCompletion(Rezultat, Dodatne opcije) Izvoz
Ako je rezultat = Dialogue Return Code. Da Onda
//analiziramo dodatne parametre.Parameter1
//analiziramo dodatne parametre.Parameter2
EndIf ;
EndProcedure

Ako trebate proslijediti samo jednu vrijednost, onda ne možete koristiti strukturu, već dodijeliti ovu vrijednost parametru Dodatni parametri konstruktora objekta DescriptionAlerts.

Pogledajmo nekoliko primjera rada sa blokiranjem prozora.

Zadatak 1: Otvorite drugi obrazac

Iz obrasca dokumenta, klikom na dugme „Otvori parametre“ potrebno je da otvorite obrazac na kojem se nalaze dva checkbox-a Parametar1 i Parametar2, koje korisnik mora postaviti. Nakon zatvaranja obrasca, prikažite vrijednosti parametara u liniji poruke.

Kreiramo opšti obrazac “ParametersForm”, na koji postavljamo detalje Parameter1 i Parameter2, kao i naredbu CloseForm:

Rukovalac komandama izgleda ovako:

Rukovalac komandom izgleda ovako: &OnClient
Procedura CloseForm (Command)
Lista parametara= Nova struktura ( “Parametar1, Parametar2”, Parametar1 , Parametar2 );
Zatvori ( Lista parametara); EndProcedure

Za obrazac postavite svojstvo WindowOpenMode na “Blokiraj cijeli interfejs”:

Na obrazac dokumenta postavljamo naredbu OpenParameters, čiji je rukovatelj opisan na sljedeći način:

&OnClient
Procedura OpenOptions(tim)
Upozorenje = Novo DescriptionAlerts(“Otvorite opcije Završetak”, ThisObject );
OpenForm ( “GeneralForm.FormParameters”, , , , , , Obavijest);
EndProcedure
&OnClient
Procedura OpenOptionsComplete(Rezultat, Dodatne opcije) Izvoz
Ako je TypeValue (Rezultat) = Tip (“Struktura”) Onda
Za svaku vrijednost ključa iz petlje rezultata
Poruka = ​​Novo Poruka korisniku;
Message.Text = “Ključ: “” ” + KeyValue.Key + “””, vrijednost = ”
+ KeyValue.Value;
Message.Report();
EndCycle ;
EndIf ;
EndProcedure

U korisničkom načinu rada, pokretanjem konfiguracije pod web klijentom, dobivamo sljedeće rezultate:

Za uvećanje kliknite na sliku.

Način otvaranja prozora se također može specificirati u posljednjem parametru OpenForm procedure.

&OnClient
Procedura OpenOptions(tim)
Upozorenje = Novo DescriptionAlerts(“Otvorite opcije Završetak”, ThisObject );
OpenForm ( “GeneralForm.FormParameters”, , , , , , Alert
FormWindowOpenMode.LockEntireInterface
);
EndProcedure

Zadatak 2. Pitanje prilikom zatvaranja obrasca

Kada zatvarate prozor za obradu, pitajte korisnika da li zaista želi da zatvori prozor.

Ovaj problem se može riješiti korištenjem sljedećeg koda koji se nalazi u modulu obrasca za obradu:

&OnClient
Perem Potrebno je zatvoriti obrazac;
&OnClient
Procedura prije zatvaranja (Neuspjeh, StandardProcessing)
Ako ne Potrebno je zatvoriti obrazac= Tačno Onda
Neuspjeh = Tačno;
Upozorenje = Novo DescriptionAlerts(“Prije završetka završetka”, ThisObject );
ShowQuestion (Upozorenje, "Jeste li sigurni da želite zatvoriti prozor?",
Dialogue ModeQuestion.DaNe
);
EndIf ;
EndProcedure
&OnClient
Procedura Prije završetka završetka(Rezultat, Dodatne opcije) Izvoz
Ako je rezultat = Dialogue Return Code. Da Onda
Potrebno je zatvoriti obrazac= Tačno ;
zatvori();
Inače
Potrebno je zatvoriti obrazac= Nedefinirano ;
EndIf ;
EndProcedure

U proceduri obrasca Prije zatvaranja, korisniku se postavlja pitanje, zastavica Odbijanje je postavljena na Tačno, a zatvaranje obrasca se poništava.

Nakon potvrdnog odgovora na pitanje, varijabla Need toCloseForm se postavlja na True, a obrazac se ponovo zatvara.

Zadatak 3: Unos numeričke vrijednosti

Kada kliknete na dugme na obrascu za obradu, otvorite standardni dijalog za unos brojeva.

Da biste to učinili, trebate koristiti metodu ShowNumberInput() umjesto EnterNumber(), koja otvara prozor za blokiranje umjesto modalnog.

&OnClient
Procedura unosa brojeva (komanda)
Upozorenje = Novo DescriptionAlerts(“EnterNumberComplete”, ThisObject );
ShowEnterNumbers(Upozorenje, 0, “Unesite količinu”, 15, 3);
EndProcedure
&OnClient
Procedura EnteringNumbersCompleting(Rezultat, Dodatne opcije) Izvoz

Poruka = ​​Novo Poruka korisniku;
Message.Text = “Uneli ste količinu” + Rezultat;
Message.Report();
EndIf ;
EndProcedure

Nakon zatvaranja prozora za unos broja, biće pozvana procedura čiji će prvi parametar biti uneseni broj ili Nedefinirana vrijednost ako korisnik odbije ulazak.

Zadatak 4. Odabir boje

Kada kliknete na dugme na obrascu za obradu, koristeći standardni dijalog za odabir boje, korisnik određuje potrebnu boju. Postavite ovu boju za pozadinu kliknutog dugmeta.

Dodajte naredbu SelectColor u obrazac sa sljedećim rukovaocem:

&OnClient
Procedura Odabir boje (naredba)
Dijalog za odabir boje= Novo Dijalog za odabir boje;
Upozorenje = Novo DescriptionAlerts(“Odabir boje je završen”, ThisObject );
Dijalog za odabir boje. Prikaži (Upozorenje);
EndProcedure
&OnClient
Procedura ChoiceColorsCompletion(Rezultat, Dodatne opcije) Izvoz
Ako NIJE Rezultat = Nedefinirano Onda
Elementi.Odabir boje.Boja pozadine= Rezultat ;
EndIf ;
EndProcedure

Za objekte dijaloga za izbor boje (kao i dijalog za uređivanje standardnog perioda, konstruktor linije formata, dijalog redovnog rasporeda zadataka, dijalog za izbor fonta), metoda Show() otvara prozor za blokiranje.

Nakon zatvaranja prozora, biće pozvana procedura čiji će prvi parametar biti proslijeđena odabrana vrijednost (boja, font, itd.) ili vrijednost Undefined ako je korisnik odbio izbor.

Treba napomenuti da objekat FileSelectionDialog nema Show() metodu, za razliku od dijaloga za odabir boja ili fonta, budući da se implementacija ovih dijaloga značajno razlikuje.

Da biste koristili dijalog za odabir datoteke na web klijentu, prvo morate omogućiti ekstenziju datoteke.

Dijalozi implementirani preko ekstenzije datoteke ne stvaraju iste operativne probleme kao prozori modalnog pretraživača, tako da otvaranje blokirajućih prozora za FileSelectionDialog objekat nije implementirano.

U zaključku, napominjemo da je počevši od izdanja 8.3.10 podrška za modalne prozore ukinuta u web klijentu. U ovom slučaju, ako je modalna metoda pozvana u konfiguraciji, generira se izuzetak. Takođe, podrška za način rada interfejsa je ukinuta u web klijentu U odvojenim prozorima. Osim toga, iu tankom i web klijentu više nije moguće otvoriti obrazac u posebnom prozoru (kada radite u načinu sučelja Bookmarks). Ovakvi drastični koraci omogućili su da se napusti način rada interfejsa, koji više ne podržavaju svi moderni pretraživači.

Koji se praktični zaključak može izvući iz ovih informacija? A zaključak je prilično jednostavan - ako iz nekog razloga još uvijek postoje modalni pozivi u vašoj konfiguraciji, tada će se na tim mjestima u web klijentu prikazati prozor s porukom o grešci. Želio bih upozoriti da ne pokušavate "guglati" neko brzo rješenje za ovaj problem, jer... Većina savjeta se svodi na ovaj recept: u konfiguratoru na razini konfiguracije, postavite svojstvo “Modality usage mode” na “Use”. Naravno, u ovom trenutku to neće raditi samo zato što sami moderni pretraživači više ne podržavaju modalne pozive.

I imate samo dva načina da riješite gore opisani problem:

  1. Ažurirajte platformu na izdanje 8.3.10+ (8.3.11), postavite svojstvo konfiguracije “Compatibility Mode” na “Do not use” i prepišite fragmente koda koji koriste modalne metode na asinhroni model poslovne logike
  2. Preporučite svojim klijentima da koriste starije pretraživače koji još uvijek podržavaju modalne pozive (Mozilla Firefox verzije 37 i niže, Chrome verzije ispod 37, itd.).

Usput, počevši od izdanja 8.3.11, web pretraživači Microsoft Internet Explorer verzije 8 i 9 više nisu podržani.

Bavili smo se web pretraživačima u svjetlu modaliteta, sada je vrijeme da razjasnimo situaciju sa drugim klijentima.

Počevši od verzije 8.3.5, svojstvo Modality Usage Mode u tankim i debelim klijentima se poštuje samo ako je specificirana opcija komandne linije /EnableCheckModal. Ovaj parametar se automatski ubacuje u komandnu liniju samo kada se aplikacija pokrene iz konfiguratora. Ako ovaj parametar nije naveden, tada se ne generiraju izuzeci i odgovarajuća upozorenja se ne prikazuju. One. u praksi, kada se koristi debeli i tanki klijent, ne primećuje se suštinska promena u radu kada se koristi modalni režim - modalni pozivi će raditi isto kao što su radili i ranije, bez ikakvih upozorenja, kao u web klijentu.

Da bismo stavili tačku na sva "i", napominjemo da se počevši od izdanja 8.3.9, svojstvo konfiguracije "Način korištenja sinhronih poziva proširenja platforme i vanjskih komponenti" zanemaruje u debelom klijentu, dok odgovarajuće sinhrone metode rade bez generiranja izuzeci i prikazivanje upozorenja. Navedeno zanemareno svojstvo dodano je u verziji 8.3.5 kako bi podržalo asinhroni rad s vanjskim komponentama, kriptografijom i ekstenzijama za rad s datotekama u web pretraživaču Google Chrome. Jasno je da to nema nikakve veze sa debelim klijentom, pa je stoga „tiho“ ignorisanje ovog svojstva jednostavno eliminisalo nepotrebne provere za korišćenje sinhronih metoda prilikom korišćenja konfiguracije.

Između ostalog! Zbog činjenice da platforma samouvjereno ide ka webu, sa verzijom 8.3.8 programeri su uveli određena ograničenja na programski kod koji je povezan sa logikom zatvaranja obrasca ili aplikacije, koja se izvršava u debelim i tankim klijentima. Obavezno pročitajte naš članak koji detaljno pokriva ovu nijansu. Osim toga, u predmetu „Profesionalni razvoj interfejsa i obrazaca u 1C: Enterprise 8.3“ postoji poglavlje posvećeno napuštanju modaliteta, a na ovu temu možete izvući mnogo korisnih i relevantnih informacija.

Kolege, postoje dvije stvari koje možete čitati u nedogled: VKontakte feed i lista promjena u sljedećem izdanju platforme, pa hajde da sumiramo konačne rezultate;)

U procesu razmatranja primera koji vam omogućavaju da pređete sa elemenata sinhronog modela na asinhroni, verovatno ste već primetili da u opštem slučaju postoji više programskog koda. Što više koda postoji, to se više povećava složenost njegovog daljeg održavanja i otklanjanja grešaka.

Osim toga, količina koda će se još više povećati ako koristimo više dijaloga tokom procesa razvoja. Stoga, u procesu razvoja aplikativnih rješenja usmjerenih na rad u web klijentu, morate zapamtiti radnu paradigmu koja se trenutno koristi u modernim web aplikacijama. Stoga, ako vaša konfiguracija ima puno interaktivnih dijaloga s korisnikom i upozorenja, onda ima smisla preispitati ovu funkcionalnost u korist nekih drugih pristupa organizaciji interakcije korisnika.

Umjesto zaključka

Naš ciklus „Prvi koraci u razvoju 1C“ je priveden kraju. Ako ga pročitate u cijelosti, onda ste najvjerovatnije već primijetili kako se platforma u posljednje vrijeme razvija naglo. Materijal u ovoj seriji je napisan relativno nedavno, ali smo bili primorani da ga ozbiljno ažuriramo, jer... Čak iu tako kratkom vremenskom periodu pojavilo se puno novih važnih funkcionalnosti i promjena. Takve velike promjene mogu biti donekle zbunjujuće za 1C programera ako svo ovo vrijeme nije rastao i profesionalno se razvijao s platformom.

Na specijalizovanim Internet resursima često možete pročitati zahtjeve programera početnika i njihovih zrelijih kolega da preporuče materijale koji bi im pomogli da razumiju opsežne i ponekad naizgled beskrajne mogućnosti 1C platforme. Mi, tradicionalno, preporučujemo da obratite pažnju na naše kurseve programiranja

14
Za prisilno pokretanje poduzeća u običnoj ili upravljanoj aplikaciji, koristite sljedeće tipke: /RunModeOrdinaryApplication pokrenite debeli klijent u normalnom načinu rada, uprkos postavkama konfiguracije i... 3
Neophodno je da korisnici ne mogu da menjaju interfejs koji im je konfigurisan! Rješenje: Da biste ga onemogućili, morate ukloniti pravo „Sačuvaj korisničke podatke“ iz prava pristupa osnovnom konfiguracijskom elementu. ... 2
U trenutnom radu korisnik obično otvara nekoliko objekata. To može biti dokument, referentna knjiga, izvještaj, itd. U prethodnom interfejsu nije bilo problema brzo pronalaženje otvorenog objekta i njegovo ažuriranje za... 2
U prethodnom članku: Instaliranje klasifikatora adresa (KLADR) u 1C, rekao sam vam šta je KLADR i kako ga učitati u 1C regularne forme (8.0-8.2). U ovom članku ću vam reći kako učitati Klasifikator adresa (KLADR) u... 2
Često kada razvijaju određenu konfiguraciju, korisnici žele priložiti fotografije elementu direktorija i pohraniti ih u bazu podataka. U ovom članku ću vam reći kako spojiti građevinske objekte na direktorij...

Sintaksni pomoćnik za ove naredbe navodi da ako je svojstvo konfiguracije Način korištenjaModaliteta ugrađen u Nemojte koristiti, tada biste trebali koristiti druge komande u svom programskom kodu, kao što je ShowQuestion(), PrikažiUpozorenje(), Prikazunos broja():

Za rad sa ovim situacijama, program 1C 8.3 pruža novi sistemski objekat „Opis upozorenja“, koji se koristi za opisivanje poziva procedure programskog modula kada se desi bilo koji očekivani događaj, kao što je zatvaranje obrasca ili nemodalni dijalog. :

Ovo je pogled iznutra na problem za one koji žele doći do korijena. Prije svega, za 1C programere. U ovoj situaciji, kako obični korisnici mogu popraviti grešku bez rada na programskom kodu? Postoji vrlo jednostavna metoda.

Upute za ispravljanje greške za obične korisnike

Korak 1: Završite:

Korak 2. Vratite se na početni meni da započnete konfiguraciju. Odaberite stavku menija "Konfiguracija":

Korak 3. Otvorite "Konfigurator": na gornjoj ploči nalazimo dugme "Konfiguracija", a na predloženoj listi odaberite meni "Otvori konfiguraciju":

Korak 4. Postavite kursor na Konfiguracija i kliknite desnim tasterom miša da biste pozvali kontekstni meni, u kojem izaberite “Svojstva”:

Korak 5. Otvorite obrazac “Properties”:

Korak 6. Pronađite liniju “Način korištenja modaliteta” (na dnu liste):

Prema zadanim postavkama u programu 1C 8.3 vrijednost je "Ne koristiti". Pretvorite vrijednost "Ne koristiti" u vrijednost "Koristi":

rezultat:

Ako je greška "Upotreba modalnih prozora u ovom načinu rada zabranjena" u 1C 8.3 nestala, možete nastaviti s radom. To se obično dešava.

Ali ako greška modaliteta u 1C ostane nakon izvođenja svih ovih koraka, trebali biste kontaktirati programere koji servisiraju i podržavaju vaš 1C program.

Kako raditi u "Taxi" sučelju, kako prilagoditi radno mjesto, prilagođavanje navigacijske trake Favoriti, kako izvršiti pretragu po cijelom tekstu, tehnike rada sa logovima, dugme "odaberi" u dokumentima, slanje linkova na dokumente, verifikacija i druge funkcije u novom interfejsu - sve ovo možete naučiti iz našeg videa:

Više detalja o tome kako pravilno i brzo organizirati navigaciju kroz program 1C 8.3 pomoću novog TAXI sučelja, o novim mogućnostima u korištenju poznatih alata kao što su ugrađeni kalkulator, kalendar, poređenje datoteka, prijenos linkova na dokumente kolegama govori se u naš kurs ““


Molimo ocijenite ovaj članak:

„Korištenje modalnih prozora u ovom načinu rada je zabranjeno“ - ova greška sada počinje smetati korisnicima i programerima 1C dolaskom novog sučelja platforme 1C 8.3 - „ “.

Programeri tehnološke platforme 1C idu u korak s vremenom, standardizirajući svoja rješenja prema međunarodnim standardima razvoja softvera. Svi standardi se na ovaj ili onaj način svode na jedno sučelje, blizu web stranica.

Modalni i iskačući prozori smatraju se lošim oblikom i odavno su prestali biti normalni u razvoju softvera. Korisnici su navikli da rade „u jednom prozoru“.

Posebno često vidimo grešku modaliteta u sljedećim 1C metodama:

  • Pitanje;
  • Upozorenje;
  • OpenValue.

Izdavanjem novog "taxi" sučelja, programeri platforme 1C 8 donijeli su ispravnu odluku - pokušati preobučiti programere aplikativnih rješenja na novi način. Uključili su funkciju u novu platformu - “modality mode”.

Quick fix

Ukoliko nemate vremena da to shvatite i trebate brzo riješiti problem, nudimo jednostavno, ali ne sasvim ispravno rješenje. Da biste brzo ispravili grešku, samo promijenite modalitet u svojstvima konfiguracije.

Da biste to učinili, prijavite se na sistem u načinu rada, otvorite konfiguraciju:

U otvorenoj konfiguraciji, pozovite kontekstni meni desnim klikom na korijen konfiguracije i odabirom “Svojstva”:

Nabavite 267 video lekcija na 1C besplatno:

Otvorit će se svojstva konfiguracije, gdje se u podnožju nalazi svojstvo koje nas zanima - “Modality use mode”, odaberite mod “Use”:

Nakon toga, sačuvajte i primijenite promjene pritiskom na tipku “F7”.

Ispravno rješenje problema

Ispravan način za rješavanje ovog problema je izmjena konfiguracije ili eksterne obrade kako bi se zadovoljili novi zahtjevi.

Upozorenje, pitanje, dijaloški okviri i drugi modali moraju se prepisati na novi način.

Ugrađeni operatori koji su zvali modalni prozori moraju biti zamijenjeni duplim funkcijama.

Na primjer:

  • Upozorenje - ShowWarning;
  • Pitanje - ShowQuestion (detalji - );
  • — ShowInputNumbers.

Istovremeno se pojavio specijalizovani objekat - Opis obaveštenja.

Primjer zamjene:

String = "" ; EnterString(String, "Unesite vrijednost niza") Obavijesti("Uneli ste " + String) ;

Mora se zamijeniti sa:

String = "" ; DescriptionAlerts = New DescriptionAlerts( "TestLineInput", ThisForm) ; ShowLineInput(DescriptionAlerts, String, "Unesite vrijednost niza") ;

Istovremeno dodajte sličnu proceduru na klijentu koja će raditi kada korisnik unese vrijednost:

&Na klijentskoj proceduri TestInputString(ReceivedValue, PassedParameters) Izvoz Obavijesti("Uneli ste " + String) ; EndProcedure

Obrasci koji se razvijaju unutar konfiguracije otvaraju se na isti način. Dovoljno je zamijeniti metodu “OpenFormModal” sa “OpenForm”, navodeći opis upozorenja i nove procedure potrebne za njega.

Da blokirate pristup pozvanom obrascu otvaranjem obrasca, samo navedite vrijednost “Block owner window” u svojstvu obrasca “WindowOpenMode”:

U svojstvima konfiguracije na platformi 1C:Enterprise 8.3 nalazi se Mod za korištenje modaliteta. Ako je vrijednost ovog polja "Ne koristiti", onda kada pokušate otvoriti modalni prozor, platforma će prikazati poruku "Upotreba modalnih prozora u ovom načinu rada je zabranjena." U tom slučaju, izvršenje programskog koda se zaustavlja.

Ovaj članak prikazuje mehanizam za promjenu programskog koda, koristeći primjer pitanja korisniku kada je modalni način onemogućen.

S vremena na vrijeme, kada se razvija softverski proizvod, postoji potreba da pitate korisnika o radnjama koje se izvode. Na primjer, kada se automatski popunjavaju tabelarni dijelovi. Kada je prije dopunjavanja PM-a potrebno pitati korisnika o potrebi da to učini. I zavisno od njegovog odgovora, PM će biti očišćen i dopunjen, ili ne.

Dio pitanja koda može izgledati otprilike ovako:

Ako PM. Količina()< >0 Zatim Odgovor = Pitanje(" // Ovaj red će prikazati modalni prozor sa pitanjem i izvršavanje koda će se zaustaviti dok korisnik ne odgovori Ako je odgovor = DialogReturnCode. Ne Onda Vrati ; EndIf ; // Korisnik se slaže da nastavi PM. Clear() ; EndIf ; // Izvršite dalje radnje // Program će ići ovdje ako je PM bio prazan ili je korisnik pozitivno odgovorio na pitanje o dopuni Izvršite dalje radnje () ;

Kada je modalni način onemogućen, pojavit će se greška u liniji pitanja ovog koda i daljnje izvršavanje će biti prekinuto. To će se dogoditi jer funkcija Pitanje koristi modalni prozor.

U ovoj situaciji morate koristiti ShowQuestion proceduru. Ova procedura ne čeka da se dovrši odgovor korisnika. Ali prvi parametar ove procedure je opis upozorenja, koji se koristi za praćenje odgovora korisnika.

Kako će se prethodno napisani kod promijeniti:

// Potrebno je popuniti PM podatke // Provjera popunjenosti PM-a Ako PM. Količina()< >0 Onda // PM nije prazan, potrebno je pitati korisnika za dopunu ShowQuestion(Nova upozorenja o opisu(" Dopunite TCCompletion" , OvajObjekat, DodatniParametri) , " PM će biti dopunjen. Nastaviti ?", Dijalog ModeQuestion. DaNe) ; // Ovaj red će prikazati prozor sa pitanjem, ali kod neće prestati da se izvršava Inače // Program će ići ovdje ako je PM bio prazan Izvršite dalje radnje() ; EndIf ; // Program će doći ovdje u svakom slučaju, bez obzira da li je PM bio prazan ili ne // (osim ako, naravno, nije bilo greške u prethodnom kodu) . . . // Procedura izvoza u istom modulu // Poziva se nakon što korisnik odgovori na pitanje& O proceduri klijenta Popunite TCCompletion (rezultat odgovora, dodatni parametri) Izvezite ako je rezultat odgovora = dijaloški povratni kod. Ne Onda // Korisnik je odbio da nastavi Povratak ; EndIf ; // Izvršite dalje radnje// Program će ići ovdje ako PM nije bio prazan, a korisnik je pozitivno odgovorio na pitanje o dopuni

PM. Clear() ; Izvršite dalje radnje() ; EndProcedure
Dakle, pošto se program neće zaustaviti kada se izvrši ShowQuestion procedura, potrebno je pažljivo rukovati svim događajima
Prilikom rješavanja ovog problema, dalje radnje se mogu desiti kada se dese dva događaja:
1. Ako je PM bio prazan

2. Ako PM nije bio prazan i korisnik je pozitivno odgovorio na pitanje, dopunite
I, shodno tome, pošto program ne prestaje da čeka na odgovor korisnika, pozivanje ovih događaja mora biti raspoređeno u različitim delovima koda.

Stoga se u pravilu sve izvršne metode koje treba izvršiti nakon provjere kompletnosti PM-a stavljaju u posebnu proceduru.

mob_info