Tvarkomos formos informacija (1Cv8). Programinis valdomų formų elementų įtraukimas ir keitimas Atributų įtraukimas į valdomą formą

1C:Enterprise platforma leidžia programiškai pridėti ir keisti valdomos formos elementus. Išsiaiškinkime, kodėl to gali prireikti.

Formos programinės įrangos modifikavimas gali būti reikalingas keliais atvejais:

  • Baigiant standartines konfigūracijas, kad būtų lengviau atlikti tolesnę atnaujinimo procedūrą. Tokiu atveju bus pakeistas tik formos modulis. Modulius daug lengviau atnaujinti nei formas.
  • Diegiant kai kuriuos įprastus algoritmus. Pavyzdžiui, posistemyje „Draudimas redaguoti objekto detales“ visiems prie posistemio prijungtiems objektams galima programiškai sukurti mygtuką, kad būtų galima redaguoti detales.
  • Diegiant kai kuriuos konkrečius algoritmus. Pavyzdžiui, kataloge Nomenklatūra sukuriami laukai papildomai informacijai redaguoti.

Tvarkomoje formoje galite programiškai pridėti, keisti ir ištrinti:

  • rekvizitai;
  • vietinės komandos;
  • elementai.

Visos šios operacijos galimos tik serveryje.

Programinis pertvarkymas turi apribojimų:

  • Galite ištrinti tik programiškai pridėtą informaciją / komandas / elementus. Negalite programiškai ištrinti konfigūravimo priemonėje sukurtų objektų.
  • Negalite priskirti atributo kaip pagrindinio.

Formos komandų keitimas

Tvarkyti objekto komandų sudėtį Tvarkoma forma yra kolekcija Komandos

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

    Kiekis ()

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

    Ištrinti (< Команда >)

„Teams“ kolekcija pasiekiama ir kliente, ir serveryje. Galite keisti rinkinį (Add() ir Delete() metodus) tik serveryje. Galite ieškoti ir gauti elementų skaičių (Rasti () ir Count () metodai) tiek kliente, tiek serveryje.

Kaip darbo su formų komandomis pavyzdį sukurkime naują „ChangeHistory“ komandą su antrašte „ChangeHistory...“, kuri iškvies tvarkyklę DisplayHistory(). Sukūrimas įvyksta atidarius formą.

&Serveryje
Procedūra Kai sukuriama serveryje (gedimas, standartinis apdorojimas)
Komanda = Komandos. Papildyti( „Pokyčių istorija“);
Komanda . Veiksmas = ;
Komanda . Pavadinimas = „Pokyčių istorija...“;
Procedūros pabaiga
&OnClient
Procedūra Connectable_DisplayHistory(Command)
// komandiniai veiksmai
Procedūros pabaiga

Komandų tvarkytuvas turi būti formoje ir turėti &OnClient kompiliavimo direktyvą.

Formos detalių keitimas

Formos detalių kompozicijos skaitymą atlieka funkcija Gaukite išsamią informaciją(< Путь >) grąžina FormAttributes tipo masyvą. Funkcijos parametras nurodo kelią į pirminį atributą (kaip eilutę). Jei parametras praleistas arba nurodyta tuščia eilutė, pateikiama aukščiausio lygio informacija.

Detalių keitimas atliekamas naudojant metodą Keisti informaciją(<Pridėta detalių>, <Nuimamos detalės>) objektas Tvarkoma forma. Prie parametrų Pridėta detalių Ir Nuimamos detalės Persiunčiami masyvai su Form Attributes tipo elementais.

Dėmesio!

Detalių kompozicijos keitimo procesas yra gana daug resursų reikalaujantis procesas. Forma iš tikrųjų atkuriama. Šiuo atžvilgiu darbas su formos detalėmis atliekamas paketiniu režimu.

Sukurkime naują formos atributą pavadinimu Pirkėjas:


AddedDetails = Naujas masyvas;
Pridėta išsami informacija. Pridėti (nauji formos atributai(„Pirkėjas“, Naujo tipo aprašymas („Katalogo nuoroda. Sandorio šalys“), „Klientas“);

// Detalių kompozicijos pokyčiai
);

Formos elementų keitimas

Kontroliuoti objekto elementų kompoziciją Tvarkoma forma yra kolekcija Elementai. Kolekcija turi keletą būdų:

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

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

    Kiekis ()

    Rasti (< Имя >)

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

    Ištrinti (< Элемент >)

Elementų kolekcija pasiekiama ir kliente, ir serveryje. Modifikuoti kolekciją (įterpti metodus () , Pridėti () , Perkelti () ir Naikinti () ) pasiekiami tik serveryje. Galite ieškoti ir gauti elementų skaičių (Rasti () ir Count () metodai) tiek kliente, tiek serveryje. Kolekcijos elementai gali būti:

  • FormGroup;
  • FormTable;
  • FormField;
  • Formos mygtukas.

Formos elementams galite programiškai priskirti įvykių tvarkykles. Metodas skirtas šiems tikslams SetAction(< ИмяСобытия>, < Действие >) .

Pažvelkime į kai kuriuos dažniausiai pasitaikančius darbo su komandomis, detalėmis ir formos elementais pavyzdžius.

Komandos ir su ja susijusio mygtuko pridėjimas:

// Sukurkite komandą
Komanda = Komandos. Papildyti( „Pokyčių istorija“);
Komanda . Veiksmas = „Plug-in_DisplayHistory“; // Formoje turi būti nurodyta procedūra su nurodytu pavadinimu
Komanda . Antraštė = „Pokyčių istorija...“;
// Sukurkite mygtuką ir susiekite jį su komanda
Elementas = Daiktai. Papildyti( „Pokyčių istorija“, Type("FormButton" ));
Element.CommandName = „Pokyčių istorija“;

Atributo ir susieto įvesties lauko pridėjimas:

// Pridėtos informacijos aprašymas
AddedDetails = Naujas masyvas;
Pridėta išsami informacija. Papildyti(Naujos formos rekvizitai („Pirkėjas“, naujo tipo aprašymas () "DirectoryLink. Sandorio šalys"), „Klientas“ ));
// Detalių kompozicijos keitimas
ChangeDetails (pridėta informacija);
// Įvesties lauko sukūrimas ir sujungimas su atributais
Elementas = Daiktai. Add("Pirkėjas" , Tipas("Formos laukas" ));
Elementas . Rodinys = FormFieldView. Įvesties laukas;
Elementas . PathToData= "Pirkėjas" ;

Įvykių tvarkyklės priskyrimas formos elementui:

PrekėCustomer. SetAction(„Kai pasikeis“, „Connected_BuyerOnChange“);

&OnClient
Procedūra Connected_BuyerOnChange(Elementas)
// Įvykio veiksmai
Procedūros pabaiga

Dėmesio!

Procedūros, kurios nustatomos kaip įvykių tvarkyklės iš kodo naudojant metodą SetAction(), rekomenduojama nustatyti priešdėlį Connectable_.

Dėmesio!

Galite atsisiųsti apdorojimą naudodami programinės paieškos ir valdomos formos detalių, komandų ir elementų keitimo pavyzdžius.

Išsami informacija apie formą

Išsamios formos duomenų rinkinys apibūdina duomenų, kurie rodomi, redaguojami arba saugomi formoje, sudėtį. Tuo pačiu metu pačios formos detalės nesuteikia galimybės rodyti ir redaguoti duomenų. Formos elementai (žr. šio skyriaus skyrių „Formos elementai“), susieti su formos informacija, naudojami rodyti ir redaguoti. Visos formos informacijos rinkinys bus vadinamas formos duomenimis.

Svarbu! Reikia atsiminti, kad, skirtingai nuo įprastų formų, visi valdomoje formoje esantys duomenys turi būti aprašyti detalių forma. Neleidžiama naudoti formos modulio kintamųjų kaip formos elementų duomenų šaltinių.

Galima priskirti Pagrindinės formos detalės, t.y., atributai, kurie nulems standartinį formos funkcionalumą (formos plėtinys). Reikėtų atsiminti, kad forma gali turėti tik vieną pagrindinį atributą.

Formos plėtinys– tai papildomos ManagedForm objekto savybės, metodai ir formos parametrai, būdingi objektui, kuris yra pagrindinis formos elementas.

Formos kūrimo proceso metu galite aiškiai nustatyti galimybę peržiūrėti ir redaguoti konkrečią formos informaciją, susijusią su vaidmenimis, naudodami ypatybes Peržiūrėti ir redaguoti (daugiau informacijos žr. „Redaktorių“ skiltyje „Vaidmenimis pagrįsti formos nustatymai“ “ skyrių). Be to, konkretaus atributo prieinamumą pačioje formoje galima konfigūruoti naudojant funkcines parinktis (daugiau informacijos apie funkcines parinktis rasite skyriuje „Konfigūracijos sąsajos valdymas“).

Formos atributo nuosavybė Išsaugoti duomenys yra ženklas, kad interaktyvus detalių pakeitimas sukels bandymą blokuoti formos duomenis redaguoti, taip pat automatiškai nustatys formos modifikavimo vėliavėlę.

Duomenų tipai pasiekiami valdoma forma

Tvarkoma forma nuo įprastos taip pat skiriasi duomenų tipais, su kuriais ji dirba. Jei įprasta forma veikia su daugeliu tipų, kuriuos teikia 1C:Enterprise (įskaitant tipus DirectoryObject, DocumentObject ir kt.), tada valdomoje formoje galima išskirti šias tipų kategorijas:

  • tipai, kurie tiesiogiai naudojami formoje, yra tie tipai, kurie egzistuoja plonojo ir žiniatinklio kliento pusėje (pavyzdžiui, Number, DirectoryLink.Products, GraphicScheme, TabularDocument);
  • tipų, kurie bus konvertuojami į specialius duomenų tipus – valdomų formų duomenų tipus. Tokie tipai pateikiami formos detalių sąraše skliausteliuose, pavyzdžiui (DirectoryObject.Products);
  • dinaminis sąrašas (daugiau informacijos rasite šio skyriaus skyriuje „Dinaminis sąrašas“).

Programos objektų konvertavimas į formos duomenis

Kai kurie programų tipai (pvz., DirectoryObject ir kt.) neegzistuoja plonojoje ir žiniatinklio kliento pusėje (daugiau informacijos rasite skyriuje Valdomos programos koncepcija). Todėl tokiems taikomųjų programų tipams atstovauti platformoje buvo įvesti specialūs duomenų tipai, skirti dirbti valdomose formose. Dėl šios valdomos programos ypatybės būtina konvertuoti programos objektus į duomenų formą (ir atvirkščiai).

