Kako otvoriti obrazac liste sa nekim odabirom? 1c otvorite obrazac za odabir sa selekcijom.

Programsko otvaranje obrazaca u upravljanoj 1C aplikaciji značajno se razlikuje od otvaranja u običnoj aplikaciji. Pogledajmo prvo staru metodu. Sastoji se od primanja obrasca i njegovog otvaranja u normalnom ili modalnom načinu (kada se otvori u modalnom načinu, obrazac blokira program).

GetForm() . otvori()

Ovo je najsporiji način otvaranja formulara. Međutim, omogućava vam da programski obradite obrazac prije nego što ga otvorite. Za obradu koda morate malo promijeniti:

Forma = GetForm( "Dokument. Prijem robe i usluga. Obrazac dokumenta") ;
//Ovdje izvodimo radnje sa formom
Forma. Open();

Treba uzeti u obzir da će se prilikom prijema obrasca izvršiti još jedna procedura događaja WhenCreatedOnServer.

Pogledajmo druge metode koje vam omogućuju brže i praktičnije otvaranje obrazaca u upravljanoj 1C aplikaciji. U zavisnosti od specifične situacije, mogu se koristiti različite metode.

1. Kako otvoriti obrazac objekta u upravljanoj aplikaciji ako postoji veza do njega.

U ovom slučaju sve je krajnje jednostavno.

RefLink = Direktoriji. Nomenklatura. FindByCode("000000001" ) ;
OpenValue(RefLink) ;

2. Kako otvoriti obrazac za odabir i zatim dobiti odabranu vrijednost.

Za to postoji funkcija UnesiteVrijednost(). Funkcija ima 3 parametra:

  • Varijabla u koju će odabrana vrijednost biti upisana;
  • Savjet koji će biti prikazan u prozoru za odabir;
  • Opis tipova odabranih vrijednosti. Može biti nekoliko tipova, a u tom slučaju od vas će biti zatraženo da odaberete tip prije odabira određene vrijednosti.

Kao rezultat izvršavanja funkcije, otvorit će se zadani obrazac za odabir objekta navedenog tipa.

Varijabilna vrijednost;
Niz= novi niz;
Niz. Dodaj (Tip( "DirectoryLink.Nomenklatura") ) ;
Niz. Dodaj (Tip( "DirectoryLink. Counterparties") ) ;

TypeDescription= new TypeDescription(Niz) ;

Res = EnterValue(Vrijednost, "Hint" , TypeDescription) ;

Prethodne metode su vam dozvoljavale samo da otvorite zadane obrasce za objekte (objekti ili obrazac za odabir). Ako trebate otvoriti prilagođeni obrazac, možete koristiti funkciju OpenForm().

Ova funkcija ima dosta parametara. Pogledajmo neke od njih:

  • Ime obrasca— ovdje možete odabrati bilo koji od standardnih oblika objekta, na primjer, Obrazac za odabir ili List Form. Ili određeni obrazac kreiran od strane programera.
  • Opcije— omogućava vam da ga prenesete u obrazac u obrascu strukture neke parametre prije otvaranja, čime se određuju izlazni podaci. Parametri mogu biti bilo koji podatak koji se može proslijediti od klijenta do servera. Parametri proslijeđeni prilikom otvaranja obrasca mogu se obraditi u proceduri WhenCreatingOnServer() na obrascu koji se otvara.
  • Način otvaranja obrasca— ima 3 opcije: nezavisno, blokiranje celog interfejsa, blokiranje obrasca vlasnika.

Pogledajmo kako se funkcija koristi OpenForm() u raznim situacijama.

3. Kako otvoriti formu postojećeg objekta

Svaki obrazac ima jedan ključni atribut. Istaknut je podebljanim slovima na listi detalja obrasca i obično se zove Objekat u obliku elemenata priručnika i dokumenata. Drugi objekti mogu imati drugačije ime. Da biste otvorili obrazac postojećeg objekta, potrebno je da prosledite parametar obrascu koji se otvara Ključ sa vrijednošću kao referencom na objekt.

