Hur man programmatiskt fyller i och öppnar ett nytt dokumentformulär? Hur öppnar man en form av ett befintligt objekt? Öppna formuläret för ett nytt dokument programmässigt 1s 8.3
Att programmatiskt öppna formulär i en hanterad 1C-applikation skiljer sig markant från att öppna dem i en vanlig applikation. Låt oss först titta på den gamla metoden. Det består av att ta emot ett formulär och sedan öppna det i normalt eller modalt läge (när det öppnas i modalt läge blockerar formuläret programmet).
GetForm() . Öppen()
Detta är den långsammaste metoden att öppna formulär. Det låter dig dock bearbeta formuläret programmatiskt innan du öppnar det. För att bearbeta koden måste du ändra lite:
Form = GetForm( "Dokument. Mottagande av varor och tjänster. Dokumentformulär")
;
//Här utför vi åtgärder med formuläret
Form. Öppen();
Det bör beaktas att när formuläret tas emot kommer en annan händelseprocedur att utföras WhenCreatedOnServer.
Låt oss titta på andra metoder som låter dig öppna formulär i en hanterad 1C-applikation snabbare och mer bekvämt. Beroende på den specifika situationen kan olika metoder användas.
1. Hur man öppnar ett objektformulär i en hanterad applikation om det finns en länk till det.
I det här fallet är allt extremt enkelt.
RefLink = Kataloger. Nomenklatur. FindByCode("000000001" );
OpenValue(RefLink) ;
2. Hur man öppnar urvalsformuläret och får sedan det valda värdet.
Det finns en funktion för detta EnterValue(). Funktionen har 3 parametrar:
- Variabeln som det valda värdet kommer att skrivas in i;
- Ett tips som kommer att visas i urvalsfönstret;
- Beskrivning av typerna av valda värden. Det kan finnas flera typer, i vilket fall du blir ombedd att välja en typ innan du väljer ett specifikt värde.
Som ett resultat av att funktionen körs öppnas standardvalsformuläret för ett objekt av den angivna typen.
Variabelt värde;
Array= ny Array;
Array. Lägg till(Typ( "DirectoryLink.Nomenclature")
)
;
Array. Lägg till(Typ( "DirectoryLink. Motparter")
)
;
TypeDescription= new TypeDescription(Array) ;
Res = EnterValue(Value, "Hint" , TypeDescription) ;
Tidigare metoder gjorde det bara möjligt för dig att öppna standardformulären för objekt (objektform eller urvalsform). Om du behöver öppna ett anpassat formulär kan du använda funktionen OpenForm().
Denna funktion har en hel del parametrar. Låt oss titta på några av dem:
- Formnamn— här kan du välja någon av standardobjektformerna, till exempel, Urvalsformulär eller Listformulär. Eller en specifik form skapad av utvecklarna.
- alternativ— låter dig överföra det till formuläret i formuläret strukturer några parametrar innan du öppnar den, och bestämmer därmed utdata. Parametrar kan vara vilken data som helst som kan skickas från klienten till servern. De parametrar som skickas när formuläret öppnas kan bearbetas i proceduren WhenCreatingOnServer() när formuläret öppnas.
- Formöppningsläge— har 3 alternativ: oberoende, blockera hela gränssnittet, blockera ägarformuläret.
Låt oss titta på hur funktionen används OpenForm() i olika situationer.
3. Hur man öppnar formen av ett befintligt objekt
Varje formulär har ett nyckelattribut. Det är markerat med fet stil i listan med formulärdetaljer och kallas vanligtvis Ett objekt i form av inslag av referensböcker och dokument. Andra objekt kan ha ett annat namn. För att öppna ett formulär för ett befintligt objekt måste du skicka en parameter till formuläret som öppnas Nyckel med värdet som en referens till ett objekt.
&OnClient
Procedur Kommando1 (Kommando)
Parameter= ny struktur;
Parameter. Insert("Key" , FindC() );
OpenForm(, Parameter) ;
Slut på förfarandet
&På server
Funktion FindC();
Returnera kataloger. Motparter. FindByRequisites ("TIN", "745107734623")
EndFunction
4. Hur man öppnar ett nytt objektformulär
En enkel funktion kommer att fungera här OpenForm() utan några parametrar.
&OnClient
Procedur Kommando1 (Kommando)
OpenForm( "Katalog. Motparter. Objektform")
;
Slut på förfarandet
5. Hur man öppnar ett nytt objektformulär och fyller i det utifrån något
Du måste skicka en parameter Bas, vars värde kommer att vara en referens till fyllningsbasobjektet. Detta kommer att starta proceduren ProcessFill().
&OnClient
Procedur Kommando1 (Kommando)
Parameter= ny struktur;
Parameter. Insert("Base", LinkToBuyerAccount) ;
OpenForm( "Dokument. Försäljning av varor och tjänster. Objektform", Parameter) ;
Slut på förfarandet
Detta exempel kommer att skapa ett dokument Försäljning av varor och tjänster och fylls i på basis av en faktura för betalning till köparen, vars länk skickades.
6. Hur man öppnar ett formulär och ställer in ett urval på det
Urval på 1C-formulär kan vara enkelt eller komplext. Enkelt urval innebär uttryck som Organisation = Horns and Hooves LLC. Komplext urval innebär andra typer av jämförelser, t.ex. På listan. I den här artikeln kommer vi att överväga organisationen av enkelt urval, och en separat artikel kommer att ägnas åt komplext urval.
För att organisera ett enkelt urval måste du skicka en parameter med en nyckel till formuläret som öppnas Urval, kommer värdet att vara en struktur där nyckeln är namnet på det dynamiska listfältet och värdet är den data som söks.
Låt oss till exempel öppna kataloglistans formulär GTD-nummer och gör ett urval där av ägare - katalogelement Nomenklatur.
&OnClient
Procedur Kommando1 (Kommando)
Parameter= ny struktur;
Urval= ny struktur;
Urval. Insert("Ägare", LinkToNomenclature) ;
Parameter. Insert("Selection", Selection) ;
OpenForm( "Katalog.GTD-nummer. Listformulär", Parameter) ;
Slut på förfarandet
7. Hur man öppnar anmälningsformuläret för informationsregistret
För att göra detta behöver du inmatningsnyckeln för informationsregistret.
Spela in nyckel— det här är värdena för alla mätningar och perioden (om registret är periodiskt). Det vill säga, en postnyckel är de parametrar med vilka en post kan identifieras unikt.
Öppningsalgoritmen är som följer:
- Vi matar in nyckeldata med de nödvändiga värdena i strukturen.
- Vi placerar den resulterande strukturen i en array.
- Vi skapar en inspelningsnyckel från arrayen.
- Vi skickar en parameter till formuläret som öppnas Nyckel med inspelningsnyckeln från steg 3 som värde.
&OnClient
Procedur Kommando1 (Kommando)
Parameter= ny struktur;
KeyParameters= ny struktur;
Nyckelparametrar. Insert("Nomenklatur", LinkToNomenclature) ;
Nyckelparametrar. Insert("PriceType", LinkToPriceType) ;
Nyckelparametrar. Insert("Period", Datum) ;
KeyArray = New Array;
KeyArray. Add(KeyParameters) ;
EntryKey = New( "Information RegisterRecord Key.PricesNomenclature", KeyArray);
Parameter. Insert("Key", RecordKey) ;
OpenForm( "Informationsregister. Nomenklaturpriser. Registreringsformulär", Parameter) ;
Slut på förfarandet
Hur öppnar man en form av ett befintligt objekt?
När du öppnar ett formulär för ett befintligt objekt måste du förutom namnet på formuläret även ange det objekt vars formulär ska öppnas. För att göra detta, använd parametern Nyckelformulär och en länk till objektet som är intressant för oss.
Till exempel, om du från listan över organisationers formulär behöver öppna formuläret för organisationen där markören är placerad, kan du göra detta på följande sätt:
Vi skickar formulärparametrar i form av en struktur, där namnet på strukturelementet motsvarar namnet på formulärparametern, och värdet är det värde som vi vill ställa in formulärparametern till.
Om du inte vill öppna huvudformen, utan en godtycklig form av ett objekt skapat i konfiguratorn, istället för standardnamnet på huvudformuläret (ObjectForm), ange ordet Form följt av en punkt - namnet på formen skapad i konfiguratorn.
Till exempel:
ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = New Structure("Key", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);
Det bör noteras att i det fall då, förutom en länk till ett objekt, inga parametrar behöver skickas till formuläret som öppnas och det är huvudformen för det befintliga objektet som behövs, kan du använda en enklare metod - öppna formuläret med hjälp av proceduren OpenValue():
OpenValue(Items.List.CurrentRow);
Denna metod är mindre mångsidig, men i vissa fall sparar den tid och ansträngning. Till exempel, i det aktuella fallet, kan en sådan rad ersätta hela den treradiga proceduren vi skrev tidigare.
Försiktighet måste dock iakttas när du använder denna procedur. I vissa fall kan det orsaka ytterligare anrop till servern, till exempel när du behöver öppna ett hierarkiskt katalogobjektsformulär. När denna procedur används kommer plattformen att göra ett ytterligare anrop till servern för att avgöra om ett element är en grupp eller inte, eftersom olika formulär måste öppnas för elementet och för gruppen.
Samtidigt kan denna information vara känd i förväg för utvecklaren inom sin algoritm, och med hjälp av funktionen OpenForm() kan utvecklaren öppna det önskade formuläret utan ytterligare anrop till servern, och omedelbart specificera standardnamnet på huvudet form.