1c menaxhoi formularët për t'i bërë një pyetje përdoruesit. Si të përdorni pyetjen e paraqitjes në trajtuesin e formularit përpara postimit

Prezantimi

Pse ia vlen të braktisësh modalitetin dhe, për shembull, të zëvendësosh Pyetjen me ShowQuestion? Gjë është se më shumë se një vit më parë pseudonimet 1C shpallën "luftë" në dritaret modale. Përjashtimet e vetme janë ata që kanë një konfigurim të shkruar vetë, i cili nuk do të punohet në një iPad, në modalitetin e shërbimit ose duke përdorur një klient web. Dhe nëse keni Accounting 3.0 të rregullt dhe nuk do t'i jepni një llogaritari akses në bazën e të dhënave nëpërmjet një iPad, do t'ju duhet të zëvendësoni të gjitha metodat modale me ato jomodale, sepse herët a vonë "Modaliteti i përdorimit të modalitetit" do të bëhet "Mos përdor"!

Çfarë mendojnë specialistët e 1C për këtë çështje të propozuar? Për të filluar, mund të shikoni temën "Pyetja në trajtuesin e formularit BeforeClose":

E veçanta e dialogut me përdoruesin në këtë mbajtës (dhe shumë të tjerë) është se, në varësi të reagimit të përdoruesit, merret një vendim: të vazhdohen veprimet e mëtejshme ose të braktisen ato. Për ta bërë këtë, përdorni parametrin e procedurës Refuzoni. Me një përgjigje nga përdoruesi, ne refuzojmë të vazhdojmë (Refuzim = E vërtetë). Nëse përdoruesi përgjigjet ndryshe, ne vazhdojmë veprimet e mëtejshme.

Në këtë rast, vështirësia qëndron në faktin se ne do ta zbulojmë përgjigjen e përdoruesit pasi të largohemi nga konteksti i këtij mbajtësi. Në procedurën që përpunon alarmin. Dhe parametri Refuzimi duhet të vendoset në këtë mbajtës të veçantë.

Prandaj, ne veprojmë në dy hapa:

Për herë të parë, ne anulojmë pa kushte veprime të mëtejshme (Refuzim = E vërtetë) dhe ia shfaqim pyetjen përdoruesit;

Në mbajtësin e njoftimeve, në varësi të reagimit të përdoruesit, ne ose e mbyllim përsëri formularin në mënyrë programore ose nuk bëjmë asgjë.

Problemi është se mbajtësi i BeforeClose do të ekzekutohet dy herë. Dhe për të dalluar ekzekutimin e parë nga i dyti (kur përgjigja e përdoruesit dihet tashmë), ne përdorim si flamur variablin klient In ProgressClose.

Në kalimin e parë, vlera e tij është False, që do të thotë se duhet të braktisni mbylljen dhe të bëni një pyetje. Në kalimin e dytë, vlera e tij është e vërtetë, që do të thotë se pyetja nuk ka nevojë të bëhet:

&OnClient Variacioni Në vazhdim Mbyllje; Procedura &OnClient BeforeClose (Dështim, Përpunimi standard) Nëse mbyllja nuk kryhet, atëherë Dështimi=E vërtetë; ShowQuestion(New AlertDescription("Para MbylljesPërfundim", ThisObject), "A duhet ta mbyll formularin?", DialogModeQuestion.Po Jo); fundNëse; Fundi i procedurës &Për procedurën e klientit përpara përfundimit të mbylljes (Rezultati i pyetjes, parametrat e regjistrimit) Eksporto nëse rezultati i pyetjes = Kodi i kthimit të dialogut Po Pastaj ekzekuto mbylljen = e vërtetë; Mbylle (); fundNëse; Fundi i procedurës

Ky shembull është i ngjashëm me temën tonë dhe shpesh referohet në temën "Trego pyetjen në trajtuesin e formularit para postimit":

Mund të jetë gjithashtu nevoja për të bërë një pyetje në mbajtësin e ngjarjeve të formularit BeforeRecord. Si në shembullin e mëparshëm. Sidoqoftë, çështja këtu nuk zgjidhet aq lehtë. Dallimi është ky.

Në shembullin e mëparshëm, pasi ishim në mbajtësin BeforeClose, ne e dinim qartë veprimin që duhej kryer. Kjo është mbyllja e formularit. Prandaj, gjatë përpunimit të alarmit, ne shkruam me guxim Close().

Por në mbajtësin BeforeRecord nuk kemi një informacion kaq të qartë. Ne mund të përfundojmë në këtë mbajtës për dy arsye: nëse përdoruesi klikoi "Regjistro", ose nëse ai kliko "Regjistro" dhe "Mbyll". Domethënë, skenari i mëtejshëm i veprimeve është i panjohur për ne. Nuk mund ta përcaktojmë duke përdorur metoda standarde ndërsa jemi brenda këtij mbajtësi.

Prandaj, këtu mund të ofrojmë tre opsione, por, për fat të keq, të gjithë kanë disavantazhe:

* Ndryshoni logjikën e zgjidhjes së aplikacionit në mënyrë që të mos ketë dialog me përdoruesin në këtë mbajtës. Kjo nuk është gjithmonë e mundur;

* Kur përpunoni një sinjalizim duke përdorur formularin tuaj të bllokimit, bëjini përdoruesit një pyetje të detajuar që ofron një përshkrim të saktë të veprimeve të mëtejshme: Refuzoni?, Regjistro vetëm?, Regjistro dhe mbyll? Kjo mund të mos duket shumë e bukur, sepse përdoruesi tashmë ka klikuar "Ruaj dhe mbyll" dhe ai pyetet përsëri për këtë;

* Mos përdorni komanda standarde të formularit Write, "Save and Close". Në vend të kësaj, krijoni komandat tuaja në të cilat do të ekzekutoni algoritmet e nevojshme. Krijimi i ekipeve tuaja do të kërkojë kosto shtesë të punës.

Detyra është komplekse, kështu që zhvilluesit, kur bëjnë një pyetje përpara regjistrimit, para së gjithash rekomandojnë braktisjen e kësaj ideje ...

Pastaj ata ju kërkojnë të bëni një pyetje me shumë opsione: "Refuzoni, vetëm regjistroni, regjistroni dhe mbyllni". Përveç disavantazhit të përshkruar (përdoruesi tashmë zgjedh një opsion paraprakisht dhe më pas pyetet përsëri), ekziston edhe një gjë tjetër: programi mund të aksesohet gjithashtu nga Para regjistrimit nga "Anulimi". ato. A duhet të shtoj një buton tjetër? Unë mendoj se ky opsion është i shëmtuar.

Mbetet vetëm opsioni i tretë duke përdorur komandat jo standarde të formularit. Ne do ta zbatojmë atë. Dhe e vetmja komandë jo standarde që do të kemi është "Posto dhe mbyll". Si në shembullin në temën "Pyetja në trajtuesin e formularit Para Mbylljes", do të duhet të japim Refuzim = E vërtetë në thirrjen e parë dhe vetëm në thirrjen e dytë të bëjmë regjistrimin aktual. Dhe diku do të duhet të kujtojmë se kjo është hyrja e dytë në procedurën "Para Regjistrimit". 1C sugjeroi ta bëni këtë përmes një ndryshoreje të zakonshme të klientit; në shembullin në shqyrtim, kjo mund të bëhet përmes Parametrave të Regjistrimit.

