Poruka korisniku 1c 8 2. Poruke korisniku u upravljanim oblicima (još jednom)

Ali neki aspekti rada sa objektom „Poruka korisniku“ ostali nisu obuhvaćeni u njemu. Na primjer, šta napisati u polje "Polje" ako je ime

props se razlikuje od naziva polja na obrascu. Šta napisati u polju "Putanja do podataka". I na kraju, najukusnije je kako raditi sa tabelarnim dijelom.

Sva istraživanja se prikupljaju u test bazi podataka. Sadrži nekoliko priručnika i jedan dokument. Obrazac dokumenta ima nekoliko dugmadi, kada se klikne na njih, prikazuju se različite vrste poruka. Pa, sad o svakom trenutku po redu, idemo!!!

Sve što pišem u nastavku testirano je na 1C:Enterprise 8.3 (8.3.7.1860). Nije najnoviji do danas, ali pišem ga onako kako jeste.

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 radi integriteta članka napisat ću ga ponovo. Pogotovo sa nekim dodacima.

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

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

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

Zašto je ispravnije komunicirati ne sa procedurom, već sa objektom. Činjenica je da su poruke objavljene u pozadinski posao(na primjer, kada se izvodi rutinska procedura prema rasporedu) se nigdje ne prikazuju. Ali ono što se saopštava objektom može biti

primati na serveru u sesiji klijenta koristeći metodu "GetMessagesToUser(...)" dok je pozadinski posao živ.

Evo malo sam te slagao, nikad nisam provjerio. Sasvim je moguće da se poruke koje izdaje procedura “Izvještaj(...)” također mogu dobiti iz pozadinskog posla, ali možda i ne. Dokumentacija o tome ne govori, što znači mi

nećemo to učiniti.

Dakle, zaključak: sada uvijek učinite poruke objektom, to je nekako dobro nova platforma, i zaboravite na proceduru. Ako ne volite pisati poruku u tri reda, onda napišite svoju proceduru u opći modul i budite sretni. Izjednačit će se

veoma dobar ton, jer Dobićete niz prednosti:

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

2. Mogućnost prikaza poruka na svoj način. Na primjer, u tekstualnom polju ili datoteci, a ne u okviru za poruke.

3. Mogućnost logovanja. Na primjer, možete spremiti sve poruke u bazu podataka ili datoteku, ili ih duplicirati u dnevnik, da biste to učinili, samo prilagodite svoju proceduru zajednički modul. A onda je debata 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 povezivanje morate popuniti polja “Field” i “PathKData”. Ali nisam detaljno obradio temu u članku.

Dakle, primjer 2 u dokumentu postoji atribut zaglavlja “Klijent”, morate se pozicionirati na njemu i prijaviti nešto u proceduri klijenta. Evo koda koji ovo radi:

Poruka2 = nova MessageToUser;
Message2.Text = "2. Poruka povezana sa atributom zaglavlja klijenta";
Message2.Field = "Klijent";
Message2.DataPath = "objekat";
Message2.Message();

A evo nijansi:

1. Polje nije polje, jer u mom primjeru kontrola se zove "FieldClient", a objektni prop je "Client". Red Message2.Field = "FieldClient" ne radi.

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

3. Ovo je primjer rada na klijentu. U serverskim procedurama je malo drugačije. Ovo je VAŽNO, nemojte brkati povezivanje poruka na serveru i na klijentu.

Navest ću još jedan primjer kako biste osjetili razliku između klijenta i servera. Činjenica je da nam je na raspolaganju objektna metoda “SetData(...)”. Sintaksni pomoćnik kaže "Objekat sa kojim bi trebalo da postoji

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

Poruka3 = nova MessageToUser;
Message3.SetData(Object);
Message3.Text = "3. Poruka povezana sa atributom zaglavlja Broj, ali neće biti povezana jer objekat nije objekat";
Message3.Field = "Broj";
Message3.Message();

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

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

Pokušajmo sada isto, ali na serveru. Kreirajmo serversku proceduru "Report4OnServer()" i pozovimo je sa klijenta

