Detalji upravljanog obrasca (1Cv8). Programsko dodavanje i mijenjanje elemenata upravljanih obrazaca Dodavanje atributa upravljanom obrascu

Platforma 1C:Enterprise omogućava vam da programski dodajete i mijenjate elemente upravljanog obrasca. Hajde da shvatimo zašto bi ovo moglo biti potrebno.

Softverska modifikacija obrasca može biti potrebna u nekoliko slučajeva:

  • Prilikom finaliziranja standardnih konfiguracija kako bi se olakšala naknadna procedura ažuriranja. U tom slučaju će se promijeniti samo modul obrasca. Module je mnogo lakše ažurirati nego obrasce.
  • Prilikom implementacije nekih uobičajenih algoritama. Na primjer, u podsistemu “Zabrana uređivanja detalja objekta” može se programski kreirati dugme za sve objekte povezane na podsistem kako bi se omogućila mogućnost uređivanja detalja.
  • Prilikom implementacije nekih specifičnih algoritama. Na primjer, u imeniku Nomenklatura kreiraju se polja za uređivanje dodatnih detalja.

U upravljanom obliku, možete programski dodavati, mijenjati i brisati:

  • rekviziti;
  • lokalni timovi;
  • elementi.

Sve ove operacije su moguće samo na serveru.

Programsko preoblikovanje ima ograničenja:

  • Možete izbrisati samo programski dodane detalje/komande/elemente. Ne možete programski izbrisati objekte kreirane u konfiguratoru.
  • Ne možete dodijeliti atribut kao glavni.

Promjena naredbi obrasca

Za upravljanje sastavom naredbi za objekt ManagedForm postoji zbirka Timovi

    Dodati (< ИмяКоманды >)

    Količina ()

    Nađi (< ИмяКоманды >)

    Izbriši (< Команда >)

Kolekcija Teams dostupna je i na klijentu i na serveru. Kolekciju (metode Add() i Delete() možete promijeniti samo na serveru. Možete tražiti i dobiti broj elemenata (metode Find () i Count ()) i na klijentu i na serveru.

Kao primjer rada sa naredbama obrasca, napravimo novu naredbu ChangeHistory sa naslovom "ChangeHistory...", koja će pozvati rukovalac DisplayHistory(). Kreiranje se dešava kada se obrazac otvori.

&Na serveru
Procedura WhenCreatingOnServer(Failure, StandardProcessing)
Tim = Timovi. Dodati( "Historija promjena");
Tim . Akcija = ;
Tim . Naslov = "Istorija promjena...";
Kraj procedure
&OnClient
Procedura Connectable_DisplayHistory(Command)
// komandne akcije
Kraj procedure

Rukovalac komandom mora biti lociran na obrascu i mora imati direktivu &OnClient kompilacije.

Promjena detalja obrasca

Čitanje sastava detalja obrasca vrši funkcija Saznajte detalje(< Путь >) vraća niz tipa FormAttributes. Parametar funkcije specificira putanju do roditeljskog atributa (kao string). Ako je parametar izostavljen ili je naveden prazan niz, vraćaju se detalji najvišeg nivoa.

Promjena detalja se vrši korištenjem metode Promjena detalja(<Dodati detalji>, <Uklonjivi detalji>) objekt ManagedForm. Do parametara Dodati detalji I Uklonjivi detalji Nizovi sa elementima tipa Form Attributes se prenose.

Pažnja!

Proces promjene sastava detalja je prilično intenzivan resursima. Forma se zapravo rekreira. U tom smislu, rad sa detaljima obrasca se izvodi u paketnom režimu.

Kreirajmo novi atribut obrasca sa imenom Kupac:


AddedDetails = Novi niz;
Dodati detalji. Dodaj (novi atributi obrasca(“Kupac”, Opis novog tipa (“DirectoryLink. Counterparties”), “Klijent”));

// Promjene u sastavu detalja
);

Promjena elemenata forme

