[gelöst] C/AL Programmierung

30. Januar 2008 08:57

Hallo,

ich stehe immer wieder vor dem Problem, wenn ich in einerm Report auf eine weitere Tabelle zurück greifen muss, das ich den Befehlszeilenaufbau mir nicht erklären kann und auf neue Codes anwenden kann. Den Code habe ich mir aus bestehenden Codes abgeschaut und umgesetzt. Klappt leider nicht immer
Beispiel:
Code:
IF "Shipping Agent Code" = '' THEN
  Zusteller.INIT
ELSE BEGIN
  Zusteller.GET("Shipping Agent Code");

:hier ´greife ich auf Tabelle 291 zu. Erst nach den Befehlzeilen kann ich auf Daten im Report zu greifen und sie andrucken

das probiere ich nun auf die Tabellen Debitor oder Kontakt um an die Faxnummer zu gelangen.
aber weder "Customer Code" noch "Customer No." führen zum Erfolg.

gibt es da ein Tutorial oder einen anderen weg eine Variable mit einer Information einer anderen Tabelle zu füllen?.

mfg Harrison

[Edit TL: C/AL-Code in [code]-Tags gepackt.]
Zuletzt geändert von Harrison am 5. Februar 2008 13:16, insgesamt 1-mal geändert.

Re: CA/L Programmierung

30. Januar 2008 09:22

Harrison hat geschrieben:das probiere ich nun auf die Tabellen Debitor oder Kontakt um an die Faxnummer zu gelangen.
aber weder "Customer Code" noch "Customer No." führen zum Erfolg.


In welchem Report bzw. welchem DataItem befindest du dich, wenn du gerade die Faxnummer (wessen nun? Die des Debitors oder eines Kontaktes?) brauchst?

30. Januar 2008 10:36

Hallo Natalie

ich arbeite momentan im Report 205 Auftragsbestätigung und würde diesen gerne faxen. Generell ist die Faxnummer beim Kunden hinterlegt. Da wir mit dem Marketingmodul arbeiten haben wir einige Kontakte zu einem Unternehmen. In den meisten Fällen ist die Faxnummer der Kontakte identisch mit der Nummer aus dem Kundenstamm. Nur wenige haben ihre eigene Faxnummer (Bildschirmfax oder ähnlich). Ich denke aber es wird immer mehr. Also würde ich gern auf den Kontakt zu greifen wenn es die selben umstände macht und diese Nummer nehmen.

Tabelle 18 Customer oder Tabelle 5050 Contact

mfg Harrison

30. Januar 2008 10:41

Somit befindest du dich wahrscheinlich im DataItem SalesHeader.
Dort musst du dich zuerst entscheiden, an welchen Debitoren ("Verk. an" oder "Rech. an") der Beleg gefaxt werden soll.
(Vermutlich an den "Verk. an")
In diesem Fall steht die Debitornr. im Feld "Sell-to Customer No." und die Kontaktnr. im Feld "Sell-to Contact No.".

1. Februar 2008 14:32

Hallo,

muss nun mal wieder an dieser Baustelle weiter arbeiten.

Ich würde mich für die "Sell-to Contact No." entscheiden .
Ist der Ansatz richtig das ich nun eine globale Variable anlege
z.B. contactinfo als Record auf die Tabelle 5050 Contact


Code:
IF "Contact Code" = '' THEN
  Contactinfo.INIT
ELSE
  Contactinfo.GET("Contact Code");


oder gibt es eine andere Möglichkeit die entsprechende Zeile aus der Tabelle zu filtern ?

mfg Harrison
Zuletzt geändert von Harrison am 5. Februar 2008 13:45, insgesamt 1-mal geändert.

1. Februar 2008 21:30

Wenn du die Kontaktnr. hast, dann ist dein Weg grundsätzlich der beste.

Ich hätte den Code jedoch anders strukturiert.

1. Variante (am kürzesten):
Code:
IF NOT Contactinfo.GET("Sell-to Contact No.") THEN
  CLEAR(Contactinfo);


2. Variante (mit tendenziell weniger Datenbankabfragen):
Code:
CLEAR(ContactInfo);
IF "Contact Code" <> '' THEN
  IF ContactInfo.GET("Sell-to Contact No.") THEN;


CLEAR hat ggü. dem INIT (u.a.) den Vorteil, dass auch die Primärschlüsselfelder geleert werden.

5. Februar 2008 13:15

Hallo,

Danke Natalie.
Ich denke ich habe nun auch beim probieren verstanden wie sich der Code zusammen setzt. Habe den Code etwas ändern müssen und anpassen und nun klappt es.


Code:
CLEAR(ContactInfo);
IF ContactInfo."No." = '' THEN
  ContactInfo.GET("Sales Header"."Sell-to Contact No.");


mfg Harrison
Zuletzt geändert von Harrison am 5. Februar 2008 13:44, insgesamt 1-mal geändert.

5. Februar 2008 13:27

Prima :-)
Dann noch ein kleiner Hinweis:
Bitte verwende bei Codestücken den sog. "Code-Tag". Dieser formatiert den Quelltext entsprechend (siehe meine Beiträge).
Schreib hierfür einfach vor deinen Code ein [code] und danach ein [/code],

also
[Code]Dein Code[/code]

Danke!