Naudojami šie duomenų tipai:

  • Formos duomenų struktūra – yra savavališko tipo savybių rinkinys. Savybės gali būti kitos struktūros, kolekcijos arba struktūros su kolekcijomis. Šis tipas vaizduojamas, pavyzdžiui, forma DirectoryObject.
  • FormDataCollection yra įvestų reikšmių sąrašas, panašus į masyvą. Kolekcijos elementas pasiekiamas naudojant indeksą arba identifikatorių. Kai kuriais atvejais prieiga naudojant ID gali būti neprieinama. Taip yra dėl programos objekto tipo, kurį reprezentuoja ši kolekcija. Identifikatorius gali būti bet koks sveikasis skaičius. Šis tipas vaizduojamas, pavyzdžiui, lentelės pavidalu.
  • Formos DataStructureWithCollection yra objektas, kuris vienu metu vaizduojamas kaip struktūra ir rinkinys. Jis gali būti traktuojamas kaip bet kuris iš šių subjektų. Šis tipas reiškia, pavyzdžiui, formos įrašų rinkinį.
  • Form DataTree – objektas, skirtas saugoti hierarchinius duomenis.

Programos objektas yra pavaizduotas vienu arba keliais formos duomenų elementais. Apskritai formos duomenų hierarchija ir sudėtis priklauso nuo valdomos formos taikomųjų objektų sudėtingumo ir tarpusavio ryšio.

Pavyzdžiui, dokumentas, kuriame yra lentelės formos dalis, bus pavaizduotas FormDataStructure tipo objektu (pats dokumentas), kuriam yra pavaldus FormDataCollection tipo objektas (dokumento lentelinė dalis).

Svarbu! Kuriant konfigūraciją svarbu atsiminti, kad taikomųjų programų objektai yra prieinami tik serveryje, o formos duomenų objektus galima naudoti ir serveryje, ir kliente.

Duomenų perkėlimas tarp valdomos formos kliento ir serverio dalių

Tiesą sakant, galime sakyti, kad formos duomenys yra vieningas duomenų iš įvairių taikomųjų objektų, su kuriais forma veikia vienodai ir kurie yra tiek serveryje, tiek kliente, reprezentacija. Tai reiškia, kad formoje yra tam tikra programos objekto duomenų „projekcija“ savo duomenų tipų pavidalu ir, jei reikia, atlieka konvertavimą tarp jų. Tačiau jei konfigūracijos kūrėjas įdiegia savo duomenų apdorojimo algoritmą, duomenų konvertavimą (iš specializuotų tipų į taikomųjų programų tipus ir atvirkščiai) jis turi atlikti savarankiškai.

Redaguojant formos duomenis specializuotame redaktoriuje (daugiau informacijos žr. skyriaus „Redaktoriai“ skiltyje „Formos detalės“), galima paveikti duomenų perdavimą tarp kliento ir serverio, kol forma veikia. Tam naudojamas išsamios informacijos redaktoriaus stulpelis. Visada naudoti. Šios savybės poveikis skiriasi trijų tipų atributams:

  • Jei atributas yra pavaldus dinaminiam sąrašui (dinaminis sąrašo stulpelis):
    • property enabled – atributas visada nuskaitomas iš duomenų bazės ir įtraukiamas į formos duomenis;
    • ypatybė išjungta – atributas nuskaitomas iš duomenų bazės ir įtraukiamas į formos duomenis tik tada, kai yra šiuo metu matomas formos elementas, susietas su atributu arba jam antraeiliu atributu.
  • Judesių kolekcijai pavaldžiam rekvizitui:
    • ypatybė įjungta – dokumentų judėjimai nuskaitomi iš duomenų bazės ir bus formų duomenyse;
    • ypatybė išjungta – dokumentų judėjimai nebus nuskaitomi iš duomenų bazės ir nebus įtraukti į formos duomenis (jei nėra formos elemento, nurodančio dokumentų judėjimą).
  • Kita formos informacija:
    • ypatybė įjungta – atributas bus formos duomenyse, neatsižvelgiant į tai, ar yra bent vienas formos elementas, susietas su atributu ar jam antraeiliu atributu;
    • ypatybė išjungta – atributas formos duomenyse bus tik tuo atveju, jei su atributu arba jam antraeiliu atributu yra susietas formos elementas. Skirtingai nuo dinaminio sąrašo atributų, su atributu susieto elemento matomumas čia nesvarbus.

Pastaba. Reikėtų prisiminti, kad pirminio atributo ypatybė turi įtakos visiems antriniams atributams. Pavyzdžiui, jei ypatybė Naudoti visada išvaloma dokumento lentelės daliai, tada sistema mano, kad ši ypatybė taip pat išvalyta visoms antraeilių detalėms (nepaisant tikrosios nuosavybės būklės).

Programos objektų duomenų konvertavimo į formos duomenis metodai

Norėdami konvertuoti programos objektus į formos duomenis ir atgal, yra visuotinių metodų rinkinys:

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

Svarbu! Metodai, kurie veikia su taikomųjų programų objektais, galimi tik serverio procedūrose. Vertybių kopijavimo tarp formos duomenų metodas yra serveryje ir kliente, nes jam nereikia taikomųjų programų objektų kaip parametrų.

Konvertuodami formos duomenis į programos objektą, turite atsižvelgti į jų suderinamumą.

  • ValueInFormData() – konvertuoja programos tipo objektą į formos duomenis;
  • FormDataInValue() – paverčia formos duomenis į programos tipo objektą;
  • CopyFormData() – kopijuoja formos duomenis, turinčius suderinamą struktūrą. Grąžina True, jei kopijavimas buvo sėkmingas, arba False, jei objekto struktūra nesuderinama.

Pastaba. Atliekant standartinius formos veiksmus (formos atidarymą, standartinę Write komandą ir kt.) su pagrindiniais duomenimis konvertavimas atliekamas automatiškai.

Pateiksime pavyzdį, kaip naudoti duomenų transformavimą savo algoritmuose.

&OnServerProcedure, kai CreateOnServer (gedimas, standartinis apdorojimas)

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

Procedūros pabaiga

&OnClient rašymo procedūra()

WriteOnServer();

Procedūros pabaiga

&OnServer procedūra WriteOnServer()

ObjectProduct = FormDataValue(Object, Type("KatalogasObject.Produktai")); ObjectItem.Write();

Procedūros pabaiga

Objektas „ManagedForm“ taip pat turi serverio metodus:

  • ValueВFormAttribute() – konvertuoja programos tipo objektą į nurodytą formos atributą.
  • FormAttributeVValue() – paverčia formos duomenų atributą į programos tipo objektą.

Naudoti šiuos metodus paprastai yra patogiau, nes jie turi, pavyzdžiui, informacijos apie formos detalių tipą. Be to, metodas Form AttributesValue() nustato atitiktį tarp formos duomenų ir objekto, kuris naudojamas generuojant pranešimus. Daugiau apie tai galite perskaityti skyriuje „Paslaugų navigacijos galimybės“.

Pateiksime šių metodų naudojimo pavyzdį.

&OnServer procedūra RecalculateOnServer()

// Konvertuoja objekto atributą į programos objektą. Dokumentas = Formos atributaiValue("Objektas"); // Atlieka perskaičiavimą dokumento modulyje apibrėžtu metodu. Dokumentas.Perskaičiuoti(); // Konvertuoja programos objektą atgal į rekvizitus. ValueВFormAttributes (Dokumentas, „Objektas“);

Procedūros pabaiga

Programinės įrangos sąsaja

FormDataTree

  • FindById
  • GetItems

Apibūdinimas:

Sukurta modeliuoti medį valdomos formos duomenyse.

Šis objektas gali būti serijinis į/iš XDTO. XDTO tipas, atitinkantis nurodytą objektą, yra apibrėžtas vardų erdvėje. XDTO tipo pavadinimas:

GetItems

Sintaksė:

Gauti elementus ()

Grąžinimo vertė:

Tipas: Formos duomenų medžio elementų rinkimas.

Apibūdinimas:

Gauna aukščiausio lygio medžio elementų kolekciją.

Prieinamumas: klientas, serveris, plonas klientas, žiniatinklio klientas.

FindById

Sintaksė:

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

Galimybės:

<Идентификатор>(būtina)

Tipas: numeris. Medžio elemento identifikatorius.

Grąžinimo vertė:

Tipas: FormDataTreeElement.

Apibūdinimas:

Gauna kolekcijos elementą pagal ID.

Prieinamumas: klientas, serveris, plonas klientas, žiniatinklio klientas.

FormDataTreeItem

Savybės:

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

  • GetId (GetId)
  • GetParent
  • GetItems
  • Nuosavybė

Apibūdinimas:

Formos duomenų medžio elementas.

FormDataTreeItemCollection

Kolekcijos elementai: DataFormTreeElement

Objektui galima pereiti kolekciją naudojant operatorių Kiekvienam... Nuo... Ciklas. Traversal parenkami kolekcijos elementai. Kolekcijos elementą galima pasiekti naudojant [...] operatorių. Elemento indeksas perduodamas kaip argumentas.

  • Įdėti
  • Papildyti
  • Indeksas (IndexOf)
  • Suskaičiuoti
  • Aišku
  • Gauk
  • Judėti
  • Ištrinti

Apibūdinimas:

Medienos elementų kolekcija.

Prieinamumas: klientas, serveris, plonas klientas, žiniatinklio klientas.

Taip pat žiūrėkite:

  • FormDataTreeElement, GetElements metodas
  • DataFormTree, metodas GetItems

Darbo su vertybių medžiu ypatumai

Medžio atnaujinimas

Yra problema patenka platformas atnaujinant medį.

Jei koks nors mazgas medyje buvo išplėstas ir pasirinktas antraeilis mazgas, tada atnaujinant medį naudojant funkciją ValueInFormData platforma krenta.

Sprendimas: prieš atnaujindami turite išvalyti medį.

Pavyzdžiui:

&Serverio procedūroje ClearTree(elements) Kiekvienam elementui iš elementų Loop ClearTree(element.GetElements()); EndCycle; elementai.Išvalyti(); Procedūros pabaiga

