1s 8.3 izvješće o statusu poruke. Poruke korisniku u upravljanim obrascima (opet). Poruka povezana s atributom objekta

11.05.2020 Sigurnost

Dobar dan.

Danas ćemo razgovarati o tako jednostavnoj stvari kao što su poruke korisniku.

U 1C 8 metoda migrirana sa 7.7 - " Prijaviti(...)". Ova metoda je vrlo jednostavna, otvara prozor s porukom ako nije otvoren i tamo dodaje tekst poruke. Kao u 1C 7.7, ima drugi parametar koji definira ikonu nasuprot poruke. Ova ikona određuje važnost poruke.

Kako je vrijeme prolazilo, dobili smo kontrolirane forme u našim rukama. U kontrolirani oblici ne postoji prozor s jednom porukom. Međutim, metoda je još uvijek podržana. U novom sučelju poruke se lijepe na aktivni prozor. Kad prijeđem na drugi prozor, poruke nestaju iz prikaza, ali kad se vratim, ponovno se pojavljuju. U nekim slučajevima to nije zgodno, ali tu se ne može ništa učiniti; upravljani obrazac podrazumijeva nepostojanje glavnog prozora kojem bi se poruke mogle priložiti.

Međutim, budući da je poruka povezana s određenim obrascem, to omogućuje autorima platforme da prošire funkcionalnost jednostavne poruke. Možda ste već vidjeli u standardnim konfiguracijama da su poruke sada integrativne, klik na poruku nas pozicionira na određeno polje, dupli klik može otvoriti neki drugi element baze podataka.

Činjenica je da je sada uobičajeno koristiti ne metodu globalnog konteksta "Izvješće(...)", već objekt " Poruka korisniku". Ovaj je objekt dostupan posvuda, i na klijentu i na poslužitelju. Ima nekoliko svojstava i nekoliko metoda.

Općenito, ako korisniku trebate dati samo poruku, bez ikakve interakcije, tada samo napišite:



Poruka.Poruka();

Ove tri linije su potpuno identične metodi koju već poznajemo, pa je korištenje ovog objekta za takvu poruku besmisleno.

Glavna polja koja proširuju mogućnosti poruke su:

  • DataKey
  • Polje

Podatkovni ključ- referenca objekta informacijska baza, na koje se ova poruka odnosi, ili ključ za unos. Tako piše u potvrdi. Ako ovdje umetnemo poveznicu na dokument ili referentnu knjigu, dvostruki klik će otvoriti ovaj objekt, bez obzira na oblik u kojem je poruka prikazana. Prema tome, ako je poruka izašla u obliku dokumenta, a podatkovni ključ sadrži poveznicu na nju, tada novi oblik neće otvoriti.

Glupost se može dogoditi ako poruku izdamo u obliku predmeta koji još nije zapisan. U ovom slučaju imamo prazan link. Ali platforma nije izgubljena i jednostavno ne otvara ništa, tj. Ostaješ u formi u kakvoj si bio.

Polje- ovo je linija s nazivom polja koje treba aktivirati. I nije bitno hoće li se otvoriti forma drugog objekta ili ćemo ostati u trenutnoj formi.

Evo primjera kako to funkcionira:

Pretpostavimo da prije pisanja elementa imenika u modul obrasca provjerimo jedinstvenost atributa “Id” i, ako već postoji, prikažemo poruku:


Ako odaberete.Next() Zatim
Odbiti = Istina;
Poruka = ​​Nova porukaKorisniku;
Message.DataKey = Select.Link;
Message.Field = "id";
Message.Text = "Odjeljak s ovim ID-om već postoji";
Poruka.Poruka();
završi ako;

U u ovom primjeru Po dvostruki klik otvorit će se element imenika s istim ID-om, a polje Id će biti aktivno iu njemu će biti nagovještaj:

Čini se prikladnim, možemo promijeniti ID novog elementa i urediti stari, lako je ući u njega klikom na poruku. Ali polje u trenutnom elementu nije aktivirano, što uz veliki broj polja može biti korisnije od otvaranja forme drugog objekta. Uostalom, drugi objekt je već snimljen i koristi se, a vjerojatnost da je greška u njemu je mala. Najvjerojatnije trebamo urediti trenutni element.

Da biste to učinili, promijenite svoj kôd na sljedeći način:

//ako postoje duplikati, uzorak će sadržavati podatke
Ako odaberete.Next() Zatim
Odbiti = Istina;
Poruka = ​​Nova porukaKorisniku;
Message.DataKey = Object.Link;
Message.Field = "id";
Message.Text = "Odjeljak s ovim ID-om već postoji";
Poruka.Poruka();
završi ako;

