Ako programovo vyplniť a otvoriť nový formulár dokumentu? Ako otvoriť formulár existujúceho objektu? Programovo otvorte formulár nového dokumentu 1s 8.3

Programové otváranie formulárov v spravovanej aplikácii 1C sa výrazne líši od otvárania v bežnej aplikácii. Najprv sa pozrime na starú metódu. Pozostáva z prijatia formulára a jeho následného otvorenia v normálnom alebo modálnom režime (pri otvorení v modálnom režime formulár blokuje program).

GetForm() . OTVORENÉ()

Toto je najpomalší spôsob otvárania formulárov. Umožňuje však programovo spracovať formulár pred jeho otvorením. Na spracovanie kódu je potrebné trochu zmeniť:

Form = GetForm( "Doklad. Príjem tovaru a služieb. Formulár dokladu") ;
//Tu vykonávame akcie s formulárom
Formulár. OTVORENÉ();

Malo by sa vziať do úvahy, že po prijatí formulára sa vykoná ďalšia procedúra udalosti WhenCreatedOnServer.

Pozrime sa na ďalšie metódy, ktoré umožňujú rýchlejšie a pohodlnejšie otvárať formuláre v spravovanej aplikácii 1C. V závislosti od konkrétnej situácie sa môžu použiť rôzne metódy.

1. Ako otvoriť formulár objektu v riadenej aplikácii, ak je naň odkaz.

V tomto prípade je všetko veľmi jednoduché.

RefLink = Adresáre. Nomenklatúra. FindByCode("000000001" );
OpenValue(RefLink) ;

2. Ako otvoriť výberový formulár a následne získať vybranú hodnotu.

Existuje na to funkcia EnterValue(). Funkcia má 3 parametre:

  • Premenná, do ktorej sa zapíše zvolená hodnota;
  • Nápoveda, ktorá sa zobrazí v okne výberu;
  • Popis typov vybraných hodnôt. Môže existovať niekoľko typov, v takom prípade budete pred výberom konkrétnej hodnoty vyzvaní na výber typu.

V dôsledku vykonania funkcie sa otvorí predvolený formulár výberu pre objekt zadaného typu.

Hodnota premennej;
Pole= nové pole;
Pole. Pridať(Typ( "DirectoryLink.Nomenclature") ) ;
Pole. Pridať(Typ( "DirectoryLink. Protistrany") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Hodnota, "Nápoveda" , TypPopis) ;

Predchádzajúce metódy vám umožňovali otvárať iba predvolené formuláre pre objekty (formulár objektu alebo formulár výberu). Ak potrebujete otvoriť vlastný formulár, môžete použiť funkciu OpenForm().

Táto funkcia má niekoľko parametrov. Pozrime sa na niektoré z nich:

  • Názov formulára— tu si môžete vybrať jeden zo štandardných tvarov objektov, napr. Výberový formulár alebo Formulár zoznamu. Alebo konkrétny formulár vytvorený vývojármi.
  • možnosti— umožňuje preniesť ho do formulára vo formulári štruktúry niektoré parametre pred jeho otvorením, čím sa určia výstupné údaje. Parametre môžu byť akékoľvek údaje, ktoré je možné preniesť z klienta na server. Parametre odovzdané pri otváraní formulára je možné spracovať v procedúre WhenCreatingOnServer() pri otváraní formulára.
  • Režim otvárania formulára— má 3 možnosti: nezávislý, blokovať celé rozhranie, blokovať formulár vlastníka.

Pozrime sa, ako sa funkcia používa OpenForm() v rôznych situáciách.

3. Ako otvoriť formulár existujúceho objektu

Každý formulár má jeden kľúčový atribút. V zozname podrobností formulára je zvýraznený tučným písmom a zvyčajne sa nazýva Objekt vo forme prvkov referenčných kníh a dokumentov. Ostatné objekty môžu mať iný názov. Ak chcete otvoriť formulár existujúceho objektu, musíte do otvoreného formulára odovzdať parameter kľúč s hodnotou ako odkazom na objekt.

&OnClient
Postup Command1 (príkaz)
Parameter= new struct;
Parameter. Insert("Kľúč" , FindC() ) ;
OpenForm(, Parameter) ;
Koniec procedúry

&Na serveri
Funkcia FindC();
Návratové adresáre. protistrany. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Ako otvoriť nový objektový formulár

Tu poslúži jednoduchá funkcia OpenForm() bez akýchkoľvek parametrov.

&OnClient
Postup Command1 (príkaz)
OpenForm( "Adresár. Protistrany. Formulár objektu") ;
Koniec procedúry

5. Ako otvoriť nový objektový formulár a na základe niečoho ho vyplniť

Musíte zadať parameter Základňa, ktorého hodnota bude odkazom na vyplňujúci základný objekt. Tým sa spustí postup ProcessFill().

