REPORT ZTEST.
TABLES: MARA, MARC.
DATA: GMHEAD_ITAB TYPE TABLE OF BAPI2017_GM_HEAD_01,
GMHEAD_WA LIKE BAPI2017_GM_HEAD_01,
GMCODE_ITAB TYPE TABLE OF BAPI2017_GM_CODE,
GMCODE_WA LIKE BAPI2017_GM_CODE,
MATDOC LIKE BAPI2017_GM_HEAD_RET-MAT_DOC,
DOCYEAR LIKE BAPI2017_GM_HEAD_RET-DOC_YEAR,
GMITEM_ITAB TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
GMITEM_WA LIKE BAPI2017_GM_ITEM_CREATE,
RETURN_ITAB TYPE TABLE OF BAPIRET2,
RETURN_WA LIKE BAPIRET2,
ERRFLAG(1) TYPE C.
SELECTION-SCREEN BEGIN OF SCREEN 1100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B1.
SELECT-OPTIONS: SO_MATNR FOR MARA-MATNR.
* SO_WERKS FOR MARC-WERKS.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN END OF SCREEN 1100.
* 定义alv
TYPE-POOLS: SLIS.
DATA: I_FIELDCAT_ALV TYPE SLIS_T_FIELDCAT_ALV,
I_LAYOUT TYPE SLIS_LAYOUT_ALV, "alv的格##
I_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
W_REPID LIKE SY-REPID.
*定义ALV列信息宏*
DEFINE ADD_FIELD.
I_FIELDCAT-TABNAME = 'G_ZTABCTRL_ITAB'.
I_FIELDCAT-FIELDNAME = &1.
I_FIELDCAT-SELTEXT_M = &2.
* I_FIELDCAT-INPUT = 'CHAR'.
* I_FIELDCAT-HOTSPOT = P_CHAR.
* I_FIELDCAT-NO_ZERO = &3.
* I_FIELDCAT-KEY = &4.
APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
END-OF-DEFINITION.
DATA: V_MATNR LIKE MCHB-MATNR,
V_MATNR1 LIKE MCHB-MATNR,
V_WERKS LIKE MCHB-WERKS,
V_LGORT LIKE MCHB-LGORT,
V_PSDAT LIKE SY-DATUM,
V_CHARG LIKE MCHB-CHARG,
V_MTART LIKE MARA-MTART,
V_INIFLAG(1),
V_FLAG(1),
V_CLABS LIKE MCHB-CLABS,
V_CINSM LIKE MCHB-CINSM,
V_CSPEM LIKE MCHB-CSPEM.
*data: begin of so_matnr occurs 0,
* sign(1),
* option(2),
* low like mara-matnr,
* high like mara-matnr,
* end of so_matnr.
*&SPWIZARD: TYPE FOR THE DATA OF TABLECONTROL 'ZTABCTRL'
TYPES: BEGIN OF T_ZTABCTRL,
MARK(1),
MATNR LIKE MCHB-MATNR,
MAKTX LIKE MAKT-MAKTX,
WERKS LIKE MCHB-WERKS,
MTART LIKE MARA-MTART,
LGORT LIKE MCHB-LGORT,
CHARG LIKE MCHB-CHARG,
SOBKZ LIKE MSKA-SOBKZ,
MEINS LIKE MARA-MEINS,
CLABS LIKE MCHB-CLABS,
CINSM LIKE MCHB-CINSM,
CSPEM LIKE MCHB-CSPEM,
VBELN LIKE MSKA-VBELN,
POSNR LIKE MSKA-POSNR,
END OF T_ZTABCTRL.
*&SPWIZARD: INTERNAL TABLE FOR TABLECONTROL 'ZTABCTRL'
DATA: G_ZTABCTRL_ITAB TYPE T_ZTABCTRL OCCURS 0,
IT_ITAB TYPE TABLE OF T_ZTABCTRL,
IT_ITAB1 TYPE TABLE OF T_ZTABCTRL,
WA_ITAB1 TYPE T_ZTABCTRL,
WA_ITAB TYPE T_ZTABCTRL. "work area
DATA: G_ZTABCTRL_COPIED. "copy flag
*&SPWIZARD: DECLARATION OF TABLECONTROL 'ZTABCTRL' ITSELF
CONTROLS: ZTABCTRL TYPE TABLEVIEW USING SCREEN 0100.
DATA: OK_CODE LIKE SY-UCOMM,
SAVE_OK LIKE OK_CODE.
DATA: COLS LIKE LINE OF ZTABCTRL-COLS.
DATA: NUMBER(4) TYPE N VALUE '1100'.
START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS_100' EXCLUDING 'NO_SOE'.
SET TITLEBAR 'TITLE_100'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module INITIAL_SCREEN OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE INITIAL_SCREEN OUTPUT.
IF V_INIFLAG IS INITIAL.
V_PSDAT = SY-DATUM.
V_INIFLAG = 'X'.
ENDIF.
ENDMODULE. " INITIAL_SCREEN OUTPUT
*&---------------------------------------------------------------------*
*& Module ZTABCTRL_CHANGE_FIELD_ATTR OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZTABCTRL_CHANGE_FIELD_ATTR OUTPUT.
DESCRIBE TABLE G_ZTABCTRL_ITAB LINES ZTABCTRL-LINES.
ZTABCTRL-LINES = ZTABCTRL-LINES + 1.
ENDMODULE. " ZTABCTRL_CHANGE_FIELD_ATTR OUTPUT
*&---------------------------------------------------------------------*
*& Module ZTABCTRL_MODIFY INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZTABCTRL_MODIFY INPUT.
DELETE G_ZTABCTRL_ITAB INDEX ZTABCTRL-CURRENT_LINE.
SELECT SINGLE MAKTX FROM MAKT INTO WA_ITAB-MAKTX
WHERE MATNR = WA_ITAB-MATNR.
INSERT WA_ITAB INTO G_ZTABCTRL_ITAB
INDEX ZTABCTRL-CURRENT_LINE.
ENDMODULE. " ZTABCTRL_MODIFY INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
OK_CODE = SY-UCOMM.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
* WHEN 'EXIT'.
* LEAVE PROGRAM.
WHEN 'CANCEL'.
LEAVE TO SCREEN 100.
WHEN 'QC_UN'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '321'.
PERFORM CALL_BAPI USING '04'.
WHEN 'QC_BL'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '350'.
PERFORM CALL_BAPI USING '04'.
WHEN 'UN_QC'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '322'.
PERFORM CALL_BAPI USING '04'.
WHEN 'UN_BL'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '344'.
PERFORM CALL_BAPI USING '04'.
WHEN 'BL_UN'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '343'.
PERFORM CALL_BAPI USING '04'.
WHEN 'BL_QC'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '349'.
PERFORM CALL_BAPI USING '04'.
WHEN 'SOE_NO'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '411'.
PERFORM CALL_BAPI USING '04'.
WHEN 'NO_SOE'.
PERFORM GET_MARK_LINE.
PERFORM GET_GMHEAD_ITEM USING '412'.
PERFORM CALL_BAPI USING '04'.
WHEN 'REFRESH'.
PERFORM GET_DATA.
WHEN 'SORT_UP'.
READ TABLE ZTABCTRL-COLS INTO COLS WITH KEY SELECTED = 'X'.
IF SY-SUBRC = 0.
SORT G_ZTABCTRL_ITAB STABLE BY (COLS-SCREEN-NAME+8) ASCENDING.
COLS-SELECTED = ' '.
MODIFY ZTABCTRL-COLS FROM COLS INDEX SY-TABIX.
ENDIF.
WHEN 'SORT_DOWN'.
READ TABLE ZTABCTRL-COLS INTO COLS WITH KEY SELECTED = 'X'.
IF SY-SUBRC = 0.
SORT G_ZTABCTRL_ITAB STABLE BY (COLS-SCREEN-NAME+8) DESCENDING.
COLS-SELECTED = ' '.
MODIFY ZTABCTRL-COLS FROM COLS INDEX SY-TABIX.
ENDIF.
WHEN 'ALVDIS'.
LEAVE TO LIST-PROCESSING.
CLEAR:I_FIELDCAT,I_FIELDCAT_ALV.
LOOP AT G_ZTABCTRL_ITAB INTO WA_ITAB.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WA_ITAB-MATNR
IMPORTING
OUTPUT = WA_ITAB-MATNR.
MODIFY G_ZTABCTRL_ITAB FROM WA_ITAB.
ENDLOOP.
PERFORM ALV_DISPLAY.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
LEAVE PROGRAM.
ENDMODULE. "EXIT INPUT
*&---------------------------------------------------------------------*
*& Module GET_DATA INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_DATA INPUT.
PERFORM GET_DATA.
ENDMODULE. " GET_DATA INPUT
*&---------------------------------------------------------------------*
*& Form GET_MARK_LINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MARK_LINE .
CLEAR: WA_ITAB, IT_ITAB.
READ TABLE ZTABCTRL-COLS INTO COLS WITH KEY SCREEN-INPUT = '1'.
IF SY-SUBRC = 0.
LOOP AT G_ZTABCTRL_ITAB INTO WA_ITAB WHERE MARK = 'X'.
APPEND WA_ITAB TO IT_ITAB.
ENDLOOP.
ENDIF.
ENDFORM. " GET_MARK_LINE
*&---------------------------------------------------------------------*
*& Form call_bapi
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CALL_BAPI USING GM_CODE_WA.
CLEAR: RETURN_ITAB, MATDOC, DOCYEAR.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = GMHEAD_WA
GOODSMVT_CODE = GM_CODE_WA
* TESTRUN = ' '
* GOODSMVT_REF_EWM =
IMPORTING
* GOODSMVT_HEADRET =
MATERIALDOCUMENT = MATDOC
MATDOCUMENTYEAR = DOCYEAR
TABLES
GOODSMVT_ITEM = GMITEM_ITAB
* GOODSMVT_SERIALNUMBER =
RETURN = RETURN_ITAB.
* GOODSMVT_SERV_PART_DATA =
* EXTENSIONIN =
.
CLEAR ERRFLAG.
LOOP AT RETURN_ITAB INTO RETURN_WA.
IF RETURN_WA-TYPE EQ 'E'.
ERRFLAG = 'X'.
MESSAGE E000(CMA) WITH
'Error in function' RETURN_WA-MESSAGE.
ELSE.
MESSAGE I000(CMA) WITH RETURN_WA-MESSAGE.
ENDIF.
ENDLOOP.
IF ERRFLAG IS INITIAL.
**COMMIT WORK AND WAIT.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
MESSAGE S000(CMA) WITH '凭证' MATDOC '已成功过账'.
ENDIF.
ENDFORM. " call_bapi
*&---------------------------------------------------------------------*
*& Form GET_GMHEAD_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_GMHEAD_ITEM USING GM_ITEM_MOVE_TYPE.
GMHEAD_WA-PSTNG_DATE = V_PSDAT.
GMHEAD_WA-DOC_DATE = SY-DATUM.
GMHEAD_WA-PR_UNAME = SY-UNAME.
CLEAR: GMITEM_WA,GMITEM_ITAB.
LOOP AT IT_ITAB INTO WA_ITAB.
GMITEM_WA-MATERIAL = WA_ITAB-MATNR.
GMITEM_WA-PLANT = WA_ITAB-WERKS.
GMITEM_WA-STGE_LOC = WA_ITAB-LGORT.
GMITEM_WA-BATCH = WA_ITAB-CHARG.
GMITEM_WA-MOVE_TYPE = GM_ITEM_MOVE_TYPE.
GMITEM_WA-SPEC_STOCK = WA_ITAB-SOBKZ.
CASE GMITEM_WA-MOVE_TYPE.
WHEN '321' OR '350'.
GMITEM_WA-ENTRY_QNT = WA_ITAB-CINSM.
WHEN '322' OR '344' OR '411'.
GMITEM_WA-ENTRY_QNT = WA_ITAB-CLABS.
WHEN '343' OR '349'.
GMITEM_WA-ENTRY_QNT = WA_ITAB-CSPEM.
WHEN '412'.
GMITEM_WA-ENTRY_QNT = WA_ITAB-CLABS.
GMITEM_WA-SPEC_STOCK = 'E'.
ENDCASE.
IF GMITEM_WA-SPEC_STOCK = 'E'.
GMITEM_WA-VAL_SALES_ORD = WA_ITAB-VBELN.
GMITEM_WA-VAL_S_ORD_ITEM = WA_ITAB-POSNR.
* SELECT SINGLE VBELN POSNR FROM MSKA
* INTO (GMITEM_WA-VAL_SALES_ORD,GMITEM_WA-VAL_S_ORD_ITEM)
* WHERE MATNR = WA_ITAB-MATNR
* AND WERKS = WA_ITAB-WERKS
* AND LGORT = WA_ITAB-LGORT
* AND CHARG = WA_ITAB-CHARG
* AND SOBKZ = 'E'.
ENDIF.
IF NOT GMITEM_WA-ENTRY_QNT IS INITIAL.
APPEND GMITEM_WA TO GMITEM_ITAB.
CLEAR GMITEM_WA.
ENDIF.
ENDLOOP.
ENDFORM. " GET_GMHEAD_ITEM
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
* if v_matnr1 < v_matnr AND V_MATNR1 IS NOT INITIAL.
* message e000(CMA) with '物料上限比下限小'.
* endif.
* refresh so_matnr.
* so_matnr-sign = 'I'.
* so_matnr-option = 'BT'.
* so_matnr-low = v_matnr.
* so_matnr-high = v_matnr1.
* append so_matnr.
CLEAR: V_FLAG,G_ZTABCTRL_ITAB,WA_ITAB1,WA_ITAB.
IF V_WERKS = '' AND V_LGORT = '' AND V_CHARG = ''.
V_FLAG = '7'.
ENDIF.
IF V_WERKS <> '' AND V_LGORT <> ''.
V_FLAG = '1'.
ENDIF.
IF V_WERKS = '' AND V_LGORT <> ''.
V_FLAG = '2'.
ENDIF.
IF V_WERKS <> '' AND V_LGORT = ''.
V_FLAG = '3'.
ENDIF.
*IF V_MATNR <> '' AND V_WERKS <> '' AND V_LGORT <> ''.
*V_FLAG = '4'.
*ENDIF.
*IF V_MATNR <> '' AND V_WERKS = '' AND V_LGORT <> ''.
*V_FLAG = '5'.
*ENDIF.
*IF V_MATNR <> '' AND V_WERKS <> '' AND V_LGORT = ''.
*V_FLAG = '6'.
*ENDIF.
*IF V_MATNR <> '' AND V_WERKS = '' AND V_LGORT = ''.
*V_FLAG = '7'.
*ENDIF.
IF V_CHARG <> ''.
V_FLAG = '8'.
ENDIF.
CASE V_FLAG.
WHEN '0'.
MESSAGE E000(CMA) WITH '请输入选择条件'.
WHEN '1'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE WERKS = V_WERKS
AND LGORT = V_LGORT
AND MATNR IN SO_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
* SELECT * FROM MCHB INTO CORRESPONDING FIELDS
* OF TABLE G_ZTABCTRL_ITAB
* WHERE WERKS = V_WERKS
* AND LGORT = V_LGORT.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE WERKS = V_WERKS
AND LGORT = V_LGORT
AND MATNR IN SO_MATNR.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '2'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE LGORT = V_LGORT
AND MATNR IN SO_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
* SELECT * FROM MCHB INTO CORRESPONDING FIELDS
* OF TABLE G_ZTABCTRL_ITAB
* WHERE LGORT = V_LGORT.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE LGORT = V_LGORT
AND MATNR = SO_MATNR.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '3'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE WERKS = V_WERKS
AND MATNR IN SO_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE WERKS = V_WERKS
AND MATNR IN SO_MATNR.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '4'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE WERKS = V_WERKS
AND LGORT = V_LGORT
AND MATNR IN SO_MATNR.
* AND MATNR = V_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
* SELECT * FROM MCHB INTO CORRESPONDING FIELDS
* OF TABLE G_ZTABCTRL_ITAB
* WHERE WERKS = V_WERKS
* AND LGORT = V_LGORT
* AND MATNR = V_MATNR.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE WERKS = V_WERKS
AND LGORT = V_LGORT
AND MATNR IN SO_MATNR.
* AND MATNR = V_MATNR.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '5'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE LGORT = V_LGORT
AND MATNR IN SO_MATNR.
* AND MATNR = V_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
* SELECT * FROM MCHB INTO CORRESPONDING FIELDS
* OF TABLE G_ZTABCTRL_ITAB
* WHERE LGORT = V_LGORT
* AND MATNR = V_MATNR.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
* WHERE MATNR = V_MATNR
WHERE MATNR IN SO_MATNR
AND LGORT = V_LGORT.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '6'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE WERKS = V_WERKS
AND MATNR IN SO_MATNR.
* AND MATNR = V_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
* SELECT * FROM MCHB INTO CORRESPONDING FIELDS
* OF TABLE G_ZTABCTRL_ITAB
* WHERE WERKS = V_WERKS
* AND MATNR = V_MATNR.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE WERKS = V_WERKS
AND MATNR IN SO_MATNR.
* AND MATNR = V_MATNR.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '7'.
SELECT MATNR WERKS LGORT LABST INSME SPEME
FROM MARD INTO (WA_ITAB1-MATNR,WA_ITAB1-WERKS,
WA_ITAB1-LGORT,WA_ITAB1-CLABS,
WA_ITAB1-CINSM,WA_ITAB1-CSPEM)
WHERE MATNR IN SO_MATNR.
* WHERE MATNR = V_MATNR.
PERFORM GET_BATH_E_STOCK.
ENDSELECT.
* SELECT * FROM MCHB INTO CORRESPONDING FIELDS
* OF TABLE G_ZTABCTRL_ITAB
* WHERE MATNR = V_MATNR.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE MATNR IN SO_MATNR.
* WHERE MATNR = V_MATNR.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
WHEN '8'.
SELECT * FROM MCHB INTO CORRESPONDING FIELDS
OF TABLE G_ZTABCTRL_ITAB
WHERE CHARG = V_CHARG.
SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
VBELN POSNR FROM MSKA INTO
(WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
WA_ITAB-POSNR)
WHERE CHARG = V_CHARG.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
ENDCASE.
LOOP AT G_ZTABCTRL_ITAB INTO WA_ITAB.
IF WA_ITAB-CLABS IS INITIAL
AND WA_ITAB-CINSM IS INITIAL
AND WA_ITAB-CSPEM IS INITIAL.
DELETE TABLE G_ZTABCTRL_ITAB FROM WA_ITAB.
ELSE.
SELECT SINGLE MAKTX FROM MAKT INTO WA_ITAB-MAKTX
WHERE MATNR = WA_ITAB-MATNR.
SELECT SINGLE MTART MEINS FROM MARA INTO
(WA_ITAB-MTART,WA_ITAB-MEINS)
WHERE MATNR = WA_ITAB-MATNR.
WA_ITAB-MARK = ''.
MODIFY G_ZTABCTRL_ITAB FROM WA_ITAB.
ENDIF.
ENDLOOP.
IF V_MTART IS NOT INITIAL.
LOOP AT G_ZTABCTRL_ITAB INTO WA_ITAB WHERE MTART <> V_MTART.
DELETE TABLE G_ZTABCTRL_ITAB FROM WA_ITAB.
ENDLOOP.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form GET_BATH_E_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_BATH_E_STOCK .
CLEAR: V_CLABS, V_CINSM, V_CSPEM, WA_ITAB.
SELECT * FROM MCHB INTO CORRESPONDING FIELDS
OF WA_ITAB
WHERE MATNR = WA_ITAB1-MATNR
AND WERKS = WA_ITAB1-WERKS
AND LGORT = WA_ITAB1-LGORT.
V_CLABS = WA_ITAB-CLABS + V_CLABS.
V_CINSM = WA_ITAB-CINSM + V_CINSM.
V_CSPEM = WA_ITAB-CSPEM + V_CSPEM.
APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
CLEAR WA_ITAB.
ENDSELECT.
* SELECT MATNR WERKS LGORT CHARG SOBKZ KALAB KAINS KASPE
* VBELN POSNR FROM MSKA INTO
* (WA_ITAB-MATNR,WA_ITAB-WERKS,WA_ITAB-LGORT,
* WA_ITAB-CHARG,WA_ITAB-SOBKZ,WA_ITAB-CLABS,
* WA_ITAB-CINSM,WA_ITAB-CSPEM,WA_ITAB-VBELN,
* WA_ITAB-POSNR)
* WHERE MATNR = WA_ITAB1-MATNR
* AND WERKS = WA_ITAB1-WERKS
* AND LGORT = WA_ITAB1-LGORT.
* APPEND WA_ITAB TO G_ZTABCTRL_ITAB.
* CLEAR WA_ITAB.
* ENDSELECT.
WA_ITAB1-CLABS = WA_ITAB1-CLABS - V_CLABS.
WA_ITAB1-CINSM = WA_ITAB1-CINSM - V_CINSM.
WA_ITAB1-CSPEM = WA_ITAB1-CSPEM - V_CSPEM.
APPEND WA_ITAB1 TO G_ZTABCTRL_ITAB.
SORT G_ZTABCTRL_ITAB BY MATNR.
ENDFORM. " GET_BATH_E_STOCK
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_DISPLAY .
PERFORM LAYOUT_BUILD. "ALV表单格式、属##
PERFORM FIELDS. "表单列信##
PERFORM DISPLAY_DATA. "显示ALV表单
ENDFORM. " ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form layout_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM LAYOUT_BUILD .
I_LAYOUT-ZEBRA = 'X'. "颜色交替显示
I_LAYOUT-DETAIL_POPUP = 'X'. "详细信息窗口
W_REPID = SY-REPID. "当前程序
I_LAYOUT-F2CODE = '&ETA'."双击
I_LAYOUT-NO_VLINE = 'X'."列间隔线
I_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "优化列宽
I_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
I_LAYOUT-DETAIL_TITLEBAR = '详细内容'. "设置弹出窗口的标题栏
ENDFORM. " layout_build
*&---------------------------------------------------------------------*
*& Form fields
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FIELDS .
ADD_FIELD 'MATNR' '物料号'.
ADD_FIELD 'MAKTX' '物料描述'.
ADD_FIELD 'WERKS' '工厂'.
ADD_FIELD 'MTART' '物料类型'.
ADD_FIELD 'LGORT' '库存地点'.
ADD_FIELD 'CHARG' '批号'.
ADD_FIELD 'SOBKZ' '特殊库存'.
ADD_FIELD 'MEINS' '单位'.
ADD_FIELD 'CLABS' '非限制库存'.
ADD_FIELD 'CINSM' '质检库存'.
ADD_FIELD 'CSPEM' '冻结库存'.
ADD_FIELD 'VBELN' '销售凭证'.
ADD_FIELD 'POSNR' '项目'.
ENDFORM. " fields
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = W_REPID
I_SAVE = 'X'
IS_LAYOUT = I_LAYOUT
IT_FIELDCAT = I_FIELDCAT_ALV[]
TABLES
T_OUTTAB = G_ZTABCTRL_ITAB. "内表数据
ENDFORM. " display_data