» Wie öffne ich ein Listenformular mit einer Auswahl? Auswahl im Auswahlformular 1s einstellen 8.3.

Wie öffne ich ein Listenformular mit einer Auswahl? Auswahl im Auswahlformular 1s einstellen 8.3.

Damit Öffnen Sie das Auswahlformular mit Auswahl in 1s 8.2(reguläre Formulare) müssen wir einige Aktionen ausführen. Wir holen es zuerst. Danach legen wir die Auswahl fest und öffnen sie programmgesteuert. Hier ist ein Codebeispiel:

Auswahl auf dem Formular im 1C 8.2-Eingabefeld mit mehreren Werten

Im obigen Beispiel haben wir uns das angeschaut So legen Sie die Auswahl im Auswahlformular fest nach spezifischem Wert. Schauen wir uns nun eine Situation an, in der Sie mehrere Werte ersetzen müssen. Dies kann beispielsweise ein Array sein oder aus einem Abfrageergebnis entladen werden. Dies ist eine Auswahl im 1c-Eingabefeld mit mehreren Bedeutungen.

Zuerst erhalten wir das Auswahlformular, übergeben „Element“ (Eigentümer) in den Parametern und setzen das Auswahlmodus-Flag. Dann erstellen wir eine Werteliste und ein Array. Dabei beachten wir, dass als Auswahl beim Festlegen des Vergleichstyps in der Liste ein Objekt nur mit dem Typ vorhanden sein kann Listenwerte. Wir fügen dem Array Elemente hinzu und laden dieses Array dann in die Werteliste, die wir anschließend in der Auswahl festlegen. Vergessen Sie außerdem nicht, das Flag für die Verwendung dieser Auswahl zu aktivieren und den Vergleichstyp festzulegen.

Festlegen der Auswahl im Eingabefeld des Formulars in 1C 8.3, Ereignis „Start der Auswahl“.

Lassen Sie uns nun überlegen Auswahl im Eingabefeld auf einem verwalteten Formular in 1C 8.3. Suchen wir im Formular das Element, das uns interessiert, in dem wir die Auswahl festlegen, in unserem Fall ist dies das Feld „Organisation“. Wir finden das Ereignis „Start of Selection“, klicken auf die Lupe und befinden uns im Verfahren. Wir sehen den Parameter Selection Data; dieser Parameter ist vom Typ ValueList. Um die Auswahl auf die notwendigen Elemente zu beschränken, müssen wir die Werteliste ausfüllen. Da wir Elemente nur auf dem Server auswählen können, erstellen wir eine Prozedur mit der Kompilierungsanweisung &OnServer. Geben Sie in diesem Verfahren die Auswahldaten ein.

Das programmgesteuerte Öffnen von Formularen in einer verwalteten 1C-Anwendung unterscheidet sich erheblich vom Öffnen in einer regulären Anwendung. Schauen wir uns zunächst die alte Methode an. Es besteht darin, ein Formular zu empfangen und es dann im normalen oder modalen Modus zu öffnen (beim Öffnen im modalen Modus blockiert das Formular das Programm).

GetForm() . Offen()

Dies ist die langsamste Methode zum Öffnen von Formularen. Sie können das Formular jedoch vor dem Öffnen programmgesteuert verarbeiten. Um den Code zu verarbeiten, müssen Sie ein wenig ändern:

Form = GetForm( „Dokument. Empfang von Waren und Dienstleistungen. Dokumentformular“) ;
//Hier führen wir Aktionen mit dem Formular aus
Bilden. Offen();

Es ist zu berücksichtigen, dass bei Erhalt des Formulars eine weitere Ereignisprozedur ausgeführt wird WhenCreatedOnServer.

Schauen wir uns andere Methoden an, mit denen Sie Formulare in einer verwalteten 1C-Anwendung schneller und bequemer öffnen können. Abhängig von der konkreten Situation können unterschiedliche Methoden zum Einsatz kommen.

1. So öffnen Sie ein Objektformular in einer verwalteten Anwendung, wenn ein Link dazu vorhanden ist.

In diesem Fall ist alles äußerst einfach.

RefLink = Verzeichnisse. Nomenklatur. FindByCode("000000001" );
OpenValue(RefLink) ;

2. So öffnen Sie das Auswahlformular und erhalten dann den ausgewählten Wert.

Dafür gibt es eine Funktion EnterValue(). Die Funktion hat 3 Parameter:

  • Die Variable, in die der ausgewählte Wert geschrieben wird;
  • Ein Hinweis, der im Auswahlfenster angezeigt wird;
  • Beschreibung der Typen der ausgewählten Werte. Es kann mehrere Typen geben. In diesem Fall werden Sie aufgefordert, einen Typ auszuwählen, bevor Sie einen bestimmten Wert auswählen.

Als Ergebnis der Ausführung der Funktion öffnet sich das Standardauswahlformular für ein Objekt des angegebenen Typs.

Variablenwert;
Array= neues Array;
Array. Hinzufügen(Typ( „DirectoryLink.Nomenclature“) ) ;
Array. Hinzufügen(Typ( „DirectoryLink. Gegenparteien“) ) ;

TypeDescription= new TypeDescription(Array) ;

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

Mit früheren Methoden konnten Sie nur die Standardformulare für Objekte öffnen (Objektformular oder Auswahlformular). Wenn Sie ein benutzerdefiniertes Formular öffnen müssen, können Sie die Funktion verwenden OpenForm().

Diese Funktion hat einige Parameter. Schauen wir uns einige davon an:

  • Formularname— Hier können Sie eine der Standardobjektformen auswählen, zum Beispiel Auswahlformular oder Listenformular. Oder ein bestimmtes Formular, das von den Entwicklern erstellt wurde.
  • Optionen— ermöglicht es Ihnen, es auf das Formular im Formular zu übertragen Strukturen Geben Sie vor dem Öffnen einige Parameter ein und bestimmen Sie so die Ausgabedaten. Parameter können beliebige Daten sein, die vom Client an den Server übergeben werden können. Die beim Öffnen des Formulars übergebenen Parameter können in der Prozedur verarbeitet werden WhenCreatingOnServer() beim Öffnen des Formulars.
  • Formularöffnungsmodus– hat 3 Optionen: unabhängig, die gesamte Schnittstelle blockieren, das Eigentümerformular blockieren.

Schauen wir uns an, wie die Funktion verwendet wird OpenForm() in verschiedenen Situationen.

3. So öffnen Sie das Formular eines vorhandenen Objekts

Jedes Formular verfügt über ein Schlüsselattribut. Es ist in der Liste der Formulardetails fett hervorgehoben und wird normalerweise aufgerufen Ein Objekt in Form von Elementen von Nachschlagewerken und Dokumenten. Andere Objekte können einen anderen Namen haben. Um ein Formular eines vorhandenen Objekts zu öffnen, müssen Sie einen Parameter an das zu öffnende Formular übergeben Schlüssel mit dem Wert als Referenz auf ein Objekt.

&OnClient
Prozedur Command1 (Befehl)
Parameter= neue Struktur;
Parameter. Insert("Key" , FindC() );
OpenForm(, Parameter) ;
Ende des Verfahrens

&Auf dem Server
Funktion FindC();
Rückgabeverzeichnisse. Gegenparteien. FindByRequisites („TIN“, „745107734623“)
EndFunction

4. So öffnen Sie ein neues Objektformular

Hier genügt eine einfache Funktion OpenForm() ohne Parameter.

&OnClient
Prozedur Command1 (Befehl)
OpenForm( „Verzeichnis. Gegenparteien. Objektform“) ;
Ende des Verfahrens

5. So öffnen Sie ein neues Objektformular und füllen es basierend auf etwas aus