Jedina razlika je u tome što u DataKey prosljeđujemo vezu na element koji smo otvorili. Nažalost, ovaj kôd ne radi: (Dvostruki klik otvorit će modalni prozor.

Da bi ovo funkcioniralo, postoji nijansa koju trebate ispuniti " Put do podataka". Ne mogu točno objasniti zašto, samo moram zapamtiti ovo. Otvorite drugi objekt - put podataka ne treba, pozicioniramo se unutar trenutnog - treba nam. Zaključak - bolje je uvijek ispuniti, ne možete pogriješiti. Dodajte redak kodu:

Message.DataPath = "objekt";

I sve je lijepo:

Postoji još jedna nijansa o kojoj želim razgovarati. Ako se "polje" ostavi prazno, tada se neće dogoditi pozicioniranje na kontrolnom elementu i pokraj njega se neće pojaviti opis alata. Ako je “polje” neispravno ispunjeno, tada će se pozicioniranje dogoditi na obrascu kao cjelini i pojavit će se opis alata, ali na kraju obrasca, bez reference na pravo polje za unos.

Sljedeća nijansa je da poruka ima metodu - " SetData". Na temelju objekta popunjava polja DataKey I Put do podataka. Mnogo je prikladnije učiniti sve u jednom redu. Tipično, u obliku elementa/dokumenta, imamo objekt. Jedino što treba napisati na serveru je ovo:

Message.SetData(FormAttributesValue("Object"));

Ali u unaprijed definiranoj proceduri obrasca Prije snimanja na poslužitelju zapravo već postoji parametar CurrentObject. Ali na klijentu uopće nećemo dobiti predmet. Čak iu objektnom modulu (ne u obrascu) trebate napisati ovo:

Message.SetData(ThisObject);

Zaključno, želim reći neke gadne stvari o upravljanim oblicima. Ovo se odnosi i na TAXI i na obične UV-ove. Činjenica je da se liste sučelja vrlo loše prenose na UV. Tablica koja sadrži 1000 redaka iscrtava se vrlo sporo, au web pregledniku može potrajati nekoliko minuta da se otvori. Ovo se također odnosi na popis poruka. Za eksperiment, prikažite 1000 poruka i pokušajte se prebacivati ​​između prozora. Sustav će odmah umrijeti. Štoviše, jasno je vidljivo kako sustav razmišlja o izlazu poruka. Odlazak na prozor s hrpom poruka izgleda ovako:

Prikazuje se sadržaj prozora
- koja oštro treperi i pojavljuje se traka s porukama
-sve visi i gledaš kako se svitak u prozoru poruke spušta prema dolje

Oni. Kao i do sada, u panelu s porukama nije moguće prikazati dugoročni dnevnik obrade koji sadrži nekoliko tisuća zapisa. Preporučam da se ograničite na 10 poruka. Dnevnici moraju biti ispisani u liniji s više redaka; prikazuju se gotovo trenutno, bez obzira na broj redaka. Naravno, ako provjeravate cjelovitost detalja tabličnog dijela, u njemu ima 1000 redaka i u svakom postoji pogreška, onda da, morat ćete pričekati :) Iako u ovom slučaju možete razmisliti o svom vlastiti način prikazivanja poruka, na primjer u polju HTML dokumenta.

1C Poruka korisniku prikazuje poruku korisniku (nakon dovršetka obrade) ili je sprema u red čekanja ako se poruka ne može prikazati "trenutačno", na primjer:
Poruka = ​​Nova PorukaKorisniku();
Message.Text = "Zdravo, svijete!";
Poruka.Poruka();

U mnogim slučajevima poruke se skupno generiraju tijekom određene obrade. Na primjer, kada provjeravate veliku tablicu, mnoge poruke o pogrešci mogu se pojaviti u različitim redovima tablice. Ili prilikom obrade transakcije. U tom slučaju obrada se može provesti na poslužitelju ili u njemu regulatorni zadatak te je te poruke teško prikazati.

1C Poruka korisniku upisuje poruke u "neki" red čekanja i, nakon završetka obrade, prikazuje ih korisniku, ako je moguće. Inače, cijeli popis poruka možete dobiti metodom GetMessagesToUser().

Za prikaz poruke korisniku koristeći 1C Poruka korisniku u određenom, već otvorenom obrascu, dodatno morate postaviti identifikator obrasca:
Message.DestinationIdentifier = Form.UniqueIdentifier;

Da bi se poruka 1C Poruka korisniku prikazala u skočnom prozoru pored određenog polja obrasca u kojem se kod izvršava u modulu, morate navesti "put" do njega:
Message.Field = "Ime"; //gdje je ime atribut forme
Message.Field = "Object.Name"; //gdje je Name atribut objekta (tj. imenik čiji se obrazac uređuje)
Message.Field = "Proizvodi.Cijena"; //gdje su Proizvodi tabelarični dio obrasca, Cijena je stupac ovog tabelarnog dijela

Da biste učinili isto, ali u modulu drugog objekta (generalni modul), potrebno je dodatno navesti objekt (DirectoryObject, DocumentObject itd.):
Message.Field = "Ime"; //gdje je Name atribut DirectoryObject
Poruka.SetData(DirectoryObject);
//Kada dvaput kliknete na poruku, otvorit će se obrazac objekta sa skočnom porukom za potrebno polje

Drugi način povezivanja poruke 1C poruka korisniku s podacima o objektu:
//za referentnu knjigu, dokument..
Message.DataKey = DirectoryLink;
Message.DataPath = "Objekt";

//za unose u registar
Message.DataKey = RegisterRecordManager.InitialRecordKey; //obično glavni atribut obrasca povezan s registrom
Message.DataPath = "Zapis";

U tipičnim konfiguracijama na upravljanim obrascima za tankog klijenta, na primjer, "Trade Management, Edition 11" i "Accounting, Edition 3", modul General General PurposeClientServer sadrži funkciju NotifyUser(), koja "univerzalizira" rad s ovim objektom . Sintaksa funkcija u različitim konfiguracijama je različita.

Budući da 1C poruka korisniku generira popis poruka, kako biste ga poništili (na primjer, prije izvođenja složene obrade), možete pozvati funkciju:
GetMessagesUser(True);

Članak nastavlja seriju članaka "Prvi koraci u razvoju na 1C".