Shembull i përdorimit të ShowQuestion në trajtuesin e formularit BeforeRecord

1. Së pari, duhet të heqim nga formulari komandën standarde “Rrëshqit dhe mbyll” dhe të krijojmë komandën dhe butonin tonë.

1.A. Nëse tashmë keni një buton jo standard "Rrëshqitni dhe mbyllni", jeni me fat, mund të vazhdoni me siguri në hapin 2.

1.B. Komanda standarde hiqet nëpërmjet Form Properties - Command Composition - Remove the panevoj komandë. Unë nuk do të përshkruaj se si të shtoj një komandë dhe një buton në formular, do t'ju kujtoj vetëm se butoni "Dërgo dhe Mbylle" duhet të bëhet butoni i paracaktuar.

1.V. Tani opsioni është më i vështirë për t'u zbatuar, por më i lehtë për t'u ruajtur me një konfigurim standard. Pothuajse në çdo përditësim të Kontabilitetit, programuesit arrijnë të ndryshojnë 10-50% të formularëve të dokumenteve, kështu që në një konfigurim tipik për mirëmbajtje është më e lehtë të hiqni butonin standard me kod dhe të shtoni komandën dhe butonin tuaj.

Për të filluar, në mbajtësin e formularit "Për hapjen", duhet të hiqni butonin standard "Vazhdo dhe Mbylle".

Elements.FormSwipeIClose.Visibility = False;

Shënim: për një përdorues me kufizime të mëdha në një dokument në platformën 8.3.7, butoni "Post dhe Mbylle" nuk shfaqet fare. Prandaj, për platformën 8.3.7 është më e saktë të shkruani kodin:

If Elements.Find ("FormProductIClose")<>E padefinuar Pastaj Elements.FormSwipeIClose.Dukshmëria = False; fundNëse;

NewCommand1 = ThisForm.Commands.Add("SwipeANDClose2"); NewCommand1.Action = "SwipeICclose"; NewElement = Elements.Add("FormAddAndClose2" , Type("FormButton"), Elements.FormCommandBar); NewElement.Title = "Rrëshqit dhe Mbylle"; NewElement.CommandName = NewCommand1.Name; NewElement.DefaultButton = E vërtetë; Elements.Move(NewElement, NewElement.Parent, Elements.CommandBarButtonGroup);

Në përputhje me rrethanat, ky kod përmban emra tipikë për Formularin e Dokumentit të Përgjithshëm të dokumentit "Pranimi (akte, fatura)" (për shembull, Elements.GroupButtons të CommandBar), të cilat në secilin rast specifik do të duhet të ndryshohen në tuajin.

&OnClient Procedura RunIClose(Command) Record Parametrat = Struktura e re(); Parametrat e regjistrimit.Insert("Modaliteti i regjistrimit", PredefinedValue("DocumentRecordingMode.Post")); Record Parameters.Insert("Close", True); Nëse Write(Record Parametrat) Pastaj Close(); fundNëse; Fundi i procedurës

Siç shkrova më lart, ne do të shkëmbejmë informacion midis procedurave tona përmes Parametrave të Regjistrimit. Në Para regjistrimit, ne nuk e dimë nëse kemi klikuar "Regjistro", "Post" ose "Post dhe Mbylle", për këtë kalojmë parametrin Mbyll në parametrat. Nëse ka këtë parametër në parametrat e hyrjes, atëherë duhet të mbyllni formularin pas një hyrje të suksesshme.

3. Le të themi se nuk duhet të bëjmë gjithmonë pyetjen, por vetëm kur dokumenti është përpunuar. Tani shtojmë (nëse kjo procedurë nuk ekzistonte, krijoni) një kod të ri në procedurën "Para Regjistrimit":

Nëse Jo RecordParameters.Property("Pyetja e bërë") AND Object.Passed Pastaj Failure = E vërtetë; Alert = New AlertDescription ("Trego pyetjen e plotë", ThisForm, PostOptions); Teksti i pyetjes = "Ky dokument tashmë është postuar. A dëshironi vërtet të ripostoni apo anuloni postimin e dokumentit?"; ShowQuestion(Alert, QuestionText, DialogModeQuestion.Po Jo, 20,DialogReturnCode.Jo,DialogReturnCode.No); fundNëse;

Ne do të plotësojmë pronën “Pyetja e bërë” në njoftim për të zbuluar se kur kemi hyrë për herë të dytë në procedurën “Përpara Regjistrimit” (në shembullin 1C në procedurën Para Mbylljes kjo është bërë përmes ndryshores “Mbyllja në vazhdim”). Me fjalë të tjera: në strukturën "Opsionet e regjistrimit" ekziston një pronë "Pyetja e bërë", që do të thotë se pyetja tashmë është bërë dhe përdoruesi tashmë është përgjigjur pozitivisht, por nëse nuk ka pronë, atëherë kjo është hera jonë e parë në procedurën “Para Regjistrimit”.

Pas metodës ShowQuestion, mund të shkruani edhe "Kthimi" nëse keni ndonjë kod tjetër në procedurën "Para Shkrimi" që ekzekutohet pas pyetjes.

4. Krijoni një procedurë "Trego pyetjen e plotë", të cilën programi do ta fusë kur përdoruesi t'i përgjigjet pyetjes (ose të ndodhë një afat kohor).

&Në procedurën e klientit ShowQuestionCompletion(Rezultati, Parametrat e Regjistrimit) Eksporto Nëse Rezultati = DialogReturnCode.Po Pastaj Record Parameters.Insert("Pyetja e pyetur", E vërtetë); Nëse Write(RecordParameters) ANDRecordParameters.Property("Close") Pastaj Close(); fundNëse; fundNëse; Fundi i procedurës

Në këtë procedurë përdorim veçorinë “Mbyll” të kaluar më herët. Nëse nuk ka pronë, atëherë nuk ka nevojë ta mbyllni atë.

5. Tani duhet të përpunojmë përdoruesin duke shtypur "cross". Për ta bërë këtë, na duhet një mbajtës i formularit "Para Mbylljes". Nëse nuk ekziston, atëherë mund të krijohet në formë manualisht ose programatikisht në mbajtësin "When CreatedOnServer".:

ThisForm.SetAction("Para Mbylljes","Para Mbylljes");

Procedura &OnClient BeforeClose (Dështimi, Përpunimi standard) Nëse modifikohet, atëherë Dështimi = E vërtetë; QuestionText = НStr("ru = "Të dhënat janë ndryshuar. Dëshironi të ruani ndryshimet?""); Alert = New AlertDescription("PyetjePara MbylljesPerfundim", ThisObject); ShowQuestion(Alert, QuestionText, DialogModeQuestion.Po JoCancel); fundNëse; Fundi i procedurës &Për pyetjen e procedurës së klientitPara mbylljes së përfundimit (Rezultati, Parametrat Shtesë) Eksporto Nëse Rezultati = DialogReturnCode.Po PastajRecordParameters = Struktura e re(); Record Parameters.Insert("Close", True); Nëse Write(Record Parametrat) Pastaj Close(); fundNëse; ElseIf Result = DialogReturnCode.Jo Pastaj Modifikimi = False; Mbylle (); fundNëse; Fundi i procedurës

