Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Internet, Wi-Fi, lokalne mreže
  • 1c programski otvori dokument. Kako otvoriti formu postojećeg objekta? Kako otvoriti obrazac za odabir i zatim dobiti odabranu vrijednost

1c programski otvori dokument. Kako otvoriti formu postojećeg objekta? Kako otvoriti obrazac za odabir i zatim dobiti odabranu vrijednost

Početna stranica Za programere početnike Naučite programirati

Kako otvoriti formu postojećeg objekta?

Prilikom otvaranja forme postojećeg objekta, pored naziva forme, morate naznačiti i objekat čija se forma otvara. Da biste to učinili, koristite parametar obrasca Ključ i vezu do objekta koji nas zanima.

Na primjer, ako trebate otvoriti obrazac organizacije na kojoj se nalazi kursor iz obrasca liste organizacija, to možete učiniti na sljedeći način:

Parametre forme prosljeđujemo kao strukturu, pri čemu ime elementa strukture odgovara imenu parametra forme, a vrijednost je vrijednost na koju želimo postaviti parametar forme.

Ako želite da otvorite ne glavni, već proizvoljni oblik objekta kreiranog u konfiguratoru, umjesto standardnog naziva glavne forme (FormObject), označava se riječ Form, a zatim tačka - naziv forme kreiran u konfiguratoru.

Na primjer:

LinkToDirectoryItem = Elements.List.CurrentLine; FormParameters = Nova struktura("Key", LinkToDirectoryItem); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

Treba napomenuti da u slučaju kada, osim reference na objekt, nije potrebno prenijeti nikakve parametre u obrazac koji se otvara, a potreban je glavni oblik postojećeg objekta, možete koristiti jednostavniju metodu - otvorite obrazac koristeći proceduru OpenValue():

OpenValue(Items.List.CurrentRow);

Ova metoda ima manje svestranosti, ali u nekim slučajevima štedi vrijeme i trud. Na primjer, u razmatranom slučaju jedan takav red može zamijeniti cijelu proceduru od tri reda koju smo ranije napisali.

Međutim, morate biti oprezni kada koristite ovaj postupak. U nekim slučajevima to može uzrokovati dodatne pozive poslužitelju, na primjer, kada trebate otvoriti formu elementa hijerarhijskog direktorija. Kada koristite ovu proceduru, okvir će napraviti dodatni kružni put do servera kako bi utvrdio da li je element grupa ili ne, budući da je potrebno otvoriti različite forme za element i za grupu.

U isto vrijeme, ove informacije mogu unaprijed biti poznate programeru unutar njegovog algoritma, a pomoću funkcije OpenForm() programer može otvoriti traženu formu bez dodatnih poziva serveru, odmah navodeći standardni naziv glavnog obrasca .

Dobar dan svima!
Mislim da će informacije u ovoj temi biti od velike koristi mnogim posjetiocima ovog foruma.
Dugo nisam mogao riješiti problem - kako otvoriti obrazac novog dokumenta tako da se ne otvori prazan, već je programski već djelomično popunjen, dok sam dokument još nije upisan u bazu podataka? Proveo sam dosta vremena tražeći rješenje za ovaj problem na internetu, posjetio sam mnoge forume na kojima se to pitanje postavljalo, ali samo nekoliko njih je naišlo na rješenja. Najjednostavniji od njih je prvo programski kreirati novi dokument, programski popuniti potrebne detalje, upisati dokument u bazu podataka, a zatim ga otvoriti korisniku. Šta ako korisnik ne želi da ga sačuva? Šta ako se predomisli i zatvori otvorenu formu? U tom slučaju, već snimljeni dokument ostaje u bazi podataka. A kome trebaju dodatni dokumenti u bazi podataka?
A ako ne sačuvate dokument, tada je najpopularnija opcija korištenje metode GetForm("Documents.DesiredDocumentType.DocumentForm"). Ali u ovom slučaju, možete dobiti prazan obrazac dokumenta i jednostavno ga prikazati koristeći Open() metodu. Ovo takođe nije opcija...
Nakon nekog vremena, zadatak je riješen korištenjem funkcije globalnog konteksta "FillPropertyValues".

