Die Mussfelder steuern den Weg des Selects. Je genauer eingerenzt wird, desto schneller der Select. Ihr solltet euch auf einen Beleg einigen, der möglichst genau eingegrenzt werden muss/kann. Idealerweise ergeben die Mussfelder einen Index für den ersten Slecet (bzw. Join). Über diesen Beleg werden dann die abhängingen Belege/Daten gelesen.MarkusW hat geschrieben: nur mal so zur Info...die ganzen Select-options Felder sind zwar da, aber müssen nicht unbedingt zum eingrenzen benutzt werden.
Mussfelder sind (derzeit, das ändert sich solange bis sich der Keyuser mal entscheiden kann) :
Code: Alles auswählen.
FORM select_data .
DATA:
lf_vbfavbeln TYPE vbeln_von,
lf_anzi TYPE i,
lf_anzs TYPE string.
CLEAR: gt_llief, gs_llief.
SELECT a~vbeln a~erdat a~wadat_ist
b~lfimg b~vgbel b~vgpos
INTO TABLE gt_llief
FROM likp AS a INNER JOIN lips AS b
ON a~vbeln = b~vbeln
WHERE a~vbeln IN so_lbeln
AND a~erdat IN so_lerda
AND a~wadat_ist IN so_lwati
AND b~lfimg IN so_lfimg.
LOOP AT gt_llief INTO gs_llief.
CLEAR gs_vbak.
SELECT vbeln erdat kunnr auart vkbur vkorg vtweg
FROM vbak
INTO CORRESPONDING FIELDS OF gs_vbak
WHERE vbeln = gs_llief-vgbel
AND kunnr IN so_kunnr
AND erdat IN so_erdat
AND auart IN so_auart
AND vkbur IN so_vkbur
AND vkorg IN so_vkorg
AND vtweg IN so_vtweg.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CLEAR gs_vbap.
SELECT vbeln posnr matnr arktx kwmeng netwr uepos
FROM vbap
INTO CORRESPONDING FIELDS OF gs_vbap
WHERE vbeln = gs_llief-vgbel
AND posnr = gs_llief-vgpos
AND matnr IN so_matnr
AND uepos IN so_uepos
AND arktx IN so_arktx
AND netwr IN so_netwr
AND kwmeng IN so_kwmen.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CLEAR gs_vbfa.
SELECT SINGLE *
INTO gs_vbfa
FROM vbfa
WHERE vbelv = gs_vbap-vbeln
AND posnv = gs_vbap-posnr
AND vbtyp_n = 'M'.
IF sy-subrc = 0.
lf_vbfavbeln = gs_vbfa-vbeln.
CLEAR gs_vbrk.
SELECT SINGLE vbeln erdat
INTO CORRESPONDING FIELDS OF gs_vbrk
FROM vbrk
WHERE vbeln = lf_vbfavbeln
AND vbeln IN so_rbeln
AND erdat IN so_rerda.
IF sy-subrc EQ 0.
CLEAR gs_vbkd.
SELECT SINGLE bzirk
FROM vbkd
INTO CORRESPONDING FIELDS OF gs_vbkd
WHERE vbeln = gs_vbap-vbeln
AND posnr = gs_vbap-posnr
AND bzirk IN so_bzirk.
gs_all-baauart = gs_vbak-auart.
gs_all-bavbeln = gs_vbak-vbeln.
gs_all-baerdat = gs_vbak-erdat.
gs_all-ipvbeln = gs_llief-vbeln.
gs_all-iperdat = gs_llief-erdat.
gs_all-ipwadat_ist = gs_llief-wadat_ist.
gs_all-brvbeln = gs_vbrk-vbeln.
gs_all-brerdat = gs_vbrk-erdat.
gs_all-bakunnr = gs_vbak-kunnr.
gs_all-bavkbur = gs_vbak-vkbur.
gs_all-bavkorg = gs_vbak-vkorg.
gs_all-bavtweg = gs_vbak-vtweg.
gs_all-bpmatnr = gs_vbap-matnr.
gs_all-bparktx = gs_vbap-arktx.
gs_all-bpkwmeng = gs_vbap-kwmeng.
gs_all-islfimg = gs_llief-lfimg.
gs_all-bpnetwr = gs_vbap-netwr.
gs_all-bpuepos = gs_vbap-uepos.
gs_all-bdbzirk = gs_vbkd-bzirk.
APPEND gs_all TO gt_all.
CLEAR gs_all.
ELSE.
CONTINUE.
ENDIF.
ELSE.
CONTINUE.
ENDIF.
ENDSELECT.
ENDSELECT.
ENDLOOP.
* Festhalten wieviel korrekte Treffer gefunden wurden
* Ausgabe in der obersten Zeile des Ausgabedynpros (Dynpro 200)
DESCRIBE TABLE gt_all LINES lf_anzi.
lf_anzs = lf_anzi.
CONCATENATE gc_info lf_anzs gc_info2
INTO txt_info
SEPARATED BY space.
ENDFORM. " select_data
Code: Alles auswählen.
JOIN 1
Anzahl gelesener Sätze: 0
Dauer: 1.653.167
FOR ALL ENTRIES
Anzahl gelesener Sätze: 0
Dauer: 2145051033