Übergabe von Werten in Subform

6. November 2006 14:28

Hallo Leute!

Hab ein Problem mit einer Aufgabe meines Arbeitgebers, für euch wird das wahrscheinlich ein Leichtes sein, mir dabei zu helfen :oops:

Also ich habe eine Form und eine Subform. In der Form gibt es 2 Felder aus einer Tabelle, deren Wert, sofern man denn einen einträgt, in den selben Feldern der Subform erscheinen soll (es handelt sich um 2 Tabellen, Kopf und Zeile, welche beide die besagten 2 Felder enthalten). Habe es schon in den Properties unter SubFormLink probiert und da die beiden Felder angegeben aus Form und Subform, aber so recht will das noch nicht laufen :-(

Danke im Vorraus
JDA88

6. November 2006 14:36

Es gibt keine Properties, die ein Übertragen von Werten aus einer Form auf die Subform übernehmen. Die Ausnahme bilden da die Felder, die im SubFormLink eingetragen sind und welche die Verbindung der Tabellen Form/SubForm definieren. In der Regel sind das Felder im Primärschlüssel der SubForm-Tabelle.

Wenn du andere Felder auf die Records im SubForm schreiben willst, sobald sich das entsprechende Feld im Form ändert, musst du das programmieren (z.B. auf dem OnValidate-Trigger des betroffenen Form-Feldes. Der Code gehört aber auf die Tabelle, nicht aufs Form)

Beispiel:
Code:
SubFormRec.SETRANGE(Feld, FormRec.Feld);

IF SubFormRec.FIND('-') THEN REPEAT
   SubFormRec.Feld := irgendwas;
   SubFormRec.MODIFY;
UNTIL SubFormRec.NEXT = 0;

6. November 2006 15:45

Also verstehe ich das richtig? Der Code kommt in das Feld der Table die in der (Haupt-)Form dargestellt wird?

6. November 2006 16:01

Ja, du musst den Code auf dem Feld hinterlegen, das geändert wird durch den Benutzer und welches dann auf die Records im SubForm geschrieben werden soll.

6. November 2006 16:31

Funktioniert noch nicht so ganz, so sieht der Quelltext zur Zeit aus:


gRecKundendienstzeile.SETRANGE("Feld", gRecKundendienstkopf."Feld");
IF gRecKundendienstzeile.FIND('-') THEN REPEAT
gRecKundendienstzeile."Feld" := gRecKundendienstkopf."Feld";
gRecKundendienstzeile.MODIFY;
UNTIL gRecKundendienstzeile.NEXT = 0;


Soweit richtig? Er zeigt in den Feldern der Subform aber nichts an!

6. November 2006 16:36

JDA88 hat geschrieben:Soweit richtig? Er zeigt in den Feldern der Subform aber nichts an!


Ja, soweit richtig.

Was ist, wenn du auf der Hauptform blätterst? Siehts du dann die Werte? Und wenn die die Tabelle mit den Zeilen im ObjectDesigner anschaust, sind die Records gefüllt?

7. November 2006 05:39

DIe Abgrenzung der Zeile ist nicht ganz richtig.
so ist es besser:

Angenommen, der Kundendienstkopf hat nur "Nr." als Primärschlüssel und die KundendienstZeile die Felder "Nr." und "Zeilennr." dann:

Code:
gRecKundendienstzeile.SETRANGE("Nr.", gRecKundendienstkopf."Nr.");
IF gRecKundendienstzeile.FIND('-') THEN REPEAT
gRecKundendienstzeile."Feld" := gRecKundendienstkopf."Feld";
gRecKundendienstzeile.MODIFY;
UNTIL gRecKundendienstzeile.NEXT = 0;

Wenn es mehrere Schlüsselfelder gibt, musst du den Setrange für alle Zeilenfelder machen, die im Kopf als Primär-Schlüssel definiert sind wie z.B. bei Salesheader und Salesline (Verkaufskopf und Verkaufszeile)
dort musst du z.B.
zeile.setrange(dokumenttyp,kopf.dokumenttyp);
zeile.setrange("dokumentennr.",kopf."nr.");
verwenden.