上传excel 解析BOM





*&---------------------------------------------------------------------*

*& Report  ZMMR30
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZMMR30.
TYPE-POOLS:TRUXS,SLIS.
*TABLES:EKKO,EKPO.
TYPES:BEGIN OF T_DATATAB,
  MATNR LIKE EKPO-MATNR,"物料编号
  MENGE LIKE EKPO-MENGE,"需求数量
  WERKS LIKE EKPO-WERKS,"工厂
  END OF T_DATATAB.
DATA:BEGIN OF TEMPTAB OCCURS ,
  IDNRK LIKE EKPO-MATNR,"物料编号
  OJTXP LIKE MAKT-MAKTX,"物料名称
  MNGKO LIKE EKPO-MENGE,"组件数量
  NMENGE LIKE EKPO-MENGE,"库存数量
  END OF TEMPTAB.
DATAIT_DATATAB TYPE STANDARD TABLE OF T_DATATAB WITH HEADER LINE,
      WA_DATATAB TYPE T_DATATAB,
      IT_RAW TYPE TRUXS_T_TEXT_DATA,
      IT_STB LIKE TABLE OF STPOX WITH HEADER LINE.
DATA:MATNR LIKE EKPO-MATNR.
DATA:LAYOUT TYPE SLIS_LAYOUT_ALV,
      IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      W_REPID LIKE SY-REPID.
PARAMETERS:P_FILE TYPE RLGRAP-FILENAME.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      FIELD_NAME 'P_FILE'
    IMPORTING
      FILE_NAME  P_FILE.


START-OF-SELECTION.
  PERFORM GETDATA.
  PERFORM CATALOG.
  PERFORM ALVSHOW.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GETDATA.
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      I_LINE_HEADER        'X'
      I_TAB_RAW_DATA       IT_RAW
      I_FILENAME           P_FILE
    TABLES
      I_TAB_CONVERTED_DATA IT_DATATAB[]
    EXCEPTIONS
      CONVERSION_FAILED    1
      OTHERS               2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  LOOP AT IT_DATATAB.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  IT_DATATAB-MATNR
      IMPORTING
        OUTPUT MATNR
      EXCEPTIONS
        OTHERS 1.
    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    EXPORTING
      CAPID                         'PP01'
      DATUV                         SY-DATUM
      EMENG                         IT_DATATAB-MENGE
      MEHRS                         'X'
      MTNRV                         MATNR
*      STLAN                         = '1'
      WERKS                         IT_DATATAB-WERKS
*    IMPORTING
*      TOPMAT  =
*      DSTST   =
    TABLES
      STB     IT_STB
*      MATCAT  =
    EXCEPTIONS
        ALT_NOT_FOUND               1
        MATERIAL_NOT_FOUND          3
        MISSING_AUTHORIZATION       4
        NO_BOM_FOUND                5
        OTHERS                      9   .

    LOOP AT IT_STB.
      CLEAR TEMPTAB.
      READ TABLE TEMPTAB WITH KEY IDNRK IT_STB-IDNRK.
      IF SY-SUBRC <> 0.
        MOVE-CORRESPONDING IT_STB TO TEMPTAB.
        APPEND TEMPTAB.
      ELSE.
        LOOP AT TEMPTAB WHERE IDNRK IT_STB-IDNRK.
          TEMPTAB-MNGKO TEMPTAB-MNGKO + IT_STB-MNGKO.
          MODIFY TEMPTAB.
        ENDLOOP.
      ENDIF.
    ENDLOOP.
    LOOP AT TEMPTAB.
      SELECT SUMLABST INTO TEMPTAB-NMENGE FROM MARD WHERE MATNR TEMPTAB-IDNRK AND WERKS IT_DATATAB-WERKS.
      MODIFY TEMPTAB.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "GETDATA
*&---------------------------------------------------------------------*
*&      Form  CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CATALOG.
  W_REPID SY-REPID.
  CLEAR IT_FIELDCAT.
  DEFINE FIELDCATSET.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-SELTEXT_L &2.
    WA_FIELDCAT-NO_ZERO &3.
    WA_FIELDCAT-FIX_COLUMN &4.
*    WA_FIELDCAT-CHECKBOX = &5.
*    WA_FIELDCAT-EDIT = &6.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
  END-OF-DEFINITION.
  FIELDCATSET 'IDNRK' '物料编号' 'X' ''.
  FIELDCATSET 'OJTXP' '物料名称' '' ''.
  FIELDCATSET 'MNGKO' '组件数量' '' ''.
  FIELDCATSET 'NMENGE' '库存数量' '' ''.
ENDFORM.                    "CATALOG
*&---------------------------------------------------------------------*
*&      Form  AVLSHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ALVSHOW.
  PERFORM LAYOUT_INIT USING LAYOUT.
*  LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       W_REPID
      I_GRID_TITLE             ''
      IS_LAYOUT                LAYOUT
      IT_FIELDCAT              IT_FIELDCAT[]
*      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'"自定义ALV工具栏
*      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'"定义ALV工具栏自定义按钮事件
    TABLES
      T_OUTTAB                 TEMPTAB
    EXCEPTIONS
      PROGRAM_ERROR            1
      OTHERS                   2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    "AVLSHOW
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RS_LAYOUT  text
*----------------------------------------------------------------------*
FORM LAYOUT_INIT USING RS_LAYOUT TYPE SLIS_LAYOUT_ALV.
* "Build layout for list display
  RS_LAYOUT-DETAIL_POPUP      'X'.
*  RS_LAYOUT-BOX_FIELDNAME  = 'BOX'.
  RS_LAYOUT-COLWIDTH_OPTIMIZE 'X'."自动根据内容调整宽度
ENDFORM.                    "LAYOUT_INIT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值