Kako programsko izpolniti in odpreti obrazec novega dokumenta? Kako odpreti obrazec obstoječega predmeta? Programsko odpiranje obrazca novega dokumenta 1s 8.3

Programsko odpiranje obrazcev v upravljani aplikaciji 1C se bistveno razlikuje od odpiranja v običajni aplikaciji. Poglejmo najprej staro metodo. Sestoji iz sprejema obrazca in njegovega nato odpiranja v običajnem ali modalnem načinu (ko se odpre v modalnem načinu, obrazec blokira program).

GetForm(). Odprto()

To je najpočasnejši način odpiranja obrazcev. Vendar pa vam omogoča programsko obdelavo obrazca, preden ga odprete. Za obdelavo kode morate nekoliko spremeniti:

Obrazec = GetForm( "Dokument. Prejem blaga in storitev. Obrazec dokumenta") ;
//Tu izvajamo dejanja z obrazcem
Oblika. Odprto();

Upoštevati je treba, da se ob prejemu obrazca izvede drug dogodek WhenCreatedOnServer.

Oglejmo si druge metode, ki vam omogočajo hitrejše in bolj priročno odpiranje obrazcev v upravljani aplikaciji 1C. Glede na specifično situacijo se lahko uporabijo različne metode.

1. Kako odpreti obrazec predmeta v upravljani aplikaciji, če obstaja povezava do njega.

V tem primeru je vse izjemno preprosto.

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

2. Kako odpreti izbirni obrazec in nato pridobiti izbrano vrednost.

Za to obstaja funkcija VnesiteVrednost(). Funkcija ima 3 parametre:

  • Spremenljivka, v katero bo zapisana izbrana vrednost;
  • Namig, ki bo prikazan v izbirnem oknu;
  • Opis vrst izbranih vrednosti. Obstaja lahko več vrst, v tem primeru boste pozvani, da izberete vrsto, preden izberete določeno vrednost.

Kot rezultat izvajanja funkcije se odpre privzeti izbirni obrazec za objekt navedene vrste.

spremenljiva vrednost;
Array= nova matrika;
Array. Dodaj(Vnesite( "DirectoryLink. Nomenclature") ) ;
Array. Dodaj(Vnesite( "DirectoryLink. Nasprotne stranke") ) ;

Opis tipa= nov opis tipa(niz) ;

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

Prejšnje metode so vam omogočale samo odpiranje privzetih obrazcev za predmete (obrazec predmeta ali obrazec za izbor). Če morate odpreti obrazec po meri, lahko uporabite to funkcijo OpenForm().

Ta funkcija ima kar nekaj parametrov. Oglejmo si nekaj izmed njih:

  • Ime obrazca— tukaj lahko izberete eno od standardnih oblik predmeta, npr. Izbirni obrazec oz Obrazec za seznam. Ali poseben obrazec, ki so ga ustvarili razvijalci.
  • Opcije— omogoča prenos v obrazec v obrazcu strukture nekaj parametrov, preden ga odprete, s čimer določite izhodne podatke. Parametri so lahko kateri koli podatki, ki jih je mogoče posredovati od odjemalca do strežnika. Podane parametre ob odpiranju obrazca je mogoče obdelati v proceduri WhenCreatingOnServer() na obrazcu, ki se odpre.
  • Način odpiranja obrazca— ima 3 možnosti: neodvisno, blokiranje celotnega vmesnika, blokiranje obrazca lastnika.

Poglejmo, kako se funkcija uporablja OpenForm() v različnih situacijah.

3. Kako odpreti obrazec obstoječega predmeta

Vsak obrazec ima en ključni atribut. Na seznamu podrobnosti obrazca je označen s krepkim tiskom in se običajno kliče Predmet v obliki elementov referenčnih knjig in dokumentov. Drugi predmeti imajo lahko drugačno ime. Če želite odpreti obrazec obstoječega predmeta, morate obrazcu, ki se odpira, posredovati parameter Ključ z vrednostjo kot sklicem na predmet.

&OnClient
Postopek Ukaz1 (Ukaz)
Parameter= nova struktura;
Parameter. Insert("Key" , FindC() ) ;
OpenForm(, Parameter);
Konec postopka

&Na strežniku
Funkcija FindC();
Vrnite imenike. Nasprotne stranke. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Kako odpreti obrazec novega predmeta

Tu bo zadostovala preprosta funkcija OpenForm() brez parametrov.

&OnClient
Postopek Ukaz1 (Ukaz)
OpenForm( "Imenik. Nasprotne stranke. Oblika predmeta") ;
Konec postopka

5. Kako odpreti obrazec za nov predmet in ga izpolniti na podlagi nečesa

Posredovati morate parameter Osnova, katerega vrednost bo sklic na osnovni objekt polnila. S tem se začne postopek ProcessFill().

