[Gelöst] Record Variable übergibt den Wert nicht

17. Februar 2006 12:17

Da bin ich schon wieder :wink:

Nun habe ich ein anderes Problem in einer Funktion. Für einen Report habe ich eine Funktion geschrieben, die zuvor zwei Personenkreise identifizieren soll und anschließend zwei Textvariablen mit Werten aus einer Recordvariable füllen sollte:

email Vor bzw. Schatz (Textvariable)
Name Vor bzw. Schatz (Textvariable)

Contact_Rec (Subtype: Contact)
MailingGroup_Rec (Subtype: Contact Mailing Group)

Hier ein paar Zeilen vom Code:


Gliederung.GET(GliederungsNr);
GLSetup.GET;
//RESET;
Gliederung.SETCURRENTKEY(Gliederung."Structure No.");
MailingGroup_Rec.SETCURRENTKEY(MailingGroup_Rec."Customer Type",MailingGroup_Rec."Mailing Group Code");

//FILTERGROUP(50000);

MailingGroup_Rec.SETRANGE(MailingGroup_Rec."Customer Type",MailingGroup_Rec."Customer Type"::Member);
CASE Gliederung."Organization Type" OF
Gliederung."Organization Type"::State:
BEGIN

GLSetup.TESTFIELD("Schatz Verteiler Cod");
GLSetup.TESTFIELD("Vor Verteiler Code");

MailingGroup_Rec.SETFILTER("Structure No.",COPYSTR(GliederungsNr,1,2) + '??????');
MailingGroup_Rec.SETFILTER("Mailing Group Code",'%1', GLSetup."Schatz Verteiler Cod");

MailingGroup_Rec.GET(MailingGroup_Rec."Contact No.");
"email Schatz" := MailingGroup_Rec."Contact E-Mail";
"Name Schatz" := MailingGroup_Rec."Contact Name";

MailingGroup_Rec.SETFILTER("Mailing Group Code",'%2', GLSetup."Schatz Verteiler Cod");

"email Vors" := MailingGroup_Rec."Contact E-Mail";
"Name Vors" := MailingGroup_Rec."Contact Name";

END;

Zum Testen habe ich den Textvariablen Testwerte manuell zugewiesen. Die Ausgabe hat funktioniert. Aber irgendwie funktioniert die Zuweisung der Inhalte aus den Recordvariablen nicht. Ich habe wieder folgende Fehlermeldung:

"The Contact Mailing Group does not exist. Identifiacation fields ans values: Contac No. =''; Contact Mailing Group =''.

Re: Record Variable übergibt den Wert nicht

17. Februar 2006 14:05

Hi,

schalt doch mal den Debugger ein (Breakpoint on Triggers bitte ausschalten). Dann siehst du genau in welche Zeile er abbricht. Oder weißt du, wo das genau passiert?

Gruß, Marc

17. Februar 2006 15:44

Hi Marc,

wir haben jetzt den Fehler gefunden. Das Feld "Contact E-Mail" der Tabelle Mailing Group ist ein FlowField und wird aus der Tabelle "Contact" eingelesen. Komischerweise ist das Feld "Contact E-Mail" aber leer, wenn es im Code aufgerufen wird. Startet man die Tabelle, ist es befüllt. Muss ich diese FlowField mit einer Codezeile initialisieren? Als Zwischenlösung haben wir jetzt direkt auf die Tabelle "Contact" verwiesen und die Variablen somit befüllt. Vielleicht kannst Du oder evtl. sonst jemand diese Frage beantworten.

Gruß

Markus

17. Februar 2006 16:39

Hi,

wie wär's mit
Code:
MailingGroup_Rec.CALCFIELDS("Contact E-Mail");
"email Vors" := MailingGroup_Rec."Contact E-Mail";


br
Josef Metz

2. März 2006 12:26

Ja, genau das war das Problem. Hatte total vergessen, dass ich bei einem Flowfield die Berechnung zuvor mit Calcfields anschmeißen muss. Danke!

2. März 2006 13:52

Hallo,

ich habe ein ähnliches Problem, nur ist das entsprechende Feld bei mir leider kein Flowfield.

Ich möchte aus der Tabelle 13 Salesperson/Purchaser einen Wert übergeben.
Ich ziehe aus einem Lieferscheinkopf den Mitarbeitercode 0815, welchen ich nun als Namen ausgeben lassen möchte in einem Report.

Aufbau der Tabelle:

Code Name
0815 Hans Meier

Leider bekomme ich die Übergabe nicht hin, da es kein Flowfield ist.


Hat jemand eine Idee!?


Vielen Dank!

Mfg. André

2. März 2006 15:48

Hallo Andre,

ich hoffe, ich habe deine Frage richtig verstanden.

Leg eine Variable (Name=Person, DataType=Record, Subtype=Salesperson/Purchaser) an. Mit dieser Variable kannst du dann über den GET-Befehl den entsprechenden Datensatz aus der Tabelle 13 holen. Anschließend bekommst du über "Person.Name" den Namen des Mitarbeiters.

Gruß, Marc

2. März 2006 15:58

schau dazu doch einfach mal in den Lieferschein im Cronus, da wird im OnAfterGetRecord des salesheaders folgendes gemacht.

Code:
IF "Salesperson Code" = '' THEN BEGIN
  SalesPurchPerson.INIT;
  SalesPersonText := '';
END ELSE BEGIN
  SalesPurchPerson.GET("Salesperson Code");
  SalesPersonText := Text000;
END;

in Text000 steht dann mehrsprachig der Begriff Sachbearbeiter oder Verkäufer oder was auch immer du da als Label dranhängen willst.
on der Section sind dann nur 2 Textfelder, eins hat die Datenquelle SalesPersonText und das andere SalesPurchPerson.Name.

Fertig ist die Laube ;-)

2. März 2006 16:03

Hallo Marc,

vielen Dank- manchmal sieht man den Wald vor lauter Bäumen nicht mehr ;-)

Das war die richtige Lösung!


Mfg. André


edit: @ Michael, das ginge natürlich genausogut :-)

endlich habe ich meine report so wie er sein sollte!