Jak programově vyplnit a otevřít formulář nového dokumentu? Jak otevřít formulář existujícího objektu? Programově otevřít formulář nového dokumentu 1s 8.3

Programové otevírání formulářů ve spravované aplikaci 1C se výrazně liší od jejich otevírání v běžné aplikaci. Nejprve se podíváme na starou metodu. Skládá se z přijetí formuláře a jeho následného otevření v normálním nebo modálním režimu (při otevření v modálním režimu formulář blokuje program).

GetForm() . OTEVŘENO()

Toto je nejpomalejší způsob otevírání formulářů. Umožňuje však programově zpracovat formulář před jeho otevřením. Pro zpracování kódu je potřeba trochu změnit:

Form = GetForm( "Doklad. Příjem zboží a služeb. Formulář dokladu") ;
//Zde provádíme akce s formulářem
Formulář. OTEVŘENO();

Je třeba vzít v úvahu, že po přijetí formuláře bude provedena další procedura události WhenCreatedOnServer.

Podívejme se na další metody, které umožňují rychleji a pohodlněji otevírat formuláře ve spravované aplikaci 1C. V závislosti na konkrétní situaci mohou být použity různé metody.

1. Jak otevřít formulář objektu ve spravované aplikaci, pokud na něj existuje odkaz.

V tomto případě je vše velmi jednoduché.

RefLink = Adresáře. Nomenklatura. FindByCode("000000001" );
OpenValue(RefLink) ;

2. Jak otevřít výběrový formulář a následně získat vybranou hodnotu.

Existuje na to funkce EnterValue(). Funkce má 3 parametry:

  • Proměnná, do které bude zapsána vybraná hodnota;
  • Nápověda, která se zobrazí v okně výběru;
  • Popis typů vybraných hodnot. Může existovat několik typů, v takovém případě budete před výběrem konkrétní hodnoty vyzváni k výběru typu.

V důsledku provedení funkce se otevře výchozí formulář výběru pro objekt zadaného typu.

Hodnota proměnné;
Pole= nové pole;
Pole. Přidat(Typ( "DirectoryLink.Nomenclature") ) ;
Pole. Přidat(Typ( "DirectoryLink. Protistrany") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Hodnota, "Nápověda" , TypPopis) ;

Předchozí metody umožňovaly otevřít pouze výchozí formuláře pro objekty (formulář objektu nebo formulář výběru). Pokud potřebujete otevřít vlastní formulář, můžete použít funkci OpenForm().

Tato funkce má několik parametrů. Podívejme se na některé z nich:

  • Název formuláře— zde můžete vybrat jeden ze standardních tvarů objektů, např. Výběrový formulář nebo Formulář seznamu. Nebo konkrétní formulář vytvořený vývojáři.
  • Možnosti— umožňuje přenést jej do formuláře ve formuláři struktur některé parametry před jeho otevřením, čímž určí výstupní data. Parametry mohou být jakákoli data, která lze předávat z klienta na server. Parametry předané při otevírání formuláře lze zpracovat v proceduře WhenCreatingOnServer() při otevírání formuláře.
  • Režim otevírání formuláře— má 3 možnosti: nezávislý, blokovat celé rozhraní, blokovat formulář vlastníka.

Podívejme se, jak se funkce používá OpenForm() v různých situacích.

3. Jak otevřít formulář existujícího objektu

Každý formulář má jeden klíčový atribut. V seznamu podrobností formuláře je zvýrazněn tučně a obvykle se nazývá Objekt ve formě prvků referenčních knih a dokumentů. Jiné objekty mohou mít jiný název. Chcete-li otevřít formulář existujícího objektu, musíte do otevřeného formuláře předat parametr Klíč s hodnotou jako odkazem na objekt.

&OnClient
Postup Příkaz1 (Příkaz)
Parametr= nová struktura;
Parametr. Insert("Klíč" , FindC() ) ;
OpenForm(, Parametr) ;
Konec procedury

&Na serveru
Funkce FindC();
Návratové adresáře. Protistrany. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Jak otevřít nový objektový formulář

Zde postačí jednoduchá funkce OpenForm() bez jakýchkoli parametrů.

&OnClient
Postup Příkaz1 (Příkaz)
OpenForm( "Adresář. Protistrany. Formulář objektu") ;
Konec procedury

5. Jak otevřít nový objektový formulář a na základě něčeho jej vyplnit

Musíte předat parametr Základna, jehož hodnota bude odkazem na základní objekt plnění. Tím se spustí procedura ProcessFill().