&OnClient
Postopek Ukaz1 (Ukaz)
Parameter= nova struktura;
Parameter. Insert("Osnova", LinkToBuyerAccount) ;
OpenForm( "Dokument. Prodaja blaga in storitev. Obrazec predmeta", parameter);
Konec postopka

Ta primer bo ustvaril dokument Prodaja blaga in storitev in se izpolni na podlagi računa za plačilo kupcu, katerega povezava je bila posredovana.

6. Kako odpreti obrazec in na njem nastaviti izbor

Izbor na obrazcih 1C je lahko preprost ali zapleten. Preprosta izbira vključuje izraze, kot je Organizacija = Horns and Hooves LLC. Kompleksna selekcija vključuje druge vrste primerjav, npr. Na seznamu. V tem članku bomo obravnavali organizacijo enostavne izbire, ločen članek pa bo posvečen kompleksni izbiri.

Če želite organizirati preprosto izbiro, morate obrazcu, ki se odpira, posredovati parameter s ključem Izbira, bo vrednost struktura, v kateri je ključ ime polja dinamičnega seznama, vrednost pa iskani podatki.

Na primer, odprimo obrazec seznama imenikov GTD številke in tam izberite lastnik - element imenika Nomenklatura.

&OnClient
Postopek Ukaz1 (Ukaz)
Parameter= nova struktura;

Izbira= nova struktura;
Izbira. Insert("Lastnik", LinkToNomenclature) ;

Parameter. Vstavi("izbor", izbor) ;

OpenForm( "Imenik. Številke GTD. Obrazec seznama", parameter);
Konec postopka

7. Kako odpreti obrazec za vpis v register informacij

Za to boste potrebovali ključ za vnos registra informacij.

Snemalni ključ— to so vrednosti vseh meritev in obdobja (če je register periodičen). To pomeni, da je ključ zapisa parameter, po katerem je mogoče zapis enolično identificirati.

Algoritem odpiranja je naslednji:

  1. V strukturo vnesemo ključne podatke zapisa s potrebnimi vrednostmi.
  2. Nastalo strukturo postavimo v polje.
  3. Iz matrike ustvarimo zapisni ključ.
  4. Obrazcu, ki se odpre, posredujemo parameter Ključ s ključem zapisa iz 3. koraka kot vrednostjo.

&OnClient
Postopek Ukaz1 (Ukaz)
Parameter= nova struktura;

KeyParameters= nova struktura;
Ključni parametri. Insert("Nomenklatura", LinkToNomenclature) ;
Ključni parametri. Insert("PriceType", LinkToPriceType) ;
Ključni parametri. Vstavi("Obdobje", Datum) ;

KeyArray = Nova matrika;
KeyArray. Dodaj(ključni parametri);

EntryKey = Novo( "Ključ zapisa registra informacij. Nomenklatura cen", KeyArray);

Parameter. Insert("Key", RecordKey) ;

OpenForm( "Register informacij. Cene nomenklature. Evidenčni obrazec", parameter);
Konec postopka

domov Za razvijalce začetnike Naučite se programirati

Kako odpreti obrazec obstoječega predmeta?

Pri odpiranju obrazca obstoječega objekta morate poleg imena obrazca navesti tudi objekt, katerega obrazec želite odpreti. Če želite to narediti, uporabite parameter ključnega obrazca in povezavo do predmeta, ki nas zanima.

Na primer, če morate iz obrazca seznama organizacij odpreti obrazec organizacije, na katerem se nahaja kazalec, lahko to storite na naslednji način:

Parametre obrazca posredujemo v obliki strukture, kjer ime elementa strukture ustreza imenu parametra obrazca, vrednost pa je vrednost, na katero želimo nastaviti parameter obrazca.

Če želite odpreti ne glavno, ampak poljubno obliko predmeta, ustvarjenega v konfiguratorju, namesto standardnega imena glavnega obrazca (ObjectForm) označite besedo Obrazec, ki ji sledi pika - ime obrazca, ustvarjenega v konfigurator.

Na primer:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = Nova struktura ("Ključ", ReferenceToDirectoryElement); OpenForm("Imenik.Organizacije.Obrazec.UniversalObjectForm",Parametri obrazca);

Upoštevati je treba, da v primeru, ko poleg povezave do predmeta obrazcu, ki se odpira, ni treba posredovati parametrov in je potrebna glavna oblika obstoječega predmeta, lahko uporabite enostavnejšo metodo - odprite obrazec s postopkom OpenValue():

OpenValue(Items.List.CurrentRow);

Ta metoda je manj vsestranska, vendar v nekaterih primerih prihrani čas in trud. Na primer, v obravnavanem primeru lahko ena taka vrstica nadomesti celoten trivrstični postopek, ki smo ga napisali prej.

