PDA

View Full Version : Feldgruppe durchsuchen FREE



Mr.iSeries
13-03-09, 10:37
Hallo!

Habe folgende Feldgruppe mit DS definiert:
D fgr_doppelt DS DIM(150) qualified
D fg_vvtrnr 4A DIM(150)
D fg_vkw 2 0 DIM(150)
D fg_matnr 4A DIM(150)
D fg_packgr 2A DIM(150)

Bei der Umwandlung bekomm ich den Fehler:
4 Der Name oder die Bezugszahl/der Anzeiger ist nicht definiert.

Aber es ist doch alles definiert:

*RNF7030 FG_MATNR **UNDEF**
*RNF7030 FG_PACKGR **UNDEF**
*RNF7030 FG_VKW **UNDEF**
*RNF7030 FG_VVTRNR **UNDEF**
*RNF7031 FGR_DOPPELT(150) DS(1800)
*RNF7031 FG_MATNR(150) A(4)
*RNF7031 FG_PACKGR(150) A(2)
*RNF7031 FG_VKW(150) S(2,0)
*RNF7031 FG_VVTRNR(150) A4)

Möchte diese Feldgruppe dann mit %lookup auf MATNR = FG_MATNR überprüfen ob der Wert enthalten ist. Wie mache ich das mit %lookup bzw. was bedeuten die Parameter von %lookup?

Was bedeutet eigentlich qualified bei der DS?

Vielen Dank.

B.Hauser
13-03-09, 11:23
... also entweder hast Du bei den Feldgruppen FG_MATNR,FG_PACKGR, FG_VKW, FG_VVTRNR ein S für Stand Alone vergessen, oder Du hast keine Feldgruppe sondern eine Array-Datenstruktur, d.h. Du hast 150 Datenstrukturen und in jedem Datenstruktur-Satz hast Du wiederum x Feldgruppen mit jeweils 150 Elementen.

Qualified bedeutet, dass der Datenstruktur-Name immer vor dem Datenstruktur-Unterfeld angegeben werden muss. Datenstruktur und Unterfeld müssen durch einen Punkt getrennt werden.

Wenn Du also eins von Deinen Datenstruktur-Unterfeldern ansprechen willst ist die Syntax:


/Free
Fgr_Doppelt(1).FgMatNr(3) = 'ABC';
/End-Free

Ein %LookUp ist bei Array-Datenstrukturen nur begrenzt möglich.

Birgitta

prsbrc
11-05-09, 10:46
Schönen Vormittag,

ich habe hier ein "qualified DS" - Array und in diesem speichere ich mir dirty die Bediener ab welche ich bereits im RPGLE verarbeitet habe...

Und mittels diesem Array möchte ich schauen ob ich einen Bediener bereits bearbeitet habe...

Ich habs mit %lookup versucht aber irgendwie bekomme ich egal was ich versuche immer die selben Compilierungsfehler:


*RNF0571 20 1 Der zweite Parameter für %LOOKUPxx ist ungültig.
*RNF5343 30 1 Feldgruppe hat zu viele übergangene Indizes; die Bestimmung ...
Das spektakuläre Array schaut so aus:


d r_bediener ds qualified dim(999)
d bediener 1a
d uhrzeit t
hat jemand evntl ein Beispiel wo ich das abkupfern könnte? :D

Vielen Dank im Voraus!

Lg
Christian

B.Hauser
11-05-09, 11:43
Wenn Du %LookUp oder SortA verwenden willst, muss die Datenstruktur anders definiert werden:



D MyDS DS Qualified
D r_Bediener Dim(999)
D Bediener 10A Overlay(r_Bediener)
D Uhrzeit T Overlay(r_Bediener: *Next)
/Free
If %LookUp(NxtBediener: MyDS.Bediener) > *Zeros;
MyPos = %LookUp(NxtBediener: MyDS.Bediener);
If MyPos > *Zeros;
MyDS.Bediener(MyPos) = NxtBediener;
MyDS.UhrZeit(MyPos) = %Time();
EndIf;


Birgitta

prsbrc
11-05-09, 11:48
Vielen, vielen herzlichen dank!
Werd mein Array gleich so anpassen.

Lg
Christian