Add purchasing ideas tab and SAP table test

This commit is contained in:
2026-06-05 10:45:48 +02:00
parent 989ff66102
commit e7e408fc20
2 changed files with 361 additions and 0 deletions
@@ -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.'.