[Gelöst] Form mit Daten aus zwei Tabellen

8. November 2007 12:33

Ich hab gesucht und gesucht.. und rummprobiert. Aber leider nix passendes gefunden. Vielleicht kann mir einer von euch weiterhelfen.

Ich möchte die Debitorenkarte ein wenig an unsere tägliche Arbeit anpassen. Dazu sollen ein paar Felder angelegt werden die Daten aus der Tabelle Contact anzeigen.
Also bin ich hingegangen habe Variablen für die Felder angelegt und diesen Variablen dann die Felder aus der Contact Tabelle zugewiesen. Damit dann natürlich auch die richtigen Werte angezeigt werden wollte ich gerne einen Filter setzen. Jeder Debitor hat eine Kontaktnummer (KontNr) und diese ist die laufende Nummer aus der Tabelle Contact. Also dachte ich ich setze darauf den Filter. Aber irgendwie klappt das nicht.

Code:
SETRANGE(KontNr,Cont."No.");

Vermittlernummer := Cont."Vermittler Nr.";
Kontaktart := Cont.Kontaktart;
AutomBestellb := Cont."Autom. Bestellbestätigung";
Mobil := Cont."Mobile Phone No.";


Vielleicht hab ich heute auch nur wieder ein Knoten im Hirn und die Lösung ist total einfach. :roll:
Zuletzt geändert von Heike Bennerscheid am 8. November 2007 12:50, insgesamt 1-mal geändert.

8. November 2007 12:38

Hallo Heike,