&Serverio procedūroje Užpildykite sąvokų medį() dConcepts = srProperties.Sukurkite koncepcijų medį(OnDate, Meta.CurrentIB()); ClearTree(ConceptTree.GetItems()); ValueInFormData(dConcepts, ConceptTree); Procedūros pabaiga

&OnClient procedūra OnDateOnChange(Element) Užpildykite ConceptTree(); Procedūros pabaiga

Ir duomenų perdavimo objektas kodo struktūrizavimui, valdoma forma 1C 8.2 aplinkoje.

Įvadas

Pradėkime nuo trumpo „valdomos formos“ sąvokos ir susijusių 1C platformos sąvokų aprašymo. Platformos žinovai gali norėti praleisti šį skyrių.

2008 m. pasirodė nauja 1C platformos versija: Enterprise 8.2 (toliau – valdoma programa), kuri visiškai pakeičia visą darbo su sąsaja sluoksnį. Tai apima komandų sąsają, formas ir langų sistemą. Tuo pačiu keičiasi ne tik vartotojo sąsajos kūrimo konfigūracijoje modelis, bet ir siūloma nauja architektūra, atskirianti kliento programos ir serverio funkcionalumą.
Valdoma programa palaiko šių tipų klientus:

  • Storas klientas (įprastas ir valdomas paleidimo režimas)
  • Plonas klientas
  • Interneto klientas
Tvarkomoje programoje naudojamos naujos technologijos sukurtos formos. Jie vadinami Tvarkomos formos. Siekiant palengvinti perėjimą, palaikomos ir ankstesnės formos (vadinamosios įprastos formos), tačiau jų funkcionalumas nėra išplėtotas ir prieinamos tik storojo kliento paleidimo režimu.
Pagrindiniai kūrėjo valdomų formų skirtumai:
  • Deklaratyvus, o ne „pikselis po pikselio“ struktūros aprašymas. Konkretų elementų išdėstymą sistema atlieka automatiškai, kai rodoma forma.
  • Visos formos funkcijos aprašytos kaip detales Ir komandos. Išsami informacija yra duomenys, su kuriais veikia forma, o komandos yra veiksmai, kuriuos reikia atlikti.
  • Forma veikia tiek serveryje, tiek kliente.
  • Kliento kontekste beveik visi taikomųjų programų tipai nepasiekiami, todėl informacijos duomenų bazėje pakeisti neįmanoma.
  • Kiekvienam metodui ar formos kintamajam jis turi būti nurodytas sudarymo direktyvą, apibrėžiantis vykdymo vietą (klientą arba serverį) ir prieigą prie formos konteksto.
Išvardykime formos metodų sudarymo direktyvas:
  • &OnClient
  • &Serveryje
  • &Serveryje be konteksto
  • &OnClientOnServerbe konteksto
Leiskite mums iliustruoti tai, kas išdėstyta aukščiau. Ekrano kopijoje rodomas valdomos formos ir jos modulio kūrimo režimu pavyzdys. Raskite deklaratyvų aprašymą, rekvizitus, kompiliavimo nurodymus ir kt.

Visos tolesnės diskusijos bus apie dešinę iliustracijos pusę, apie tai, kaip struktūrizuoti modulio kodą ir kokiais principais bus galima įgyvendinti efektyvią kliento ir serverio sąveiką.

Apibrėžkime problemą

Praėjo keleri metai nuo tada, kai aktyviai naudojama nauja 1C platformos versija ir tiek 1C, tiek daugelis jos partnerių išleido daugybę sprendimų (konfigūracijų).
Ar per šį laiką kūrėjai susikūrė bendrą supratimą apie kliento ir serverio sąveikos principus kuriant formas ir ar pasikeitė požiūris į programinės įrangos modulių diegimą naujose architektūrinėse realybėse?

Pažiūrėkime į kodo struktūrą (formos modulį) keliomis tos pačios standartinės konfigūracijos formomis ir pabandykime rasti šablonus.
Struktūroje turime omenyje kodo dalis (dažniausiai tai yra komentarų blokai), kurias kūrėjas skiria metodams grupuoti ir šių metodų kompiliavimo direktyvas.
1 pavyzdys:
Įvykių tvarkyklių skyrius Metodas - kliente Metodas - serveryje Metodas - kliente Aptarnavimo procedūrų ir funkcijų skyrius Pagalbinės įvesties valdymo funkcijos
2 pavyzdys:
Paslaugos procedūros ir funkcijos Mokėjimo dokumentai Vertės Įvykių tvarkytojai
3 pavyzdys:
Paslaugos procedūros serveryje Aptarnavimo procedūros kliente Aptarnavimo procedūros serveryje be konteksto Antraštės įvykių tvarkyklės Komandų įvykių tvarkyklės
4 pavyzdys:
Bendrosios paskirties procedūros Formos įvykių tvarkytojai Kontaktinės informacijos posistemio procedūros
Iš esmės trūksta kodo struktūros arba, švelniai tariant, ji panaši į tą, kuri buvo 8.1 formose:

  • Neinformatyvūs žodžiai „General, Service, Auxiliary“.
  • Nedrąsūs bandymai atskirti kliento ir serverio metodus.
  • Metodai dažnai grupuojami pagal sąsajos elementus „Darbas su lentelės dalimi Produktai, Kontaktinė informacija“.
  • Savavališkas metodų ir kodų grupių išdėstymas. Pavyzdžiui, įvykių tvarkytojai viena forma gali būti viršuje, kitoje apačioje, trečioje visai neparyškinti ir pan.
  • Ir nepamirškime, kad visa tai yra vienoje konfigūracijoje.
  • Taip, yra konfigūracijų, kuriose žodžiai „General“, „Service“, „Auxiliary“ visada yra tose pačiose vietose, bet...