U njemu ćemo pogledati metode informiranja korisnika koje su prisutne u platformi 1C:Enterprise 8, a također ćemo usredotočiti vašu pozornost na neke značajke rada ovih mehanizama; te su značajke povezane s načinom korištenja modaliteta .

Primjenjivost

U članku se govori o funkcionalnosti:

  • Sučelje u verziji “Version 8.2” za konfiguraciju razvijenu na platformi 1C:Enterprise 8.2.19.130
  • Taxi sučelje za konfiguraciju razvijeno na platformi 1C:Enterprise 8.3.4.496 do 8.3.9+
  • Taxi sučelje za konfiguraciju razvijenu na platformi 1C:Enterprise 8.3.10-8.3.11

Kako prikazati poruku korisniku u 1C

Prikaz poruka u korisničkom načinu rada rješava niz problema:

  • odraz napretka trenutnog procesa (prikaz faze izvršenja procesa; prikaz izračunatih vrijednosti dobivenih tijekom rada algoritma);
  • prikazivanje grešaka korisniku za moguće ispravljanje;
  • izdavanje preporuka;

Vrste poruka:

  • Terminatori, koji zaustavljaju izvođenje programa i ne dopuštaju mu nastavak dok korisnik ne pročita ovu poruku i ne izvrši određene radnje. Na primjer, korisniku će se na zaslonu prikazati pitanje na koje će trebati odgovoriti Da ili Ne. Sve dok korisnik ne odgovori, program se ne izvršava daljnje akcije;
  • uvodne poruke koje se jednostavno prikazuju korisniku i omogućuju daljnji rad (tj. koriste se u modu upozorenja).

Poruke o prekidu trebaju biti poruke o grešci, a uvodne poruke: preporuke, poruke o trenutnoj fazi procesa i prikaz izračunatih vrijednosti (debug ispis).

Uvodne poruke imaju za cilj pružiti korisniku neke informacije.

Potrebno je da se korisnik upozna s njom i, eventualno, poduzme neke radnje koje su opisane u ovoj poruci.

Vrlo je važno da korisnik doista pročita te poruke, stoga bi trebale sadržavati samo važne informacije.

Poruke za testiranje i otklanjanje pogrešaka ne bi trebale biti izdane korisniku, jer prije ili kasnije počet će ignorirati apsolutno sve poruke.

U konceptu upravljanog sučelja, pristup izdavanju poruke se donekle promijenio. Sada je vezan za oblik u kojem je nastao. Više se ne može zatvoriti tako da je tekst potpuno nevidljiv.

Ne možete otkvačiti okvir s porukom s obrasca.

Sintaksa funkcije:

Prijaviti (<Текст сообщения>, <Статус>)

Oni. prvi parametar je sam tekst.

Drugi parametar (status poruke) nije obavezan. Možete odrediti vrijednosti za status: Normalan, Važno, Jako važno itd.

Iz dana vrijednost ovisi o tome koja će se ikona nalaziti uz poruku. Međutim, ovo radi samo u normalnom sučelju.

U konceptu upravljanog sučelja, ikona je uvijek uskličnik i ne može se nadjačati.

Činjenica je da ako se poruka generira u vrijeme pisanja elementa imenika, može se dogoditi sljedeća situacija.

Korisnik klikne na gumb Spremi i zatvori, u ovom slučaju poruka se prikazuje u odgovarajućem prozoru (desno od obrasca).

Ali obrazac se odmah zatvara i korisnik neće vidjeti da su mu prikazane bilo kakve informacije.

Stoga se u konceptu upravljane aplikacije preporuča prikaz uvodnih poruka pomoću tzv. upozorenja. Primjer neispravne upotrebe funkcije Prijaviti predstavljen na slici.

Međutim, funkcija Prijaviti može se koristiti za prikaz informacija o određenim pogreškama, na primjer, u trenutku knjiženja dokumenta.

U tom slučaju sustav se može obavijestiti da obrazac ne treba zatvarati i pokazati korisniku koje se greške pojavljuju prilikom knjiženja dokumenta.

Funkcija Prijaviti potpuno podržan u Platformi 8.3. Može se koristiti i radit će (i u verziji datoteke i u verziji klijent-poslužitelj).

Ali također treba napomenuti da funkcija Prijaviti Postoji daljnji razvoj - ovo je klasa poruka za korisnika, koja omogućuje, osim prikazivanja poruke, njeno kontekstualno vezivanje za bilo koji element obrasca.

Na primjer, poruka o pogrešci može se vezati uz element obrasca, što je vrlo jasno korisniku. Vratit ćemo se da razmotrimo ovo pitanje malo kasnije. Funkcija Prijaviti postoji zanimljiva značajka.

Stoga se programski kod u Platformi 8.3 može izvršiti i na strani klijenta i na strani poslužitelja.

U ovom slučaju, programski kod klijenta odgovoran je za interakciju s korisnikom, tj. Na strani klijenta otvaraju se obrasci i prikazuju izvješća.

Razni dijaloški dokumenti također se prikazuju samo na klijentu. Ne mogu se izvršiti na poslužitelju jer poslužitelj nema mogućnost interakcije s korisnicima.

Ali funkcija Prijaviti može se izvršiti i na strani klijenta i na strani poslužitelja. U ovom slučaju, korištenje metode Prijaviti na poslužitelju uopće ne znači da će poruka biti prikazana na poslužitelju, jednostavno ih nema gdje prikazati.

To znači da ako ovom metodom prikažemo poruku u poslužiteljskoj proceduri, one će se akumulirati u nekom međuspremniku i bit će prikazane na ekranu tek kada poslužiteljska procedura završi i vrati se klijentu.

