167 lines
4.4 KiB
ABAP
167 lines
4.4 KiB
ABAP
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.'.
|