Kodėl jums reikia kodo struktūros?
  • Priežiūros supaprastinimas.
  • Supaprastinkite mokymąsi.
  • Bendrųjų/svarbių/sėkmingų principų užrašymas.
  • ...jūsų pasirinkimas
Kodėl nepadeda esamas 1C kūrimo standartas?
Pažvelkime į ITS diskuose ir įvairiuose „Kūrėjų vadovuose...“ skelbiamus principus, kurie rekomenduojami rašant valdomą formą.
  • Sumažinkite serverio skambučių skaičių.
  • Maksimalus skaičiavimas serveryje.
  • Ne kontekstiniai serverio skambučiai yra greitesni nei kontekstiniai.
  • Programa, turinti omenyje kliento ir serverio ryšį.
  • ir taip toliau.
Tai šūkiai, kurie yra visiškai teisingi, bet kaip juos įgyvendinti? Kaip sumažinti skambučių skaičių, ką reiškia programuoti klientas-serveris režimu?

Dizaino modeliai arba kartų išmintis

Kliento ir serverio sąveika įvairiose programinės įrangos technologijose naudojama dešimtmečius. Atsakymas į ankstesniame skyriuje pateiktus klausimus buvo seniai žinomas ir apibendrintas dviem pagrindiniais principais.
  • Nuotolinis fasadas(toliau – nuotolinės prieigos sąsaja)
  • Duomenų perdavimo objektas(toliau – duomenų perdavimo objektas)
Martino Fowlerio žodis, jo aprašymas apie šiuos principus:
  • Kiekvienas objektas, potencialiai skirtas nuotolinei prieigai, turi turėti mažo detalumo sąsaja, kuris sumažins skambučių, reikalingų konkrečiai procedūrai atlikti, skaičių. ... Užuot prašydami sąskaitos faktūros ir visų jos prekių atskirai, turite perskaityti ir atnaujinti visas sąskaitos faktūros prekes vienoje užklausoje. Tai turi įtakos visai objekto struktūrai...Atminkite: nuotolinės prieigos sąsaja nėra domeno logikos.
  • ...jei būčiau rūpestinga mama, savo vaikui tikrai sakyčiau: „Niekada nerašyk duomenų perdavimo objektų! Daugeliu atvejų duomenų perdavimo objektai yra ne kas kita išsipūtęs lauko rinkinys... Šio šlykštaus pabaiso vertė slypi tik galimybėje vienu skambučiu tinklu perduoti kelias informacijos dalis- technika, kuri yra labai svarbi paskirstytoms sistemoms.
1C platformos šablonų pavyzdžiai
Programų programavimo sąsajoje, kurią kūrėjas gali gauti kuriant valdomą formą, yra daug šių principų pavyzdžių.
Pavyzdžiui, OpenForm() metodas, tipiška „grubi“ sąsaja.
OpeningParameters = New Structure("1 parametras, 2 parametras, 3 parametras", 1 reikšmė, 2 reikšmė, 3 reikšmė); Forma = OpenForm(FormosPavadinimas, OpeningParameters);
Palyginkite su stiliumi, priimtu v8.1.
Forma = GetForm(FormosPavadinimas); Form.Parameter1 = Reikšmė1; Forma.Parameter2 = Reikšmė2; Form.Open();

Valdomos formos kontekste yra daug „duomenų perdavimo objektų“. Galite pasirinkti sisteminis Ir kūrėjo apibrėžta.
Sisteminiai modeliuoja programos objektą kliente vieno ar kelių formos duomenų elementų pavidalu. Neįmanoma jų sukurti nenurodant formos detalių.

  • DataFormsStructure
  • DataFormsCollection
  • DataFormStructureWithCollection
  • DataShapesTree
Sistemos duomenų perdavimo objektų konvertavimas į taikomųjų programų tipus ir atvirkščiai atliekamas šiais būdais:
  • ValueInFormData()
  • FormDataValue()
  • CopyFormData()
  • ValueInFormAttributes()
  • FormaAttributesValue()
Pritaikant esamą sprendimą, dažnai naudojamas aiškus konvertavimas. Metodai gali tikėtis (naudoti funkcijas) įvesties parametrų, pvz., ValueTable, o ne FormDataCollection, arba metodas buvo apibrėžtas programos objekto kontekste ir tapo nepasiekiamas tiesioginiam iškvietimui iš formos.
1C v8.1 pavyzdys:
// kliente formos FillUserCache(DepartmentLink) kontekste
1C v8.2 pavyzdys:
// serveryje formos ProcessingObject = Form AttributesValue("Object") kontekste; ProcessingObject.FillUserCache(DepartmentRef); ValueВFormAttributes(ProcessingObject, "Object");

Duomenų perdavimo objektai, kurių struktūrą nustato kūrėjas, yra nedidelis tiek kliento, tiek serverio tipų pogrupis. Dažniausiai kaip „grubios“ sąsajos metodų parametrai ir rezultatai naudojami:

  • Primityvūs tipai (eilutė, skaičius, loginė vertė)
  • Struktūra
  • Susirašinėjimas
  • Masyvas
  • Nuorodos į programos objektus (unikalus identifikatorius ir teksto atvaizdas)
Pavyzdys: metodas priima pavedimų sąrašą, kad pakeistų būseną, ir grąžina klientui klaidų aprašymą.
&OnServerWithoutContext funkcija ServerChangeOrderStatus(Užsakymai, NaujaBūsena) Klaidos = Nauja atitiktis(); // [užsakymas][klaidos aprašymas] Kiekvienam užsakymui iš užsakymų Cycle StartTransaction(); Pabandykite DocOb = Order.GetObject(); …. kiti veiksmai, galimi ne tik su pavedimu... Išimtis CancelTransaction(); Klaidos.Įterpti(užsakymas, klaidos aprašymas()); EndAttempt; EndCycle; Grąžinimo klaida; EndFunction // ServerChangeOrderStatus()

Kodo struktūrizavimas

Pagrindiniai tikslai, kuriuos turėtų atspindėti valdomos formos modulis, ir požiūriai į sprendimą.
  • Aiškus kliento ir serverio kodų atskyrimas. Nepamirškime, kad vykdymo metu tai yra du sąveikaujantys procesai, kurių kiekvienas turi labai skirtingas galimas funkcijas.
  • Aiškus nuotolinės prieigos sąsajos identifikavimas, kuriuos serverio metodus galima iškviesti iš kliento, o kurių ne? Nuotolinės sąsajos metodų pavadinimai prasideda priešdėliu „Serveris“. Tai leidžia iš karto matyti valdymo perdavimą į serverį skaitant kodą ir supaprastina kontekstinės pagalbos naudojimą. Atminkite, kad oficialioje rekomendacijoje (ITS) siūlomi pavadinimo metodai su postfixes, pavyzdžiui, ChangeOrderStatusOnServer(). Tačiau pakartokime, ne visus serverio metodus galima iškviesti iš kliento, todėl svarbesnis yra loginis prieinamumas, o ne kompiliavimo vieta. Todėl priešdėliu „Server“ pažymime tik klientui prieinamus metodus, vadinkime pavyzdinį metodą ServerChangeOrderStatus().
  • Skaitomumas. Skonio reikalas, užsakymą priimame, kai prasideda modulis su formų kūrimo procedūromis serveryje ir nuotolinės prieigos būdais.
  • Priežiūra. Naujam kodui pridėti turi būti aiški vieta. Svarbus dalykas yra tai, kad konfigūratoriaus automatiškai sukurti metodų šablonai pridedami prie modulio pabaigos. Kadangi formų elementų įvykių tvarkyklės dažniausiai sukuriamos automatiškai, atitinkamas blokas yra paskutinis, kad nebūtų nutempta kiekviena tvarkytoja į kitą modulio vietą.
Žemiau pateikiama pagrindinė modulio, įgyvendinančio išvardintus tikslus, struktūra.
  • Grafinis variantas – aiškiai parodo pagrindinį vykdymo eigą.
  • Teksto parinktis yra šablono dizaino pavyzdys, skirtas greitai įterpti struktūrą į naują formos modulį.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор=""Data=""/> // <Описание> // // ////////////////////////////////////////////////// /////////////////////////// // MODULO KINTAMAI ////////////////// // //////////////////////////////////////////////////// ////////// // SERVERYJE //******* ĮVYKIAI SERVERYJE ******** &Apie serverio procedūrą, kai sukuriama serveryje (gedimas, standartinis apdorojimas) / /Įterpkite tvarkyklės turinį Procedūros pabaiga //******* NUOTOLINĖS PRIEIGOS SĄSAJA ******* //******** VERSLO LOGIKA SERVERYJE ******* /////////////////////////////////////////////////// /////// //////////////////// // BENDRIEJI KLIENTO IR SERVERIO METODAI //////////////// /////// //////////////////////////////////////////// ///// //////// // APIE KLIENTO //******* VERSLO LOGIKA KLIENTE ****** //******** KOMANDA * ****** //******** KLIENTO RENGINIAI ******* /////////////////////////// ///// ////////////////////////////////////////////// // / / PAGRINDINĖS PROGRAMOS OPERATORIAI

Susiję klausimai
Pabaigoje apibūdinsime keletą sričių, apie kurias naudinga pagalvoti programuojant kliento ir serverio sąveiką.
  • Nuotolinės prieigos sąsajos diegimo parinktys. Asinchronija, detalumo lygis...
  • Talpykla. 1C priėmė nesėkmingą architektūrinį sprendimą, įvesdamas talpyklą tik įprastų modulių iškvietimo metodų lygiu ir nesuteikdamas valdymo galimybių (atitinkamo laiko, atstatymo pagal poreikį).
  • Netiesioginiai serverio iškvietimai. Nepamirškite apie technologines ypatybes, daugelis „nekenksmingų“ operacijų išprovokuoja platformą susisiekti su serveriu.

Forma valdoma įvairiais formos elementais, kurie hierarchiškai išdėstyti skirtuke Elementai formų dizaineris. Svarbiausias elementas yra pati forma, kuri yra elementų hierarchijos viršuje, o likę elementai yra jai pavaldūs.