&Na serveru
Procedura Report4OnServer()
Poruka4 = nova MessageToUser;
Message4.SetData(FormAttributesValue("Object"));
Message4.Text = "4. Poruka povezana sa atributom zaglavlja organizacije";
Message4.Field = "Organizacija";
Message4.Message();
EndProcedure

Ovdje će sve biti u redu, jedina primjedba na kod je da se varijabla "object" mora konvertovati iz "FormDataStructure" u pravi objekat pozivanjem procedure "FormAttributesValue(...)".

Zaključak: metoda "SetData(...)" se može koristiti samo na serveru, jer Samo na serveru je moguće primiti objekat.

3. Poruke povezane s atributom tabelarnog dijela objekta

Izostavio sam ovu temu u prethodnom članku. Poznavajući gore opisane nijanse, ovdje ne bi trebalo biti problema. Evo radnog koda klijenta:

Poruka5 = nova poruka korisniku;
Message5.Text = "5. Količina polja 1. reda";
Message5.Field = "Proizvodi.Količina";
Message5.DataPath = "objekat";
Message5.Message();

Iako su nijanse gotovo iste, ponavljanje je majčinska lekcija:

1. Polje nije ime kontrole, moja kontrola se zove “Proizvodi Količina”, a ne samo “Količina”. "Proizvodi" je naziv tabelarnog dela, a ne kontrolnog elementa koji je povezan sa tabelarnim delom.

2. Put do podataka je objekat, samo objekat.

3. Broj reda u uglastim zagradama - numerisanje od nule i ovo je broj reda, a ne identifikator reda u zbirci podataka obrasca. Kada se redovi pomiču ili brišu, identifikator koji je dodijeljen prilikom otvaranja obrasca se pohranjuje, a brojevi redova se ponovo izračunavaju.

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

1. Kako vezati poruke ne sa trenutnim objektom, već sa bilo kojim objektom, tako da se dvostrukim klikom otvori drugi obrazac

2. Kako vezati poruke za formu u kojoj nema objekata

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

4. Šta je „Ključ podataka“ i kada ga treba koristiti?

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

1C Poruka korisniku prikazuje poruku korisniku (nakon što je obrada završena) ili je sprema u red čekanja ako se poruka ne može prikazati "trenutno", na primjer:
Poruka = ​​New MessageToUser();
Message.Text = "Zdravo, svet!";
Message.Message();

U mnogim slučajevima, poruke se generišu masovno tokom određene obrade. Na primjer, kada provjeravate veliku tablicu, mnoge poruke o grešci mogu se pojaviti u različitim redovima tabele. Ili prilikom obrade transakcije. U ovom slučaju, obrada se može izvršiti na serveru ili u regulatorni zadatak i teško je prikazati ove poruke.

1C Poruka korisniku zapisuje poruke u "neki" red i, nakon završetka obrade, prikazuje ih korisniku, ako je moguće. Inače, cijela lista poruka se može dobiti pomoću GetMessagesToUser() metode.

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

Da bi se poruka 1C Poruka korisniku prikazala u iskačućem prozoru pored određenog polja obrasca u kojem se kod izvršava u modulu, potrebno je odrediti "put" do nje:
Message.Field = "Ime"; //gdje je Ime atribut forme
Message.Field = "Object.Name"; //gdje je naziv atribut objekta (tj. direktorija čiji se obrazac uređuje)
Message.Field = "Proizvodi.Cijena"; //gdje je Proizvodi tabelarni dio obrasca, Cijena je stupac ovog tabelarnog dijela

Da biste učinili isto, ali u modulu drugog objekta (generalni modul), potrebno je dodatno specificirati objekt (DirectoryObject, DocumentObject, itd.):
Message.Field = "Ime"; //gdje je Name atribut DirectoryObject
Message.SetData(DirectoryObject);
//At dvostruki klik Kao odgovor na poruku, obrazac objekta će se otvoriti sa iskačućom porukom za traženo polje

