[Gelöst] Anrede Function: GetContactSalutation

19. Juli 2010 18:23

Hallo!

Ich referenziere auf den Beitrag: viewtopic.php?f=40&t=9268&p=51598&hilit=form+report

Der Code war zwar gut angedacht, aber das Ziel ist komplexer, Anrede auf einem Auftragsbeleg andrucken:
zusätzlich Record auf 5050, 5069

Code:
// Anrede Formatieren
Message("Sales Header"."Sell-to Contact No.");
IF Kontakt.GET ("Sales Header"."Sell-to Contact No.") THEN BEGIN
  IF Anrede.GET(Kontakt."Salutation Code", "Sales Header"."Language Code",
  Anrede."Salutation Type"::Formal) THEN BEGIN
  Message('%1', Anrede.Salutation);
  AnredeText := Anrede.GetContactSalutation;
  END;


Melden tut der folgendes:
1. Message: K4072 - hat den Kontakt.
2. Message: Herr %1 %2 %3, - hat also auch die Formel.
3. Error: Kontakt Nr. '' existiert nicht.

Er schmiert bei GetContactSalutation ab, obwohl er alles hat.

Ich würde gerne die Funktion nutzen, weil man bei den vielen Andredeformeln ja nie die Zahl der Platzhalter effektiv kennt und somit so eine Funktion sicher gut begründet ist.

Warum auch immer, GetContactSalutation hat keinen Parameter und die Function krieg ich nur auf der Tabelle "Salutation Code", ein Record auf "Salutation" bietet die nicht.
Zuletzt geändert von tortelinski am 19. Juli 2010 18:52, insgesamt 1-mal geändert.

Re: Anrede Function: GetContactSalutation

19. Juli 2010 18:40

Die Standardfunktion arbeitet anders, als du es dir vorstellst

Hier die ganze Funktion
GetContactSalutation() : Text[260]
Code:
Cont.GET(GETFILTER("Contact No. Filter"));
EXIT(Cont.GetSalutation("Salutation Type","Language Code"));


Wenn vom Standard diese Funktion aufgerufen wird, so ist auf diese Tabelle 5069 der FlowFilter "Contact No. Filter" belegt. Aus diesem wird wiederum der Kontakt ausgelesen (warum auch immer, ich kannte diese Funktion bis dato nicht einmal).
In deinem Fall ist der FlowFilter nicht belegt, und das führt zum Laufzeitfehler.
Aber in der Funktion selbst wird etwas aufgerufen, das du sehr wohl nutzen kannst, hier ein Vorschlag für deinen bisherigen Quelltext:

Code:
IF Kontakt.GET ("Sales Header"."Sell-to Contact No.") THEN BEGIN
  AnredeText := Kontakt.GetSalutation(Kontakt."Salutation Code", "Sales Header"."Language Code");
END;

(ungetestet, nur aus deinem und dem Standardquelltext hergeleitet)

Re: Anrede Function: GetContactSalutation

19. Juli 2010 18:52

Ja ist eleganter, dann brauch ich nicht mal einen Record auf 5069.

Ich hab keine Designer Lizenz, ich lese immer die Function-Names und denk mir es, wie es sein kann und am Ende ist es nicht so.

Re: [Gelöst] Anrede Function: GetContactSalutation

19. Juli 2010 19:03

Doch halt, 5069 ist mit im Spiel, erster Parameter ist ein Type und kein Code, und am Ende sollte man den kontaktfreien Debitor noch berücksichtigen:

Code:
// Anrede Formatieren
IF Kontakt.GET ("Sales Header"."Sell-to Contact No.") THEN BEGIN
AnredeText := Kontakt.GetSalutation(Anrede."Salutation Type"::Formal, "Sales Header"."Language Code");
END
ELSE BEGIN
Anrede.GET('MANDANT', "Sales Header"."Language Code", Anrede."Salutation Type"::Formal);
AnredeText := Kontakt.GetSalutation(Anrede."Salutation Type"::Formal, "Sales Header"."Language Code");
END;

Re: [Gelöst] Anrede Function: GetContactSalutation

19. Juli 2010 19:09

tortelinski hat geschrieben:Doch halt, 5069 ist mit im Spiel, erster Parameter ist ein Type und kein Code

Ups sorry, hatte ich echt übersehen.

, und am Ende sollte man den kontaktfreien Debitor noch berücksichtigen:

Code:
...
ELSE BEGIN
Anrede.GET('MANDANT', "Sales Header"."Language Code", Anrede."Salutation Type"::Formal);
AnredeText := Kontakt.GetSalutation(Anrede."Salutation Type"::Formal, "Sales Header"."Language Code");
END;

Du holst (GET) hier aber keinen Kontakt, nur die Andrede?

Re: [Gelöst] Anrede Function: GetContactSalutation

19. Juli 2010 19:28

Ja nur die Anrede vom Mandanten, die überall "Sehr geehrte Damen und Herren..." etc... in der Regel ist, weil der kontaktfreie Debitor, den es hier oder da als Karteileiche geben kann, nicht spezifiziert werden kann.