U ovom trenutku, sustav će zatražiti podatke iz međuspremnika i prikazati ih na ekranu.

Ista značajka vrijedi i za klasu Poruka korisniku. Na slici je prikazan primjer korištenja metode Prijaviti na strani poslužitelja.

Kao rezultat korištenja metode Prijaviti na strani poslužitelja, poruke su prikazane na ekranu na strani klijenta.

Potreban je mehanizam upozorenja kako bi obavijestio korisnika da se "nešto" dogodilo u sustavu i da "nešto" zahtijeva pozornost korisnika. Upozorenja se generiraju prema dva scenarija:

  1. Samom platformom prilikom interaktivnog snimanja ili mijenjanja objekta
  2. Od strane programera prilikom pozivanja metode u kodu .

Sama obavijest je mali prozor koji se u pravilu pojavljuje u donjem desnom kutu i obavještava o dovršenoj radnji. U roku od nekoliko sekundi postupno blijedi i nestaje. Istodobno, ako kursorom miša prijeđete preko obavijesti, ona ne nestaje i možete je pažljivo pročitati.

Osim toga, upozorenjima se može pristupiti u odgovarajućem području informacijske ploče (gumb "Povijest" u donjem lijevom kutu obrasca za prijavu u opciji sučelja "Verzija 8.2").

Da biste izradili vlastita upozorenja, morate koristiti metodu globalnog konteksta ShowUserAlert(). Njegova sintaksa prije verzije 8.3.10 prikazana je u nastavku:

ShowUser Alert (<Текст>, <НавигационнаяССылка>, <Пояснение>, <Картинка>)

Prvi parametar sadrži tekst koji će biti prikazan u obavijesti.

Zatim, kao drugi parametar, možete proslijediti određenu navigacijsku poveznicu na bilo koji element baze podataka (element koji odgovara tekstu naše poruke). Kada korisnik klikne na upozorenje, slijedit će poveznicu.

Pomoću trećeg parametra možete proslijediti objašnjenje poruke, tj. neki prošireni opis.

Također možete dodijeliti sliku koja prikazuje status obavijesti.

Treba napomenuti da su svi ovi parametri opcijski. Ispod je primjer korištenja ovu metodu(u konfiguratoru iu korisničkom načinu rada u opciji sučelja “Version 8.2”).

U verziji platforme 8.3.10.216 za sučelje “Taxi” značajno je poboljšan mehanizam obavijesti kako bi se poboljšala upotrebljivost tankog i web klijenta. Iz tog razloga, parametri proslijeđeni metodi također su se promijenili ShowUserAlert(). Sada sintaksa izgleda ovako:

ShowUserAlert(<Текст>, <ДействиеПриНажатии>, <Пояснение>, <Картинка>, <СтатусОповещенияПользователя>, <КлючУникальности>)

Vidi se da je drugi parametar, prethodno pozvan Navigacijska poveznica, dobio je novo ime ActionWhenClicked. To je zbog činjenice da je sada moguće poslati ne samo niz s navigacijskom vezom, već i opis upozorenja. To je ilustrirano na snimci zaslona u nastavku:

Kao što je vidljivo iz primjera, sada imamo mogućnost programske obrade klika na prozor obavijesti, prema logici koja je potrebna.

Sljedeći parametar Status upozorenja korisnika pojavio po prvi put. Označava status upozorenja (Informacija ili Važno).

U slučaju opcije Važno, ako korisnik nije odgovorio na poruku, nakon što se ista sakrije s ekrana, može se pročitati kroz Centar za obavijesti (više o tome u nastavku). U slučaju opcije Informacije, obavijest se briše bez pohranjivanja u ovom centru. Napišimo ponovno kod iz našeg primjera kao što je prikazano u nastavku:

Nakon izvršenja naredbe dobivamo otprilike ovakav prikaz prozora aplikacije:

Na alatnoj traci pojavio se gumb sa ikonom zvona koji poziva gore spomenuti Centar za obavijesti. Akumulira nova važna upozorenja na koja korisnik još nije odgovorio.

Ako u Centru postoje upozorenja, pored njih se pojavljuje mala narančasta točka koja privlači pažnju korisnika. Korisnik može otvoriti Centar za obavijesti, pročitati tekst i po potrebi poduzeti neke radnje.

Iz Centra se upozorenje briše klikom na gumb za brisanje, ali ako postoji neka radnja povezana s upozorenjem, čim korisnik klikne na tekst poruke, ono će također nestati.

I na kraju, posljednji dodan parametar bio je Ključ jedinstvenosti. Pomoću nje možete pronaći upozorenje prikazano na zaslonu i promijeniti ga. Ako nema upozorenja s ovim parametrom, prikazat će se novo upozorenje.

Kao što vidite, mogućnosti koje pruža odgovarajuća metoda postale su još veće! Ali to nisu sve promjene u mehanizmu obavješćivanja.

Kao što ste već mogli primijetiti, njihov izgled. Upozorenja sada izgledaju modernije i ergonomičnije, ali se ne mogu pomicati po zaslonu niti im se mijenjati veličina. Napominjemo da u našem primjeru tekst obavijesti jednostavno nije u cijelosti stao u sam prozor te će ga korisnik moći pročitati u cijelosti tek otvaranjem Centra za obavijesti. Stoga ne biste trebali pisati veliku količinu teksta u tekstu obavijesti.

Nove značajke također uključuju istodobni prikaz do tri upozorenja na zaslonu.

