DEFINE MAKRO_PUFFERVAR.
DATA: GT_PUFFER_&1 LIKE &1 OCCURS 1, "Puffer f黵 Lese-Zugriffe
GT_FAILED_&1 LIKE &1 OCCURS 1. "Puffer f黵 fehlgeschlagenen ...
END-OF-DEFINITION.
DEFINE MAKRO_DBTAB_LESEN0.
TABLES &1.
DATA: f_lines TYPE i.
DESCRIBE table GT_PUFFER_&1 LINES f_lines.
if ( f_lines > 1000 ).
CLEAR GT_PUFFER_&1.
REFRESH GT_PUFFER_&1.
ENDIF.
IF ( I_BUFFER_ON = SPACE ).
* ungepufferter Zugriff
SELECT SINGLE * FROM &1
INTO E_&1.
IF ( SY-SUBRC <> 0 ).
MESSAGE E100 WITH '&1' '' '' ''
RAISING ENTRY_NOT_FOUND.
ENDIF.
ELSE.
* Eintrag im (sortierten!) Puffer suchen
READ TABLE GT_PUFFER_&1
INTO E_&1
INDEX 1.
IF ( SY-SUBRC = 0 ). "Eintrag im Puffer -> fertig
.
ELSE. "Eintrag nicht im Puffer
* wurde Eintrag bereits vergebens gelesen?
READ TABLE GT_FAILED_&1 TRANSPORTING NO FIELDS
INDEX 1.
IF ( SY-SUBRC = 0 ). "ja
MESSAGE E100 WITH '&1' '' '' ''
RAISING ENTRY_NOT_FOUND.
ELSE. "nein
* Eintrag direkt von DB lesen
SELECT SINGLE * FROM &1
INTO E_&1.
IF ( SY-SUBRC <> 0 ). "Eintrag nicht in DB vorhanden
APPEND E_&1 TO GT_FAILED_&1.
MESSAGE E100 WITH '&1' '' '' ''
RAISING ENTRY_NOT_FOUND.
ELSE. "Eintrag auf DB vorhanden
APPEND E_&1 TO GT_PUFFER_&1.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
END-OF-DEFINITION.