&OnClient
Procedura Naredba1 (Naredba)
Parametar= nova struktura;
Parametar. Insert("Key" , FindC() ) ;
OpenForm(, Parametar) ;
EndProcedure

&OnServer
Funkcija FindC();
Vrati imenike. Counterparties. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Kako otvoriti novi obrazac za objekt

Ovdje će poslužiti jednostavna funkcija OpenForm() bez ikakvih parametara.

&OnClient
Procedura Naredba1 (Naredba)
OpenForm( "Imenik. Ugovorne strane. Obrazac objekta") ;
EndProcedure

5. Kako otvoriti obrazac za novi objekt i popuniti ga na osnovu nečega

Morate proslijediti parametar Baza, čija će vrijednost biti referenca na osnovni objekt punjenja. Ovo će započeti postupak ProcessFill().

&OnClient
Procedura Naredba1 (Naredba)
Parametar= nova struktura;
Parametar. Insert("Baza", LinkToBuyerAccount) ;
OpenForm( "Dokument. Prodaja roba i usluga. Obrazac predmeta", Parametar) ;
EndProcedure

Ovaj primjer će kreirati dokument Prodaja robe i usluga i popunjena na osnovu fakture za plaćanje kupcu, link na koji je proslijeđen.

6. Kako otvoriti obrazac i postaviti odabir na njemu

Izbor na 1C obrascima može biti jednostavan ili složen. Jednostavan odabir uključuje izraze poput Organizacija = Horns and Hooves LLC. Složena selekcija uključuje druge vrste poređenja, npr. Na listi. U ovom članku ćemo razmotriti organizaciju jednostavne selekcije, a poseban članak će biti posvećen složenoj selekciji.

Da biste organizirali jednostavnu selekciju, trebate proslijediti parametar s ključem u obrazac koji se otvara Odabir, vrijednost će biti struktura u kojoj je ključ ime polja dinamičke liste, a vrijednost su podaci koji se traže.

Na primjer, otvorimo obrazac za listu imenika GTD brojevi i napravite odabir tamo od strane vlasnika - elementa direktorija Nomenklatura.

&OnClient
Procedura Naredba1 (Naredba)
Parametar= nova struktura;

Izbor= nova struktura;
Odabir. Insert("Vlasnik", LinkToNomenclature) ;

Parametar. Insert("Izbor", Odabir) ;

OpenForm( "Imenik.GTD brojevi. Formular liste", Parametar) ;
EndProcedure

7. Kako otvoriti obrazac za unos u registar informacija

Da biste to učinili, trebat će vam ključ za unos u registar informacija.

Ključ za snimanje— ovo su vrijednosti svih mjerenja i perioda (ako je registar periodičan). Odnosno, ključ zapisa je parametri pomoću kojih se zapis može jedinstveno identificirati.

Algoritam otvaranja je sljedeći:

  1. U strukturu unosimo podatke ključa zapisa sa potrebnim vrijednostima.
  2. Dobivenu strukturu postavljamo u niz.
  3. Kreiramo ključ zapisa iz niza.
  4. Prosljeđujemo parametar u obrazac koji se otvara Ključ sa ključem za snimanje iz koraka 3 kao vrijednosti.

&OnClient
Procedura Naredba1 (Naredba)
Parametar= nova struktura;

KeyParameters= nova struktura;
Ključni parametri. Insert("Nomenklatura", LinkToNomenklatura) ;
Ključni parametri. Insert("PriceType", LinkToPriceType) ;
Ključni parametri. Insert("Period", Datum) ;

KeyArray = Novi niz;
KeyArray. Add(KeyParameters) ;

EntryKey = Novo( "Registar informacija Ključ za evidenciju. CijeneNomenklatura", KeyArray) ;

Parametar. Insert("Key", RecordKey) ;

