Het programmatisch openen van formulieren in een beheerde 1C-applicatie verschilt aanzienlijk van het openen in een reguliere applicatie. Laten we beginnen met de oude methode. Het bestaat uit het ontvangen van een formulier en het vervolgens openen in de normale of modale modus (wanneer geopend in de modale modus, blokkeert het formulier het werk van het programma).
GetForm (). Open()
Dit is de langzaamste methode om formulieren te openen. U kunt het formulier echter programmatisch verwerken voordat u het opent. Om de code te verwerken, moet je een beetje veranderen:
Formulier = GetForm ( "Document. Ontvangst van goederenDiensten. Documentformulier")
;
// Hier voeren we acties uit met het formulier
Het formulier. Open ();
Houd er rekening mee dat wanneer het formulier wordt ontvangen, een andere gebeurtenisprocedure wordt uitgevoerd OpCreateAtServer.
Laten we eens kijken naar andere methoden waarmee u sneller en gemakkelijker formulieren in een beheerde 1C-toepassing kunt openen. Afhankelijk van de specifieke situatie kunnen verschillende methoden worden gebruikt.
1. Hoe een objectformulier te openen in een beheerde applicatie, als er een link naar is.
In dit geval is alles uiterst eenvoudig.
RefLink = Directory's. Nomenclatuur. FindByCode ("000000001");
OpenValue (RefLink);
2. Hoe u het selectieformulier opent en vervolgens de geselecteerde waarde krijgt.
Hiervoor is er een functie Voer Waarde in (). De functie heeft 3 parameters:
- De variabele waarnaar de geselecteerde waarde wordt geschreven;
- Een hint die wordt weergegeven in het selectievenster;
- Beschrijving van de soorten waarden om te selecteren. Er kunnen verschillende typen zijn. Voordat u een specifieke waarde kiest, wordt u gevraagd een type te selecteren.
Als resultaat van het uitvoeren van de functie, wordt het standaard selectieformulier voor het object van het opgegeven type geopend.
Var-waarde;
Matrix = nieuwe matrix;
Reeks. Toevoegen (Type ( "DirectoryLink.Nomenclatuur")
)
;
Reeks. Toevoegen (Type ( "DirectoryLink. Aannemers")
)
;
TypeDescription = nieuwe TypeDescription (array);
Res = EnterValue (Waarde, "Hint", Beschrijving van typen);
Met de vorige methoden konden alleen de formulieren worden geopend die standaard voor objecten zijn ingesteld (objectformulier of selectieformulier). Als u een willekeurige vorm moet openen, kunt u de functie gebruiken: OpenForm ().
Deze functie heeft nogal wat parameters. Laten we er een paar bekijken:
- Formulier naam- hier kunt u een van de standaard objectvormen kiezen, bijvoorbeeld Selectieformulier of Lijstformulier... Of een specifiek formulier gemaakt door de ontwikkelaars.
- Opties- hiermee kunt u overstappen naar het formulier in het formulier structuren enkele parameters voordat u het opent, waardoor de uitvoergegevens worden gedefinieerd. Parameters kunnen alle gegevens zijn die van de client naar de server kunnen worden overgedragen. De parameters die zijn doorgegeven bij het openen van het formulier kunnen in de procedure worden verwerkt OnCreateAtServer () op het geopende formulier.
- Formulier openingsmodus- heeft 3 opties: onafhankelijk, blokkeer de hele interface, blokkeer het formulier van de eigenaar.
Laten we eens kijken hoe de functie wordt toegepast OpenForm () in verschillende situaties.
3. Hoe de vorm van een bestaand object te openen
Elk formulier heeft één belangrijke rekwisieten. Het wordt vetgedrukt weergegeven in de lijst met formulierattributen en wordt meestal genoemd Een voorwerp op formulieren van elementen van mappen, documenten. Andere objecten kunnen een andere naam hebben. Om de vorm van een bestaand object te openen, moet u de parameter doorgeven aan het geopende formulier Toets met een waarde in de vorm van een objectreferentie.
& Op Client
Procedure Commando1 (Commando)
Parameter = nieuwe structuur;
Parameter. Invoegen ("Sleutel", FindS ());
OpenForm (, Parameter);
Einde van de procedure
&Op server
FindC () functie;
Directory's terugsturen. Aannemers. Zoeken op de vereiste ("INN", "745107734623")
Eindfunctie
4. Hoe de vorm van een nieuw object te openen?
Hier volstaat een functie OpenForm () zonder parameters.
& Op Client
Procedure Commando1 (Commando)
OpenForm ( "Directory. Aannemers. Objectformulier")
;
Einde van de procedure
5. Hoe een nieuw objectformulier te openen en op basis van iets in te vullen?
U moet een parameter doorgeven Baseren, waarvan de waarde een verwijzing is naar het fill-base-object. Hiermee wordt de procedure gestart. ProcessingFill ().
& Op Client
Procedure Commando1 (Commando)
Parameter = nieuwe structuur;
Parameter. Invoegen ("Basis", Accountlink naar Koper);
OpenForm ( "Document.RealizationGoodsServices.ObjectForm", Parameter) ;
Einde van de procedure
Dit voorbeeld zal een document maken Verkoop van goederen en diensten en ingevuld op basis van de factuur voor betaling aan de koper, waarvan de link werd doorgestuurd.
6. Hoe een formulier te openen en er een selectie op te zetten
Selectie op 1C-formulieren kan eenvoudig en complex zijn. Eenvoudige selectie levert uitdrukkingen als Organisatie = LLC "Horns and Hooves". Gecompliceerde selectie omvat andere soorten vergelijking, bijvoorbeeld In de lijst... In dit artikel zullen we de organisatie van een eenvoudige selectie beschouwen, en een apart artikel zal aan de complexe worden gewijd.
Om een eenvoudige selectie te organiseren, moet u een parameter met een sleutel doorgeven aan het geopende formulier Selectie, zal de waarde een structuur zijn waarin de sleutel de naam is van het dynamische lijstveld en de waarde de vereiste gegevens.
Laten we bijvoorbeeld de vorm van de directorylijst openen GTD-nummers en maak daar een selectie door de eigenaar - een directory-element Nomenclatuur.
& Op Client
Procedure Commando1 (Commando)
Parameter = nieuwe structuur;
Selectie = nieuwe structuur;
Selectie. Invoegen ("Eigenaar", ReferentieNomenclatuur);
Parameter. Invoegen ("Selectie", Selectie);
OpenForm ( "Directory.NumbersGTD.Lijstformulier", Parameter) ;
Einde van de procedure
7. Hoe het ite openen?
Hiervoor heeft u een informatieregister-schrijfsleutel nodig.
Opnamesleutel- dit zijn de waarden van alle metingen en de periode (indien het register periodiek is). Dat wil zeggen dat de recordsleutel de parameters zijn waarmee de record op unieke wijze kan worden geïdentificeerd.
Het openingsalgoritme is als volgt:
- We voeren de gegevens van de recordsleutel met de benodigde waarden in de structuur in.
- We plaatsen de resulterende structuur in een array.
- Maak een recordsleutel van de array.
- We geven de parameter door aan het geopende formulier Toets met de recordsleutel uit item 3 als waarde.
& Op Client
Procedure Commando1 (Commando)
Parameter = nieuwe structuur;
KeyParameters = nieuwe structuur;
Belangrijkste parameters. Invoegen ("Nomenclatuur", ReferentieNomenclatuur);
Belangrijkste parameters. Invoegen ("PriceType", LinkPriceType);
Belangrijkste parameters. Invoegen ("Periode", Datum);
KeyArray = Nieuwe array;
MatrixKey. Toevoegen (KeyParameters);
SleutelRecord = Nieuw ( "DataRecordRecordKey.Nomenclatuur Prijzen", ArrayKey);
Parameter. Invoegen ("Sleutel", KeyRecord);
OpenForm ( "Informatieregister. Nomenclatuur Prijzen. Recordformulier", Parameter) ;
Einde van de procedure
Hoe open ik de vorm van een bestaand object?
Bij het openen van de vorm van een bestaand object moet naast de naam van het formulier ook het object worden aangegeven waarvan de vorm moet worden geopend. Hiervoor worden de formulierparameter Sleutel en een link naar het voor ons interessante object gebruikt.
Als u bijvoorbeeld vanuit het formulier van de lijst met organisaties het formulier van de organisatie moet openen waarop de cursor zich bevindt, kunt u dit op de volgende manier doen:
We geven de formulierparameters door in de vorm van een structuur, waarbij de naam van het structuurelement overeenkomt met de naam van de formulierparameter, en de waarde is de waarde waarop we de formulierparameter willen instellen.
Als u niet de hoofdvorm, maar een willekeurige vorm van een in de configurator gemaakt object wilt openen, in plaats van de standaardnaam van de hoofdvorm (ObjectForm), wordt het woord Form aangegeven en, door een punt erna, de naam van het formulier dat in de configurator is gemaakt.
Bijvoorbeeld:
ReferenceItemRef = Items.List.CurrentString; Formulierparameters = Nieuwe structuur ("Key", ReferenceElementRef); OpenForm ("Directory.Organizations.Form.UniversalFormObject", Formulierparameters);
Opgemerkt moet worden dat in het geval dat, afgezien van een verwijzing naar een object, er geen parameters aan het te openen formulier hoeven te worden doorgegeven en het de hoofdvorm van het bestaande object is, u een eenvoudigere methode kunt gebruiken - open het formulier via de procedure OpenWaarde ():
OpenValue (Items.Lijst.CurrentLine);
Deze methode is minder veelzijdig, maar bespaart in sommige gevallen tijd en moeite. In het beschouwde geval kan één zo'n regel bijvoorbeeld de hele procedure met drie regels vervangen die we eerder schreven.
Wees echter voorzichtig bij het gebruik van deze procedure. In sommige gevallen kan dit extra aanroepen naar de server veroorzaken, bijvoorbeeld wanneer u een formulier voor een item in een hiërarchische catalogus moet openen. Bij gebruik van deze procedure zal het platform een extra oproep naar de server doen om te bepalen of het element een groep is of niet, aangezien er verschillende formulieren moeten worden geopend voor het element en voor de groep.
Tegelijkertijd kan de ontwikkelaar deze informatie vooraf binnen zijn algoritme kennen en met behulp van de functie OpenForm () kan de ontwikkelaar het vereiste formulier openen zonder extra oproepen naar de server, waarbij onmiddellijk de standaardnaam van het hoofdformulier wordt gespecificeerd .