Globalni kontekst
FillPropertyValues ​​(FillPropertyValues)
sintaksa:
FillPropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Opis:
Kopira vrijednosti svojstva<Источника>na svojstva<Приемника>. Uparivanje se vrši po imenima svojstava.

Na primjeru mog zadatka, želio bih objasniti kako možete koristiti ovu funkciju za popunjavanje obrasca novog dokumenta. Zadatak je bio sljedeći - Postoji jedan dokument (Nalog-nalog), čiji je rekvizit tabelarnog dijela drugi dokument (Pružanje usluga). Dakle, bilo je potrebno napraviti tako da se prilikom dodavanja novog dokumenta „Pružanje usluga“ u tabelarni dio „Narudžbenica-nalog“ na ekranu prikaže obrazac novog dokumenta „Pružanje usluga“ sa oznakom detalji već popunjeni, preuzeti iz naloga-reda iz kojeg je kreiranje pozvano. Istovremeno, tako da sam novi dokument, u trenutku kada se njegov oblik pojavi na ekranu, još nije upisan u bazu podataka. To je trebalo učiniti ako korisnik iznenada odluči da ne popuni dokument i jednostavno zatvori obrazac.
Evo isječka koda sa rješenjem problema:

&O klijentskoj proceduri EnterRecord() RecordForm = GetForm("Document.MedicalServices.ObjectForm"); Ispunite PropertyValues(Formular zapisa.Objekat,Objekat,"Datum,Specijalist,Specijalizacija,Medicinska sestra,Status izvršenja",); // Popuni vrijednosti atributa čija su imena ista u oba dokumenta TekStr = Elements.Receive.CurrentData; //Podaci tekuće linije izvornog dokumenta StructureProperty = Nova struktura; // Struktura sadrži vrijednosti onih detalja koje je potrebno popuniti na obrascu novog dokumenta, ali kojih nema u izvornom dokumentu. StructureProperties.Insert("OutfitRecord",Object.Link); StructureProperty.Insert("Vrijeme prijema", CurrentStr. Vrijeme prijema); IspunitePropertyValues(RecordForm.Object,PropertyStructure,"OutfitRecord,ReceptionTime",); RecordForm.Open(); EndProcedure

Odnosno, sve operacije radimo direktno na klijentu, bez kontakta sa serverom, u okviru jedne procedure koju sami kreiramo. Zapravo, na ovaj način možete ispuniti i otvoriti obrazac bilo kojeg dokumenta ili imenika. Prvo sam popunjavao detalje iz jednog obrasca u drugi koristeći objekte obrasca, a zatim, koristeći objekat "Struktura" u koji sam ubacio detalje koji nedostaju, popunio još neke detalje otvorenog obrasca, a zatim otvorio obrazac.
Nadam se da će ova tema uštedjeti vrijeme mnogima koji se suočavaju sa sličnim zadatkom!