OpenForm( "Registar informacija. Cijene nomenklature. Obrazac evidencije", Parametar) ;
EndProcedure

Ovaj kod vam omogućava da otvorite listu dokumenata sa određenim izborom, takođe možete otvoriti listu elemenata direktorijuma sa željenim izborom

Code 1C v 8.2 UP Form = OpenForm("Dokument. Faktura.Form.ListForm"); //Otvori obrazac
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //Dodaj odabir
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //Kako ćemo uporediti
SelectOwner.Use = Tačno; // Postavite potvrdni okvir za korištenje NewDataCompositionField("Nomenclature")
SelectionOwner.LeftValue = NewDataCompositionField("Račun"); //Koje detalje ćemo koristiti za odabir?
SelectionOwner.RightValue = Object.Account; // I samo značenje selekcije

Da bi otvorite obrazac liste sa unapred definisanim izborom koristite sljedeće metode:

Prvi način je da kada otvorite obrazac, možete postaviti parametar obrasca za odabir i otvoriti obrazac liste sa ovim parametrom.

Parametar Selection predstavlja strukturu. Imena elemenata odgovaraju nazivima polja po kojima se vrši selekcija, a vrijednosti sadrže vrijednosti odabira. Ovo je opcija proširenja obrasca kojim se upravlja dinamičkom listom. Odnosno, postoji za obrasce čiji je glavni atribut atribut tipa DynamicList, na primjer, za obrasce liste i obrasce za odabir.

Na primjer, u sljedećem primjeru otvara se lista faktura sa izborom u polju Broj, jednakom 333.

Kod 1C v 8.2 Vrijednost odabira UE = Nova struktura("Broj", "333");
SelectionParameters = Nova struktura("Izbor", SelectionValue);
OpenForm("Dokument. Račun prijema. Obrazac liste", Opcije odabira);

Drugi način

Možete otvoriti obrazac liste bez parametara:

Code 1C v 8.2 UP OpenForm("Dokument. Račun prijema. Obrazac liste");

A zatim, u rukovaocu događaja obrasca za listu faktura Kada je CreatedOnServer, napišite kod koji kreira selekciju u dinamičkoj listi, što je glavni atribut obrasca:

Kod 1C v 8.2 UP &OnServer
Procedura prilikom kreiranja na serveru (neuspjeh, standardna obrada)
Element odabira = List.Selection.Elements.Add(Type("DataComposition Selection Element"));
SelectionElement.LeftValue = NewDataCompositionField("Broj");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = Tačno;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
EndProcedure

Prednosti ove metode su što se tip poređenja za odabir može postaviti ne samo na Jednako, kao u prvom slučaju, već i na Više, Manje itd.

Ali ova metoda ima i vrlo značajan nedostatak: s ovim odabirom, obrazac će se uvijek otvoriti. Odakle je bila zvana. Stoga ovaj obrazac ne treba označavati kao glavni. A ako je ipak glavni, onda je prije instaliranja selekcije potrebno dati neku vrstu analize odakle se ovaj obrazac otvara. Na primjer, analiziranje parametara obrasca.

Treći način

Konačno, uslov odabira se može postaviti u prilagođeni upit koji odabire podatke za dinamičku listu.

Na primjer, trebamo otvoriti listu faktura koje sadrže stavku označenu u listi stavki.

Da biste to učinili, u obliku liste stavki kreirajte komandu i odgovarajuće dugme Prijem faktura.

Hajde da ispunimo rukovatelj izvršavanjem za ovu naredbu na sljedeći način:

Kod 1C v 8.2 UP &OnClient
Procedura PriznaniceFakture (komanda)
SelectionParameters = Nova struktura("FilterByProduct", Elements.List.CurrentRow);
OpenForm("Dokument. Račun prijema. Obrazac liste", Opcije odabira);
EndProcedure

U ovom rukovatelju otvaramo obrazac za listu faktura, prosljeđujući vezu na trenutnu stavku na listi stavki do parametra obrasca FilterByProduct.

