Kako programski uspostaviti vezu od strane vlasnika u obrascu. Kako programski dodati novi element direktorija ako ima vlasnika (1C: Programer) Komunikacija od strane vlasnika kontroliranog oblika

31.10.2021

Kako programski uspostaviti vezu od strane vlasnika u obrascu. Kako programski dodati novi element direktorij, ako ima vlasnika (1C: Programer)

Pitanje Kako povezati po vlasniku u obrascu?
Odgovori
Pretpostavimo da negdje, na primjer, u obrascu liste registara, želite dati korisniku priliku da interaktivno specificira jedinicu za skladištenje stavke. "Nomenklatura" je referentna knjiga. “Jedinica za skladištenje” je imenik koji je podređen nomenklaturi. Direktorij “Nomenklatura” obično sadrži mnogo elemenata. Ako smo u obliku liste registara, jednostavno dodamo dvije kolone - “Stavka” i “Jedinica za skladištenje”, a onda kada pokušamo interaktivno odabrati “skladišnu jedinicu” ona će se zamrznuti. O tome smo već pisali u članku „Kako podesiti odabir podređenog elementa direktorija, a ovdje ćemo pogledati problem iz malo drugačije perspektive.
Kako bi se spriječilo zamrzavanje, obično se dodjeljuje “Komunikacija vlasnika”. Vidi sliku. Lijevo na slici je obrazac liste registara, desno na slici su svojstva polja za unos “ex” (isto ono koje je u obrascu registarske liste označeno s lijeve strane crvenim slovima “ex”) . Da biste jedinstveno odredili vlasnika (ne programski), za polje za unos „ex“ popunite polje označeno na slici brojem „1“ - „Odnos po vlasniku“, gde je naznačena veza sa poljem „Nomenklatura“ .

Pitanje Kako programski uspostaviti vezu po vlasniku u obrascu?
Odgovori
Međutim, dešava se da vlasnik mora biti instaliran programski, ovisno o nekom stanju.

Recimo da polje „EX” liste registara treba da bude povezano sa vlasničkim poljem „Transportna jedinica” (koje je takođe element imenika „Nomenklatura”), ako je transportna jedinica popunjena, a ako nije popunjena in, onda se vlasnikom treba smatrati vrijednost u polju “Nomenklatura” – vidi indeks broj 3 na slici.

Kako ovo implementirati?

Poenta je u tome u ovom slučaju polje 1 „Odnos prema vlasniku“ nije potrebno popunjavati. Ali u polju 2 “Početak odabira” morate navesti proceduru u kojoj će se veza od strane vlasnika programski odrediti pomoću direktive "ChoiceByOwner".
Primjer procedure:

Informacije o proceduri. Lista registra. Početak odabira jedinice za pohranu (element, standardna obrada) // odredimo vlasnika trenutnog EX Vlasnik = FormElements. Informacije RegisterList. CurrentData. Nomenklatura; If ValueFilled(FormElements.InformationRegisterList.CurrentData.TransportUnit) Onda IfFormElements. Informacije RegisterList. CurrentData. TransportUnit. Vrsta stavke = Transferi. USTYPESNomenclature. Učitaj Zatim Vlasnik = FormElements. Informacije RegisterList. CurrentData. TransportUnit EndIf ; EndIf ;// postavlja odabir od strane vlasnika

Pitanje Element. SelectByOwner = Vlasnik;
Odgovori
Kraj procedure
Kako programski dodati novi element direktorija ako ima vlasnika.

Recimo da želite programski kreirati novi element direktorija “Storage Units”, čiji je vlasnik direktorij “Nomenclature” Ovo se radi ovako: // kreirajte novi element direktorija "Skladišne ​​jedinice": EX = Imenici. Storage Units. CreateItem() ; // zapiši vlasnika za to - vezu na nomenklaturu, gdje je "Nomenklatura" element ranije definiranog direktorija "Nomenklatura" EX. Vlasnik = Stavka. Link; // definiramo ime i ostale detalje: EX. Ime = "naše ime" ; EX. Koeficijent = 1;

// ... - ovdje je isto, popunjavamo sve potrebne detalje

// zapravo, upisuje kreiranu skladišnu jedinicu u bazu podataka:

EX. Write() ;

Informacije preuzete sa stranice

Pretpostavimo da je u obliku registarske liste potrebno korisniku pružiti mogućnost da interaktivno specificira jedinicu za skladištenje stavke. "Nomenklatura" je referentna knjiga. “Jedinica za skladištenje” je imenik koji je podređen nomenklaturi. Imenik Nomenklature obično sadrži mnogo elemenata. Ako smo u obliku liste registara, jednostavno dodamo dvije kolone - “Stavka” i “Jedinica za skladištenje”, a onda kada pokušamo interaktivno odabrati “skladišnu jedinicu” ona će se zamrznuti.

Pogledajmo problem iz malo drugačije perspektive.

Na primjer, polje “IST” liste registara mora biti povezano s vlasničkim poljem “Transport Unit” (koje je također element imenika “Nomenklatura”), ako je transportna jedinica popunjena, a ako nije popunjen, onda vrijednost u polju “Nomenklatura” treba smatrati vlasnikom - vidi indeks br. 3 na slici.
Kako se to implementira?
U ovom slučaju polje 1 „Odnos prema vlasniku“ nije potrebno popunjavati. Ali istovremeno je potrebno u polju 2 “Početak odabira” navesti proceduru u kojoj će se programski odrediti veza od strane vlasnika pomoću direktive “Select By Owner”.
Primjer procedure:

Informacije o proceduri. Lista registra. Početak odabira jedinice za pohranu (element, standardna obrada)

Vlasnik = Elementi obrasca.Informacija RegisterList.CurrentData.Nomenclature;
Ako je ValueFilled(FormElements.InformationRegisterList.CurrentData.TransportUnit) onda
Ako Elementi obrasca.Information RegisterList.TurrentData.Transport Unit.Item Type = Transfers.usItem Types.Cargo onda
Vlasnik = Elementi obrasca.Informacija RegisterList.CurrentData.TransportUnit
endIf;
endIf;

Item.SelectByOwner = Vlasnik;

Kraj procedure

Kako programski dodati novi element direktorija ako ima vlasnika

Moramo programski kreirati novi element direktorija “Storage Units”, čiji je vlasnik direktorij “Nomenclature”

Ovo se radi ovako:
// kreirajte novi element direktorija "Skladišne ​​jedinice":
IST = Directories.StorageUnits.CreateItem();
// zapišite vlasnika za to - vezu na nomenklaturu, gdje je "Nomenklatura" element ranije definiranog direktorija "Nomenklatura"
HIST.Owner = Nomenklatura.Link;
// definiramo ime i ostale detalje:
IST.Name = "ABS jedinica";
HIST.Koeficijent = 1;
//... popunite preostale detalje
// zapravo, upisuje kreiranu skladišnu jedinicu u bazu podataka:
IST.Write();