Programsko otvaranje obrazaca u upravljanoj 1C aplikaciji značajno se razlikuje od otvaranja u običnoj aplikaciji. Počnimo sa starom metodom. Sastoji se od primanja obrasca i njegovog naknadnog otvaranja u normalnom ili modalnom režimu (kada se otvori u modalnom režimu, 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, kod je potrebno malo izmijeniti:

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

Treba imati na umu da će se po prijemu formulara izvršiti još jedna procedura događaja OnCreateOnServer.

Razmotrite druge metode koje vam omogućavaju da brže i praktičnije otvarate obrasce 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.

RefReference= Reference. Nomenklatura. FindByCode("000000001" ) ;
OpenValue(ReferenceReference) ;

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;
  • Nagoveštaj koji će biti prikazan u okviru za izbor;
  • Opis tipova odabranih vrijednosti. Može biti nekoliko tipova, a prije nego što odaberete određenu vrijednost, od vas će biti zatraženo da odaberete tip.

Kao rezultat izvršenja 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 dozvoljavale otvaranje samo formulara postavljenih za objekte prema zadanim postavkama (forma objekta ili obrazac za odabir). Ako trebate otvoriti proizvoljan obrazac, možete koristiti funkciju OpenForm().

Ova funkcija ima dosta parametara. Razmotrimo neke od njih:

  • Ime obrasca- ovdje možete odabrati bilo koji od standardnih oblika objekta, na primjer, FormSelect ili FormList. Ili određeni obrazac kreiran od strane programera.
  • Parametri- omogućava vam prelazak na 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 OnCreateOnServer() na otvorenom obrascu.
  • Način otvaranja obrasca- ima 3 opcije: neovisno, blokiranje cijelog sučelja, 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 atributa obrasca i obično se poziva Objekt na oblicima elemenata imenika, dokumenata. Drugi objekti mogu imati drugačije ime. Da biste otvorili obrazac postojećeg objekta, potrebno je da prosledite parametar otvorenom obrascu Ključ sa vrijednošću kao referencom objekta.

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

&Na serveru
Funkcija FindC();
Vratite priručnike. Counterparties. FindByAttribute ("TIN", "745107734623" )
EndFunctions

4. Kako otvoriti formu novog objekta

Ovo je samo funkcija OpenForm() bez ikakvih parametara.

&AtClient
Procedura Naredba1 (Naredba)
OpenForm( "Priručnik. Ugovorne strane. Obrazac objekta") ;
EndProcedure

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

Treba prenijeti parametar Baza, čija će vrijednost biti referenca na osnovni objekt punjenja. Ovo će započeti proceduru HandleFill().

&AtClient
Procedura Naredba1 (Naredba)
Parametar= nova struktura;
Parametar. Insert("Razlog", LinkToAccountToBuyer) ;
OpenForm( "Dokument. Realizacija roba i usluga. Obrazac objekta", Parametar) ;
EndProcedure

Ovaj primjer će kreirati dokument Prodaja robe i usluga i popunjena na osnovu fakture za plaćanje kupcu, na koju je link prenesen.

6. Kako otvoriti obrazac i postaviti odabir na njemu

Izbor na 1C obrascima može biti jednostavan i složen. Jednostavan odabir uključuje izraze poput Organizacija = Horns and Hooves LLC. Složena selekcija uključuje druge vrste poređenja, npr. Navedeno. U ovom članku ćemo razmotriti organizaciju jednostavnog odabira, a složenom će biti posvećen poseban članak.

Da biste organizirali jednostavnu selekciju, potrebno je prenijeti parametar s ključem u otvoreni obrazac Odabir, vrijednost će biti struktura u kojoj je ključ ime polja dinamičke liste, a vrijednost je podatak koji se traži.

Na primjer, otvorimo obrazac za pretragu Ne-GTE i tamo ćemo izvršiti selekciju od strane vlasnika - elementa direktorija Nomenklatura.

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

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

Parametar. Insert("Izbor", Odabir) ;

OpenForm( "Directory.GTE Numbers.List Form", Parametar) ;
EndProcedure

7. Kako otvoriti obrazac za unos u registar informacija

Da biste to učinili, potreban vam je ključ evidencije registra informacija.

Ključ za snimanje su vrijednosti svih mjerenja i perioda (ako je registar periodičan). Odnosno, ključ zapisa su parametri po kojima se zapis može jedinstveno identifikovati.

Algoritam otvaranja je sljedeći:

  1. U strukturu unosimo podatke ključa zapisa sa potrebnim vrijednostima.
  2. Dobivenu strukturu postavljamo u niz.
  3. Iz niza kreiramo ključ zapisa.
  4. Prosljeđivanje parametra u otvoreni obrazac Ključ sa ključem zapisa iz stavke 3 kao vrijednosti.

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

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

ArrayKey = Novi niz;
ArrayKey. Dodaj(KeyParameters) ;

RecordKey = Novo( "Registar informacijaRecordKey.NomenklaturaCijene", ArrayKey) ;

Parametar. Insert("Key", RecordKey) ;

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

Top Related Articles