Kako programski popuniti i otvoriti obrazac za novi dokument? Kako otvoriti formu postojećeg objekta? Programski otvoriti obrazac novog dokumenta 1s 8.3

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 potrebno je 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 EnterValue(). 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: 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 detalja obrasca i obično se zove Objekt 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) ;
Kraj procedure

&Na serveru
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") ;
Kraj procedure

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) ;
Kraj procedure

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) ;
Kraj procedure

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— to 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) ;
Kraj procedure

Dom Za programere početnike Naučite programirati

Kako otvoriti formu postojećeg objekta?

Prilikom otvaranja forme postojećeg objekta, pored naziva obrasca, morate navesti i objekat čiji obrazac treba otvoriti. Da biste to učinili, koristite parametar obrasca Ključ i vezu do objekta koji nas zanima.

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

Parametre forme prosljeđujemo u obliku strukture, pri čemu naziv 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 (ObjectForm), naznačite riječ Form iza koje slijedi tačka - naziv forme kreirane u konfigurator.

Na primjer:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = New Structure("Key", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

Treba napomenuti da u slučaju kada, osim veze na objekt, nije potrebno proslijediti 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 je manje svestrana, 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 obrazac stavke hijerarhijskog direktorija. Kada koristite ovu proceduru, platforma će uputiti dodatni poziv serveru kako bi utvrdila da li je element grupa ili ne, jer se za element i za grupu moraju otvoriti različiti oblici.

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

Dobar dan svima!
Mislim da će informacije u ovoj temi biti veoma korisne 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 zabilježen u bazi podataka? Proveo sam dosta vremena tražeći rješenje za ovaj problem na Internetu, posjetio 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 će ostati u bazi podataka. A kome trebaju dodatni dokumenti u bazi podataka?
A ako ne sačuvate dokument, onda je najpopularnija opcija korištenje metode GetForm (“Dokumenti. Potrebna vrsta dokumenta. Obrazac dokumenta”). 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, problem je riješen korištenjem funkcije globalnog konteksta „Popunite vrijednosti svojstava“.

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

Koristeći svoj zadatak kao primjer, želio bih objasniti kako možete koristiti ovu funkciju za popunjavanje obrasca za novi dokument. Zadatak je bio sljedeći: Postoji jedan dokument (Radni nalog), čiji je rekvizit tabelarnog dijela drugi dokument (Pružanje usluga). Dakle, bilo je potrebno osigurati da se prilikom dodavanja novog dokumenta „Pružanje usluga“ u tabelarni dio „Radnog naloga“ na ekranu prikaže obrazac novog dokumenta „Pružanje usluga“ sa detaljima već popunjeno, preuzeto iz radnog naloga iz kojeg je kreirana. Istovremeno, sam novi dokument, u trenutku kada se njegov oblik pojavi na ekranu, još nije evidentiran u bazi podataka. To je trebalo učiniti ako korisnik iznenada odluči da ne popuni dokument i jednostavno zatvori obrazac.
Evo fragmenta koda sa rješenjem problema:

&O klijentskoj proceduri EnterRecord()RecordForm = GetForm("Dokument.Pružanje medicinskih usluga.ObjectForm"); Popunite PropertyValues(RecordForm.Object,Object,"Datum,Specijalist,Specijalizacija,Medicinska sestra,Status izvršenja",); // Popuni vrijednosti detalja čija su imena ista u oba dokumenta TextStr = Elements.Reception.CurrentData; //Podaci tekuće linije izvornog dokumentaProperty Structure = Nova struktura; // Struktura sadrži vrijednosti onih detalja koje je potrebno popuniti na obrascu novog dokumenta, ali kojih nema u izvornom dokumentu StructureProperties.Insert("Work Order", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); IspunitePropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime",); EntryForm.Open(); Kraj procedure

Odnosno, sve operacije izvodimo direktno na klijentu, bez kontakta sa serverom, u okviru jedne samostalno kreirane procedure. Zapravo, na ovaj način možete ispuniti i otvoriti obrazac bilo kojeg dokumenta ili priručnika. Prvo sam popunjavao detalje iz jednog obrasca u drugi koristeći objekte obrasca, a zatim sam, koristeći objekat „Struktura“ u koji sam ubacio detalje koji nedostaju, popunio još neke detalje obrasca koji se otvara, a zatim otvorio formu.
Nadam se da će ova tema uštedjeti vrijeme mnogima koji se susreću sa sličnim zadatkom!