Ovime završavamo naše upoznavanje sa softverskim generiranjem upozorenja. Međutim, zapamtite da upozorenja ne generira samo razvojni programer programski, već i sama platforma u vrijeme interaktivnog snimanja ili mijenjanja objekta. I često ova činjenica izaziva nesporazum prvenstveno među korisnicima početnicima: zašto su potrebna ova upozorenja o uslugama, koja se, usput, ne mogu isključiti?

Zamislimo ovo jednostavna situacija: Korisnik je postavio filtar na nekom popisu radi praktičnosti. Recimo da je to učinio u obliku popisa u imeniku Nomenklatura. Onda sam se nakon nekog vremena odlučio predstaviti novi element s nazivom “Chair”, koji ne odgovara prethodno instaliranom filtru. Unosi, zapisuje i...? I ne vidi ga na popisu. Što će učiniti prosječni korisnik? Naravno, ući će u njega drugi put, ali ga više neće vidjeti. Nakon toga može uslijediti treći, četvrti, peti put. Kad mu dosadi stalno ulaziti u jedno te isto, na kraju će vas pitati: gdje sve ide?

Upravo zbog toga platforma prikazuje ova servisna upozorenja, obavještavajući korisnika da je njegova radnja dovršena. U našem primjeru, u trenutku interaktivnog snimanja, korisnik će vidjeti sljedeću obavijest:

Poruke o prekidu

Završne poruke su one poruke koje neće dopustiti rad dok korisnik ne izvrši određene radnje, tj. dok ne obradi poruku.

O mogućnosti korištenja poruka o prekidu u Platformi 8.3 razgovarat ćemo malo kasnije (u posljednje vrijeme pokušavaju ih ne koristiti, pa je razmatrani primjer relevantniji za Platformu 8.2).

Postoje dvije metode za izdavanje poruka o prekidu Upozorenje I Pitanje. Upozorenje razlikuje se od Pitanje jer ima jedno dugme u redu.

Pitanje može navesti različite skupove opcija odgovora ( Ne baš, DaNeOdustani, u redu, OKOdustani, Ponovi Odustani, Prekini ponavljanje preskakanja), koji su navedeni pomoću parametra.

Prikažimo neka upozorenja pomoću retka (na primjer, u modulu upravljane aplikacije):

Upozorenje (“Baza će sada biti otvorena”);

Za otvaranje modula upravljane aplikacije odaberite objekt u konfiguracijskom stablu Konfiguracija, nazovi kontekstni izbornik i odaberite stavku Otvorite modul upravljane aplikacije.

U tom slučaju, kada se aplikacija pokrene, prikazat će se prozor koji je modalan. Modalni prozor preklapa sve prozore koji postoje u aplikaciji. Sve dok ne obradimo ovaj prozor, daljnje radnje nisu moguće.

Funkcija radi na sličan način Pitanje.

Sintaksa:
Pitanje(<ТекстВопроса>,<Кнопки>,<Таймаут>,<КнопкаПоУмолчанию>,<Заголовок>,
<КнопкаТаймаута>);

Obavezna su samo prva dva parametra. Za drugi parametar tip podataka je kompozitni ( Način dijaloga Pitanje ili ListValues). Treći parametar ( <Таймаут> ) karakterizira vremenski interval u sekundama tijekom kojeg će sustav čekati na odgovor korisnika.

Kada interval istekne, prozor pitanja će se zatvoriti. Sličan parametar ( <Таймаут> ) također je dostupna za funkciju Upozorenje.

Kao primjer korištenja funkcije Pitanje Možete koristiti sljedeći kod, napisan u modulu upravljane aplikacije:

Imajte na umu da ove metode ( Upozorenje I Pitanje) nisu dostupni na poslužitelju. I to je logično, jer se metode sučelja ne mogu izvršiti na poslužitelju na kojem nema korisnika.

Značajke korištenja modalni prozori u Platformi 8.3

U platformi 8.3 postoje načini rada sa i bez modaliteta. Zadana postavka je Ne koristi način rada.

U tom slučaju korištenje poruka o prekidu nije moguće. Ako je potrebno koristiti poruke prekida (funkcije Upozorenje I Pitanje) trebali biste promijeniti vrijednost svojstva konfiguracije na Koristiti.

Modalni prozor se prikazuje na samom vrhu i blokira rad s drugim prozorima dok se radnje s modalnim prozorom ne završe. Osim toga, izvršenje programskog koda se zaustavlja na mjestu gdje se poziva ovaj prozor. Izvršenje koda nastavit će se tek nakon zatvaranja modalnog prozora.

Prvo, problemi s korištenjem modalnih prozora nastaju za Mobilna aplikacija. Drugo, u pregledniku se modalitet prozora implementira pomoću zasebnih skočnih prozora.

Skočni prozori često su onemogućeni zadanim postavkama preglednika. Korisnik mora biti prisiljen postaviti dozvolu za ove prozore.

Preglednici za tablet računala a za telefone u većini slučajeva uopće ne podržavaju skočne prozore.

Za zamjenu funkcija Pitanje I Upozorenje razvijene su nove metode: ShowQuestion, ShowWarning.

Ove metode omogućuju pozivanje prozora, ali ne zaustavljaju izvođenje programskog koda. Tehnički, to se postiže formiranjem pseudo-prozora unutar nadređenog prozora. Pseudo-prozor se ne preklapa s nadređenim prozorom. Nakon otvaranja takvog prozora, kôd se nastavlja izvršavati.

Primanje i obrada korisnički unesenih vrijednosti provodi se u zasebnoj proceduri koja se poziva kada se dijaloški okvir zatvori.

Sintaksa funkcije ShowWarning:

ShowWarning(<ОписаниеОповещенияОЗавершении>, <ТекстПредупреждения>, <Таймаут>, <Заголовок>)

Parametar <ОписаниеОповещенияОЗавершении> (neobavezno)

Tip podataka: Opis upozorenja.

Sadrži opis procedure koja će biti pozvana nakon zatvaranja prozora upozorenja.

Sintaksa funkcije ShowQuestion:

PrikažiPitanje(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)

Prva tri parametra su obavezna.

Ispod je primjer korištenja funkcije.

Klasa MessageToUser

Osnovna pogodnost klase poruka Poruka korisniku je da je ovo kontekstualna poruka (za razliku od metoda Upozorenje I Pitanje).

Poruke se mogu vezati uz određeni element zaslona. Ovaj je objekt također dostupan na poslužitelju.

Imajte na umu da, prvo, ovaj objekt mora biti kreiran. Na primjer: Poruka = ​​Nova porukaKorisniku;

Tako stvaramo instancu ovog objekta.

Drugo, trebate navesti tekst poruke u zasebnom svojstvu.

Treće, u vlasništvu Polje Možete odrediti kojem elementu obrasca treba priložiti ovu poruku.

Pažnja! Za vezanje na željeno polje obrasca obratite pozornost na inicijalizaciju svojstava Put do podataka I DataKey. Za dokument, kada postavljate kod u objektni modul, možete napisati:

Message.DataPath = “Object”;
Message.DataKey = ThisObject.Link;

Da biste otvorili modul dokumenta, u prozoru za uređivanje objekta (dokumenta) idite na karticu ostalo pritisni gumb Objektni modul.

Za eksperiment ćemo postaviti kod u objektni modul dokumenta.

Ispod je rezultat dobiven u korisničkom načinu rada za Platformu 8.3.

Treba napomenuti da poruke izlaze pomoću novog sistemskog objekta Poruka korisniku u općem slučaju ne završavaju. Oni. sustav će omogućiti korisniku nastavak daljnjih radnji bez odgovaranja na prikazane poruke.

Ali, prvo, te su poruke prilično uočljive. Drugo, poruke se obično prikazuju korisniku u trenutku snimanja elemenata imenika ili knjiženja dokumenata, tj. kada se provode neke provjere. A ako su otkrivene pogreške, korisnik će vidjeti te iste poruke.

Sukladno tome, kada se otkriju pogreške, transakcija se poništava, tj. zabranjeno je pisanje elementa imenika ili objavljivanje dokumenta.

Tako dolazi do svojevrsne emulacije terminacijske poruke. Budući da se radnja poništava dok korisnik ne reagira na unesenu poruku, bit će nemoguće izvršiti radnju, na primjer, objavu dokumenta.

Ali, s druge strane, moguće je zatvoriti dokument bez provođenja, bez reagiranja na poruku na bilo koji način. Stoga se ove poruke korisniku ne završavaju.

Obavijest o statusu procesa

Postoji posebna funkcija pomoću koje možete prikazati približan napredak procesa.

Sintaksa: Država(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)
Mogućnosti:<ТекстСообщения>I<Пояснение>– izborno, tip – Crta.
Tekst se prikazuje na posebnoj statusnoj traci.
<Прогресс>Parametar je također neobavezan, ali vizualni.
Tip: Broj. Vrijednost indikatora napretka (od 1 do 100).
<Картинка>također izborni parametar.
Prilikom obrade bilo kojeg događaja, periodični pozivi funkcije kao što su:

U tom slučaju, oznake se mogu promijeniti, a vrijednosti parametra Napredak mogu se promijeniti.

Funkcija se može pozvati iz jedne procedure (funkcije) ili iz više njih. Na taj način možete pratiti status izvršenja procesa.

Ako želite pobliže pogledati mehanizam obavijesti, zaustavite se odmah i pročitajte naš novi članak, Prikaz napretka dugotrajnih operacija u 8.3.10. Više ne objašnjava na početničkoj razini sve suptilnosti i podvodne stijene rad ovog mehanizma.

Završavamo upoznavanje s načinima informiranja korisnika. Nadamo se da razumijete u kojim situacijama treba koristiti jednu ili drugu metodu.

Želio bih vam još jednom skrenuti pozornost na činjenicu da ako vaša konfiguracija (verzija 8.3.3+) uključuje rad s web klijentom, tada:

  • na razini konfiguracije postavka načina modaliteta mora biti postavljena na "Ne koristi"
  • Kod mora koristiti metode modela asinkrone korisničke interakcije. Takve metode počinju riječima Pokazati ili Početi.

Više o odbijanju korištenja modalnih prozora u platformi 1C:Enterprise 8.3 možete pročitati u posljednjem članku serije. I idemo dalje i, konačno, počinjemo proučavati dugo očekivano Taxi sučelje, koje je već više puta spomenuto u našim materijalima.

Tijekom sata smo: izradili bazu, izradili obradu, izradili obrazac.

Sada ćemo vam reći 5 metoda poruka iz 1C "Zdravo, svijete!"

Ne znaju svi za najmanje dvije metode :)

Kako i gdje napisati tekst programa?

Prebacite se na karticu prozora s formom “Modul”. Pobrinut ćete se da tamo već imate neki tekst ("Procedura...").