&OnClient
Postup Command1 (príkaz)
Parameter= new struct;
Parameter. Insert("Základ", LinkToBuyerAccount) ;
OpenForm( "Dokument. Predaj tovaru a služieb. Formulár objektu", Parameter);
Koniec procedúry

Tento príklad vytvorí dokument Predaj tovaru a služieb a vyplnené na základe faktúry na zaplatenie kupujúcemu, na ktorú bol prenesený odkaz.

6. Ako otvoriť formulár a nastaviť na ňom výber

Výber na formulároch 1C môže byť jednoduchý alebo zložitý. Jednoduchý výber zahŕňa výrazy ako Organizácia = Horns and Hooves LLC. Komplexný výber zahŕňa iné typy porovnávania, napr. Na zozname. V tomto článku sa budeme zaoberať organizáciou jednoduchého výberu a komplexnému výberu bude venovaný samostatný článok.

Ak chcete zorganizovať jednoduchý výber, musíte do otváraného formulára odovzdať parameter s kľúčom Výber, hodnota bude štruktúra, v ktorej kľúčom je názov poľa dynamického zoznamu a hodnotou sú hľadané údaje.

Otvorme si napríklad formulár zoznamu adresárov GTD čísla a tam urobte výber podľa vlastníka - element adresára Nomenklatúra.

&OnClient
Postup Command1 (príkaz)
Parameter= new struct;

Výber= nová štruktúra;
Výber. Insert("Vlastník", LinkToNomenclature) ;

Parameter. Insert("Výber", Výber) ;

OpenForm( "Adresár. GTD čísla. Formulár zoznamu", Parameter);
Koniec procedúry

7. Ako otvoriť vstupný formulár do registra informácií

Na to budete potrebovať vstupný kľúč informačného registra.

Kľúč záznamu— toto sú hodnoty všetkých meraní a periódy (ak je register periodický). To znamená, že kľúč záznamu sú parametre, pomocou ktorých možno záznam jednoznačne identifikovať.

Algoritmus otvárania je nasledujúci:

  1. Do štruktúry zadáme kľúčové údaje záznamu s potrebnými hodnotami.
  2. Výslednú štruktúru umiestnime do poľa.
  3. Z poľa vytvoríme kľúč záznamu.
  4. Do formulára, ktorý sa otvorí, odovzdáme parameter kľúč s kľúčom záznamu z kroku 3 ako hodnotou.

&OnClient
Postup Command1 (príkaz)
Parameter= new struct;

KeyParameters= new Structure;
Kľúčové parametre. Insert("Nomenklatura", LinkToNomenclature) ;
Kľúčové parametre. Insert("PriceType", LinkToPriceType) ;
Kľúčové parametre. Insert("Obdobie", Dátum) ;

KeyArray = Nové pole;
KeyArray. Add(KeyParameters) ;

Vstupný kľúč = Nový( "Kľúč záznamu registra informácií. Nomenklatúra cien", KeyArray);

Parameter. Insert("Kľúč", RecordKey) ;

OpenForm( "Register informácií. Ceny nomenklatúry. Formulár záznamu", Parameter);
Koniec procedúry

Domov Pre začínajúcich vývojárov Naučte sa programovať

Ako otvoriť formulár existujúceho objektu?

Pri otváraní formulára existujúceho objektu musíte okrem názvu formulára uviesť aj objekt, ktorého formulár sa má otvoriť. Na to slúži parameter Key form a odkaz na objekt, ktorý nás zaujíma.

Napríklad, ak z formulára zoznamu organizácií potrebujete otvoriť formulár organizácie, na ktorej sa nachádza kurzor, môžete to urobiť nasledujúcim spôsobom:

Parametre formulára odovzdávame vo forme štruktúry, kde názov prvku štruktúry zodpovedá názvu parametra formulára a hodnota je hodnota, na ktorú chceme parameter formulára nastaviť.

Ak chcete otvoriť nie hlavnú, ale ľubovoľnú formu objektu vytvoreného v konfigurátore, namiesto štandardného názvu hlavného formulára (ObjectForm) uveďte slovo Form, za ktorým nasleduje bodka - názov formulára vytvoreného v konfigurátor.

Napríklad:

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

Treba poznamenať, že v prípade, keď okrem odkazu na objekt nie je potrebné odovzdávať do otváraného formulára žiadne parametre a je potrebná hlavná forma existujúceho objektu, môžete použiť jednoduchšiu metódu - otvorte formulár pomocou postupu OpenValue():

OpenValue(Items.List.CurrentRow);

Táto metóda je menej všestranná, ale v niektorých prípadoch šetrí čas a námahu. Napríklad v uvažovanom prípade môže jeden takýto riadok nahradiť celý trojriadkový postup, ktorý sme napísali skôr.