Sie müssen einen Parameter übergeben Base, dessen Wert ein Verweis auf das füllende Basisobjekt ist. Dadurch wird der Vorgang gestartet ProcessFill().

&OnClient
Prozedur Command1 (Befehl)
Parameter= neue Struktur;
Parameter. Insert("Base", LinkToBuyerAccount) ;
OpenForm( „Dokument. Verkauf von Waren und Dienstleistungen. Objektform“, Parameter) ;
Ende des Verfahrens

In diesem Beispiel wird ein Dokument erstellt Verkauf von Waren und Dienstleistungen und ausgefüllt auf der Grundlage einer Rechnung zur Zahlung an den Käufer, deren Link übermittelt wurde.

6. So öffnen Sie ein Formular und legen eine Auswahl fest

Die Auswahl auf 1C-Formularen kann einfach oder komplex sein. Eine einfache Auswahl beinhaltet Ausdrücke wie Organisation = Horns and Hooves LLC. Eine komplexe Auswahl beinhaltet andere Vergleichsarten, z. Auf der Liste. In diesem Artikel betrachten wir die Organisation der einfachen Auswahl und der komplexen Auswahl wird ein separater Artikel gewidmet.

Um eine einfache Auswahl zu organisieren, müssen Sie einen Parameter mit einem Schlüssel an das zu öffnende Formular übergeben Auswahl, ist der Wert eine Struktur, in der der Schlüssel der Name des dynamischen Listenfelds und der Wert die gesuchten Daten sind.

Öffnen wir zum Beispiel das Verzeichnislistenformular GTD-Nummern und treffen Sie dort eine Auswahl nach Eigentümer - Verzeichniselement Nomenklatur.

&OnClient
Prozedur Command1 (Befehl)
Parameter= neue Struktur;

Auswahl = neue Struktur;
Auswahl. Insert("Owner", LinkToNomenclature) ;

Parameter. Einfügen("Auswahl", Auswahl) ;

OpenForm( „Directory.GTD Numbers.List Form“, Parameter) ;
Ende des Verfahrens

7. So öffnen Sie das Formular zur Eintragung in das Informationsregister

Dazu benötigen Sie den Auskunftsregister-Eintragsschlüssel.

Aufnahmeschlüssel— Dies sind die Werte aller Messungen und die Periode (wenn das Register periodisch ist). Das heißt, ein Datensatzschlüssel ist der Parameter, anhand dessen ein Datensatz eindeutig identifiziert werden kann.

Der Öffnungsalgorithmus ist wie folgt:

  1. Wir tragen die Datensatz-Schlüsseldaten mit den notwendigen Werten in die Struktur ein.
  2. Die resultierende Struktur platzieren wir in einem Array.
  3. Wir erstellen einen Datensatzschlüssel aus dem Array.
  4. Wir übergeben einen Parameter an das sich öffnende Formular Schlüssel mit dem Datensatzschlüssel aus Schritt 3 als Wert.

&OnClient
Prozedur Command1 (Befehl)
Parameter= neue Struktur;

KeyParameters= neue Struktur;
Schlüsselparameter. Insert("Nomenclature", LinkToNomenclature) ;
Schlüsselparameter. Insert("PriceType", LinkToPriceType) ;
Schlüsselparameter. Einfügen("Zeitraum", Datum) ;

KeyArray = Neues Array;
KeyArray. Add(KeyParameters) ;

EntryKey = Neu( „Information RegisterRecord Key.PricesNomenclature“, KeyArray) ;

Parameter. Insert("Key", RecordKey) ;

OpenForm( „Informationsregister. Preise der Nomenklatur. Aufzeichnungsformular“, Parameter) ;
Ende des Verfahrens

Wie öffne ich ein Listenformular mit einer Auswahl?

Es gibt mehrere Möglichkeiten, ein Listenformular mit einer voreingestellten Auswahl zu öffnen. Schauen wir sie uns der Reihe nach an:

1. Die erste Methode besteht darin, dass Sie beim Öffnen des Formulars den Parameter Auswahlformular festlegen und mit diesem Parameter das Listenformular öffnen können. Der Auswahlparameter repräsentiert die Struktur. Die Namen der Elemente entsprechen den Namen der Felder, nach denen die Auswahl erfolgt, und die Werte enthalten die Auswahlwerte. Dies ist eine Option zur Erweiterung dynamischer Listen verwalteter Formulare. Das heißt, es existiert für Formulare, deren Hauptattribut das Typattribut ist Dynamische Liste, wie Listenformulare und Auswahlformulare.

Beim Öffnen des Formulars erfolgt die Auswahl anhand des angegebenen Feldes. Im folgenden Beispiel wird beispielsweise eine Rechnungsliste mit Auswahl nach dem Feld „Nummer“ geöffnet, das 333 entspricht.

Auswahlwert = Neue Struktur("Nummer", "333");

SelectionParameters = New Structure("Selection", SelectionValue);

OpenForm("Dokument. Empfangsrechnung. Listenformular", Auswahloptionen);

2. Sie können ein Listenformular ohne Parameter öffnen:

OpenForm("Document.Invoice.ListForm");

Und dann im Event-Handler des Rechnungslistenformulars Bei CreatedOnServer Schreiben Sie Code, der eine Auswahl in einer dynamischen Liste erstellt, die das Hauptattribut des Formulars ist:

&Auf dem Server

Vorgehensweise bei CreatedOnServer(Failure, StandardProcessing)

Auswahlelement = List.Selection.Elements.Add(Type("DataComposition Selection Element"));

SelectionElement.LeftValue = NewDataCompositionField("Number");

SelectionElement.ComparisonView = DataCompositionComparisonView.More;

SelectionElement.Use = True;

SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;

SelectionElement.RightValue = "000000001";

Ende des Verfahrens

Die Vorteile dieser Methode bestehen darin, dass der Vergleichstyp für die Auswahl nicht nur wie im ersten Fall auf Gleich, sondern auch auf Mehr, Weniger usw. eingestellt werden kann.

Allerdings hat diese Methode auch einen ganz wesentlichen Nachteil: Bei dieser Auswahl öffnet sich das Formular immer. Wo auch immer sie angerufen wurde. Daher sollte dieses Formular nicht als Hauptformular bezeichnet werden. Und wenn es dennoch das Hauptformular ist, muss vor der Installation der Auswahl eine Analyse durchgeführt werden, von wo aus dieses Formular geöffnet wird. Zum Beispiel die Analyse von Formularparametern.

3. Schließlich kann die Auswahlbedingung in einer benutzerdefinierten Abfrage platziert werden, die Daten für eine dynamische Liste auswählt. Beispielsweise müssen wir eine Liste von Rechnungen öffnen, die den in der Artikelliste markierten Artikel enthalten.

Erstellen Sie dazu in Form einer Liste von Elementen einen Befehl und eine entsprechende Schaltfläche Rechnungen erhalten.

Füllen wir den Ausführungshandler für diesen Befehl wie folgt aus:

&OnClient

Prozedur ReceiptsInvoices (Befehl)

ListForm = GetForm("Document.Invoice.ListForm");

ListForm.FilterByProduct = Elements.List.CurrentRow;

ListForm.Open();

Ende des Verfahrens

In diesem Handler erhalten wir das Formular für die Liste der Rechnungen und übergeben den Link zum aktuellen Artikel in der Artikelliste an den Formularparameter FilterByProduct und öffnen das Formular mit diesem Parameter.

Anschließend erstellen wir ein Dokumentenlistenformular Kaufrechnung und erstellen Sie das Formularattribut FilterByProduct, das wir beim Öffnen als Formularparameter verwenden. Öffnen wir nun die Eigenschaftenpalette des Hauptattributs des Listenformulars. Lasst uns die Flagge setzen BenutzerdefinierteAnfrage und in der Reihe Listeneinrichtung Klicken Sie auf Öffnen.