Zatim ćemo kreirati obrazac za listu dokumenata: Račun za prijem i kreirati parametar obrasca FilterBy Product, koji ćemo koristiti za otvaranje obrasca sa traženim odabirom.

Sada otvorimo paletu svojstava glavnog atributa obrasca Lista. Postavite oznaku prilagođenog upita i u redu Postavke liste kliknite Otvori.

U polje Zahtjev unesite sljedeći tekst zahtjeva:

Šifra 1C v 8.2 UP SELECT
Broj računa o prijemu dokumenta.
Dokument prijema Račun.Datum
OD
Document.ReceiptInvoice AS DocumentReceiptInvoice
GDJE
Račun prijema dokumenta.Proizvodi.Proizvod = &Proizvod

U zahtjevu koristimo parametar Stavka, koji će dobiti vezu na trenutni red na listi artikala, sadržan u parametru obrasca liste faktura FilterBy Artikl.

Da biste to učinili, u obrascu liste obradivač događaja Kada CreatedOnServer, napisaćemo kod za postavljanje vrijednosti parametra zahtjeva za proizvod:

Kod 1C v 8.2 UP &OnClient
Procedura otvaranja (neuspjeh)
List.Parameters.SetParameterValue("Proizvod", Parameters.FilterByProduct);
EndProcedure

Ovdje List.Parameters je lista parametara zahtjeva dinamičke liste za atribut List. Vrijednost parametra Product postavljena je jednaka vrijednosti parametra obrasca FilterByProduct.

Kao rezultat toga, klikom na dugme Primi fakture u obrascu liste artikala, dobićemo listu samo onih faktura koje sadrže artikal koji je trenutno izabran na listi artikala.

Dobar dan.

Danas ćemo govoriti o tome kako programski otvoriti obrasce za izbor u novom upravljanom interfejsu.

Ranije smo u “redovnoj aplikaciji” pisali ovako:

form = Directory.nomenclature.GetSelectionForm();

resultSelection = form.openModalNO();

Između ovih operatora možemo promijeniti svojstva obrasca, na primjer, postaviti odabir. Mogli bismo specificirati određeni obrazac po imenu. Mogli bi promijeniti njegov izgled pristupom svojstvima elemenata u formi po njihovom imenu kroz tačku (form.Button1.Visibility = False;)

Sada imamo upravljani interfejs i ovde je sve drugačije. Problem je u podjeli koda na serverski i klijentski dio. Objektima i njihovim metapodacima možemo pristupiti samo na serveru, a obrasce moramo otvarati na klijentu.

Pa počnimo.

1. Najjednostavniji slučaj je kada ne trebamo upravljati selekcijom (podešavanje odabira, prosljeđivanje parametara u obrazac za odabir koji se otvara).

Budući da se obrasci mogu otvoriti samo na klijentu, ovo će biti dio koda na strani klijenta. Koristićemo funkciju EnterValue(<Значение>, <Подсказка>, <Тип>) . Zapravo, sve je jasno iz njenog opisa. Vraća zastavicu da li je korisnik napravio selekciju u prvom parametru prosljeđujemo kontejner u koji će biti vraćena vrijednost odabira, u drugom tekstu koji će biti prikazan u naslovu prozora za odabir, u trećem nizu; vrste.

Evo primjera upotrebe:

Varijabla SelectTMC;

ArrayTypes = Novi niz;

DescriptionofTypesTMC = NewDescriptionofTypes(Now);

Ako EnterValue (Odaberite inventar, "Odaberite stavku", Opis vrsta inventara) tada

//Obrada odabrane vrijednosti

endIf;

Dodaću da ako dodijelimo bilo koju vrijednost našoj varijabli kontejnera prije nego što je izaberemo, to će biti zadana vrijednost. U ovom slučaju, ne morate formirati niz tipova; tip će biti uzet iz vrijednosti koja leži u kontejneru.