&OnClient
Postup Příkaz1 (Příkaz)
Parametr= nová struktura;
Parametr. Insert("Základ", LinkToBuyerAccount) ;
OpenForm( "Dokument. Prodej zboží a služeb. Formulář objektu", Parametr) ;
Konec procedury

Tento příklad vytvoří dokument Prodej zboží a služeb a vyplněné na základě faktury k zaplacení kupujícímu, na kterou byl předán odkaz.

6. Jak otevřít formulář a nastavit na něm výběr

Výběr na formulářích 1C může být jednoduchý nebo složitý. Jednoduchý výběr zahrnuje výrazy jako Organizace = Horns and Hooves LLC. Komplexní výběr zahrnuje jiné typy srovnání, kupř. Na seznamu. V tomto článku se budeme zabývat organizací jednoduchého výběru a komplexnímu výběru bude věnován samostatný článek.

Chcete-li uspořádat jednoduchý výběr, musíte do otevřeného formuláře předat parametr s klíčem Výběr, hodnota bude struktura, ve které je klíčem název pole dynamického seznamu a hodnotou jsou hledaná data.

Otevřeme například formulář seznamu adresářů GTD čísla a tam proveďte výběr podle vlastníka - prvek adresáře Nomenklatura.

&OnClient
Postup Příkaz1 (Příkaz)
Parametr= nová struktura;

Výběr= nová struktura;
Výběr. Insert("Vlastník", LinkToNomenclature) ;

Parametr. Insert("Výběr", Výběr) ;

OpenForm( "Adresář. GTD čísla. Formulář seznamu", Parametr) ;
Konec procedury

7. Jak otevřít vstupní formulář do registru informací

K tomu budete potřebovat vstupní klíč registru informací.

Záznamový klíč— toto jsou hodnoty všech měření a perioda (pokud je registr periodický). To znamená, že klíč záznamu jsou parametry, pomocí kterých lze záznam jednoznačně identifikovat.

Algoritmus otevírání je následující:

  1. Do struktury zadáme klíčová data záznamu s potřebnými hodnotami.
  2. Výslednou strukturu umístíme do pole.
  3. Z pole vytvoříme klíč záznamu.
  4. Do formuláře, který se otevře, předáme parametr Klíč s klíčem záznamu z kroku 3 jako hodnotou.

&OnClient
Postup Příkaz1 (Příkaz)
Parametr= nová struktura;

KeyParameters= new Structure;
Klíčové parametry. Insert("Nomenklatura", LinkToNomenclature) ;
Klíčové parametry. Insert("PriceType", LinkToPriceType) ;
Klíčové parametry. Insert("Období", Datum) ;

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

Vstupní klíč = Nový( "Information RegisterRecord Key.PricesNomenclature", KeyArray);

Parametr. Insert("Klíč", RecordKey) ;

OpenForm( "Registr informací. Ceny nomenklatury. Formulář záznamu", Parametr) ;
Konec procedury

Domov Pro začínající vývojáře Naučte se programovat

Jak otevřít formulář existujícího objektu?

Při otevírání formuláře existujícího objektu musíte kromě názvu formuláře uvést také objekt, jehož formulář má být otevřen. K tomu slouží parametr Klíčový formulář a odkaz na objekt, který nás zajímá.

Pokud například z formuláře seznamu organizací potřebujete otevřít formulář organizace, na které je umístěn kurzor, můžete to provést následujícím způsobem:

Parametry formuláře předáváme ve formě struktury, kde název prvku struktury odpovídá názvu parametru formuláře a hodnota je hodnota, na kterou chceme parametr formuláře nastavit.

Pokud chcete otevřít nikoli hlavní, ale libovolnou formu objektu vytvořeného v konfigurátoru, označte místo standardního názvu hlavního formuláře (ObjectForm) slovo Form následované tečkou - název formuláře vytvořeného v konfigurátoru.

Například:

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

Je třeba poznamenat, že v případě, kdy kromě odkazu na objekt není třeba do otevíraného formuláře předávat žádné parametry a je potřeba hlavní formulář existujícího objektu, můžete použít jednodušší metodu - otevřete formulář pomocí postupu OpenValue():

OpenValue(Items.List.CurrentRow);

Tato metoda je méně univerzální, ale v některých případech šetří čas a úsilí. Například v uvažovaném případě může jeden takový řádek nahradit celý třířádkový postup, který jsme psali dříve.

