现在的位置: 首页 > 综合 > 正文

库存转换试用

2013年12月16日 ⁄ 综合 ⁄ 共 24424字 ⁄ 字号 评论关闭


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(1TYPE 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'
TYPESBEGIN 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.
DATANUMBER(4TYPE 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+8ASCENDING.
        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+8DESCENDING.
        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

抱歉!评论已关闭.