2. Ponekad, prije odabira vrijednosti, moramo postaviti neke odabire i parametre odabira. Na primjer, trebamo odabrati ugovor druge strane. Prva metoda će nam otvoriti sve dokumente, ali moramo odabrati prema vlasniku.

Postoje dva načina za otvaranje obrazaca: OpenForm I OpenFormModal. U prvoj metodi otvorit ćemo obrazac i dio koda iz kojeg smo otvorili obrazac nastavit će se izvršavati bez primanja rezultata odabira. Rezultat odabira, ovisno o načinu poziva, bit će smješten ili u polje za unos ili će biti primljen u unaprijed definiranoj proceduri "Obrada odabira".

U našem slučaju potrebno je da odabranu vrijednost unesemo u određenu varijablu i nastavimo obradu uzimajući u obzir odabranu vrijednost, bez prenošenja kontrole na druge procedure. Stoga će nam odgovarati OpenFormModal.

Odmah ću rezervisati da je ovo loš način za web interfejs, jer... Modalni prozori se otvaraju u novom prozoru pretraživača koji je obično blokiran. Ali ako korisniku unaprijed objasnite šta je što, onda mislim da će se nositi s ovim problemom))

Dakle, pogledajmo opis postupka, on ima 4 parametra. U prvom označavamo liniju sa punom putanjom do obrasca "Imenik. Ugovori izvođača. Obrazac za odabir". U drugom navodimo parametre odabira, više o njima u nastavku. U trećem - vlasnik, ovo je obrazac ili polje za odabir koje će dobiti rezultat selekcije, mi ga ne popunjavamo. Četvrti parametar se također ne koristi u našem slučaju.

Dakle, za jednostavan odabir, sljedeći red će učiniti:

&OnClient

Procedura Naredba 1 (Naredba)

res = OpenFormModal("Imenik. Ugovori ugovarača. Obrazac za odabir");

EndProcedure

Ali ovo je potpuni analog metode br. 1, i vidjet ćemo obrazac za odabir svih ugovora, bez odabira od strane vlasnika. One. Ovo se može uraditi samo ako želimo da navedemo naziv obrasca za izbor.

Za postavljanje odabira pomoći će nam drugi parametar.

Drugi parametar je tipa "Struktura". Kao elemente strukture, možete specificirati parametre obrasca dodane na kartici „parametri“ obrasca za odabir. Njihovu obradu treba opisati u proceduri Kada je CreatedOnServer u modulu obrasca za izbor. Ovo nije dobro za nas, jer... Moram da izmenim konfiguraciju. Također možete proslijediti strukturu odabira pomoću tipke “selection” u strukturi parametara. Tada će se sva polja iz strukture selekcije koristiti za odabir liste elemenata i neće biti dostupna korisniku ni za pregled ni za promjenu.

U mom primjeru, nacrtao sam polje za odabir u obradi koje se odnosi na atribut obrasca za obradu "kontrastrana" sa tipom podataka " DirectoryLink.Counterparties". i napisao sljedeći dio koda:

&OnClient

Procedura Naredba 1 (Naredba)

Odabir = Nova struktura("Vlasnik", Druga strana);

SelectionParameters = Nova struktura("Izbor", Izbor);

res = OpenFormModal("Imenik. Ugovori ugovarača. Obrazac za odabir", Parametri odabira);

EndProcedure

Ovo je obično dovoljno za rješavanje većine problema i ne zahtijeva nikakvu intervenciju u konfiguraciji. Međutim, u obrascu za odabir u proceduri “When CreatedOnServer” vaš odabir može biti izgubljen. Stoga, prije korištenja ove metode, pregledajte ovu proceduru u obrascu za odabir koji otvorite. Krivi programeri tamo mogu lako postaviti svoj odabir "podrazumevano", zaboravljajući da provjere da li je odabir proslijeđen u parametrima otvaranja.

To je sve za danas, hvala na pažnji.