Drugi način povezivanja poruke 1C poruke korisniku sa podacima objekta:
//za referencu, dokument..
Message.DataKey = Link imenika;
Message.DataPath = "Objekat";

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

U standardnim konfiguracijama uključeno kontrolisane forme za tanki klijent, na primjer, “Upravljanje trgovinom, izdanje 11” i “Računovodstvo, izdanje 3”, u modulu General PurposeClientServer postoji funkcija NotifyUser(), koja “univerzalizira” rad s ovim objektom. Sintaksa funkcija u različitim konfiguracijama je različita.

Budući da 1C Poruka korisniku generira listu poruka, da biste je resetirali (na primjer, prije obavljanja složene obrade), možete pozvati funkciju:
GetMessagesUser(True);

U programima na platformi 1C:Enterprise, poruka se može prikazati korisniku na različite načine.

1. Metoda ShowWarning.

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

Kada koristite ovaj dizajn, u centru sučelja programa pojavljuje se prozor upozorenja.

Opcije:

Opis Kompletna upozorenja(opciono)
Vrsta: Opis upozorenja. Sadrži opis procedure koja će biti pozvana nakon zatvaranja prozora upozorenja sa sljedećim parametrima: Dodatni parametri - vrijednost koja je navedena prilikom kreiranja objekta Opis upozorenja. Ako parametar nije specificiran, po završetku neće biti pozvana nijedna procedura.

Tekst upozorenja(obavezno)
Tip: String; FormattedString. Tekst upozorenja.

Istek (opcionalno)
Tip: Broj. Vremenski interval u sekundama tokom kojeg će sistem čekati na odgovor korisnika. Kada interval istekne, prozor upozorenja će se zatvoriti. Ako parametar nije naveden, tada je vrijeme čekanja neograničeno. Ako je parametar negativan, bit će izbačen izuzetak. Zadana vrijednost: 0.

Naslov (opcionalno)
Vrsta: String. Sadrži naslov prozora upozorenja. Opis: Prikazuje prozor upozorenja, ali ne čeka da se zatvori.

Dostupnost: Tanki klijent, web klijent, debeli klijent, mobilna aplikacija (klijent).

Napomena: Ako se bilo koji kod mora izvršiti nakon što korisnik zatvori prozor upozorenja, on se mora staviti u posebnu proceduru modula i opisati u parametru.

2. Metoda Upozorenje.

U centru programskog interfejsa pojavljuje se prozor upozorenja. Međutim, ako je konfiguracijsko svojstvo Način korištenjaModaliteta je postavljeno na Ne koristi , tada metoda ne radi.

Dostupnost: Tanki klijent, web klijent, mobilni klijent, debeli klijent, mobilna aplikacija (klijent).

3. Metoda ShowUserAlert.

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

Kada koristite ovu metodu, u donjem desnom uglu interfejsa pojavljuje se poruka.

Dostupnost: Tanki klijent, web klijent, debeli klijent.

4. Metoda izvještaja.

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

Dostupnost: Tanki klijent, web klijent, mobilni klijent, server, debeli klijent, eksterna veza, mobilna aplikacija (klijent), mobilna aplikacija (server).

5. Objekt Poruka korisniku.

Dizajniran za pohranjivanje parametara poruke koje je potrebno prikazati korisniku. Ako poruka još nije prikazana korisniku (ovo se može dogoditi kada radite na strani servera, u pozadini, eksternoj vezi ili web servisima), možete dobiti akumulirane poruke koristeći metodu Primanje poruka korisniku.

Svojstva: ID odredišta(TargetID); DataKey; Polje; DataPath(DataPath); Tekst.

Metode: Poruka; SetData(SetData).

Poruka se pojavljuje na dnu interfejsa, u liniji.

Poruka = ​​New MessageToUser(); Poruka. Tekst = "Nema dovoljno nomenklature"; Poruka. Polje = "Nomenklatura. Količina"; Poruka. SetData(DataObject) ; Poruka. Prijaviti() ;

Dijeli