du setzt zwar einen Filter, holst dir aber nie einen Datensatz. (Der Filter ist glaube ich auch falsch gesetzt. Ich würde es so machen:

Code:
IF Cont.GET(KontNr) THEN BEGIN
  Vermittlernummer := Cont."Vermittler Nr.";
  Kontaktart := Cont.Kontaktart;
  AutomBestellb := Cont."Autom. Bestellbestätigung";
  Mobil := Cont."Mobile Phone No.";
END ELSE BEGIN
  Vermittlernummer := '';
  Kontaktart := '';
  AutomBestellb := '';
  Mobil := '';
END;

Gruß, Marc

8. November 2007 12:44

Nur so als Vorschlag, weil ich diese Schreibweise für eleganter und weniger aufwändig halte (wird im Standard auch so verwendet):

Code:
IF NOT Cont.GET(KontNr) THEN
  CLEAR(Cont);
Vermittlernummer := Cont."Vermittler Nr.";
Kontaktart := Cont.Kontaktart;
AutomBestellb := Cont."Autom. Bestellbestätigung";
Mobil := Cont."Mobile Phone No.";

8. November 2007 12:49

Danke ihr beiden. Ich hatte das mit GET schon probiert aber ich mach es immer wieder falsch *seufz* Ich schreib mir das jetzt mal auf. Vielleicht bleibts dann besser in meinem Hirn sitzen.

8. November 2007 12:52

Versuche dir zu merken, dass nur mit den Befehlen GET und FIND in der Datenbank gelesen wird.
SETRANGE und SETFILTER schränken den Zugriff ein, führen ihn aber nicht aus.

8. November 2007 12:52

Das ist gut. Schreib ich mir gleich mit dazu. Danke Natalie

13. November 2007 12:22

Das ist mir ja schon fast peinlich zu fragen aber:

Gibt es eine Standard Form die mit 2 Tabellen als Grundlage arbeitet an der ich mich mal orientieren kann? :oops:

Ich arbeite ja gerade daran die Debitoren Karte so zu ändern das da auch Felder von der Contact Tabelle angezeigt werden. Nur leider komm ich gerade nicht weiter und habe die Hoffnung das es irgendwo ein Beispiel gibt das ich mir mal anschauen kann. Würde mich über jede Info freuen.

13. November 2007 13:13

Heike Bennerscheid hat geschrieben:Das ist mir ja schon fast peinlich zu fragen aber:

Gibt es eine Standard Form die mit 2 Tabellen als Grundlage arbeitet an der ich mich mal orientieren kann? :oops:


Ja, zum Beispiel Aufträge:
Oben T36 Sales Header
Unten T37 Sales Line

Dieser Aufbau mit Main- und Subforom setzt aber voraus, dass die Datensätze in der Subform eine direkte Verlinkung zum Main-Datensatz enthalten (hier ist es die Belegart und die Nr.).

13. November 2007 13:19

Ich meinte jetzt nicht mit Main- und Subform sondern nur mit einzelnen Feldern. Da ich ja nur einzelnde Felder auf der Form eingefügt habe. Oder wird das im Standard so nicht verwendet?

13. November 2007 14:07

Heike Bennerscheid hat geschrieben:Ich meinte jetzt nicht mit Main- und Subform sondern nur mit einzelnen Feldern. Da ich ja nur einzelnde Felder auf der Form eingefügt habe. Oder wird das im Standard so nicht verwendet?

Ich kann zumindest kein Beispiel aus dem Ärmel schütteln... Allzu oft wird das also nicht vorkommen.
Entweder die Forms basieren auf der Main-/Subformarchitektur oder aber die "weiteren Felder" sind nichts anderes als FlowFields der betroffenen Tabelle.
Zuletzt geändert von Natalie am 13. November 2007 14:11, insgesamt 1-mal geändert.

13. November 2007 14:09

Achso. Schade. Dann muss ich wohl weiter probieren bis ich die Lösung selber gefunden habe. Trotzdem danke für deine Mühen.

13. November 2007 16:20

Du brauchst einzelne Felder aus den Kontakten?
Nur aus dem Firmenkontakt, also der der fett gedruckt in der Übersicht erscheint?
Wenn ja, kannst du im OnAfterGetCurrentRecord den entsprechenden Record in der Recordvariablen Contact ausfiltern (Du musst dazu über die Tabelle Geschäftsbeziehungen gehen) und dann in der SourceExpression des entsprechenden Feldes das Feld der Recordvariablen eintragen. Z.B. für das Feld mit der Mobilfunknr. trägst du dann ein Contact."Mobile Phone No."

14. November 2007 10:15

Michael Schumacher hat geschrieben:Du brauchst einzelne Felder aus den Kontakten?


Ja. 3 Davon wurden von uns selbst angelegt. Kontaktart, Vermittlernummer und Automatische Bestellbestätigung. Und ein Feld ist Standard in der Tablle, Mobile Phone No.

Michael Schumacher hat geschrieben:Nur aus dem Firmenkontakt, also der der fett gedruckt in der Übersicht erscheint?


Ehrlich gesagt weiß ich grad nicht was du damit meinst. :oops:

Michael Schumacher hat geschrieben:Wenn ja, kannst du im OnAfterGetCurrentRecord den entsprechenden Record in der Recordvariablen Contact ausfiltern (Du musst dazu über die Tabelle Geschäftsbeziehungen gehen) und dann in der SourceExpression des entsprechenden Feldes das Feld der Recordvariablen eintragen. Z.B. für das Feld mit der Mobilfunknr. trägst du dann ein Contact."Mobile Phone No."


Also brauche ich einmal eine Recordvariable für die Tabelle Contact, und einmal für die Tabelle Business Relation, hab ich das richtig verstanden?

Wenn ich die Felder dann änder, werden die dann auch in der Tabelle gespeichert? Weil das ist zur Zeit eigentlich mein Problem das wenn ich die Änder, die Daten nicht in der Tabelle gespeichert werden. Angezeigt werden die Felder zur Zeit. (Siehe Code von Natalie weiter oben).

14. November 2007 12:48

du willst diese Felder auf der Debitorenkarte bearbeiten und dann in der Kontaktkarte automatisch mitändern?
geht auch, du musst nur im OnAfterValidate-Trigger dieser Felder den Befehl Contact.modify(true) eintragen, dann werden die Änderungen in diesen Feldern auch in die Tabelle Contact zurückgeschrieben.
Was bei Natalie noch fehlte, war der Hinweis, dass du den Kontakt, wenn er nicht als Nummer in dem Feld primärer Kontakt drinsteht, erst mal über die Tabelle Geschäftsbeziehung ermitteln musst.

mit dem Firmenkontakt meine ich den Kontakt, der automatisch erstellt wird, wenn du einen neuen Debitor anlegst. Standardmäßig ist das Feld Primärer Kontakt zwar leer, aber trotzdem gibt es diesen Kontakt.

Da du ja mehrere Kontakte zu jedem Debitor anlegen kannst, musst du nun irgendwie festlegen, aus welchem diese zusätzlichen Felder kommen.
Wenn es immer dieser automatisch erzeugte sein soll, dann geht das am besten über die Tabelle Geschäftsbeziehung.
Wenn Du aber immer das Feld primäre Kontaktnr. ausgefüllt hast und aus diesem Kontakt die Felder holen willst, brauchst du die Geschäftsbeziehung nicht, dann kannst du gleich Contact.Get("Primary Contact No.") sagen.

14. November 2007 12:56

Michael Schumacher hat geschrieben:Wenn Du aber immer das Feld primäre Kontaktnr. ausgefüllt hast und aus diesem Kontakt die Felder holen willst, brauchst du die Geschäftsbeziehung nicht, dann kannst du gleich Contact.Get("Primary Contact No.") sagen.

... oder doch auf die Main-/Subformlösung zugreifen.

14. November 2007 13:07

Natalie hat geschrieben:... oder doch auf die Main-/Subformlösung zugreifen.

Ja, die Subform muss ja nicht unten und nicht eine Table sein, kann ja auch wie ein Frame in das Tabcontrol eingegebaut werden, hab ich auch schon öfter gemacht....

14. November 2007 13:14

Danke ihr beiden. Ich lass mir das alles nochmal durch den Kopf gehen.

14. November 2007 14:46

Gibt es eine Möglichkeit den Hintergrund der Subform anzupassen? Weil jetzt sieht man ja schon ziemlich deutlich das da eine Subform ist. Das möchte ich aber nicht.

Nachtrag:

Hat sich erledigt. Hab die Trickkiste mit den Farben von Marc gefunden. Diese Info plus Adobe Photoshop und einem Screenshot hat mir schon geholfen :wink: