Add purchasing ideas tab and SAP table test
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
REPORT ztest_powerbi_ekpo_eket.
|
||||
|
||||
" Kleines Diagnoseprogramm fuer die SAP Einkaufs-OData-Tabellen.
|
||||
" Ziel:
|
||||
" - Pruefen, ob EKKO, EKPO und EKET direkt in SAP Daten liefern.
|
||||
" - Pruefen, ob zu einem EKKO-Beleg passende EKPO/EKET-Zeilen existieren.
|
||||
" - Ausgabe per WRITE, damit sie einfach kopiert werden kann.
|
||||
|
||||
PARAMETERS:
|
||||
p_ebeln TYPE ekko-ebeln,
|
||||
p_bedat TYPE ekko-bedat DEFAULT '20260101',
|
||||
p_max TYPE i DEFAULT 20.
|
||||
|
||||
DATA:
|
||||
lv_ebeln TYPE ekko-ebeln,
|
||||
lv_ekko_count TYPE i,
|
||||
lv_ekpo_count TYPE i,
|
||||
lv_eket_count TYPE i,
|
||||
lt_ekko TYPE STANDARD TABLE OF ekko,
|
||||
lt_ekpo TYPE STANDARD TABLE OF ekpo,
|
||||
lt_eket TYPE STANDARD TABLE OF eket.
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
lv_ebeln = p_ebeln.
|
||||
IF lv_ebeln IS NOT INITIAL.
|
||||
lv_ebeln = |{ lv_ebeln ALPHA = IN }|.
|
||||
ENDIF.
|
||||
|
||||
WRITE: / '=== Einkaufsdaten Test EKKO / EKPO / EKET ==='.
|
||||
WRITE: / 'Input EBELN:', p_ebeln, 'ALPHA:', lv_ebeln.
|
||||
WRITE: / 'Input BEDAT ab:', p_bedat.
|
||||
WRITE: / 'Max Zeilen:', p_max.
|
||||
ULINE.
|
||||
|
||||
" 1) Grundzaehlung ohne Join
|
||||
SELECT COUNT( * )
|
||||
FROM ekko
|
||||
INTO @lv_ekko_count
|
||||
WHERE bedat >= @p_bedat.
|
||||
|
||||
SELECT COUNT( * )
|
||||
FROM ekpo
|
||||
INTO @lv_ekpo_count.
|
||||
|
||||
SELECT COUNT( * )
|
||||
FROM eket
|
||||
INTO @lv_eket_count.
|
||||
|
||||
WRITE: / 'COUNT EKKO ab BEDAT:', lv_ekko_count.
|
||||
WRITE: / 'COUNT EKPO gesamt :', lv_ekpo_count.
|
||||
WRITE: / 'COUNT EKET gesamt :', lv_eket_count.
|
||||
ULINE.
|
||||
|
||||
" 2) Beispiel-EKKO suchen, falls kein Beleg mitgegeben wurde
|
||||
IF lv_ebeln IS INITIAL.
|
||||
SELECT *
|
||||
FROM ekko
|
||||
WHERE bedat >= @p_bedat
|
||||
ORDER BY bedat DESCENDING, ebeln DESCENDING
|
||||
INTO TABLE @lt_ekko
|
||||
UP TO 1 ROWS.
|
||||
|
||||
READ TABLE lt_ekko INDEX 1 INTO DATA(ls_first_ekko).
|
||||
IF sy-subrc = 0.
|
||||
lv_ebeln = ls_first_ekko-ebeln.
|
||||
WRITE: / 'Kein EBELN mitgegeben, verwende ersten EKKO-Beleg:', lv_ebeln.
|
||||
ELSE.
|
||||
WRITE: / 'Kein EKKO-Beleg ab BEDAT gefunden.'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ULINE.
|
||||
WRITE: / '=== Detailtest fuer EBELN ===', lv_ebeln.
|
||||
|
||||
" 3) EKKO Detail
|
||||
CLEAR lt_ekko.
|
||||
SELECT *
|
||||
FROM ekko
|
||||
WHERE ebeln = @lv_ebeln
|
||||
INTO TABLE @lt_ekko
|
||||
UP TO @p_max ROWS.
|
||||
|
||||
WRITE: / 'EKKO Zeilen fuer EBELN:', lines( lt_ekko ).
|
||||
LOOP AT lt_ekko INTO DATA(ls_ekko).
|
||||
WRITE: / 'EKKO',
|
||||
'EBELN=', ls_ekko-ebeln,
|
||||
'BEDAT=', ls_ekko-bedat,
|
||||
'AEDAT=', ls_ekko-aedat,
|
||||
'LIFNR=', ls_ekko-lifnr,
|
||||
'BUKRS=', ls_ekko-bukrs,
|
||||
'BSART=', ls_ekko-bsart.
|
||||
ENDLOOP.
|
||||
|
||||
ULINE.
|
||||
|
||||
" 4) EKPO Detail
|
||||
CLEAR lt_ekpo.
|
||||
SELECT *
|
||||
FROM ekpo
|
||||
WHERE ebeln = @lv_ebeln
|
||||
ORDER BY ebeln, ebelp
|
||||
INTO TABLE @lt_ekpo
|
||||
UP TO @p_max ROWS.
|
||||
|
||||
WRITE: / 'EKPO Zeilen fuer EBELN:', lines( lt_ekpo ).
|
||||
LOOP AT lt_ekpo INTO DATA(ls_ekpo).
|
||||
WRITE: / 'EKPO',
|
||||
'EBELN=', ls_ekpo-ebeln,
|
||||
'EBELP=', ls_ekpo-ebelp,
|
||||
'MATNR=', ls_ekpo-matnr,
|
||||
'MATKL=', ls_ekpo-matkl,
|
||||
'MENGE=', ls_ekpo-menge,
|
||||
'MEINS=', ls_ekpo-meins,
|
||||
'NETWR=', ls_ekpo-netwr,
|
||||
'LOEKZ=', ls_ekpo-loekz.
|
||||
ENDLOOP.
|
||||
|
||||
ULINE.
|
||||
|
||||
" 5) EKET Detail
|
||||
CLEAR lt_eket.
|
||||
SELECT *
|
||||
FROM eket
|
||||
WHERE ebeln = @lv_ebeln
|
||||
ORDER BY ebeln, ebelp, etenr
|
||||
INTO TABLE @lt_eket
|
||||
UP TO @p_max ROWS.
|
||||
|
||||
WRITE: / 'EKET Zeilen fuer EBELN:', lines( lt_eket ).
|
||||
LOOP AT lt_eket INTO DATA(ls_eket).
|
||||
WRITE: / 'EKET',
|
||||
'EBELN=', ls_eket-ebeln,
|
||||
'EBELP=', ls_eket-ebelp,
|
||||
'ETENR=', ls_eket-etenr,
|
||||
'EINDT=', ls_eket-eindt,
|
||||
'MENGE=', ls_eket-menge,
|
||||
'WEMNG=', ls_eket-wemng.
|
||||
ENDLOOP.
|
||||
|
||||
ULINE.
|
||||
|
||||
" 6) Join-Pruefung: existieren EKPO/EKET zu den aktuellen EKKO-Belegen?
|
||||
SELECT COUNT( * )
|
||||
FROM ekko AS h
|
||||
INNER JOIN ekpo AS p
|
||||
ON p~ebeln = h~ebeln
|
||||
INTO @lv_ekpo_count
|
||||
WHERE h~bedat >= @p_bedat.
|
||||
|
||||
SELECT COUNT( * )
|
||||
FROM ekko AS h
|
||||
INNER JOIN eket AS e
|
||||
ON e~ebeln = h~ebeln
|
||||
INTO @lv_eket_count
|
||||
WHERE h~bedat >= @p_bedat.
|
||||
|
||||
WRITE: / 'JOIN EKKO->EKPO ab BEDAT:', lv_ekpo_count.
|
||||
WRITE: / 'JOIN EKKO->EKET ab BEDAT:', lv_eket_count.
|
||||
|
||||
ULINE.
|
||||
WRITE: / 'Interpretation:'.
|
||||
WRITE: / '- Wenn EKPO/EKET gesamt > 0, aber fuer EBELN 0: Beleg hat keine Positionen/Termine oder falscher Beleg.'.
|
||||
WRITE: / '- Wenn JOIN ab BEDAT > 0, dann muss OData EKPO/EKET mit korrektem SELECT auch Daten liefern.'.
|
||||
WRITE: / '- Wenn JOIN ab BEDAT = 0, dann gibt es fuer aktuelle EKKO-Belege keine EKPO/EKET-Zuordnung im getesteten Zeitraum.'.
|
||||
Reference in New Issue
Block a user