2008/11/10

CS_WHERE_USED_MAT 最上位BOM取得 (品目、プラントごと)

*&---------------------------------------------------------------------*
*&最上位BOM取得    (品目、プラントごと)
*&---------------------------------------------------------------------*

REPORT  ZZZHAOTEST001.

*----- 対象品目
TYPESBEGIN OF ITAB ,
        MATNR TYPE KEKO-MATNR, "品目コード
        WERKS TYPE KEKO-WERKS, "プラント
       END OF ITAB.
*----- 対象品目の親品目
TYPESBEGIN OF TEPTAB ,
        MATNR TYPE KEKO-MATNR, "品目コード
        WERKS TYPE KEKO-WERKS, "プラント
       END OF TEPTAB.
*----- 最上位品目
TYPESBEGIN OF TOPBOM ,
        MATNR TYPE KEKO-MATNR, "品目コード
        WERKS TYPE KEKO-WERKS, "プラント
       END OF TOPBOM.

DATA:
*----- 対象品目
      TD_ITAB TYPE  STANDARD TABLE OF ITAB,
      ST_ITAB TYPE ITAB,
*----- 最上位品目
      TD_TOPBOM TYPE  STANDARD TABLE OF TOPBOM,
      ST_TOPBOM TYPE TOPBOM.

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME.
SELECTION-SCREEN : COMMENT 1(60TEXT-001,
                   SKIP.
PARAMETERS : MATNR LIKE MARC-MATNR OBLIGATORY,
             WERKS LIKE MARC-WERKS OBLIGATORY DEFAULT '1101'.
SELECT-OPTIONS : BDATE FOR SY-DATUM DEFAULT SY-DATUM TO SY-DATUM
                 NO-EXTENSION OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BLK1.

START-OF-SELECTION.
  ST_ITAB-MATNR = MATNR.
  ST_ITAB-WERKS = 1.
  APPEND  ST_ITAB TO TD_ITAB.
  CLEAR ST_ITAB.

  PERFORM GET_TOPBOM.

*&---------------------------------------------------------------------*
*&      FORM  GET_TOPBOM
*&---------------------------------------------------------------------*
FORM GET_TOPBOM.

*----- DATA定義(汎用モジュール関連 )
  DATA:
     LST_WULTB TYPE   STPOV,
     LTD_WULTB TYPE  STANDARD TABLE OF STPOV,
     LTD_EQUICAT TYPE STANDARD TABLE OF  CSCEQUI,
     LTD_KNDCAT TYPE STANDARD TABLE OF  CSCKND,
     LTD_MATCAT TYPE STANDARD TABLE OF  CSCMAT,
     LTD_STDCAT TYPE STANDARD TABLE OF  CSCSTD,
     LTD_TPLCAT TYPE STANDARD TABLE OF  CSCTPL.
  DATA:
*----- 対象品目の親品目
      LTD_TEPTAB TYPE  STANDARD TABLE OF TEPTAB,
      LST_TEPTAB TYPE TEPTAB.
*----- DATA定義(カウンタ)
  DATA:
       LCTR_LIN(5TYPE N,
       LCTR_LINE_CNT(5TYPE N.

  DESCRIBE TABLE TD_ITAB LINES LCTR_LIN.
  IF LCTR_LIN = 0.
    EXIT.
  ENDIF.

  LOOP AT TD_ITAB INTO ST_ITAB.
    CALL FUNCTION 'CS_WHERE_USED_MAT'
         EXPORTING
              DATUB                      = BDATE-HIGH
              DATUV                      = BDATE-LOW
              MATNR                      = ST_ITAB-MATNR
              WERKS                      = ST_ITAB-WERKS
         TABLES
              WULTB                      = LTD_WULTB
              EQUICAT                    = LTD_EQUICAT
              KNDCAT                     = LTD_KNDCAT
              MATCAT                     = LTD_MATCAT
              STDCAT                     = LTD_STDCAT
              TPLCAT                     = LTD_TPLCAT
         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.
    IF SY-SUBRC <> 0.
    ENDIF.

    DESCRIBE TABLE LTD_WULTB LINES LCTR_LINE_CNT.
    IF LCTR_LINE_CNT = 0.
      ST_TOPBOM-MATNR = ST_ITAB-MATNR .
      ST_TOPBOM-WERKS = ST_ITAB-WERKS.
      APPEND ST_TOPBOM TO TD_TOPBOM.
      CLEAR ST_TOPBOM.
    ELSE.
      LOOP AT LTD_WULTB[] INTO LST_WULTB.
          LST_TEPTAB-MATNR = LST_WULTB-MATNR.
          LST_TEPTAB-WERKS = LST_WULTB-WERKS.
          APPEND LST_TEPTAB TO LTD_TEPTAB.
          CLEAR LST_TEPTAB.
      ENDLOOP.
    ENDIF.
    REFRESH : LTD_WULTB,LTD_EQUICAT,LTD_KNDCAT,LTD_MATCAT,LTD_STDCAT,LTD_TPLCAT.
  ENDLOOP.

  REFRESH TD_ITAB.
  TD_ITAB[] = LTD_TEPTAB[].
  PERFORM GET_TOPBOM.

ENDFORM.                    " GET_TOPBOM