Rezulton se kur përdoruesi klikon kryqin, ai së pari do t'i përgjigjet pyetjes "Ruaj ndryshimet?" dhe më pas do të bëhet një pyetje tjetër, të cilën e keni shkruar “Para Regjistrimit”. Nëse nuk jeni të kënaqur me këtë, mund ta kaloni parametrin "Pyetja e bërë" në "QuestionBeforeCloseCompletion" dhe atëherë nuk do të ketë pyetje të dytë.

Pyetje vs ShowPyetje

Si do ta zgjidhnim problemin nëse mund të përdornim thirrje modale? Dhe shumë thjesht, ne do të shkruanim kodin e mëposhtëm në procedurën "Para Write":

If Object.Posted then Question Text = "Ky dokument tashmë është postuar. A dëshironi vërtet të ripostoni apo anuloni postimin e dokumentit?"; Përgjigje = Pyetje(Tekst i pyetjes,ModeDialogPyetje.Po Jo,20,DialogKthimiKodi.Jo,DialoguKthimiKodi.No); Nëse Jo Përgjigje = Kodi i Kthimit të Dialogut Po Atëherë Refuzimi = E vërtetë; Kthimi; fundNëse; fundNëse;

Kjo eshte e gjitha! Nuk ka "probleme" si "Çfarë ka klikuar përdoruesi: Rrëshqitni ose Rrëshqitni dhe Mbyllni?" Dhe gjithashtu do t'ju duhet të praktikoni shtypjen e kryqit në "Para mbylljes".

Fillimisht, unë zbatova kod të ngjashëm në Enterprise Accounting 3.0. Detyra ishte si më poshtë: në një grup të caktuar kushtesh (kjo nuk është vetëm një kusht Object.Kryhet, siç tregohet në shembullin në këtë botim) nga Formulari i Dokumentit Dokumenti i Përgjithshëm Pranimi i Mallrave dhe Shërbimeve, kërkoni konfirmim shtesë për veprimet e tij. Më poshtë renditen nuancat që nuk më është dashur t'i anashkaloj, sepse... nuk ishin në lartësinë e detyrës.

Programi nuk hyn në procesorin e formularit "Përpara hyrjes" nëse: 1) përdoruesi klikon në butonin "Shëno për fshirje / zhshënj"; 2) nëse përdoruesi shtyp butonin "DT/CT" në një dokument të pakontrolluar. Dhe kjo nuk është e gjitha: nëse keni krijuar gjithçka në formularin e dokumentit siç kam shkruar, dhe përdoruesi rihyn në dokument nga formulari i listës, atëherë programi nuk do t'i bëjë atij asnjë pyetje. Ju duhet të zëvendësoni të gjithë butonat që ju interesojnë në formularin e listës me veprimet tuaja dhe të gjurmoni përdoruesit. Një dokument mund të ketë gjithashtu më shumë se një formular dokumenti, por disa (për shembull, dokumenti Marrja e mallrave dhe shërbimeve në BP 3.0, ku ka 3 forma: të përgjithshme, mallra dhe shërbime). Në çdo formë dokumenti duhet të shkruani shumë kode...

