Mega-Inner Join
Ein “Inner Join” über mehrere Tabellen, der auch noch Sinn macht: Er liest ein oder mehrere Merkmale aus einer Kundenauftragskonfiguration.
Das folgende Programm liest die Konfiguration eines Kundenauftrags. Obwohl die Variantenkonfiguration mittels der Klassifizierung angelegt und designed wird, werden die Daten in anderen Tabellen gespeichert.
Die Verwendung ist allerdings mit Vorsicht zu geniessen, da evtl. einzelne Werte erst aus anderen Konfigurationsdaten hergeleitet werden und gar nicht abgespeichert werden.
Verwenden Sie gegebenenfalls den Funktionsbaustein VC_I_GET_CONFIGURATION um die komplette Konfiguration einer Auftragsposition zu lesen. INSTANCE ist VBAP-CUOBJ.
Bitte beachten Sie, dass es zwei Coding-Varianten gibt!
Coding 1 – Objektschlüssel
REPORT zzconf01 .
DATA:
l_objkey TYPE ibobjkey,
lv_datts TYPE ib_valfr,
BEGIN OF ls_erg,
atwrt TYPE atwrt,
atflv TYPE atflv,
atnam TYPE atnam,
anzdz TYPE anzdz,
atbez TYPE atbez,
END OF ls_erg,
lt_erg like ls_erg occurs 0.
*** Selektionsbild
PARAMETERS:
p_vbeln TYPE vbeln_va DEFAULT ‘123456’,
p_posnr TYPE posnr DEFAULT ‘000010’.
SELECT-OPTIONS:
s_atnam FOR ls_erg-atnam.
START-OF-SELECTION.
*** Objektschlüssel erzeugen
CONCATENATE p_vbeln p_posnr INTO l_objkey.
*** Tagesdatum in Zeitstempel konvertieren
CONVERT DATE sy-datum
TIME sy-uzeit
INTO TIME STAMP lv_datts TIME ZONE sy-zonlo.
*** Werte lesen
SELECT ibsymbol~atwrt
ibsymbol~atflv
cabn~atnam
cabn~anzdz
cabnt~atbez
FROM ibsymbol
INNER JOIN ibinvalues
ON ibinvalues~symbol_id = ibsymbol~symbol_id
INNER JOIN ibin ON ibin~in_recno = ibinvalues~in_recno
INNER JOIN ibinown ON ibinown~instance = ibin~instance
INNER JOIN cabn ON cabn~atinn = ibsymbol~atinn
INNER JOIN cabnt ON cabnt~atinn = cabn~atinn
INTO TABLE lt_erg
WHERE ibinown~objkey = l_objkey
AND ibinown~inttyp = ‘0001’ “Auftragsposition
and cabn~atnam in s_atnam
AND cabnt~spras = sy-langu
AND ibin~valfr <= lv_datts
AND ibin~valto >= lv_datts.
*** Werte ausgeben
LOOP AT lt_erg into ls_erg.
WRITE: / ls_erg-atbez, ls_erg-atnam.
IF ls_erg-atflv IS INITIAL.
WRITE ls_erg-atwrt.
ELSE.
WRITE ls_erg-atflv EXPONENT 0 DECIMALS ls_erg-anzdz.
ENDIF.
ENDLOOP.
Coding 2 – Instanz über VBAP ermitteln
Selektionsbild und Vorbereitungen wie bei Coding 1.
*** Select des Wertes aus der Konfiguration
*** Werte lesen
SELECT ibsymbol~atwrt “Wert Character
ibsymbol~atflv “Wert numerisch (auch Datum!)
cabn~atnam “Merkmalsname
cabn~anzdz “Anzahl Dezimalstellen
cabnt~atbez “Bezeichnung
FROM ibsymbol
INNER JOIN ibinvalues ON ibinvalues~symbol_id = ibsymbol~symbol_id
INNER JOIN ibin ON ibin~in_recno = ibinvalues~in_recno
INNER JOIN ibinown ON ibinown~instance = ibin~instance
INNER JOIN vbap ON ibinown~instance = vbap~cuobj
INNER JOIN cabn ON cabn~atinn = ibsymbol~atinn
INNER JOIN cabnt ON cabnt~atinn = cabn~atinn
INTO TABLE lt_erg
WHERE vbap~vbeln = p_vbeln
AND vbap~posnr = p_posnr
AND cabn~atnam IN s_atnam
AND cabnt~spras = sy-langu
AND ibin~valfr <= lv_datts
AND ibin~valto >= lv_datts.
IF sy-subrc = 0.
*** Werte ausgeben
SORT lt_erg BY atnam.
LOOP AT lt_erg INTO ls_erg.
WRITE: / ls_erg-atnam,
ls_erg-atwrt,
ls_erg-atflv EXPONENT 0 DECIMALS ls_erg-anzdz NO-ZERO.
ENDLOOP.
ENDIF.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024