Pri použití tohto postupu je však potrebné postupovať opatrne. V niektorých prípadoch to môže spôsobiť dodatočné volania na server, napríklad keď potrebujete otvoriť formulár položky hierarchického adresára. Pri použití tohto postupu platforma vykoná dodatočné volanie na server, aby určilo, či prvok je skupina alebo nie, pretože pre prvok a pre skupinu musia byť otvorené rôzne formuláre.

Zároveň môžu byť tieto informácie vopred známe vývojárovi v rámci jeho algoritmu a pomocou funkcie OpenForm() môže vývojár otvoriť požadovaný formulár bez ďalších volaní na server, pričom okamžite uvedie štandardný názov hlavného formulár.

Pekný deň všetkým!
Myslím si, že informácie v tejto téme budú veľmi užitočné pre mnohých návštevníkov tohto fóra.
Dlho som nevedel vyriešiť problém - ako otvoriť formulár nového dokumentu tak, aby sa neotvoril prázdny, ale už čiastočne vyplnený programovo, pričom samotný dokument ešte nebol zaznamenaný v databáze? Strávil som veľa času hľadaním riešenia tohto problému na internete, navštívil som mnoho fór, kde bol tento problém nastolený, ale len niekoľko z nich našlo riešenia. Najjednoduchším z nich je najprv programovo vytvoriť nový dokument, programovo vyplniť potrebné údaje, zapísať dokument do databázy a následne ho otvoriť používateľovi. Čo ak to používateľ nechce uložiť? Čo ak si to rozmyslí a zatvorí otvorenú formu? V tomto prípade už zaznamenaný dokument zostane v databáze. A kto potrebuje ďalšie dokumenty v databáze?
A ak dokument neuložíte, potom najpopulárnejšou možnosťou je použiť metódu GetForm (“Dokumenty. Požadovaný typ dokumentu. Formulár dokumentu”). Ale v tomto prípade môžete získať prázdny formulár dokumentu a jednoducho ho zobraziť pomocou metódy Open(). Toto tiež nie je možnosť...
Po určitom čase bol problém vyriešený pomocou globálnej kontextovej funkcie „Vyplňte hodnoty vlastností“.

Globálny kontext
FillPropertyValues
Syntax:
Vyplňte PropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Popis:
Kopíruje hodnoty vlastností<Источника>na vlastnosti<Приемника>. Priraďovanie sa vykonáva podľa názvov vlastností.

Na príklade mojej úlohy by som rád vysvetlil, ako môžete použiť túto funkciu na vyplnenie formulára pre nový dokument. Úloha bola nasledovná: Existuje jeden dokument (Pracovný poriadok), ktorého náležitosťou tabuľková časť je ďalší dokument (Poskytovanie služieb). Bolo teda potrebné zabezpečiť, aby pri pridaní nového dokumentu „Poskytovanie služieb“ do tabuľkovej časti „Pracovnej zákazky“ sa na obrazovke zobrazil formulár nového dokladu „Poskytovanie služieb“ s detailmi už vyplnené, prevzaté z pracovného príkazu, z ktorého bolo vytvorené vytvorenie. Zároveň samotný nový dokument v čase, keď sa jeho podoba objaví na obrazovke, ešte nebol zaznamenaný v databáze. Toto bolo potrebné urobiť, ak sa používateľ náhle rozhodol dokument nevyplniť a formulár jednoducho zatvoril.
Tu je fragment kódu s riešením problému:

&Na procedúre klienta EnterRecord()RecordForm = GetForm("Dokument.Poskytovanie lekárskych služieb.ObjectForm"); VyplňtePropertyValues(RecordForm.Object,Object,"Dátum,Špecialista,Špecializácia,Sestra,Stav výkonu"); // Vyplňte hodnoty detailov, ktorých názvy sú rovnaké v oboch dokumentoch TextStr = Elements.Reception.CurrentData; //Údaje aktuálneho riadku zdrojového dokumentu Štruktúra vlastnosti = Nová štruktúra; // Štruktúra obsahuje hodnoty tých detailov, ktoré je potrebné vyplniť vo formulári nového dokumentu, ale ktoré nie sú v zdrojovom dokumente StructureProperties.Insert("Work Order", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); Fill inPropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime"); EntryForm.Open(); Koniec procedúry

To znamená, že všetky operácie vykonávame priamo na klientovi, bez kontaktovania servera, v rámci jednej nezávisle vytvorenej procedúry. V skutočnosti týmto spôsobom môžete vyplniť a otvoriť formulár akéhokoľvek dokumentu alebo referenčnej knihy. Najprv som vyplnil podrobnosti z jedného formulára do druhého pomocou objektov formulára a potom som pomocou objektu „Structure“, do ktorého som vložil chýbajúce údaje, doplnil ďalšie podrobnosti o otváranom formulári a potom som otvoril formulár.
Dúfam, že táto téma ušetrí čas mnohým, ktorí stoja pred podobnou úlohou!