Za kontrolu sastava elemenata objekta ManagedForm postoji zbirka Elementi. Kolekcija ima nekoliko metoda:

    Insert (< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    Dodati (< Имя>, < ТипЭлемента>, < Родитель >)

    Količina ()

    Nađi (< Имя >)

    premjestiti(< Элемент>, < Родитель>, < МестоРасположения >)

    Izbriši (< Элемент >)

Kolekcija Items dostupna je i na klijentu i na serveru. Izmijenite kolekciju (metode umetanja () , Dodaj () , Premjesti () i Izbriši () ) dostupni su samo na serveru. Možete tražiti i dobiti broj elemenata (metode Find () i Count ()) i na klijentu i na serveru. Elementi kolekcije mogu biti:

  • FormGroup;
  • FormTable;
  • FormField;
  • Dugme za obrazac.

Elementima forme možete programski dodijeliti rukovaoce događajima. Metoda je namijenjena za ove svrhe SetAction(< ИмяСобытия>, < Действие >) .

Pogledajmo neke od najčešćih primjera rada s naredbama, detaljima i elementima obrasca.

Dodavanje komande i povezanog dugmeta:

// Kreiraj naredbu
Tim = Timovi. Dodati( "Historija promjena");
Tim . Akcija = "Plug-in_DisplayHistory"; // Obrazac mora sadržavati proceduru sa navedenim imenom
Tim . Naslov = "Istorija promjena...";
// Kreirajte dugme i povežite ga sa komandom
Element = Stavke. Dodati( "Historija promjena", Tip("FormButton" ));
Element.CommandName = "Historija promjena";

Dodavanje atributa i povezanog polja za unos:

// Opis dodanih detalja
AddedDetails = Novi niz;
Dodati detalji. Dodati(Novi rekviziti obrasca („Kupac“, Opis novog tipa ( "DirectoryLink. Counterparties"), "Klijent" ));
// Promjena sastava detalja
ChangeDetails(Dodani detalji);
// Kreiranje polja za unos i povezivanje s atributima
Element = Stavke. Add("Buyer" , Type("FormField" ));
Element . Pogled = FormFieldView. Polje za unos;
Element . PathToData= "Kupac" ;

Dodjeljivanje rukovaoca događaja elementu obrasca:

ItemCustomer. SetAction("Kada se promeni" , "Connected_BuyerOnChange");

&OnClient
Procedura Connected_BuyerOnChange(element)
// Akcije događaja
Kraj procedure

Pažnja!

Procedure koje se postavljaju kao rukovaoci događajima iz koda koristeći metodu SetAction(), preporučuje se postavljanje prefiksa Connectable_.

Pažnja!

Možete preuzeti obradu s primjerima programskog pretraživanja i promjene detalja, naredbi i elemenata upravljanog obrasca.

Detalji obrasca

Skup detalja obrasca opisuje sastav podataka koji se prikazuju, uređuju ili pohranjuju u obrascu. Istovremeno, sami detalji obrasca ne pružaju mogućnost prikaza i uređivanja podataka. Elementi obrasca (pogledajte odjeljak “Elementi obrasca” u ovom poglavlju) povezani s detaljima obrasca koriste se za prikaz i uređivanje. Skup svih detalja obrasca će se zvati podaci obrasca.

Bitan! Mora se imati na umu da, za razliku od redovnih obrazaca, svi podaci u upravljanom obliku moraju biti opisani u obliku detalja. Nije dozvoljeno koristiti varijable modula obrasca kao izvore podataka za elemente obrasca.

Moguće je dodijeliti Osnovni detalji obrasca, tj. atributi koji će odrediti standardnu ​​funkcionalnost obrasca (proširenje obrasca). Treba imati na umu da obrazac može imati samo jedan glavni atribut.

Proširenje obrasca– ovo su dodatna svojstva, metode i parametri obrasca objekta ManagedForm, karakteristični za objekat koji je glavni element forme.

Tokom procesa razvoja obrasca, možete eksplicitno postaviti mogućnost pregleda i uređivanja specifičnih detalja obrasca, u smislu uloga, koristeći svojstva Pregled i uređivanje (za više detalja, pogledajte odjeljak „Postavke obrasca zasnovane na ulozima“ u „Uređivači“ ” poglavlje). Osim toga, dostupnost određenog atributa u samom obrascu može se konfigurirati korištenjem funkcionalnih opcija (više detalja o funkcionalnim opcijama možete pronaći u poglavlju „Upravljanje konfiguracijskim sučeljem“).

Svojstvo atributa obrasca Sačuvani podaci je znak da će interaktivna promjena detalja dovesti do pokušaja blokiranja podataka obrasca za uređivanje, kao i do automatskog postavljanja zastavice za modifikaciju obrasca.

Tipovi podataka dostupni u upravljanom obliku

Upravljani obrazac se također razlikuje od običnog obrasca po vrstama podataka s kojima radi. Ako normalna forma radi s većinom tipova koje 1C:Enterprise pruža (uključujući tipove DirectoryObject, DocumentObject, itd.), tada se u upravljanom obliku mogu razlikovati sljedeće kategorije tipova:

  • tipovi koji se direktno koriste u obrascu su oni tipovi koji postoje na strani tankog i Web klijenta (na primjer, Number, DirectoryLink.Products, GraphicScheme, TabularDocument);
  • tipovi koji će biti konvertovani u posebne tipove podataka—upravljani oblici podataka. Takvi tipovi se prikazuju na listi detalja obrasca u zagradama, na primjer (DirectoryObject.Products);
  • dinamička lista (za više detalja pogledajte odeljak „Dinamička lista“ ovog poglavlja).

Pretvaranje objekata aplikacije u podatke obrasca

Neki tipovi aplikacija (kao što je DirectoryObject, itd.) ne postoje na strani tankog i Web klijenta (pogledajte poglavlje Koncept upravljane aplikacije za više detalja). Stoga, da bi se takvi tipovi aplikacija predstavili u obrascima, platforma je uvela posebne tipove podataka dizajnirane za rad u upravljanim oblicima. Ova karakteristika upravljane aplikacije čini neophodnim pretvaranje objekata aplikacije u podatke iz forme (i obrnuto).

Koriste se sljedeći tipovi podataka:

  • Form DataStructure – sadrži skup svojstava proizvoljnog tipa. Svojstva mogu biti druge strukture, kolekcije ili strukture sa kolekcijama. Ovaj tip je predstavljen, na primjer, u obliku DirectoryObject.
  • FormDataCollection je lista upisanih vrijednosti, slična nizu. Elementu kolekcije se pristupa preko indeksa ili identifikatora. Pristup putem ID-a možda neće biti dostupan u nekim slučajevima. To je zbog tipa objekta aplikacije koji je predstavljen ovom kolekcijom. Identifikator može biti bilo koji cijeli broj. Ovaj tip je predstavljen, na primjer, u obliku tabelarnog dijela.
  • Forma DataStructureWithCollection je objekt koji je predstavljen kao struktura i zbirka u isto vrijeme. Može se tretirati kao bilo koji od ovih entiteta. Ovaj tip predstavlja, na primjer, skup zapisa u formi.
  • Form DataTree – objekat dizajniran za skladištenje hijerarhijskih podataka.

Objekt aplikacije je predstavljen ili jednim ili više elemenata podataka obrasca. Općenito, hijerarhija i sastav podataka obrasca zavise od složenosti i međusobnog povezivanja objekata aplikacije upravljanog obrasca.

Na primjer, dokument koji sadrži tabelarni dio će biti predstavljen objektom tipa FormDataStructure (sam dokument), kojem je podređen objekt tipa FormDataCollection (tabelarni dio dokumenta).

Bitan! Kada razvijate konfiguraciju, važno je zapamtiti da su objekti aplikacije dostupni samo na serveru, dok se objekti podataka forme mogu koristiti i na serveru i na klijentu.

Prenošenje podataka između klijentskog i serverskog dijela upravljanog obrasca

U stvari, možemo reći da su podaci obrasca objedinjeni prikaz podataka iz različitih aplikacijskih objekata sa kojima obrazac radi ujednačeno i koji su prisutni i na serveru i na klijentu. To jest, obrazac sadrži neku „projekciju“ podataka o objektu aplikacije u obliku vlastitih tipova podataka i vrši konverziju između njih ako je potrebno. Međutim, ako programer konfiguracije implementira svoj vlastiti algoritam za obradu podataka, tada mora samostalno izvršiti konverziju podataka (iz specijaliziranih tipova u tipove aplikacija i obrnuto).

Prilikom uređivanja detalja obrasca u specijalizovanom uređivaču (za više detalja pogledajte odeljak „Detalji obrasca” u poglavlju „Uređivači”), moguće je uticati na prenos podataka između klijenta i servera dok je obrazac pokrenut. Za to se koristi kolona uređivača detalja. Uvijek koristite. Učinak ovog svojstva razlikuje se za tri vrste atributa:

  • Za atribut koji je podređen dinamičkoj listi (kolona dinamičke liste):
    • svojstvo omogućeno – atribut se uvijek čita iz baze podataka i uključuje u podatke obrasca;
    • svojstvo je onemogućeno - atribut se čita iz baze podataka i uključuje u podatke obrasca samo kada postoji trenutno vidljivi element obrasca povezan s atributom ili njegovim podređenim atributom.
  • Za rekvizite podređene kolekciji pokreta:
    • svojstvo je omogućeno – kretanja dokumenata se čitaju iz baze podataka i biće prisutna u podacima obrasca;
    • svojstvo je onemogućeno - kretanja dokumenata se neće čitati iz baze podataka i neće biti uključena u podatke obrasca (ako ne postoji element obrasca koji upućuje na kretanje dokumenta).
  • Ostali detalji obrasca:
    • svojstvo je omogućeno – atribut će biti prisutan u podacima obrasca, bez obzira na to postoji li barem jedan element obrasca koji je povezan s atributom ili njegovim podređenim atributom;
    • svojstvo je onemogućeno - atribut će biti prisutan u podacima obrasca samo ako postoji element obrasca povezan s atributom ili njegovim podređenim atributom. Za razliku od atributa dinamičke liste, vidljivost elementa pridruženog atributu ovdje nije bitna.

Bilješka. Treba imati na umu da svojstvo postavljeno na roditeljski atribut utječe na sve podređene atribute. Na primjer, ako je svojstvo Koristi uvijek obrisano za tabelarni dio dokumenta, tada sistem smatra da je i ovo svojstvo obrisano za sve podređene detalje (uprkos stvarnom stanju svojstva).

Metode za pretvaranje podataka objekata aplikacije u podatke obrasca

Za pretvaranje objekata aplikacije u podatke obrasca i nazad, postoji skup globalnih metoda:

  • ValueInFormData(),
  • FormDataInValue(),
  • CopyFormData().

Bitan! Metode koje rade s objektima aplikacije dostupne su samo u serverskim procedurama. Metoda za kopiranje vrijednosti između podataka obrasca dostupna je na serveru i na klijentu, jer ne zahtijeva objekte aplikacije kao parametre.

Kada pretvarate podatke obrasca u objekt aplikacije, morate uzeti u obzir njihovu kompatibilnost.

  • ValueInFormData() – pretvara objekat tipa aplikacije u podatke obrasca;
  • FormDataInValue() – pretvara podatke obrasca u objekt tipa aplikacije;
  • CopyFormData() – kopira podatke obrasca koji imaju kompatibilnu strukturu. Vraća True ako je kopiranje bilo uspješno ili False ako je struktura objekta nekompatibilna.

Bilješka. Prilikom izvođenja standardnih radnji (otvaranje obrasca, izvršavanje standardne naredbe Write, itd.) obrasca sa glavnim detaljima, konverzija se vrši automatski.

Dajemo primjer kako koristiti transformaciju podataka u vlastitim algoritmima.

&OnServerProcedure kada CreateOnServer(Failure, StandardProcessing)

ObjectProduct = Directories.Products.FindByName("Coffeepot").GetObject(); ValueInFormData(ObjectItem, Object);

Kraj procedure

&OnClient procedura Write()

WriteOnServer();

Kraj procedure

&OnServer procedura WriteOnServer()

ObjectProduct = FormDataValue(Object, Type("DirectoryObject.Products")); ObjectItem.Write();

Kraj procedure

Objekt ManagedForm također ima metode dostupne na serveru:

  • ValueVFormAttribute() – pretvara objekat tipa aplikacije u specificirani atribut obrasca.
  • FormAttributeVValue() – pretvara atribut podataka obrasca u objekt tipa aplikacije.

Upotreba ovih metoda je obično praktičnija, jer imaju, na primjer, informacije o vrsti detalja obrasca. Dodatno, metoda Form AttributesValue() postavlja korespondenciju između podataka obrasca i objekta, koji se koristi prilikom generiranja poruka. Više o tome možete pročitati u poglavlju „Mogućnosti servisne navigacije“.

Dajemo primjer korištenja ovih metoda.

&Procedura na serveru RecalculateOnServer()

// Pretvara atribut Object u objekt aplikacije. Dokument = Form AttributesValue("Objekat"); // Izvodi ponovno izračunavanje koristeći metodu definiranu u modulu dokumenta. Document.Recalculate(); // Konvertuje objekat aplikacije nazad u prop. ValueFormAttributes(Document, “Object”);

Kraj procedure

Softverski interfejs

FormDataTree

  • FindById
  • GetItems

Opis:

Dizajniran za modeliranje stabla u podacima upravljanog obrasca.

Ovaj objekt se može serijalizirati u/iz XDTO. XDTO tip koji odgovara ovom objektu definiran je u imenskom prostoru. Naziv tipa XDTO:

GetItems

sintaksa:

GetItems()

Povratna vrijednost:

Tip: Kolekcija podataka obrasca elemenata stabla.

Opis:

Dobiva kolekciju elemenata stabla najvišeg nivoa.

Dostupnost: klijent, server, tanki klijent, web klijent.

FindById

sintaksa:

FindById(<Идентификатор>)

Opcije:

<Идентификатор>(obavezno)

Tip: Broj. Identifikator elementa stabla.

Povratna vrijednost:

Tip:FormDataTreeElement.

Opis:

Dobiva element kolekcije prema ID-u.

Dostupnost: klijent, server, tanki klijent, web klijent.

FormDataTreeItem

Svojstva:

<Имя свойства> (<Имя свойства>)

  • GetId (GetId)
  • GetParent
  • GetItems
  • Nekretnina

Opis:

Element stabla podataka forme.

FormDataTreeItemCollection

Elementi kolekcije: DataFormTreeElement

Za objekat je moguće preći kolekciju koristeći operator Za svaki... Od... Petlja. Prelazak odabire elemente kolekcije. Moguće je pristupiti elementu kolekcije pomoću [...] operatora. Indeks elementa se prosljeđuje kao argument.

  • Insert
  • Dodati
  • Indeks (IndexOf)
  • Count
  • Jasno
  • Get
  • Pokret
  • Izbriši

Opis:

Kolekcija drvenih elemenata.

Dostupnost: klijent, server, tanki klijent, web klijent.

Vidi također:

  • FormDataTreeElement, GetElements metoda
  • DataFormTree, metoda GetItems

Karakteristike rada sa stablom vrijednosti

Tree update

Postoji problem pada platforme prilikom ažuriranja stabla.

Ako je bilo koji čvor u stablu proširen i odabran je podređeni čvor, tada prilikom ažuriranja stabla sa funkcijom ValueInFormData platforma pada.

Rješenje: Morate očistiti stablo prije ažuriranja.

Na primjer:

&Na serverskoj proceduri ClearTree(elements) Za svaki element iz elemenata Loop ClearTree(element.GetElements()); EndCycle; elements.Clear(); Kraj procedure

&Na serverskoj proceduri Ispunite stablo koncepta() dConcepts = srProperties.Build Concept Tree(OnDate, Meta.CurrentIB()); ClearTree(ConceptTree.GetItems()); ValueInFormData(dConcepts, ConceptTree); Kraj procedure

&OnClient procedura OnDateOnChange(Element) Ispuni ConceptTree(); Kraj procedure

I Data Transfer Object za strukturiranje koda, kontrolisan oblik u 1C 8.2 okruženju.

Uvod

Počnimo s kratkim opisom koncepta "upravljane forme" i srodnih koncepata 1C platforme. Poznavaoci platformi možda žele da preskoče ovaj odeljak.

Godine 2008. postala je dostupna nova verzija 1C platforme: Enterprise 8.2 (u daljem tekstu Upravljana aplikacija), koja u potpunosti mijenja cijeli sloj rada sa sučeljem. Ovo uključuje komandni interfejs, obrasce i sistem prozora. Istovremeno, ne mijenja se samo model razvoja korisničkog sučelja u konfiguraciji, već se predlaže i nova arhitektura za razdvajanje funkcionalnosti između klijentske aplikacije i servera.
Upravljana aplikacija podržava sljedeće tipove klijenata:

  • Debeli klijent (normalan i upravljani način pokretanja)
  • Tanki klijent
  • Web klijent
Upravljana aplikacija koristi obrasce izgrađene na novoj tehnologiji. Zovu se Upravljani obrasci. Da bi se olakšao prijelaz, podržani su i prethodni obrasci (tzv. Regularni obrasci), ali njihova funkcionalnost nije razvijena i dostupni su samo u načinu pokretanja debelog klijenta.
Glavne razlike upravljanih formi za programera:
  • Deklarativan, a ne "piksel po piksel" opis strukture. Specifično postavljanje elemenata sistem vrši automatski kada se obrazac prikaže.
  • Sva funkcionalnost obrasca je opisana kao detalji I timovi. Detalji su podaci sa kojima obrazac radi, a komande su radnje koje treba izvršiti.
  • Obrazac se pokreće i na serveru i na klijentu.
  • U kontekstu klijenta, gotovo svi tipovi aplikacija su nedostupni, te je shodno tome nemoguće promijeniti podatke u infobazi.
  • Za svaku varijablu metode ili forme, ona mora biti specificirana direktiva o kompilaciji, definirajući lokaciju izvršenja (klijent ili server) i pristup kontekstu obrasca.
Hajde da navedemo direktive za kompajliranje metoda obrasca:
  • &OnClient
  • &Na serveru
  • &Na serveru bez konteksta
  • &OnClientOnServerBithout Context
Ilustrujmo gore navedeno. Snimak ekrana prikazuje primjer upravljanog obrasca i njegovog modula u razvojnom modu. Pronađite deklarativni opis, props, direktive za kompilaciju, itd.

Sve dalje diskusije će biti o desnoj strani ilustracije, o tome kako strukturirati kod modula i koji principi će vam omogućiti da implementirate efikasnu interakciju klijent-server.

Hajde da definišemo problem

Prošlo je nekoliko godina otkako se nova verzija 1C platforme aktivno koristi i mnoga rješenja (konfiguracije) su objavljena i od strane 1C i njegovih brojnih partnera.
Da li su programeri tokom ovog vremena razvili zajedničko razumevanje principa interakcije klijent-server prilikom kreiranja obrazaca i da li se pristup implementaciji softverskih modula promenio u novoj arhitektonskoj stvarnosti?

Pogledajmo strukturu koda (modul forme) u nekoliko oblika iste standardne konfiguracije i pokušajmo pronaći obrasce.
Pod strukturom podrazumijevamo dijelove koda (najčešće su to blokovi komentara) koje je programer dodijelio grupnim metodama i direktivama kompilacije za te metode.
Primjer 1:
Sekcija rukovalaca događaja Metoda - na klijentu Metoda - na serveru Metoda - na klijentu Odeljak uslužnih procedura i funkcija Funkcije kontrole pomoćnog ulaza
Primjer 2:
Servisne procedure i funkcije Dokumenti za plaćanje Vrijednosti Obrađivači događaja
Primjer 3:
Servisne procedure na serveru Servisne procedure na klijentu Servisne procedure na serveru bez konteksta Rukovaoci događaja zaglavlja Rukovaoci događaja naredbe
Primjer 4:
Procedure opće namjene Rukovatelji događaja obrasca Procedure podsistema “kontaktnih informacija”.
U suštini, struktura koda nedostaje, ili blago rečeno, slična je onome što je bilo u Obrascima 8.1:

  • Neinformativne riječi “General, Service, Auxiliary”.
  • Stidljiv pokušava da odvoji klijentske i serverske metode.
  • Metode su često grupisane prema elementima interfejsa „Rad sa tabelarnim delom Proizvodi, Kontakt informacije“.
  • Proizvoljan raspored metoda i kodnih grupa. Na primjer, Događaji mogu biti na vrhu u jednom obliku, na dnu u drugom, uopće nisu istaknuti u trećem, itd.
  • I ne zaboravimo da je sve ovo u jednoj konfiguraciji.
  • Da, postoje konfiguracije u kojima su riječi "General, Service, Auxiliary" uvijek na istim mjestima, ali...
Zašto vam je potrebna struktura koda?
  • Pojednostavljenje održavanja.
  • Pojednostavite učenje.
  • Zapisivanje općih/važnih/uspjelih principa.
  • ...vaša opcija
Zašto postojeći razvojni standard iz 1C ne pomaže?
Pogledajmo principe objavljene na ITS diskovima i u raznim “Vodičima za programere...” koji se preporučuju prilikom pisanja upravljanog obrasca.
  • Minimizirajte broj poziva servera.
  • Maksimalno računanje na serveru.
  • Nekontekstualni pozivi servera su brži od kontekstualnih.
  • Program koji ima na umu komunikaciju klijent-server.
  • i tako dalje.
Ovo su slogani koji su apsolutno tačni, ali kako ih implementirati? Kako minimizirati broj poziva, šta znači programirati u klijent-server modu?

Dizajnerski obrasci ili generacijska mudrost

Interakcija klijent-server se decenijama koristi u raznim softverskim tehnologijama. Odgovor na pitanja iznesena u prethodnom odeljku odavno je poznat i sažet je u dva osnovna principa.
  • Remote Facade(u daljem tekstu sučelje za daljinski pristup)
  • Objekat prenosa podataka(u daljem tekstu objekt prijenosa podataka)
Riječ Martina Fowlera, njegov opis ovih principa:
  • Svaki objekt potencijalno namijenjen za daljinski pristup mora imati interfejs niske granularnosti, što će minimizirati broj poziva potrebnih za izvođenje određene procedure. ... Umjesto da zahtijevate fakturu i sve njene stavke zasebno, trebate pročitati i ažurirati sve stavke računa u jednom zahtjevu. Ovo utiče na cjelokupnu strukturu objekta... Zapamtite: sučelje za daljinski pristup ne sadrži logiku domene.
  • ...da sam brižna majka, svom djetetu bih definitivno rekla: „Nikad ne piši objekte za prijenos podataka!“ U većini slučajeva, objekti prijenosa podataka nisu ništa drugo do naduven teren set... Vrijednost ovog odvratnog čudovišta leži isključivo u mogućnosti prenose više informacija preko mreže u jednom pozivu- tehnika koja je od velikog značaja za distribuirane sisteme.
Primjeri predložaka u 1C platformi
Interfejs za programiranje aplikacije koji je dostupan programeru prilikom razvoja upravljanog obrasca sadrži mnogo primjera ovih principa.
Na primjer, OpenForm() metoda, tipično "grubo" sučelje.
OpeningParameters = Nova struktura("Parametar1, Parametar2, Parametar3", Vrijednost1, Vrijednost2, Vrijednost3); Form = OpenForm(FormName, OpeningParameters);
Uporedite sa stilom usvojenim u v8.1.
Forma = GetForm(FormName); Form.Parameter1 = Value1; Form.Parameter2 = Value2; Form.Open();

U kontekstu upravljanog obrasca, postoji mnogo “Objekata prijenosa podataka”. Možete odabrati sistemski I definisano od strane programera.
Sistemski modeliraju objekt aplikacije na klijentu, u obliku jednog ili više elemenata podataka forme. Nemoguće ih je kreirati bez pozivanja na detalje obrasca.

  • DataFormsStructure
  • DataFormsCollection
  • DataFormStructureWithCollection
  • DataShapesTree
Konverzija objekata prenosa sistemskih podataka u tipove aplikacije i obrnuto vrši se na sledeće metode:
  • ValueInFormData()
  • FormDataValue()
  • CopyFormData()
  • ValueInFormAttributes()
  • FormAttributesValue()
Često se eksplicitna konverzija koristi prilikom prilagođavanja postojećeg rješenja. Metode mogu očekivati ​​(koristiti značajke) ulazne parametre, kao što je ValueTable umjesto FormDataCollection, ili je metoda definirana u kontekstu objekta aplikacije i postala je nedostupna za direktan poziv iz obrasca.
Primjer 1C v8.1:
// na klijentu u kontekstu obrasca FillUserCache(DepartmentLink)
Primjer 1C v8.2:
// na serveru u kontekstu forme ProcessingObject = Form AttributesValue("Object"); ProcessingObject.FillUserCache(DepartmentRef); ValueVFormAttributes(ProcessingObject, "Object");

Objekti za prijenos podataka, čiju strukturu određuje programer, su mali podskup tipova dostupnih i na klijentu i na serveru. Najčešće se kao parametri i rezultati metoda „ogrubljenog“ sučelja koriste sljedeće:

  • Primitivni tipovi (niz, broj, boolean)
  • Struktura
  • Prepiska
  • Niz
  • Linkovi na objekte aplikacije (jedinstveni identifikator i tekstualni prikaz)
Primjer: metoda prihvaća listu naloga za promjenu statusa i vraća opis grešaka klijentu.
&OnServerWithoutContext Funkcija ServerChangeOrderStatus(Orders, NewStatus) Greške = New Match(); // [narudžba][opis greške] Za svaku narudžbu od narudžbi Cycle StartTransaction(); Pokušajte DocOb = Order.GetObject(); …. druge akcije, moguće ne samo sa nalogom... Izuzetak CancelTransaction(); Errors.Insert(Red, ErrorDescription()); EndAttempt; EndCycle; Return Error; EndFunction // ServerChangeOrderStatus()

Strukturiranje koda

Glavni ciljevi koje modul upravljane forme treba da odražava i pristupi rješenju.
  • Jasno razdvajanje klijentskog i serverskog koda. Ne zaboravimo da su u trenutku izvršenja to dva procesa u interakciji, od kojih svaki ima značajno različitu dostupnu funkcionalnost.
  • Jasna identifikacija interfejsa udaljenog pristupa, koje metode servera se mogu pozvati sa klijenta, a koje ne? Imena metoda udaljenog interfejsa počinju prefiksom "Server". Ovo vam omogućava da odmah vidite prijenos kontrole na server dok čitate kod i pojednostavljuje korištenje kontekstualne pomoći. Imajte na umu da zvanična preporuka (ITS) predlaže imenovanje metoda sa postfiksima, na primjer, ChangeOrderStatusOnServer(). Međutim, ponavljamo da se sve serverske metode ne mogu pozvati sa klijenta, te je stoga logička dostupnost važnija, a ne lokacija kompilacije. Stoga, prefiksom „Server“ označavamo samo metode dostupne klijentu; pozovimo primjer metode ServerChangeOrderStatus().
  • Čitljivost. Stvar ukusa prihvatamo narudžbu kada modul počne sa procedurama kreiranja obrasca na serveru i metodama daljinskog pristupa.
  • Održavanje. Mora postojati jasna lokacija za dodavanje novog koda. Važna stvar je da se predlošci metoda koje automatski kreira konfigurator dodaju na kraj modula. Budući da se obrađivači događaja za elemente obrasca najčešće kreiraju automatski, odgovarajući blok se nalazi zadnji, kako se svaki rukovalac ne bi povukao na drugo mjesto u modulu.
U nastavku se nalazi osnovna struktura modula koji implementira navedene ciljeve.
  • Grafička opcija – jasno prikazuje glavni tok izvršenja.
  • Opcija teksta je primjer dizajna predloška za brzo umetanje strukture u novi modul obrasca.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор=""Date=""/> // <Описание> // // /////////////////////////////////////////////// // /////////////////////////// // VARIJABLE MODULA ///////////////// // ///////////////////////////////////////////// //// ////////// // NA SERVERU //******* DOGAĐAJI NA SERVERU ******* &Na serveru Procedura kada je kreirana na serveru (Failure, StandardProcessing) / /Ubacite sadržaj rukovaoca Kraj procedure //******* INTERFEJS UDALJINSKOG PRISTUPA ****** //******* POSLOVNA LOGIKA NA SERVERU ******* ///////// //////////////////////////////////////// /////// /////////////////// // ZAJEDNIČKE METODE KLIJENTA I SERVERA /////////////// /////// ////////////////////////////////////////// ///// //////// // O KLIJENTU //******* POSLOVNA LOGIKA NA KLIJENTU ******* //********** TIM * ****** //********** KLIJENTSKI DOGAĐAJI ****** ////////////////////////// ///// //////////////////////////////////////////// // / / GLAVNI OPERATORI PROGRAMA

Povezana pitanja
U zaključku ćemo navesti nekoliko oblasti o kojima je korisno razmišljati prilikom programiranja interakcije klijent-server.
  • Opcije implementacije interfejsa za daljinski pristup. Asinhronija, nivo detalja...
  • Keširanje. 1C je donio neuspješnu arhitektonsku odluku, uvodeći keširanje samo na nivou pozivanja metoda uobičajenih modula i ne pružajući kontrolne mogućnosti (vrijeme relevantnosti, resetiranje na zahtjev).
  • Implicitni pozivi servera. Ne zaboravite na tehnološke karakteristike; mnoge „bezopasne“ operacije na klijentu provociraju platformu da kontaktira server.

Obrazac se kontrolira kroz različite elemente obrasca, koji se hijerarhijski nalaze na kartici Elementi dizajner forme. Najvažniji element je sama forma, koja se nalazi na vrhu hijerarhije elemenata, a ostali elementi su joj podređeni.

Svi elementi forme mogu se podijeliti u pet grupa: polja, elementi grupisanja, dugmad, ukrasi i tabele. U svojim člancima analizirat ću svaku od grupa. U ovom članku počet ćemo proučavati jednu od vrsta elementa polja - polje za unos, ali prije toga ćemo naučiti kako dodati element u obrazac.

Dodavanje elemenata u obrazac

To se radi prilično jednostavno: potrebno je odabrati element Forma u prozoru Elementi dizajna obrasca i kliknite na dugme „Dodaj“. Nakon toga će se otvoriti prozor u kojem trebate odabrati željenu vrstu elementa

Nakon odabira, željeni element će se pojaviti u prozoru Elementi.

Upravljani element obrasca Polje

Pogledajmo upravljani element forme Polje. Ovaj element je potreban za unos informacija u obrazac. I za prikaz bilo koje informacije. Nakon što dodate ovaj element u obrazac, sa desne strane će se otvoriti paleta svojstava elementa obrasca. Za sada bi vas trebala zanimati dva svojstva – DataPath i View.

U svojstvu DataPath, programer može povezati element obrasca sa željenim atributom obrasca. Imajte na umu da nakon dodavanja elementa Polje za unos na obrascu nije bilo prikazano na samom obrascu. To se dogodilo jer naš novi element nije povezan sa . Na primjer, kreirao sam nekoliko atributa na obrascu za obradu s različitim primitivnim tipovima i jedan atribut s referentnim tipom.

Sada povežimo naš nedavno dodani element obrasca s jednim od detalja. Da biste to učinili, odaberite željeni atribut iz svojstva PathKData elementa.

Nakon toga, svojstva DataPath i View će biti popunjena, a sam element će biti prikazan u prikazu obrasca.

Obratite pažnju na svojstva elementa Pogled. Ovo svojstvo određuje funkcionalnost polja za unos. Možete odabrati različite vrijednosti za ovu nekretninu.

Ovisno o odabranoj vrijednosti, bit će određena funkcionalnost. Na gornjim slikama, odabrana vrijednost je – polje za unos, tj. možemo unijeti bilo koju vrijednost u ovo polje za unos, a ako odaberemo vrijednost polje oznake, tada nećemo moći ništa unijeti.

Vrijednost ove imovine Pogled Polja za unos su zgodna za odabir kada samo trebate pokazati pomoćne informacije korisniku.

Sada dodajmo novi element forme sa tipom Polje za unos i povežite ga sa rekvizitima DetailsDate preko već poznatog svojstva DataPath

Kao što vidite, izgled polja za unos se promenio, a promeniće se i mogući izbor vrednosti za svojstvo View.

Dakle, zaključujemo da funkcionalnost polja za unos zavisi od vrste atributa.

Za rekvizite sa tipom Boolean Sljedeće vrijednosti svojstva View će biti dostupne.

A za atribute s referentnim tipom, druge vrijednosti svojstva View bit će dostupne.

Detaljniji rad sa elementima forme na praktičnim primjerima dat je u knjizi „Osnove razvoja u 1C: Taxi. Upravljani razvoj aplikacija u 12 koraka".

Ponekad se čini da je učenje programskog jezika u 1C komplikovano i teško. U stvari, programiranje u 1C je jednostavno. Moje knjige će vam pomoći da lako i brzo savladate programiranje u 1C: i "Osnove razvoja u 1C: Taxi"

Naučite programirati u 1C uz pomoć moje knjige “Programiranje u 1C u 11 koraka”

  1. Bez komplikovanih tehničkih termina.
  2. Preko 700 stranica praktičnog materijala.
  3. Svaki zadatak je popraćen crtežom (screenshot).
  4. Zbirka zadataka za domaći zadatak.
  5. Knjiga je napisana jasnim i jednostavnim jezikom - za početnike.

Ova knjiga je pogodna za one koji su već počeli sa programiranjem i imaju određenih poteškoća s ovom temom i za one koji se već duže vrijeme bave programiranjem, ali nikada nisu radili sa 1C upravljanim obrascima.

  1. Bez složenih tehničkih termina;
  2. Više od 600 stranica praktičnog materijala;
  3. Svaki primjer je popraćen crtežom (screenshot);
  4. Knjiga se šalje elektronskom poštom u PDF formatu. Može se otvoriti na bilo kom uređaju!

Promo kod za popust od 15% - 48PVXHeYu


Ako vam je ova lekcija pomogla da riješite bilo koji problem, svidjelo vam se ili smatralo korisnim, onda možete podržati moj projekat doniranjem bilo kojeg iznosa:

Možete platiti ručno:

Yandex.Money - 410012882996301
Web Money - R955262494655

Pridružite se mojim grupama.