Geben Sie im Feld „Anfrage“ den folgenden Anfragetext ein:

WÄHLEN

Belegeingangsrechnung. Nummer,

Dokumenteingangsrechnung.Datum

AUS

Document.ReceiptInvoice AS DocumentReceiptInvoice

WO

Belegeingang Invoice.Products.Product = &Product

In der Anfrage verwenden wir den Parameter „Artikel“, der einen Link zur aktuellen Zeile in der Artikelliste erhält, die im Formularparameter „FilterBy Item“ der Rechnungsliste enthalten ist. Dazu schreiben wir im OnOpen-Listenformular-Ereignishandler Code, um den Wert des Produktanforderungsparameters festzulegen:

&OnClient

Eröffnungsverfahren (Fehler)

List.Parameters.SetParameterValue("Product", FilterByProduct);

Ende des Verfahrens

Hier List.Options ist eine Liste dynamischer Listenanforderungsparameter für das List-Attribut. Der Wert des Product-Parameters wird auf den Wert des FilterByProduct-Formularparameters gesetzt.

Als Ergebnis auf Knopfdruck Rechnungen erhalten In Form einer Artikelliste erhalten wir nur die Rechnungen aufgelistet, die den aktuell in der Artikelliste ausgewählten Artikel enthalten.

Ein Demobeispiel für die 3. Option befindet sich im Verzeichnis 1CITS/EXE/FAQ/OpenFormWithSelection.dt. Das Beispiel wurde auf der Plattformversion 8.2.9.356 durchgeführt.

Mit diesem Code können Sie eine Liste von Dokumenten mit einer bestimmten Auswahl öffnen; Sie können auch eine Liste von Verzeichniselementen mit der gewünschten Auswahl öffnen

Code 1C v 8.2 UP Form = OpenForm("Document. Invoice.Form.ListForm"); //Formular öffnen
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //Auswahl hinzufügen
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //Wie werden wir vergleichen?
SelectOwner.Use = True; // Aktivieren Sie das Kontrollkästchen für die Verwendung von NewDataCompositionField("Nomenclature")
SelectionOwner.LeftValue = NewDataCompositionField("Account"); //Anhand welcher Angaben treffen wir die Auswahl?
SelectionOwner.RightValue = Object.Account; // Und die eigentliche Bedeutung der Auswahl

Damit Öffnen Sie ein Listenformular mit einer vordefinierten Auswahl Verwenden Sie die folgenden Methoden:

Erster Weg besteht darin, dass Sie beim Öffnen eines Formulars den Parameter Auswahlformular festlegen und das Listenformular mit diesem Parameter öffnen können.

Der Auswahlparameter repräsentiert die Struktur. Die Namen der Elemente entsprechen den Namen der Felder, nach denen die Auswahl erfolgt, und die Werte enthalten die Auswahlwerte. Dies ist eine Option zur Erweiterung dynamischer Listen verwalteter Formulare. Das heißt, es existiert für Formulare, deren Hauptattribut ein Attribut vom Typ DynamicList ist, beispielsweise Listenformulare und Auswahlformulare.

Im folgenden Beispiel wird beispielsweise eine Rechnungsliste mit Auswahl nach dem Feld „Nummer“ geöffnet, das 333 entspricht.

Code 1C v 8.2 UE Selection Value = New Structure("Number", "333");
SelectionParameters = New Structure("Selection", SelectionValue);
OpenForm("Dokument. Empfangsrechnung. Listenformular", Auswahloptionen);

Zweiter Weg

Sie können ein Listenformular ohne Parameter öffnen:

Code 1C v 8.2 UE OpenForm("Document. Receipt Invoice.List Form");

Und dann schreiben Sie im Ereignishandler des Formulars für die Rechnungsliste When CreatedOnServer Code, der eine Auswahl in der dynamischen Liste erstellt, die das Hauptattribut des Formulars ist:

Code 1C v 8.2 UP &OnServer
Vorgehensweise bei CreatedOnServer(Failure, StandardProcessing)
Auswahlelement = List.Selection.Elements.Add(Type("DataComposition Selection Element"));
SelectionElement.LeftValue = NewDataCompositionField("Number");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = True;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
Ende des Verfahrens

Die Vorteile dieser Methode bestehen darin, dass der Vergleichstyp für die Auswahl nicht nur wie im ersten Fall auf Gleich, sondern auch auf Mehr, Weniger usw. eingestellt werden kann.

Allerdings hat diese Methode auch einen ganz wesentlichen Nachteil: Bei dieser Auswahl öffnet sich das Formular immer. Wo auch immer sie angerufen wurde. Daher sollte dieses Formular nicht als Hauptformular bezeichnet werden. Und wenn es dennoch das Hauptformular ist, muss vor der Installation der Auswahl eine Analyse durchgeführt werden, von wo aus dieses Formular geöffnet wird. Zum Beispiel die Analyse von Formularparametern.

Dritter Weg

Schließlich kann die Auswahlbedingung in einer benutzerdefinierten Abfrage platziert werden, die Daten für eine dynamische Liste auswählt.

Beispielsweise müssen wir eine Liste von Rechnungen öffnen, die den in der Artikelliste markierten Artikel enthalten.

Erstellen Sie dazu in Form einer Artikelliste einen Befehl und die entsprechende Schaltfläche Rechnungen erhalten.

Füllen wir den Ausführungshandler für diesen Befehl wie folgt aus:

Code 1C v 8.2 UP &OnClient
Prozedur ReceiptsInvoices (Befehl)
SelectionParameters = New Structure("FilterByProduct", Elements.List.CurrentRow);
OpenForm("Dokument. Empfangsrechnung. Listenformular", Auswahloptionen);
Ende des Verfahrens

In diesem Handler öffnen wir das Formular für die Liste der Rechnungen und übergeben einen Link zum aktuellen Artikel in der Artikelliste an den Formularparameter FilterByProduct.

Anschließend erstellen wir ein Formular für die Liste der Dokumente: Receipt Invoice und erstellen einen FilterBy Product-Formularparameter, mit dem wir ein Formular mit der erforderlichen Auswahl öffnen.

Öffnen wir nun die Eigenschaftenpalette des Hauptattributs des Listenformulars. Setzen Sie das Flag „Benutzerdefinierte Abfrage“ und klicken Sie in der Zeile „Listeneinstellungen“ auf „Öffnen“.

Geben Sie im Feld „Anfrage“ den folgenden Anfragetext ein:

Code 1C v 8.2 UP SELECT
Belegeingangsrechnung. Nummer,
Dokumenteingangsrechnung.Datum
AUS
Document.ReceiptInvoice AS DocumentReceiptInvoice
WO
Belegeingang Invoice.Products.Product = &Product

In der Anfrage verwenden wir den Parameter „Artikel“, der einen Link zur aktuellen Zeile in der Artikelliste erhält, die im Formularparameter „FilterBy Item“ der Rechnungsliste enthalten ist.

Dazu schreiben wir im Listenformular-Ereignishandler „When CreatedOnServer“ Code, um den Wert des Produktanforderungsparameters festzulegen:

Code 1C v 8.2 UP &OnClient
Eröffnungsverfahren (Fehler)
List.Parameters.SetParameterValue("Product", Parameters.FilterByProduct);
Ende des Verfahrens

Hier ist List.Parameters eine Liste dynamischer Listenanforderungsparameter für das List-Attribut. Der Wert des Product-Parameters wird auf den Wert des FilterByProduct-Formularparameters gesetzt.

Als Ergebnis erhalten wir durch Klicken auf die Schaltfläche „Rechnungen erhalten“ im Artikellistenformular eine Liste nur der Rechnungen, die den aktuell in der Artikelliste ausgewählten Artikel enthalten.