Vendar je pri uporabi tega postopka potrebna previdnost. V nekaterih primerih lahko povzroči dodatne klice strežniku, na primer, ko morate odpreti obrazec postavke hierarhičnega imenika. Pri uporabi tega postopka bo platforma dodatno poklicala strežnik, da ugotovi, ali je element skupina ali ne, saj je treba za element in skupino odpreti različne obrazce.

Hkrati so te informacije lahko vnaprej znane razvijalcu znotraj njegovega algoritma, s pomočjo funkcije OpenForm() pa lahko razvijalec odpre želeni obrazec brez dodatnih klicev na strežnik, pri čemer takoj določi standardno ime glavnega oblika.

Dober dan vsem!
Mislim, da bodo informacije v tej temi zelo koristne za številne obiskovalce tega foruma.
Dolgo časa nisem mogel rešiti težave - kako odpreti obrazec novega dokumenta, tako da se ne odpre prazen, ampak že delno programsko izpolnjen, medtem ko sam dokument še ni zabeležen v bazi? Veliko časa sem iskal rešitev za to težavo na internetu, obiskal sem številne forume, kjer je bila obravnavana ta težava, a le redki so naleteli na rešitve. Najenostavnejši med njimi je, da najprej programsko ustvarite nov dokument, programsko izpolnite potrebne podrobnosti, dokument zapišete v bazo podatkov in ga nato odprete uporabniku. Kaj pa, če ga uporabnik ne želi shraniti? Kaj pa, če si premisli in zapre odprt obrazec? V tem primeru bo že zabeležen dokument ostal v bazi. In kdo potrebuje dodatne dokumente v bazi?
In če dokumenta ne shranite, je najbolj priljubljena možnost uporaba metode GetForm (»Dokumenti. Zahtevana vrsta dokumenta. Obrazec dokumenta«). Toda v tem primeru lahko dobite prazen obrazec dokumenta in ga preprosto prikažete z metodo Open(). Tudi to ni možnost...
Čez nekaj časa je bila težava rešena s funkcijo globalnega konteksta »Izpolnite vrednosti lastnosti«.

Globalni kontekst
FillPropertyValues
Sintaksa:
Fill PropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Opis:
Kopira vrednosti lastnosti<Источника>do lastnosti<Приемника>. Ujemanje poteka po imenih lastnosti.

Na primeru svoje naloge bi rad razložil, kako lahko s to funkcijo izpolnite obrazec za nov dokument. Naloga je bila naslednja: Obstaja en dokument (Delovni nalog), katerega rekvizit tabelarnega dela je drugi dokument (Opravljanje storitev). Tako je bilo treba poskrbeti, da se je ob dodajanju novega dokumenta »Opravljanje storitev« v tabelarični del »Delovnega naloga« na zaslonu prikazal obrazec novega dokumenta »Opravljanje storitev« s podrobnostmi že izpolnjeno, vzeto iz delovnega naloga, iz katerega je nastala izdelava. Hkrati pa sam novi dokument, v trenutku, ko se njegova oblika pojavi na ekranu, še ni zabeležen v bazi. To je bilo treba storiti, če se uporabnik nenadoma odloči, da ne bo izpolnil dokumenta in preprosto zapre obrazec.
Tukaj je fragment kode z rešitvijo težave:

&Na postopku stranke EnterRecord()RecordForm = GetForm("Document.Provision of Medical Services.ObjectForm"); IzpolnitePropertyValues(RecordForm.Object,Object,"Datum,Specialist,Specialization,Nurse,Execution Status",); // Izpolnite vrednosti podrobnosti, katerih imena so enaka v obeh dokumentih TextStr = Elements.Reception.CurrentData; //Podatki trenutne vrstice izvornega dokumentaProperty Structure = New Structure; // Struktura vsebuje vrednosti tistih podrobnosti, ki jih je treba izpolniti na obrazcu novega dokumenta, vendar jih ni v izvornem dokumentu StructureProperties.Insert("Delovni nalog", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); IzpolnitePropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime",); EntryForm.Open(); Konec postopka

To pomeni, da vse operacije izvajamo neposredno na odjemalcu, brez stika s strežnikom, znotraj enega neodvisno ustvarjenega postopka. Pravzaprav lahko na ta način izpolnite in odprete obrazec katerega koli dokumenta ali referenčne knjige. Najprej sem z objekti obrazca izpolnjeval podrobnosti iz enega obrazca v drugega, nato pa sem z objektom “Struktura”, v katerega sem vstavil manjkajoče podatke, izpolnil še nekaj podrobnosti obrazca, ki se odpira, nato pa sem odprl oblika.
Upam, da bo ta tema prihranila čas mnogim, ki se soočajo s podobno nalogo!