Ako nema teksta, onda:

  • U debelom klijentu pogrešno ste dodali obrazac u obradu, ponovite ispočetka
  • U tanak klijent Zaboravili ste dodati gumb, pokušajte ponovno ispočetka.

Unutar teksta nalazi se redak:

// Umetanje sadržaja rukovatelja

Vaš zadatak je obrisati ovaj redak i na njegovo mjesto unijeti tekst programa. Nakon toga spremite obradu i otvorite je u poslovnom načinu rada.

Kada kliknete Izvrši, radnje koje ste unijeli sada će se izvršiti.

Sada prijeđimo na same metode!

Poruka u 1C, metoda 1 - najlakša

Dakle, trebali biste umjesto teksta "// Umetnuti sadržaj rukovatelja." napisati tekst programa.

Izvješće ("Zdravo svijete!");

Zapravo to je sve :)

Poruka u načinu rada Enterprise u debelom klijentu bit će na dnu prozora 1C, u tankom klijentu - desno u prozoru za obradu.

Ovo je najjednostavnija metoda koju programeri vrlo često koriste.

Poruka u 1C, metoda 2 - također jednostavna

Upozorenje("Zdravo svijete!");

Zapravo to je sve :)

Poruka u načinu rada Enterprise u obje opcije klijenta bit će u skočnom prozoru.

Poruka u 1C, metoda 3 - pojavila se samo u 1C verziji 8.2

ShowUserAlert("Zdravo, svijete!","Zdravo zaista!");

Ova se metoda pojavila samo u 1C verziji 8.2. Ovo je skočni prozor u donjem desnom kutu zaslona koji s vremenom nestaje.

Poruka u 1C, metoda 4 - programer

Izbaci iznimku "Zdravo, svijete!";

Može doći do pogreške prilikom izvođenja bilo kojeg programa. Ponekad se ova greška može izračunati unaprijed (na primjer, trebate izračunati a = b/c i u trenutku izvođenja programa postane poznato da je c jednako 0).

U tom slučaju postoji način da se greška prijavi ovom metodom.

Poruka u 1C, metoda 5 - tehnološki napredna, samo za standardnu ​​konfiguraciju

Opće namjene.ReportError("Zdravo, svijete!");

1C programer mora poznavati ne samo metode programiranja koje su dostupne u 1C platformi, već i one koje su dostupne u standardnim konfiguracijama.

Početnici, kada pokušavaju dodati bilo koju standardnu ​​konfiguraciju, počinju ponovno izmišljati kotač.

Evo savršenog primjera. Ova je značajka prisutna u mnogim standardnim konfiguracijama (samo debeli klijent!). Čini se da je rezultat jednak djelovanju metode 1.
Međutim, ne - u nekim konfiguracijama (na primjer soft starter), poruke o pogrešci se dupliciraju u zapisniku. Također kada dodatne postavke poruka izgleda potpuno drugačije.

Dakle, sada se možete osjećati kao pravi programer!

Upravo to je 1C programiranje. Naravno, pravo programiranje je mnogo složenije i zahtijeva mnogo znanja, ali Generalna ideja Sada ste primili.

Sretno!

p.s. PDF verzija lekcije sadrži snimke zaslona kako biste lakše napravili vlastito iskustvo.

P.P.S. Lekcija uključuje 5 videa s primjerima izrade baze za programiranje, izrade obrade, programiranja u debelom i tankom klijentu.

Ali neki aspekti rada s objektom "Poruka korisniku" ostali su nepokriveni u njemu. Na primjer, što napisati u polje "Polje" ako ime

props razlikuje se od naziva polja na obrascu. Što napisati u polje "Put do podataka". I na kraju, najukusnija stvar je kako raditi s tabličnim dijelom.

Sva istraživanja prikupljaju se u test bazi podataka. Sadrži nekoliko priručnika i dokument. Obrazac dokumenta ima nekoliko gumba, kada se klikne, prikazuju se različite vrste poruka. E, sad o svakom trenutku redom, idemo!!!

Sve što pišem u nastavku testirano je na 1C:Enterprise 8.3 (8.3.7.1860). Nije najnoviji do sada, ali pišem ga onakvog kakav jest.

1. Samo poruka.

Počnimo s nečim jednostavnim: samo prikažite poruku u obrascu, bez pozivanja na polja, podatke itd.

O tome sam ranije govorio, ali zbog integriteta članka ću to ponovno napisati. Pogotovo s nekim dodacima.

Poruka1 = nova PorukaKorisniku;
Message1.Text = "1. samo poruka bez ikakvih veza";
Poruka1.Poruka();

Ovaj se kod može izvršiti i na klijentu i na poslužitelju. Ovo je gotovo potpuni analog linije:

Report("1. samo poruka bez ikakvih veza");

Zašto je ispravnije komunicirati ne postupkom, nego objektom. Činjenica je da se poruke izdane u pozadinskom zadatku (na primjer, prilikom izvršavanja rutinske procedure prema rasporedu) nigdje ne prikazuju. Ali ono što se priopćava objektom može biti

primiti na poslužitelju u sesiji klijenta pomoću metode "GetMessagesToUser(...)" dok je pozadinski posao živ.

Evo malo sam ti lagao, nikad nisam provjerio. Sasvim je moguće da se poruke izdane procedurom “Prijavi(...)” također mogu dobiti iz pozadinskog posla, ali možda i ne. U dokumentaciji se o tome ne govori, što znači mi

nećemo to učiniti.

Dakle, zaključak: sada poruke uvijek učinite objektom, to je dobar oblik nova platforma, i zaboravite postupak. Ako ne volite pisati poruku u tri retka, napišite svoj postupak u općem modulu i budite sretni. Čak će i biti