Při použití tohoto postupu je však třeba postupovat opatrně. V některých případech může způsobit další volání serveru, například když potřebujete otevřít formulář položky hierarchického adresáře. Při použití tohoto postupu platforma provede další volání na server, aby určilo, zda je prvek skupinou, nebo ne, protože pro prvek a pro skupinu musí být otevřeny různé formuláře.

Současně mohou být tyto informace předem známy vývojáři v rámci jeho algoritmu a pomocí funkce OpenForm() může vývojář otevřít požadovaný formulář bez dalších volání na server a okamžitě zadat standardní název hlavního formulář.

Dobrý den všem!
Myslím, že informace v tomto tématu budou velmi užitečné pro mnoho návštěvníků tohoto fóra.
Dlouho jsem nemohl vyřešit problém - jak otevřít formulář nového dokumentu tak, aby se neotevřel prázdný, ale programově již částečně vyplněný, přičemž samotný dokument ještě nebyl zaznamenán v databázi? Strávil jsem spoustu času hledáním řešení tohoto problému na internetu, navštívil jsem mnoho fór, kde byl tento problém nastolen, ale jen několik z nich našlo řešení. Nejjednodušší z nich je nejprve programově vytvořit nový dokument, programově vyplnit potřebné údaje, zapsat dokument do databáze a poté jej otevřít uživateli. Co když to uživatel nechce uložit? Co když si to rozmyslí a zavře otevřený formulář? V tomto případě již zaznamenaný dokument zůstane v databázi. A kdo potřebuje další dokumenty v databázi?
A pokud dokument neuložíte, pak nejoblíbenější možností je použít metodu GetForm („Documents. Required Document Type. Document Form“). Ale v tomto případě můžete získat prázdný formulář dokumentu a jednoduše jej zobrazit pomocí metody Open(). Toto také není možnost...
Po nějaké době byl problém vyřešen pomocí funkce globálního kontextu „Vyplňte hodnoty vlastností“.

Globální kontext
FillPropertyValues
Syntax:
Vyplňte PropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Popis:
Kopíruje hodnoty vlastností<Источника>k vlastnostem<Приемника>. Párování se provádí podle názvů vlastností.

Na příkladu mého úkolu bych rád vysvětlil, jak můžete tuto funkci použít k vyplnění formuláře pro nový dokument. Zadání bylo následující: Existuje jeden dokument (Work Order), jehož náležitostí tabulkové části je další dokument (Poskytování služeb). Bylo tedy nutné zajistit, aby při přidání nového dokumentu „Poskytování služeb“ do tabulkové části „Zakázky“ se na obrazovce zobrazil formulář nového dokladu „Poskytování služeb“ s podrobnostmi již vyplněný, převzatý z pracovního příkazu, ze kterého bylo vytvoření způsobeno. Přitom samotný nový dokument v době, kdy se jeho podoba objeví na obrazovce, ještě nebyl zaznamenán v databázi. To bylo nutné provést, pokud se uživatel náhle rozhodl dokument nevyplnit a formulář jednoduše zavře.
Zde je fragment kódu s řešením problému:

&Na proceduře klienta EnterRecord()RecordForm = GetForm("Document.Provision of Medical Services.ObjectForm"); VyplňtePropertyValues(RecordForm.Object,Object,"Datum,Specialista,Specializace,Sestra,Stav realizace"); // Vyplňte hodnoty podrobností, jejichž názvy jsou v obou dokumentech stejné TextStr = Elements.Reception.CurrentData; //Data aktuálního řádku zdrojového dokumentu Struktura vlastností = Nová struktura; // Struktura obsahuje hodnoty těch detailů, které je třeba vyplnit ve formuláři nového dokumentu, ale které nejsou ve zdrojovém dokumentu StructureProperties.Insert("Work Order", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); Fill inPropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime"); EntryForm.Open(); Konec procedury

To znamená, že všechny operace provádíme přímo na klientovi, bez kontaktování serveru, v rámci jedné nezávisle vytvořené procedury. Ve skutečnosti tímto způsobem můžete vyplnit a otevřít formulář jakéhokoli dokumentu nebo referenční knihy. Nejprve jsem pomocí objektů formuláře vyplnil podrobnosti z jednoho formuláře do druhého a poté pomocí objektu „Struktura“, do kterého jsem vložil chybějící údaje, jsem doplnil některé další podrobnosti o otevíraném formuláři a poté otevřel formulář.
Doufám, že toto téma ušetří čas mnoha, kteří stojí před podobným úkolem!