Për shkak të një mori nuancash, këshillat e para nga 1C mbeten të rëndësishme (të cilat në fillim, pa u thelluar në detyrë në detaje, mund t'ju bëjnë të buzëqeshni): "Ndryshoni logjikën e zgjidhjes së aplikacionit në mënyrë që të mos ketë dialog me përdoruesin në këtë mbajtës.”

Le të përcaktojmë se çfarë është dialogu? Thirrja e një komande Për të raportuarështë një dialog? Dhe thirrja e ekipit Shkruani numrin! Një sfidë OpenValue?

Pra, dialogu është para së gjithash një element i ndërfaqe grafike. dritare. Dhe prandaj sfida Për të raportuar nuk është një dialog, pasi nuk ka dritaren e vet të veçantë.

Dialogu nuk është vetëm një dritare. Kjo është një dritare që i hapet përdoruesit për të shfaqur informacionin dhe (ose) për të marrë një përgjigje.

Shembuj të dialogëve:

1 C: Ndërmarrja X

Departamenti i Informatikës së Aplikuar

iignichchіїїїїїїїїїзініїїїїїїїїїїїїїїїїїїїїїїїїїїїї

Për të shfaqur një dialog, duhet të telefononi komandën që korrespondon me këtë dialog dhe t'i kaloni parametrat e nevojshëm. Kjo komandë është një procedurë ose funksion i rregullt, i shkruar vetëm jo nga ne, por nga programuesit 1C. Ne nuk mund t'i ndryshojmë këto komanda, ne mund t'i thërrasim vetëm ato. Le të shohim disa prej tyre.

Paralajmërim

Një shembull i shkëlqyer i një dialogu është shfaqja e një paralajmërimi për përdoruesit:

Paralajmërim ("Kujdes!");

Çfarë shohim? Thirrja e një komande Paralajmërim, të cilit i kalon si parametër vargu “Kujdes”.

Kur kompjuteri arrin linjën ku thirret kjo komandë, përdoruesi do t'i shfaqet një dialog paralajmërues. Dhe derisa përdoruesi të mbyllë këtë dialog, kompjuteri do të presë në të njëjtën linjë. Vetëm pas mbylljes së dialogut do të vazhdojë ekzekutimi i programit dhe do të fillojë ekzekutimi i linjës pas thirrjes së dialogut.

Për shembull, le të themi se kemi këtë kod:

Paralajmërim (" 1");

Paralajmërim ("2");

Paralajmërim ("3");

Si do të zbatohet?

Së pari, kompjuteri do të arrijë në linjën nr. 1 dhe do të ekzekutojë komandën Paralajmërim me parametrin "1". Në këtë moment, përdoruesi do të shohë një kuti dialogu me tekstin "1" dhe kompjuteri do të ngrijë në këtë rresht dhe do të presë që përdoruesi të mbyllë dialogun.

Pas mbylljes së dialogut, kompjuteri do të kalojë në rreshtin nr. 2 dhe do të ekzekutojë komandën Paralajmërim tashmë me një parametër tjetër "2". Përdoruesi do të shohë përsëri kutinë e dialogut, por me tekstin "2", dhe kompjuteri do të ngrijë në rreshtin e dytë dhe do të presë që përdoruesi të mbyllë dialogun.

Kompjuteri më pas do të kalojë në rreshtin e tretë. Epo, e kështu me radhë.

Ekipi Paralajmërim parametri përgjegjës për tekstin që shfaqet nuk është i vetmi. Ka dy opsione shtesë:

Paralajmërim (,, )

Time-out- nënkupton numrin e sekondave pas të cilave dialogu do të mbyllet vetë nëse përdoruesi nuk e bën këtë.

Drejtimi- zëvendëson titullin standard "1 C: Ndërmarrja" me linjën e përdoruesit.

Për shembull, ky kod:

Paralajmërim ("Kujdes.", 5, "Vëmendje!");

do të shfaqë një dialog me tekstin "Kujdes". dhe titullin "Vëmendje!", dhe gjithashtu do të mbyllet në 5 sekonda nëse përdoruesi nuk e bën këtë më herët:

Kujdes!

Me kujdes.

Por, çka nëse duam të vendosim vetëm tekstin dhe titullin e dritares, dhe jo të vendosim afatin?

Së pari, ne mund të kalojmë zero si afat kohor:

Paralajmërim ("Kujdes.", Oh, "Vëmendje!");

Dhe së dyti, ne thjesht mund të lëmë një hapësirë ​​boshe në vend të parametrit, dhe vetë sistemi do të kuptojë se duhet të lëmë vlerën e tij të paracaktuar:

Paralajmërim ("Kujdes.", "Vëmendje!");

Për të mësuar rreth të gjithë parametrave të mundshëm të komandave të integruara 1C, përdorni asistentin e sintaksës siç përshkruhet në një nga njësitë e mëparshme.

Futja e një numri

Disa dialogë jo vetëm që shfaqin disa informacione nga ne te përdoruesi, por, përkundrazi, kthejnë një rezultat të ndërveprimit me përdoruesin. Një shembull i një dialogu të tillë është futja e një numri.

Për shembull, le të shkruajmë:

ShkruaniNumrin(Numrin);

Shkruani numrin

Pse i kalojmë një parametër komandës? Numri? Së pari, për të shfaqur vlerën fillestare të hyrjes në dialog. Dhe, së dyti, për të kthyer vlerën e futur nga përdoruesi në këtë ndryshore.

Por, çka nëse përdoruesi e braktisë hyrjen dhe klikon butonin Cancel? Si të mësoni për këtë? Rezulton se funksioni ShkruaniNumrin jo vetëm që tregon dialogun e futjes së numrave, por gjithashtu na kthehet E vërtetë nëse përdoruesi klikon butonin "OK", dhe Gënjeshtra, nëse ka anuluar hyrjen duke klikuar butonin "Anulo".

Kështu, kodi i mëposhtëm do të ishte më i saktë:

Rezultati = EnterNumber(Number);

Nëse Rezultati = E vërtetë, atëherë OpenValue ("Keni futur " + String (Numër));

OpenValue ("Ju anuluat hyrjen tuaj");

fundNëse;

Tek një ndryshore Rezultati(emri mund të jetë çdo gjë) kthen True ose False në varësi të butonit të shtypur nga përdoruesi ("OK" ose "Cancel").

Tek një ndryshore Numri kthen numrin e futur nga përdoruesi.

Pyetje

Dialogu përfundimtar që do të shikojmë është dialogu Pyet përdoruesin.

Ne e dimë emrin e komandës që shkakton këtë dialog - Pyetje.

Tani le të shohim në asistentin e sintaksës për të parë se cilat parametra pranon kjo komandë:

Pyetje (, >)

Teksti i pyetjes- kjo është vetë pyetja në formë teksti që përdoruesi do ta shohë.

Butonat- kjo është një nga vlerat e paracaktuara, e cila mund të shihet edhe në asistentin e sintaksës. Për shembull, nëse kaloni në këtë parametër:

  • Modaliteti i dialogut Pyetje.Po Jo - dialogu do të ketë vetëm dy butona Po dhe Jo.
  • Modaliteti i dialogut Pyetje.Po JoAnulo - tre butona Po, Jo dhe Anulo.
  • Mode dialoguPyetje.OkAnulo - dy butona Ok dhe Cancel.
  • Dhe opsione të tjera të butonave.

Time-out- Ky parametër është tashmë i njohur për ne.

ButonDefault- ky është butoni që do të ketë fokus kur të shfaqet dritarja. Kuptimi i tij mund të jetë:

  • Kodi i Kthimit të Dialogut.Nr
  • Kodi i Kthimit të Dialogut.Po
  • Kodi i kthimit të dialogut. Anulo
  • Dhe butona të tjerë.

Drejtimi- ky parametër është tashmë i njohur për ne.

Butoni i afatit- nëse vendosni vlerën e këtij butoni dhe parametrin Time-out, atëherë do të shfaqë numrin e sekondave të mbetura deri në mbylljen e dialogut. Mund të ketë të njëjtat vlera si parametri ButonDefault.

Siç mund ta shihni, ka shumë parametra. Por nuk keni pse t'i përdorni të gjitha. Siç vijon nga asistenti i sintaksës, kërkohen vetëm dy të parat:

Pyetje ("A e kuptoni materialin?",

Modaliteti i dialogut Pyetje.Po Jo);

Ne bëmë një pyetje. Do të ishte mirë që tani të merrnim një përgjigje nëse materiali është i qartë apo jo. Nga i njëjti ndihmës sintaksës mësojmë se butoni që është klikuar kthehet si rezultat i thirrjes së komandës Pyetje.

Rezultati = Pyetje("A e kuptoni materialin?", DialogModeQuestion.Po Jo);

Nëse Rezultati = DialogReturnCode.Po Atëherë OpenValue("Çfarë djaloshi i mrekullueshëm je!");

OpenValue ("Bëni përsëri detyrat!");

fundNëse;

Modaliteti

Të gjithë shembujt e dialogut që kemi parë janë modalë sepse kompjuteri, kur shfaq dialogun, ngrin në të njëjtën linjë dhe nuk lëviz përpara derisa dialogu të mbyllet.

Një mënyrë tjetër për ta thënë është se kur shfaqim një dialog modal, përdoruesi mund të ndërveprojë vetëm me atë dialog. Funksionimi me pjesën tjetër të sistemit është i bllokuar derisa dialogu të mbyllet.

Versionet jo-modale të dialogëve nuk e kanë këtë disavantazh, por është shumë herët që ne të kalojmë tek ata.

Për të praktikuar dhe konsoliduar materialin e kësaj njësie, rekomandohet të plotësoni detyrën e mëposhtme.

Shkruani një program që i kërkon përdoruesit "Shtypni Po për të shfaqur numrat nga 1 deri në 10, Jo për të shfaqur numrat nga 10 deri në 100, mos shtypni butonin Anulo në asnjë rrethanë". Dialogu duhet të ketë tre butona Po, Jo dhe Anulo.

Nëse përdoruesi kliko Po, ne shfaqim numrat nga 1 në 10, Jo, nga 10 në 100, Anulo, shfaqim një dialog paralajmërues me tekstin "Ju paralajmëruam të mos shtypni anulimin!"

Zgjidhje

Rezultati = Pyetje(

"Klikoni Po për të shfaqur numrat nga 1 në 10" +

", Jo - për të shfaqur numrat nga 10 deri në 100, në asnjë mënyrë" +

"Në këtë rast, mos shtypni butonin Anulo", Mode Dialogu Pyetje. Po Jo Anuloj);

Nëse Rezultati = DialogReturnCode.Po Pastaj Për Hapin = Raporti i Ciklit 1 deri në 10 (Hapi);

Cikli i Fundit;

PërndrysheNëse Rezultati = DialogReturnCode.Jo Pastaj Për Hapin = Raport 10 Me 100 Cikli (Hapi);

Cikli i Fundit;

PërndrysheIf Result = DialogReturnCode.Cancel Pastaj OpenValue("Ju paralajmëruam të mos shtypni "cancel!");

Bëni një pyetje në lidhje me kontabilitetin dhe brenda shtatë ditëve të punës do të merrni një përgjigje nga një auditor ose metodolog nga 1C.
Ju mund të bëni një pyetje në: [email i mbrojtur] ose duke përdorur një formular në internet.

Kushtet e Përdorimit

Pranohen pyetjet për temat e mëposhtme:

  • procedurën për njohjen e të ardhurave dhe shpenzimeve të organizatës;
  • tatimin dhe regjistrimin e transaksioneve specifike të biznesit;
  • plotësimi i dokumenteve të kontabilitetit (përfshirë ato parësore);
  • përcaktimi i bazës së tatueshme për taksat dhe kontributet;
  • procedura për pagimin e taksave dhe kontributeve;
  • plotësimin dhe paraqitjen e raporteve kontabël dhe tatimore, si dhe raportimin për kontributet;
  • procedurën e punësimit, shpërblimit, aplikimit të ndëshkimeve dhe shkarkimit të punonjësve;
  • procedura për caktimin e pagesave të ndryshme për stafin (pagesa për pushime, përfitime, kompensim);
  • plotësimi i dokumenteve të ndryshme të personelit.

Përjashtimet përfshijnë pyetjet

  • mbi organizimin dhe optimizimin e biznesit;
  • për optimizimin e taksimit dhe zgjedhjen e formës organizative dhe ligjore dhe regjimit tatimor;
  • lidhur me vlerësimin e rrezikut;
  • në lidhje me marrëdhëniet juridike që rregullohen me legjislacion të huaj, rajonal dhe vendor;
  • për përgatitjen dhe vlerësimin e dokumenteve me rëndësi juridike (marrëveshje, akte, pretendime, padi, urdhra, udhëzime, etj.);
  • për vlerësimin e transaksioneve të biznesit të kryera në një mënyrë të caktuar;
  • në lidhje me rregullimin e monedhës;
  • i formuluar gabim (përmbajtja e pyetjes nuk lejon që ajo të përgjigjet saktë);
  • çështjet që lidhen me taksimin e individëve.

Vetëm një pyetje pranohet nga një përdorues në të njëjtën kohë. Përdoruesi mund të dërgojë pyetjen e radhës pasi të marrë përgjigjen e pyetjes së mëparshme.

Çmimi

    Shërbimi "Përgjigjet e auditorit" përfshihet në paketat e mbështetjes së teknologjisë së informacionit të nivelit 1C:ITS PROF.

Për më tepër

Si të bëni një pyetje në mënyrë korrekte

  • Tregoni emrin dhe formën ligjore të organizatës.
  • Tregoni numrin e regjistrimit të programit për të cilin është lëshuar Marrëveshja 1C:ITS.
  • Përshkruani situatën e biznesit që shkaktoi pyetjen:
    • të formulojë kushtet në të cilat u ngrit;
    • tregoni veprimet që janë kryer;
    • tregoni veçoritë që ndikojnë në përgjigje (regjimi tatimor, periudha e transaksionit, etj.).
  • Formuloni mendimet tuaja qartë dhe me kompetencë.
  • Çdo pyetje duhet të dërgohet në një letër të veçantë. Nëse merrni një letër që përmban disa pyetje të palidhura, vetëm pyetjes së parë do t'i përgjigjet.

Forma dhe kushtet e përdorimit të përgjigjes

  • Përgjigjet jepen vetëm për pyetjet në lidhje me aktivitetet ekonomike të personit juridik ose sipërmarrësit individual që i bën ata.
  • Përgjigja për çdo pyetje jepet me shkrim dhe nuk nënkupton një opinion të detajuar auditimi.
  • Çdo përgjigje për një pyetje është rezultat i aktivitetit intelektual të punonjësve të 1C. Të drejtat e përgjigjes mbrohen nga ligji civil. E drejta ekskluzive për secilën përgjigje i përket 1C LLC. Një organizatë ose sipërmarrës individual ka të drejtë të përdorë përgjigjen e marrë për të zgjidhur situatat që lindin gjatë aktiviteteve të tyre të biznesit. Përdoruesi që bëri pyetjen nuk ka të drejtë t'u japë përgjigjen e marrë nga 1C (ose ndonjë pjesë të tij) palëve të treta ose ta përdorë atë në aktivitetet e tyre në ndonjë mënyrë tjetër, përveç zgjidhjes së çështjeve të tyre të diskutueshme. Kompania 1C rezervon të drejtën të ndalojë konsultimin me një organizatë (ose sipërmarrës individual) që ka shkelur këto kushte.
  • Përgjigjet pasqyrojnë mendimin e specialistëve të 1C dhe janë të natyrës këshilluese. Përdoruesi merr vendimin për t'i përdorur ato në praktikë në mënyrë të pavarur.
  • Kompania 1C rezervon të drejtën të përdorë pyetje dhe përgjigje në materialet konsultative pa pëlqimin e personit që bën pyetjen.
  • Informacioni mbi pyetjet e bëra (sasia dhe përmbajtja) mund të transferohet në një organizatë partnere të kompanisë 1C, me të cilën personi që bën pyetjen ka një marrëveshje mbështetjeje.

Artikulli do të diskutojë arsyet kryesore për braktisjen e modalitetit në platformën 1C: Enterprise dhe metodat kryesore për konvertimin e seksioneve të kodit në një model të ri asinkron.

Zbatueshmëria

Artikulli diskuton modelin asinkron për ndërtimin e logjikës së biznesit, platformën e shtuar "1C: Enterprise" botimi 8.3. Informacioni i paraqitur është i rëndësishëm për lëshimet aktuale të platformës.

Refuzimi për të përdorur dritare modale në platformën 1C: Enterprise 8.3

Kur zhvilloni një konfigurim në platformën 1C: Enterprise 8, lind nevoja periodikisht për të ndalur programin derisa përdoruesi të marrë një vendim ose të kryejë ndonjë veprim.

Për shembull, kur klikoni në butonin e plotësimit të seksionit tabelor, përdoruesi duhet të pyetet nëse seksioni tabelor duhet të pastrohet në mënyrë që të dhënat e futura më parë të mos humbasin.

Kjo sjellje mund të arrihet, për shembull, me kodin e mëposhtëm:

&OnClient
Procedura Plotësoni Produktet(Ekipi)
Përgjigje = Pyetje (“Pjesa e tabelës do të pastrohet. Vazhdoni?”, Modaliteti i dialogut Pyetje.Po Jo);
Nëse Përgjigje = Kodi i Kthimit të Dialogut.Po Pastaj
//algoritmi i mbushjes
FundNëse;
Fundi i procedurës

Si rezultat i këtij fragmenti kodi, ekzekutimi i kodit të programit do të pezullohet, një pyetje do të shfaqet në ekran, ndërfaqja e aplikacionit përveç dialogut me pyetjen do të bëhet e padisponueshme, sistemi pret që përdoruesi të bëjë një vendimi, dhe ekzekutimi i kodit do të vazhdojë vetëm pasi të jetë përgjigjur pyetja.

Hapja e dritareve modale duke thirrur metodën OpenModal() gjithashtu shkakton pauza në ekzekutimin e kodit dhe bllokimin e ndërfaqes.

Kur punoni me konfigurimin në modalitetin e klientit në internet përmes një shfletuesi, në këtë rast do të hapet një dritare e re - një dritare pop-up që do të bllokojë jo vetëm skedën aktuale, por edhe të gjithë ndërfaqen e shfletuesit, duke përfshirë dritaret dhe skedat e tjera të hapura.

Dritaret kërcyese në internet shpesh përdoren për të shpërndarë me qëllim të keq reklama të padëshiruara, prandaj shfletuesit përmbajnë veçori të bllokimit të dritareve.

Në këtë rast, për të punuar me konfigurimet 1C:Enterprise 8 përmes një shfletuesi, duhet të çaktivizoni bllokimin e dritareve.

Problemet lindin edhe kur punoni në pajisje celulare. Për shembull, dritaret modale nuk mbështeten në iPad.

Për të zgjidhur këto probleme, duhet të përdorni bllokimin e dritareve në vend të atyre modale. Për përdoruesin, vizualisht gjithçka duket e njëjtë: dritarja bllokon ndërfaqen e klientit në internet.

Sidoqoftë, dritarja e bllokimit "vizatohet" në krye të dritares kryesore dhe vetëm skeda aktuale e shfletuesit në të cilën është e hapur konfigurimi është e bllokuar, duke ju lejuar të kaloni në skeda të tjera, pasi dritaret modale të shfletuesit nuk përdoren.

Kështu, dritaret pop-up nuk hapen në shfletues dhe sigurohet puna përmes klientit të internetit në pajisjet celulare.

Elementi rrënjësor i konfigurimit ka një veti "Modaliteti i modalitetit", i cili përcakton nëse dritaret modale mund të hapen në konfigurim.

Nëse zgjidhet opsioni "Përdor", atëherë dritaret modale mund të hapen. Nëse zgjidhet opsioni "Mos përdor", atëherë dritaret modale nuk lejohen. Kur përpiqeni të telefononi një metodë që hap një dritare modale, sistemi shfaq një mesazh gabimi:

Me këtë vlerë të veçorisë "Modaliteti i përdorimit të modalitetit", lejohen vetëm bllokimi i dritareve.

Nëse zgjidhet opsioni "Përdor me paralajmërime", atëherë kur hapen dritaret modale, teksti i mëposhtëm shfaqet në dritaren e mesazhit:

Ky opsion pune mund të përdoret si i ndërmjetëm kur ripunoni konfigurimin në mënyrë që të braktisni përdorimin e dritareve modale.

Dallimi kryesor midis bllokimit të dritareve dhe dritareve modale është se hapja e një dritare bllokuese nuk e ndalon ekzekutimin e kodit.

Prandaj, zhvilluesit do të duhet të rishkruajnë kodin e programit që përdor dritaret modale për të marrë parasysh këtë veçori.

Kodi duhet të ndahet në dy pjesë:

  • hapja e një dritare bllokuese;
  • përpunimi i përzgjedhjes së përdoruesit.

Fragmenti i kodit i dhënë në fillim të artikullit duhet të rishkruhet si më poshtë:

&OnClient
Procedura Plotësoni Produktet(Ekipi)
Alert = E re PërshkrimiAlarmet(, KyObjekt);

Modaliteti i dialogut Pyetje.Po Jo);
Fundi i procedurës
&OnClient
Procedura (Rezultati, Opsione shtesë) Eksporti
Nëse Rezultati = Kodi i Kthimit të Dialogut.Po Pastaj
//algoritmi i mbushjes
FundNëse;
Fundi i procedurës

Pas ekzekutimit të procedurës ShowQuestion(), sistemi nuk ndalet, duke pritur përgjigjen e përdoruesit, ekzekutimi i kodit vazhdon.

Përdoruesi do të jetë në gjendje të bëjë një zgjedhje vetëm pasi të ketë përfunduar e gjithë procedura. Në këtë rast, do të thirret procedura e eksportit FillItemsQuestionComplete(). Ne ia kaluam emrin konstruktorit të objektit DescriptionAlerts.

Procedura që do të thirret pas bërjes së një përzgjedhjeje mund të vendoset në një modul formulari, një modul komandimi ose një modul i përgjithshëm jo-global.

Në shembullin e konsideruar, procedura e thirrur ndodhet në një modul të formës së menaxhuar, kështu që kaluam në parametrin ThisObject.

Le të shqyrtojmë thirrjen e një procedure të vendosur në një modul të përgjithshëm. Për ta bërë këtë, shtoni një modul të ri të përbashkët Përpunimi i Njoftimeve, vendosni flamurin "Klienti (aplikacioni i menaxhuar)" për të dhe mos vendosni flamurin "Global". Le të vendosim procedurën Plotësoni Produktet Pyetja Plotësimi () në këtë modul.

Pastaj mbajtësi i komandave të mbushjes do të duket kështu:

&OnClient
Procedura Plotësoni Produktet(Ekipi)
Alert = E re PërshkrimiAlarmet("Plotësimi i pyetjes së produkteve",
ProcessingAlerts);
Teksti i pyetjes = “Pjesa tabelare do të pastrohet. Vazhdoni?" ;
Shfaq Pyetjen (Alarmi , Teksti i pyetjes , Modaliteti i dialogut Pyetje.Po Jo);
Fundi i procedurës

Pas thirrjes së çdo metode që hap një dritare bllokimi, procedura duhet të dalë dhe kodi që ekzekutohet më pas duhet të vendoset në një procedurë që do të thirret pasi të mbyllet dritarja.

Për të transferuar kontekstin (të dhëna ndihmëse, parametra të caktuar, vlera të ndryshueshme) nga procedura që hap dritaren modale në procedurën e thirrur kur mbyllet, sigurohet një parametër i tretë opsional i konstruktorit të objektit: DescriptionAlerts – Parametrat shtesë.

Ky objekt (i çdo lloji) do t'i kalohet procedurës së përshkruar në Përshkrimin e alarmit si parametri i fundit.

Duke përdorur shembullin e seksionit të kodit të diskutuar më sipër, kjo mund të bëhet si kjo:

&OnClient
Procedura Plotësoni Produktet(Ekipi)
Parametri1 = 0 ;
Parametri2 = 0 ;
Lista e parametrave= Struktura e re (“Parametri1, Parametri2″, Parametri1, Parametri2);
Alert = E re PërshkrimiAlarmet("Plotësimi i pyetjes së produkteve", Ky objekt ,
Lista e parametrave);
ShowQuestion (Alarmi, "Pjesa e tabelës do të pastrohet. Vazhdo?",
Modaliteti i dialogut Pyetje.Po Jo);
Fundi i procedurës
&OnClient
Procedura PlotësoniProduktetPyetjaPlotësimi(Rezultati, Opsione shtesë) Eksporti
Nëse Rezultati = Kodi i Kthimit të Dialogut.Po Pastaj
//analizo Parametrat Shtesë.Parametri1
//analizoj Parametrat Shtesë.Parametri2
FundNëse;
Fundi i procedurës

Nëse duhet të kaloni vetëm një vlerë, atëherë nuk mund ta përdorni strukturën, por caktoni këtë vlerë në parametrin Additional Parameters të konstruktorit të objektit DescriptionAlerts.

Le të shohim disa shembuj të punës me bllokimin e dritareve.

Detyra 1: Hapni një formular tjetër

Nga formulari i dokumentit, duke klikuar në butonin "Hap parametrat", duhet të hapni një formular në të cilin janë dy kutitë e kontrollit Parameter1 dhe Parameter2, të cilat përdoruesi duhet të vendosë. Pas mbylljes së formularit, shfaqni vlerat e parametrave në rreshtin e mesazhit.

Ne krijojmë një formë të përgjithshme "ParametersForm", në të cilën vendosim detajet Parameter1 dhe Parameter2, si dhe komandën CloseForm:

Trajtuesi i komandave duket si ky:

Trajtuesi i komandave duket si ky: &OnClient
Procedura CloseForm (Komanda)
Lista e parametrave= Struktura e re ( "Parametri 1, Parametri 2", Parametri1 , Parametri2 );
mbyll ( Lista e parametrave); Fundi i procedurës

Për formularin, vendosni veçorinë WindowOpenMode në "Blloko gjithë ndërfaqen":

Në formularin e dokumentit vendosim komandën OpenParameters, mbajtësi i së cilës përshkruhet si më poshtë:

&OnClient
Procedura Opsionet e hapura(Ekipi)
Alert = E re PërshkrimiAlarmet("Hap opsionet Finish", KyObjekt );
OpenForm ( "GeneralForm.FormParameters", , , , , , Njoftim);
Fundi i procedurës
&OnClient
Procedura OpenOptionsComplete(Rezultati, Opsione shtesë) Eksporti
Nëse TypeValue (Rezultati) = Type (“Struktura”) Pastaj
Për çdo vlerë kyçe nga cikli i rezultatit
Mesazh = E re Mesazh për Përdoruesin;
Message.Text = "Çelësi: "" " + KeyValue. Key + """, vlera = ”
+ Vlera kryesore.Vlera;
Mesazh.Raporto();
Cikli i Fundit ;
FundNëse;
Fundi i procedurës

Në modalitetin e përdoruesit, duke ekzekutuar konfigurimin nën klientin në internet, marrim rezultatet e mëposhtme:

Për ta zmadhuar, klikoni në imazh.

Mënyra e hapjes së dritares gjithashtu mund të specifikohet në parametrin e fundit të procedurës OpenForm.

&OnClient
Procedura Opsionet e hapura(Ekipi)
Alert = E re PërshkrimiAlarmet("Hap opsionet Finish", KyObjekt );
OpenForm ( "GeneralForm.FormParameters", , , , , , Alarm
FormWindowOpenMode.LockEntireInterface
);
Fundi i procedurës

Detyra 2. Pyetje gjatë mbylljes së formularit

Kur mbyllni një dritare përpunimi, pyesni përdoruesin nëse dëshiron vërtet ta mbyllë dritaren.

Ky problem mund të zgjidhet duke përdorur kodin e mëposhtëm të vendosur në modulin e formularit të përpunimit:

&OnClient
Perem Duhet të mbyllet formulari;
&OnClient
Procedura para mbylljes (Dështimi, Përpunimi standard)
Nese jo Duhet të mbyllet formulari= E vërtetë Atëherë
Dështim = E vërtetë;
Alert = E re PërshkrimiAlarmet(“Para mbylljes së përfundimit”, KyObjekt );
ShowQuestion (Alarmi, "A jeni i sigurt që dëshironi të mbyllni dritaren?",
Modaliteti i dialogut Pyetje.Po Jo
);
FundNëse;
Fundi i procedurës
&OnClient
Procedura Para përfundimit të mbylljes(Rezultati, Opsione shtesë) Eksporti
Nëse Rezultati = Kodi i Kthimit të Dialogut.Po Pastaj
Duhet të mbyllet formulari= E vërtetë;
Mbylle ();
Përndryshe
Duhet të mbyllet formulari= E papërcaktuar;
FundNëse;
Fundi i procedurës

Në procedurën e formularit Para Mbylljes, përdoruesit i bëhet një pyetje, flamuri i Refuzimit vendoset në "E vërtetë" dhe mbyllja e formularit anulohet.

Pas një përgjigje pohuese për pyetjen, ndryshorja Need toCloseForm vendoset në True dhe formulari mbyllet përsëri.

Detyra 3: Futja e një vlere numerike

Kur klikoni në butonin në formularin e përpunimit, hapni një dialog standard të hyrjes së numrave.

Për ta bërë këtë, duhet të përdorni metodën ShowNumberInput() në vend të EnterNumber(), e cila hap një dritare bllokuese në vend të asaj modale.

&OnClient
Procedura e futjes së numrave (komandë)
Alert = E re PërshkrimiAlarmet("Fut Numri i plotë", KyObjekt );
ShowEnterNumbers(Alart, 0, “Fut sasinë”, 15, 3);
Fundi i procedurës
&OnClient
Procedura Futja e numrave Po plotësohet(Rezultati, Opsione shtesë) Eksporti

Mesazh = E re Mesazh për Përdoruesin;
Message.Text = “Keni futur një sasi” + Rezultati;
Mesazh.Raporto();
FundNëse;
Fundi i procedurës

Pas mbylljes së dritares së futjes së numrave, do të thirret një procedurë, parametri i parë i së cilës do të jetë numri i futur ose vlera e papërcaktuar nëse përdoruesi refuzon të hyjë.

Detyra 4. Zgjedhja e një ngjyre

Kur klikoni në butonin në formularin e përpunimit, duke përdorur dialogun standard të përzgjedhjes së ngjyrave, përdoruesi specifikon ngjyrën e kërkuar. Vendoseni këtë ngjyrë për sfondin e butonit të klikuar.

Shtoni komandën SelectColor në formular me mbajtësin e mëposhtëm:

&OnClient
Procedura e zgjedhjes së ngjyrës (komandë)
Dialogu i përzgjedhjes së ngjyrave= E re Dialogu i përzgjedhjes së ngjyrave;
Alert = E re PërshkrimiAlarmet("Përzgjedhja e ngjyrave e plotë", KyObjekt );
Dialogu i përzgjedhjes së ngjyrave. Shfaq (Alart);
Fundi i procedurës
&OnClient
Procedura ChoiceColorsPërfundimi(Rezultati, Opsione shtesë) Eksporti
Nëse JO Rezultati = I Padefinuar Atëherë
Elementet.Zgjedhja e ngjyrave.Ngjyra e sfondit= Rezultati;
FundNëse;
Fundi i procedurës

Për objektet e Dialogut të Përzgjedhjes së Ngjyrave (si dhe Dialogu i Redaktimit të Periudhës Standarde, Konstruktori i Linjës Format, Dialogu i Orarit të Rregullt të Detyrave, Dialogu i Zgjedhjes së Fonteve), metoda Show() hap një dritare bllokuese.

Pas mbylljes së dritares do të thirret një procedurë, parametrit të parë të së cilës do t'i kalohet vlera e zgjedhur (ngjyra, fonti, etj.) ose vlera e papërcaktuar nëse përdoruesi ka refuzuar zgjedhjen.

Duhet të theksohet se objekti FileSelectionDialog nuk ka një metodë Show(), ndryshe nga dialogët e përzgjedhjes së ngjyrave ose fontit, pasi zbatimi i këtyre dialogëve është dukshëm i ndryshëm.

Për të përdorur dialogun e përzgjedhjes së skedarit në klientin në internet, fillimisht duhet të aktivizoni shtesën e skedarit.

Dialogët e zbatuar përmes shtesës së skedarit nuk krijojnë të njëjtat probleme operative si dritaret modale të shfletuesit, kështu që hapja e dritareve bllokuese për objektin FileSelectionDialog nuk u zbatua.

Si përfundim, vërejmë se duke filluar me versionin 8.3.10, mbështetja për dritaret modale është ndërprerë në klientin në internet. Në këtë rast, nëse një metodë modale thirret në konfigurim, krijohet një përjashtim. Gjithashtu, mbështetja për modalitetin e ndërfaqes është ndërprerë në klientin në internet Në dritare të veçanta. Përveç kësaj, si në klientët e hollë ashtu edhe në ueb, nuk është më e mundur të hapet një formular në një dritare të veçantë (kur punoni në modalitetin e ndërfaqes së faqeshënuesve). Hapat e tillë drastikë bënë të mundur braktisjen e modalitetit të ndërfaqes, i cili nuk mbështetet më nga të gjithë shfletuesit modernë.

Çfarë përfundimi praktik mund të nxirret nga ky informacion? Dhe përfundimi është mjaft i thjeshtë - nëse për ndonjë arsye ka ende thirrje modale në konfigurimin tuaj, atëherë në këto vende në klientin në internet do të shfaqet një dritare me një mesazh gabimi. Unë do të doja të paralajmëroja që të mos përpiqeni të "Google" për ndonjë zgjidhje të shpejtë për këtë problem, sepse... Shumica e këshillave vijnë tek kjo recetë: në konfiguruesin në nivelin e konfigurimit, vendosni veçorinë "Modaliteti i përdorimit të modalitetit" në "Përdor". Natyrisht, për momentin, kjo nuk do të funksionojë vetëm sepse vetë shfletuesit modernë nuk mbështesin më thirrjet modale.

Dhe ju keni vetëm dy mënyra për të zgjidhur problemin e përshkruar më sipër:

  1. Përditësoni platformën për të lëshuar 8.3.10+ (8.3.11), vendosni veçorinë e konfigurimit "Modaliteti i përputhshmërisë" në "Mos përdor" dhe rishkruani fragmentet e kodit që përdorin metoda modale në një model logjik biznesi asinkron
  2. Rekomandoni klientët tuaj të përdorin shfletues më të vjetër që ende mbështesin telefonatat modale (versionet e Mozilla Firefox 37 e më poshtë, versionet e Chrome nën 37, etj.).

Nga rruga, duke filluar me versionin 8.3.11, versionet 8 dhe 9 të shfletuesve të internetit të Microsoft Internet Explorer nuk mbështeten më.

Ne kemi trajtuar shfletuesit e internetit në dritën e modalitetit, tani është koha për të sqaruar situatën me klientët e tjerë.

Duke filluar me versionin 8.3.5, vetia Modality Usage Mode në klientët e hollë dhe të trashë respektohet vetëm nëse specifikohet opsioni i linjës së komandës /EnableCheckModal. Ky parametër futet automatikisht në vijën e komandës vetëm kur aplikacioni niset nga konfiguruesi. Nëse ky parametër nuk specifikohet, atëherë nuk krijohen përjashtime dhe nuk shfaqen paralajmërimet përkatëse. ato. në praktikë, kur përdorni një klient të trashë dhe të hollë, nuk vërehet asnjë ndryshim thelbësor në funksionim kur përdorni modalitetin - thirrjet modale do të funksionojnë njësoj si kanë punuar më parë, pa prodhuar asnjë paralajmërim, si në klientin në internet.

Për të shënuar të gjitha "i"-të, vërejmë se duke filluar nga botimi 8.3.9, vetia e konfigurimit "Mënyra e përdorimit të thirrjeve sinkrone të shtesave të platformës dhe komponentëve të jashtëm" injorohet në klientin e trashë, ndërsa metodat sinkronike përkatëse funksionojnë pa gjeneruar përjashtime dhe shfaqja e paralajmërimeve. Vetia e specifikuar e injoruar u shtua në versionin 8.3.5 për të mbështetur punën asinkrone me komponentë të jashtëm, kriptografi dhe shtesa për të punuar me skedarë në shfletuesin e internetit të Google Chrome. Është e qartë se kjo nuk ka të bëjë me klientin e trashë, dhe për këtë arsye injorimi "në heshtje" i kësaj veçorie thjesht eliminoi kontrollet e panevojshme për përdorimin e metodave sinkrone gjatë përdorimit të konfigurimit.

Meqe ra fjala! Për shkak të faktit se platforma po lëviz me besim drejt ueb-it, me versionin 8.3.8 zhvilluesit kanë vendosur kufizime të caktuara në kodin e programit që lidhet me logjikën e mbylljes së një formulari apo aplikacioni, të ekzekutuar në klientë të trashë dhe të hollë. Sigurohuni që të lexoni artikullin tonë që mbulon këtë nuancë në detaje. Për më tepër, në kursin "Zhvillimi profesional i ndërfaqeve dhe formave në 1C: Ndërmarrja 8.3", ekziston një kapitull kushtuar braktisjes së modalitetit dhe mund të grumbulloni shumë informacione të dobishme dhe të rëndësishme për këtë temë.

Kolegë, ka dy gjëra që mund t'i lexoni pafundësisht: furnizimi VKontakte dhe lista e ndryshimeve në versionin e ardhshëm të platformës, kështu që le të përmbledhim rezultatet përfundimtare;)

Në procesin e shqyrtimit të shembujve që ju lejojnë të kaloni nga elementët e një modeli sinkron në atë asinkron, me siguri keni vënë re tashmë se në rastin e përgjithshëm ka më shumë kod programi. Sa më shumë kod të ketë, aq më shumë rritet kompleksiteti i mirëmbajtjes dhe korrigjimit të mëtejshëm të tij.

Përveç kësaj, sasia e kodit do të rritet edhe më shumë nëse përdorim më shumë dialog gjatë procesit të zhvillimit. Prandaj, në procesin e zhvillimit të zgjidhjeve të aplikacioneve të përqendruara në punën në një klient në internet, duhet të mbani mend paradigmën e punës që përdoret aktualisht në aplikacionet moderne të uebit. Prandaj, nëse konfigurimi juaj ka shumë dialogë ndërveprues me përdoruesin dhe paralajmërime, atëherë ka kuptim të rishikoni këtë funksionalitet në favor të disa qasjeve të tjera për organizimin e ndërveprimit të përdoruesit.

Në vend të një përfundimi

Cikli ynë "Hapat e parë në zhvillimin e 1C" ka përfunduar. Nëse e lexoni në tërësi, atëherë ka shumë të ngjarë që tashmë keni vënë re se si platforma është zhvilluar me hapa të mëdhenj kohët e fundit. Materiali në këtë seri është shkruar relativisht kohët e fundit, por ne u detyruam ta përditësojmë seriozisht, sepse... Edhe në një periudhë kaq të shkurtër kohore, janë shfaqur shumë funksionalitete dhe ndryshime të reja të rëndësishme. Ndryshime të tilla të mëdha mund të jenë disi hutuese për një programues 1C nëse ai nuk është rritur dhe zhvilluar profesionalisht me platformën gjatë gjithë kësaj kohe.

Në burimet e specializuara të Internetit, shpesh mund të lexoni kërkesat nga programuesit fillestarë dhe kolegët e tyre më të pjekur për të rekomanduar materiale që do t'i ndihmonin të kuptonin aftësitë e gjera dhe ndonjëherë në dukje të pafundme të platformës 1C. Ne, tradicionalisht, ju rekomandojmë që t'i kushtoni vëmendje kurseve tona të programimit