vrlo dobar ton, jer Dobit ćeš cijela linija prednosti:

1. Proširena funkcionalnost novog objekta (više detalja u nastavku)

2. Sposobnost prikazivanja poruka na vlastiti način. Na primjer, u tekstualno polje ili datoteku, a ne u okvir s porukom.

3. Mogućnost sječe. Na primjer, možete spremiti sve poruke u bazu podataka ili u datoteku, ili ih duplicirati u zapisnik, da biste to učinili, samo se poigrajte sa svojom uobičajenom procedurom modula. A onda je rasprava da program nije ništa za korisnika

nije obavijestio prestat će zauvijek.

2. Poruka povezana s atributom objekta.

Kao što sam napisao u prethodnom članku, za vezanje morate ispuniti polja "Field" i "PathKData". Ali u članku nisam detaljno obradio temu.

Dakle, primjer 2 u dokumentu postoji atribut zaglavlja "Klijent", morate se postaviti na njega i prijaviti nešto u proceduri klijenta. Evo koda koji to radi:

Poruka2 = nova PorukaKorisniku;
Message2.Text = "2. Poruka povezana s atributom zaglavlja klijenta";
Message2.Field = "Klijent";
Message2.DataPath = "objekt";
Poruka2.Poruka();

A evo i nijansi:

1. Njiva nije njiva, jer u mom primjeru kontrola se zove "FieldClient", a prop objekta je "Klijent". Redak Message2.Field = "FieldClient" ne radi.

2. Put do podataka nije “Object.Client”, već jednostavno “Object”, jer Moramo prikazati poruku ne u obliku druge ugovorne strane, već u obliku trenutnog dokumenta. "Object.Client" - ne radi.

3. Ovo je primjer rada na klijentu. U poslužiteljskim procedurama, to je malo drugačije. Ovo je VAŽNO, nemojte brkati vezanje poruka na poslužitelju i na klijentu.

Navest ću još jedan primjer kako biste mogli osjetiti razliku između klijenta i poslužitelja. Činjenica je da imamo na raspolaganju metodu objekta “SetData(...)”. Pomoćnik sintakse kaže "Objekt s kojim bi trebao biti

poruka je povezana." Ovo je važno. Na primjer, napišimo sljedeći kod:

Poruka3 = nova PorukaKorisniku;
Poruka3.SetData(Object);
Message3.Text = "3. Poruka povezana s atributom zaglavlja Number, ali neće biti povezana jer Objekt nije objekt";
Poruka3.Polje = "Broj";
Poruka3.Poruka();

Ovaj kod neće raditi jer... na klijentu, atribut obrasca “Object” uopće nije objekt, već neka gadna stvar, ovo je ono što nam debugger govori o varijabli objekta:

Točnije, korisnik će naravno vidjeti poruku, ali dvaput dodirom neće dovesti do ničega.

Sada pokušajmo istu stvar, ali na poslužitelju. Kreirajmo poslužiteljsku proceduru "Report4OnServer()" i pozovimo je s klijenta

&Na poslužitelju
Procedura Report4OnServer()
Poruka4 = nova PorukaKorisniku;
Poruka4.SetData(FormAttributesValue("Object"));
Message4.Text = "4. Poruka povezana s atributom zaglavlja organizacije";
Message4.Field = "Organizacija";
Poruka4.Poruka();
Kraj postupka

Ovdje će sve biti u redu, jedina primjedba na kod je da se varijabla “object” mora pretvoriti iz “FormDataStructure” u pravi objekt pozivanjem procedure “FormAttributesValue(...)”.

Zaključak: metoda "SetData(...)" može se koristiti samo na poslužitelju jer Samo na poslužitelju je moguće primiti objekt.

3. Poruke vezane uz atribut tabelarnog dijela objekta

Izostavio sam ovu temu u prošlom članku. Poznavajući gore opisane nijanse, ovdje ne bi trebalo biti problema. Ovdje je radni kod klijenta:

Poruka5 = nova PorukaKorisniku;
Message5.Text = "5. Količina polja u redu 1";
Message5.Field = "Proizvodi.Količina";
Message5.DataPath = "objekt";
Poruka5.Poruka();

Iako su nijanse gotovo iste, ponavljanje je matična lekcija:

1. Polje nije naziv kontrole; moja kontrola se zove "ProductsQuantity", a ne samo "Quantity". "Proizvodi" je naziv tabličnog dijela, a ne kontrolni element povezan s tabličnim dijelom.

2. Put do podataka je objekt, samo objekt.

3. Broj retka u uglate zagrade- numeriranje od nule i to je broj retka, a ne identifikator retka u prikupljanju podataka obrasca. Kada se linije pomaknu ili izbrišu, identifikator dodijeljen prilikom otvaranja obrasca se sprema, a brojevi linija se ponovno izračunavaju.

To je to za ovaj put. Odmah ću spomenuti neotkrivene teme o kojima ću pisati kasnije:

1. Kako vezati poruke ne za trenutni objekt, već za bilo koji objekt, tako da se dvostrukim klikom otvori drugi obrazac

2. Kako vezati poruke za formu gdje nema objekata

3. Kako primati poruke o statusu izvršenja dugog pozadinskog posla

4. Što je "podatkovni ključ" i kada ga trebate koristiti?

Ispod je baza podataka s primjerom, u njoj idite na dokument i pritisnite tri gumba zauzvrat. Šifra u modulu obrasca dokumenta.