Wie öffne ich ein Formular eines vorhandenen Objekts? Wie fülle ich programmgesteuert ein neues Dokumentformular aus und öffne es? 1c Öffnen Sie das Formular eines vorhandenen Dokuments.

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 erhalten und es dann in einem normalen oder normalen Format zu öffnen Modaler Modus(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 öffnen müssen freie Form, dann 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) ;
EndProzedur

&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 irgendwelche Parameter.

&OnClient
Prozedur Command1 (Befehl)
OpenForm( „Verzeichnis. Gegenparteien. Objektform“) ;
EndProzedur

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) ;
EndProzedur

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 umfasst 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( „Verzeichnis.GTD-Nummern.Listenformular“, Parameter) ;
EndProzedur

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) ;
EndProzedur

Guten Tag allerseits!
Ich denke, dass die Informationen in diesem Thema für viele Besucher dieses Forums sehr nützlich sein werden.
Lange Zeit konnte ich das Problem nicht lösen: Wie öffnet man das Formular eines neuen Dokuments, damit es nicht leer, sondern bereits teilweise ausgefüllt programmgesteuert geöffnet wird, während das Dokument selbst noch nicht in der Datenbank erfasst ist? Ich habe viel Zeit damit verbracht, im Internet nach einer Lösung für dieses Problem zu suchen, habe viele Foren besucht, in denen dieses Problem angesprochen wurde, aber nur wenige davon sind auf Lösungen gestoßen. Die einfachste davon besteht darin, zunächst programmgesteuert ein neues Dokument zu erstellen, die erforderlichen Details programmgesteuert einzugeben, das Dokument in die Datenbank zu schreiben und es dann für den Benutzer zu öffnen. Was passiert, wenn der Benutzer es nicht speichern möchte? Was ist, wenn er seine Meinung ändert und schließt? offenes Formular? In diesem Fall verbleibt das bereits erfasste Dokument in der Datenbank. Und wer braucht zusätzliche Dokumente in der Datenbank?
Und wenn Sie das Dokument nicht speichern, ist die beliebteste Option die Verwendung der GetForm-Methode („Dokumente. Erforderlicher Dokumenttyp. Dokumentformular“). In diesem Fall können Sie jedoch ein leeres Dokumentformular erhalten und es einfach mit der Open()-Methode anzeigen. Auch das ist keine Option...
Nach einiger Zeit wurde das Problem mithilfe der globalen Kontextfunktion „Eigenschaftswerte eingeben“ gelöst.

Globaler Kontext
FillPropertyValues
Syntax:
Füllen Sie PropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Beschreibung:
Kopiert Eigenschaftswerte<Источника>zu Eigenschaften<Приемника>. Der Abgleich erfolgt anhand der Eigenschaftsnamen.

Am Beispiel meiner Aufgabe möchte ich erläutern, wie Sie mit dieser Funktion ein Formular für ein neues Dokument ausfüllen können. Die Aufgabe war wie folgt: Es gibt ein Dokument (Arbeitsauftrag), dessen tabellarischer Teil ein weiteres Dokument (Erbringung von Dienstleistungen) ist. Daher musste beim Hinzufügen darauf geachtet werden tabellarischer Teil„Arbeitsauftrag“ des neuen Dokuments „Erbringung von Dienstleistungen“, auf dem Bildschirm wurde das Formular des neuen Dokuments „Erbringung von Dienstleistungen“ mit den bereits ausgefüllten Angaben angezeigt, entnommen aus dem Arbeitsauftrag, aus dem die Erstellung aufgerufen wurde. Gleichzeitig ist das neue Dokument selbst zum Zeitpunkt seines Erscheinens auf dem Bildschirm noch nicht in der Datenbank erfasst. Dies musste erfolgen, wenn der Benutzer plötzlich beschließt, das Dokument nicht auszufüllen und das Formular einfach schließt.
Hier ist ein Codefragment mit einer Lösung des Problems:

&Auf der Client-Prozedur EnterRecord()RecordForm = GetForm("Document.Provision of Medical Services.ObjectForm"); Fill inPropertyValues(RecordForm.Object,Object,"Date,Specialist,Specialization,Nurse,Execution Status"); // Geben Sie die Werte von Details ein, deren Namen in beiden Dokumenten gleich sind. TextStr = Elements.Reception.CurrentData; //Daten der aktuellen Zeile des QuelldokumentsProperty Structure = New Structure; // Die Struktur enthält die Werte der Details, die im Formular des neuen Dokuments ausgefüllt werden müssen, aber nicht im Quelldokument enthalten sind. StructureProperties.Insert("Work Order", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); Fill inPropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime"); EntryForm.Open(); EndProzedur

Das heißt, wir führen alle Vorgänge direkt auf dem Client aus, ohne den Server zu kontaktieren, innerhalb einer unabhängig erstellten Prozedur. Tatsächlich können Sie auf diese Weise das Formular eines beliebigen Dokuments oder Nachschlagewerks ausfüllen und öffnen. Zuerst habe ich die Details von einem Formular zum anderen mithilfe von Formularobjekten ausgefüllt, und dann habe ich mithilfe des „Struktur“-Objekts, in das ich die fehlenden Details eingefügt habe, einige weitere Details des zu öffnenden Formulars ausgefüllt und dann das geöffnet bilden.
Ich hoffe, dass dieses Thema vielen, die vor einer ähnlichen Aufgabe stehen, Zeit erspart!

Startseite Für Anfänger-Entwickler Programmieren lernen

Wie öffne ich ein Formular eines vorhandenen Objekts?

Beim Öffnen eines Formulars eines vorhandenen Objekts müssen Sie neben dem Namen des Formulars auch das Objekt angeben, dessen Formular geöffnet werden soll. Hierzu nutzen Sie den Formularparameter Schlüssel und einen Link zu dem für uns interessanten Objekt.

Wenn Sie beispielsweise aus dem Formular „Liste der Organisationen“ das Formular der Organisation öffnen müssen, auf der sich der Cursor befindet, können Sie dies wie folgt tun:

Wir übergeben Formularparameter in Form einer Struktur, wobei der Name des Strukturelements dem Namen des Formularparameters entspricht und der Wert der Wert ist, auf den wir den Formularparameter setzen möchten.

Wenn Sie nicht das Hauptformular, sondern ein beliebiges Formular eines im Konfigurator erstellten Objekts öffnen möchten, geben Sie anstelle des Standardnamens des Hauptformulars (ObjectForm) das Wort Formular gefolgt von einem Punkt an – den Namen des Formulars, das in erstellt wurde Der Konfigurator.

Zum Beispiel:

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

Es ist zu beachten, dass Sie eine einfachere Methode verwenden können, wenn zusätzlich zu einem Link zu einem Objekt keine Parameter an das zu öffnende Formular übergeben werden müssen und das Hauptformular des vorhandenen Objekts benötigt wird - Öffnen Sie das Formular mit dem Verfahren OpenValue():

OpenValue(Items.List.CurrentRow);

Diese Methode ist weniger vielseitig, spart aber in manchen Fällen Zeit und Mühe. Im betrachteten Fall kann beispielsweise eine solche Zeile die gesamte dreizeilige Prozedur ersetzen, die wir zuvor geschrieben haben.

Bei der Anwendung dieses Verfahrens ist jedoch Vorsicht geboten. In einigen Fällen kann es zu zusätzlichen Aufrufen des Servers kommen, beispielsweise wenn Sie ein hierarchisches Verzeichniselementformular öffnen müssen. Bei diesem Verfahren ruft die Plattform zusätzlich den Server auf, um festzustellen, ob es sich bei einem Element um eine Gruppe handelt oder nicht, da für das Element und für die Gruppe unterschiedliche Formulare geöffnet werden müssen.

Gleichzeitig können diese Informationen dem Entwickler innerhalb seines Algorithmus im Voraus bekannt sein, und mit der Funktion OpenForm() kann der Entwickler das gewünschte Formular ohne zusätzliche Aufrufe an den Server öffnen und dabei sofort den Standardnamen des Hauptformulars angeben bilden.

mob_info