Code: Alles auswählen.
REPORT ZPTARBPLDAT004
TABLES: PLMZ,
PLPO,
PLKO,
CRHD,
MAKT,
STKO.
* Deklaration der internen Tabelle für die Daten.
TYPES: BEGIN OF TYP_DATEN,
MATNR LIKE MAKT-MATNR, "Materialnummer
MAKTX LIKE MAKT-MAKTX, "Materialkurztext
END OF TYP_DATEN.
DATA: INT_DATEN TYPE TYP_DATEN OCCURS 100 WITH HEADER LINE,
INT_STPOV TYPE STPOV OCCURS 10 WITH HEADER LINE,
TMP_INT_STPOV TYPE STPOV OCCURS 10 WITH HEADER LINE,
*Folgende interne Tabelle werden nur aus Kompatiblität zu dem
*Funktionsbaustein CS_WHERE_USED_MAT deklariert.
*Sie werden nicht benötigt und können völlig ausser Acht gelassen werden
INT_CSCEQUI TYPE CSCEQUI OCCURS 10 WITH HEADER LINE,
INT_CSCKND TYPE CSCKND OCCURS 10 WITH HEADER LINE,
INT_CSCMAT TYPE CSCMAT OCCURS 10 WITH HEADER LINE,
INT_CSCSTD TYPE CSCSTD OCCURS 10 WITH HEADER LINE,
INT_CSCTP TYPE CSCTPL OCCURS 10 WITH HEADER LINE,
*Ende der belanglosen internen Tabellen :-)
ARBPL_ID LIKE CRHD-OBJID,
ANZ_INT_DATEN TYPE I,
ANZ_STRING TYPE C.
* Hilfvariablen
DATA: TMP_MATNR LIKE MAKT-MATNR,
TMP_MAKTX LIKE MAKT-MAKTX,
TMP_PLNNR LIKE PLKO-PLNNR,
TMP_START TYPE C VALUE 'X',
TMP_SUBRC LIKE SY-SUBRC,
TMP_TABIX LIKE SY-TABIX.
SELECTION-SCREEN BEGIN OF BLOCK DATEN WITH FRAME TITLE TEXT-001.
PARAMETERS: ARBEITPL LIKE CRHD-ARBPL .
PARAMETERS: PLSTATUS LIKE PLKO-STATU DEFAULT 'K' .
PARAMETER KOMPON LIKE MAKT-MATNR DEFAULT '10601'.
PARAMETERS: STSTATUS LIKE STKO-STLST .
SELECTION-SCREEN END OF BLOCK DATEN.
START-OF-SELECTION.
* Mit der angegebenen Komponentennummer(als Parameter in der Selektion angegeben) Wird in
* die rekursive Funktion gegangen.
TMP_MATNR = KOMPON.
PERFORM MEHRSTUFIG.
* Testweises ausgeben aller gefundenen Daten:
LOOP AT INT_STPOV.
WRITE / INT_STPOV-MATNR.
ENDLOOP.
**********************************************************************
******************Mehrstufigkeit bei Stücklisten**********************
**********************************************************************
** Realisierung über Rekursion.
** D.h. die Funktion muss solange aufgerufen werden, bis keine
** Materialien mehr gefunden werden.
FORM MEHRSTUFIG.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
DATUB = '99991231'
DATUV = SY-DATUM
MATNR = TMP_MATNR
* POSTP = ' '
* RETCODE_ONLY = ' '
* STLAN = ' '
WERKS = '0001'
* MCLMT = ' '
* MNSTL = ' '
* MXSTL = ' '
* STLTP = ' '
* IMPORTING
* TOPMAT =
TABLES
WULTB = TMP_INT_STPOV
EQUICAT = INT_CSCEQUI
KNDCAT = INT_CSCKND
MATCAT = INT_CSCMAT
STDCAT = INT_CSCSTD
TPLCAT = INT_CSCTP
* PRJCAT =
EXCEPTIONS
CALL_INVALID = 1
MATERIAL_NOT_FOUND = 2
NO_WHERE_USED_REC_FOUND = 3
NO_WHERE_USED_REC_SELECTED = 4
NO_WHERE_USED_REC_VALID = 5
OTHERS = 6.
TMP_SUBRC = SY-SUBRC.
IF TMP_SUBRC EQ '0'.
LOOP AT TMP_INT_STPOV.
READ TABLE INT_STPOV WITH KEY MATNR =
TMP_INT_STPOV-MATNR.
IF SY-SUBRC NE '0'.
APPEND TMP_INT_STPOV TO INT_STPOV.
ENDIF.
ENDLOOP.
ENDIF.
*Prüfen, ob ein DS gefunden wurde.
WHILE TMP_SUBRC EQ '0'.
TMP_TABIX = TMP_TABIX + 1.
LOOP AT INT_STPOV FROM TMP_TABIX.
IF TMP_MATNR NE INT_STPOV-MATNR.
TMP_MATNR = INT_STPOV-MATNR.
TMP_TABIX = SY-TABIX.
PERFORM MEHRSTUFIG.
ENDIF.
ENDLOOP.
ENDWHILE.
ENDFORM.