*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
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 0 ,
IDNRK LIKE EKPO-MATNR,"物料编号
OJTXP LIKE MAKT-MAKTX,"物料名称
MNGKO LIKE EKPO-MENGE,"组件数量
NMENGE LIKE EKPO-MENGE,"库存数量
END OF TEMPTAB.
DATA: IT_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 SUM( LABST ) 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