Visus formos elementus galima suskirstyti į penkias grupes: laukus, grupavimo elementus, mygtukus, dekoracijas ir lenteles. Savo straipsniuose analizuosiu kiekvieną grupę. Šiame straipsnyje mes pradėsime tyrinėti vieną iš lauko elementų tipų - įvesties lauką, bet prieš tai sužinosime, kaip į formą įtraukti elementą.

Elementų įtraukimas į formą

Tai daroma gana paprastai: reikia pasirinkti elementą Forma lange Formos dizaino elementai ir spustelėkite mygtuką „Pridėti“. Po to atsidarys langas, kuriame turėsite pasirinkti norimą elemento tipą

Pasirinkus, lange pasirodys norimas elementas Elementai.

Valdomos formos elementas Laukas

Pažvelkime į valdomos formos elementą Laukas. Šis elementas reikalingas norint įvesti informaciją į formą. Ir taip pat rodyti bet kokią informaciją. Pridėjus šį elementą prie formos, dešinėje atsidarys formos elemento ypatybių paletė. Kol kas jus turėtų sudominti dvi savybės – DataPath ir View.

Ypatybėje DataPath kūrėjas gali susieti formos elementą su norimu formos atributu. Atkreipkite dėmesį, kad po elemento pridėjimo Įvesties laukas formoje jis nebuvo rodomas pačioje formoje. Taip atsitiko, nes mūsų naujasis elementas nėra susietas su . Pavyzdžiui, apdorojimo formoje sukūriau kelis atributus su skirtingais primityviais tipais ir vieną atributą su nuorodos tipu.

Dabar sujunkite mūsų neseniai pridėtą formos elementą su viena iš detalių, kad tai padarytumėte, pasirinkite norimą atributą iš elemento ypatybės PathKData.

Po to bus užpildytos DataPath ir View ypatybės, o pats elementas bus rodomas formos rodinyje.

Atkreipkite dėmesį į elemento savybes Žiūrėti. Ši savybė apibrėžia įvesties lauko funkcionalumą. Galite pasirinkti skirtingas šios nuosavybės vertes.

Atsižvelgiant į pasirinktą vertę, bus nustatytas funkcionalumas. Viršuje esančiose nuotraukose pasirinkta vertė yra – įvesties lauką, t.y. Šiame įvesties lauke galime įvesti bet kokias reikšmes, o jei pasirinksime reikšmę etiketės laukas, tada nieko negalėsime įvesti.

Ši turto vertė ŽiūrėtiĮvesties laukus patogu pasirinkti, kai tiesiog reikia parodyti pagalbos informaciją vartotojui.

Dabar pridėkime naują formos elementą su tipu Įvesties laukas ir prijunkite jį su rekvizitais Išsami informacijaData per mums jau pažįstamą DataPath nuosavybę

Kaip matote, pasikeitė įvesties lauko išvaizda, taip pat pasikeis galimas ypatybės View verčių pasirinkimas.

Taigi darome išvadą, kad įvesties lauko funkcionalumas priklauso nuo atributo tipo.

Rekvizitų su tipu Būlio Bus pasiekiamos šios peržiūros nuosavybės vertės.

O atributams, turintiems nuorodos tipą, bus pasiekiamos kitos rodinio nuosavybės reikšmės.

Išsamesnis darbas su formos elementais naudojant praktinius pavyzdžius pateiktas knygoje „1C kūrimo pagrindai: taksi. Valdomas programų kūrimas 12 žingsnių“.

Kartais atrodo, kad mokytis programavimo kalbos 1C yra sudėtinga ir sunku. Tiesą sakant, programuoti 1C yra lengva. Mano knygos padės greitai ir lengvai įsisavinti programavimą 1C: ir „1C kūrimo pagrindai: taksi“

Išmokite programuoti 1C naudodamiesi mano knyga „Programavimas 1C 11 žingsnių“

  1. Jokių sudėtingų techninių terminų.
  2. Daugiau nei 700 puslapių praktinės medžiagos.
  3. Prie kiekvienos užduoties pridedamas piešinys (ekrano kopija).
  4. Užduočių rinkinys namų darbams.
  5. Knyga parašyta aiškia ir paprasta kalba – pradedantiesiems.

Ši knyga tinka tiems, kurie jau pradėjo programuoti ir patiria tam tikrų sunkumų dėl šios temos bei tiems, kurie programuoja jau seniai, bet niekada nedirbo su 1C valdomomis formomis.

  1. Be sudėtingų techninių terminų;
  2. Daugiau nei 600 puslapių praktinės medžiagos;
  3. Prie kiekvieno pavyzdžio pridedamas piešinys (ekrano kopija);
  4. Knyga siunčiama elektroniniu paštu PDF formatu. Galima atidaryti bet kuriame įrenginyje!

Reklamos kodas su 15% nuolaida - 48PVXHeYu


Jei ši pamoka padėjo išspręsti kokią nors problemą, patiko ar pasirodė naudinga, tuomet galite paremti mano projektą paaukodami bet kokią sumą:

Galite mokėti rankiniu būdu:

„Yandex.Money“ - 410012882996301
Interneto pinigai – R955262494655

Prisijunk prie mano grupių.