SAP PP生产入库单功能分享

内容分享2小时前发布
0 0 0

一、功能逻辑

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

二、功能界面

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

SAP PP生产入库单功能分享

三、功能代码

*&———————————————————————*
*& 程序名: ZRPPP_0006
*& 创建者(公司)/日期:*
*& 程序描述:
*&
*&———————————————————————*
*& 版本/修改者(公司)/日期//修改描述
*&
*&———————————————————————*
REPORT zrppp_0006.
TABLES:afpo,ztpp006_head.
TYPE-POOLS:icon,slis.

DATA: BEGIN OF gt_item OCCURS 0,
        werks      TYPE marc-werks,
        aufnr      TYPE afpo-aufnr,
        zrktp(6),
        rsnum      TYPE rsnum,
        rspos      TYPE rspos,
        zrknum     TYPE zbfnum,
        zrspos     TYPE zrspos,
        erdat      TYPE erdat,
        matnr      TYPE afpo-matnr,
        maktx      TYPE maktx,
        amein      TYPE co_aufme,
        psmng      TYPE afpo-psmng, “总数
        wemng      TYPE afpo-wemng, “已收
        gamng1     TYPE menge_d, “应收
        gamng2     TYPE menge_d, “实收
        lgort      TYPE lgort_d,
        zid        TYPE ernam,
        arbpl      TYPE arbpl,
        kostl      TYPE kostl,
        ltext      LIKE cskt-ltext, “成本中心长文本
        loekz      TYPE ztpp006-loekz,
        ztxt2(200),”备注
        ztxt4      TYPE i, “打印次数
        mark ,”TYPE check_box,
        icon       TYPE icon_d,    “红绿灯
        message    TYPE string, “消息
        zrkd(8),
        mblnr      TYPE mblnr,
        zmptp(3),
        statu(1),
        auart      TYPE aufk-auart,
      END OF gt_item.
DATA:gt_ztpp006 TYPE TABLE OF ztpp006 WITH HEADER LINE.
DATA:gs_ztpp006 TYPE ztpp006.

DATA:gt_ztpp006_head TYPE TABLE OF ztpp006_head WITH HEADER LINE.
DATA gs_ztpp006_head TYPE ztpp006_head.

DATA:ls_ztpp006 LIKE zspp006.
DATA:  lt_out LIKE TABLE OF zspp006.
DATA:wt_ztpp006 TYPE ztpp006_head.
“F4帮助
DATA:BEGIN OF gt_name OCCURS 0,”用户ID
       ernam     TYPE ekko-ernam,
       name_last TYPE adrp-name_last,
     END OF gt_name,
     BEGIN OF gt_zrkdh OCCURS 0,
       zrknum TYPE ztpp006_head-zrknum,
*       aufnr  TYPE ztpp006_head-aufnr,
       erdat  TYPE ztpp006_head-erdat,
       zid    TYPE ztpp006_head-zid,
       werks  TYPE ztpp006_head-werks,
       zrktp  TYPE ztpp006_head-zrktp,
     END OF gt_zrkdh,
     BEGIN OF gt_cskt OCCURS 0,
       kokrs TYPE cskt-kokrs,
       kostl TYPE cskt-kostl,
       ltext TYPE cskt-ltext,
       datbi TYPE cskt-datbi,
     END OF gt_cskt.

“alv参数
DATA:it_fieldcat TYPE slis_t_fieldcat_alv,
     wa_fieldcat LIKE LINE OF it_fieldcat,
     is_layout   TYPE lvc_s_layo,
     is_fact     TYPE lvc_s_fcat,
     it_layout   TYPE slis_layout_alv.
CONSTANTS cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'.

“打印参数
DATA:g_fm_name  TYPE rs38l_fnam,
     gw_options TYPE ssfcompop,
     gw_control TYPE ssfctrlop.

“ALV 相关变量定义
DATA:lt_fcat TYPE lvc_t_fcat,
     ls_layo TYPE lvc_s_layo.
DATA:is_grid_settings TYPE lvc_s_glay.
DATA:gt_ztpp004 TYPE TABLE OF ztpp008 WITH HEADER LINE.

DATA:gt_ddval  TYPE lvc_t_drop,
     gw_ddval  TYPE lvc_s_drop,
     gt_events TYPE slis_t_event,
     gw_events TYPE slis_alv_event.

“权限控制
DATA:actvt_01 TYPE c, “创建
     actvt_02 TYPE c, “打印
     actvt_03 TYPE c, “删除
     actvt_04 TYPE c. “过账

“入库过账
DATA:goodsmvt_header TYPE TABLE OF bapi2017_gm_head_01 WITH HEADER LINE.
DATA:goodsmvt_code TYPE TABLE OF bapi2017_gm_code WITH HEADER LINE.
DATA:goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE .
DATA:goodsmvt_headret TYPE TABLE OF bapi2017_gm_head_ret WITH HEADER LINE.
DATA:materialdocument TYPE bapi2017_gm_head_ret-mat_doc.
DATA:goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber WITH HEADER LINE.
DATA:t_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA:l_mblnr TYPE mseg-mblnr.
DATA i_grid_title TYPE lvc_title.
DATA job_output_info TYPE ssfcrescl.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:r1 RADIOBUTTON GROUP g1 USER-COMMAND cmd DEFAULT 'X',
             r2 RADIOBUTTON GROUP g1,
             rr RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
  SELECT-OPTIONS:p_werks FOR afpo-dwerk MODIF ID d1.
  SELECT-OPTIONS:s_aufnr FOR afpo-aufnr MODIF ID d3,
                 s_zrknum FOR ztpp006_head-zrknum MODIF ID d1 ,
                 s_erdat FOR ztpp006_head-erdat MODIF ID d1,
                 s_matnr FOR afpo-matnr MODIF ID d1,
                 s_zid FOR ztpp006_head-zid MODIF ID d1,
                 s_kostl FOR ztpp006_head-kostl MODIF ID d1.
  PARAMETERS:p_zrknum TYPE ztpp006_head-zrknum MODIF ID d4,
             p_data   TYPE sy-datum DEFAULT sy-datum MODIF ID d4.
  PARAMETERS:zzt TYPE char10 DEFAULT '0' AS  LISTBOX VISIBLE LENGTH 15 MODIF ID d1  .
  PARAMETERS:cx AS CHECKBOX MODIF ID d1.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
  SELECTION-SCREEN: BEGIN OF LINE .
    SELECTION-SCREEN POSITION 10.
    PARAMETERS:r3 RADIOBUTTON GROUP g2 .
    SELECTION-SCREEN  COMMENT 12(10) TEXT-004.”产品入库
    SELECTION-SCREEN POSITION 35.
    PARAMETERS:r4 RADIOBUTTON GROUP g2.
    SELECTION-SCREEN:COMMENT 37(10) TEXT-005.”副产品入库
    SELECTION-SCREEN POSITION 50.
  SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF r1 = 'X'.
      IF screen-group1 = 'D1'  OR screen-group1 = 'D4'.
        screen-active = 0.
      ENDIF.
    ELSEIF r2 = 'X'.
      IF screen-group1 = 'D4'.
        screen-active = 0.
      ENDIF.
    ELSEIF rr = 'X'.
      IF screen-group1 = 'D1' OR screen-group1 = 'D3'.
        screen-active = 0.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zid-low.
  PERFORM show_values.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zid-high.
  PERFORM show_values1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zrknum-low.
  PERFORM show_values2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zrknum-high.
  PERFORM show_values3.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kostl-low.
  PERFORM show_values4.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kostl-high.
  PERFORM show_values5.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zrknum.
  PERFORM show_values6.

INITIALIZATION.

  DATA itab_list TYPE vrm_values.
  itab_list = VALUE #(
                      ( key = '0' text = '已创建' )
                      ( key = '1' text = '已过账' )
                     ).
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'ZZT'
      values = itab_list.
  REFRESH itab_list.

START-OF-SELECTION.

  CLEAR:actvt_01,actvt_02,actvt_03,actvt_04.
  AUTHORITY-CHECK OBJECT 'ZRKD'
             ID 'ACTVT' FIELD '01'.”创建入库单
  IF sy-subrc EQ 0.
    actvt_01 = 'X'.
  ENDIF.

  AUTHORITY-CHECK OBJECT 'ZRKD'
           ID 'ACTVT' FIELD '04'.”打印入库单
  IF sy-subrc EQ 0.
    actvt_02 = 'X'.
  ENDIF.

  AUTHORITY-CHECK OBJECT 'ZRKD'
         ID 'ACTVT' FIELD '06'.”删除入库单
  IF sy-subrc EQ 0.
    actvt_03 = 'X'.
  ENDIF.

  AUTHORITY-CHECK OBJECT 'ZRKD'
         ID 'ACTVT' FIELD '10'.”入库单过账及冲销
  IF sy-subrc EQ 0.
    actvt_04 = 'X'.
  ENDIF.

  IF r1 = 'X'.
    IF p_werks IS INITIAL AND s_aufnr IS INITIAL.
      MESSAGE '请输入查询条件' TYPE 'I' DISPLAY LIKE 'E' .
      STOP.
    ENDIF.
    IF actvt_01 = ''.
      MESSAGE '无权限创建入库单' TYPE 'I' DISPLAY LIKE 'E' .
      STOP.
    ENDIF.
  ELSEIF r2 = 'X' .
    IF p_werks IS INITIAL AND s_aufnr IS INITIAL AND s_zrknum IS INITIAL
       AND s_erdat IS INITIAL AND s_matnr IS INITIAL AND s_zid IS INITIAL AND s_kostl IS INITIAL.
      MESSAGE '请输入查询条件' TYPE 'I' DISPLAY LIKE 'E' .
      STOP.
    ENDIF.
  ELSEIF  rr = 'X'.
    IF actvt_04  = ''.
      MESSAGE '无权限过账入库单' TYPE 'I' DISPLAY LIKE 'E' .
      STOP.
    ENDIF.
  ENDIF.

  IF r1 = 'X'.
    i_grid_title = '入库单-创建'.
  ELSEIF r2 = 'X'.
    i_grid_title = '入库单-浏览'.
  ELSEIF rr = 'X'.
    i_grid_title = '入库单-过账'.
  ENDIF.

  DATA:BEGIN OF gt_afpo OCCURS 0,
         aufnr TYPE afpo-aufnr,
         auart TYPE aufk-auart,
         objnr TYPE aufk-objnr,
         werks TYPE aufk-werks,
         matnr TYPE afpo-matnr,
         amein TYPE afpo-amein,
         psmng TYPE afpo-psmng,
         wemng TYPE afpo-wemng,
         lgort TYPE afpo-lgort,
       END OF gt_afpo.
  DATA:gt_aufk TYPE TABLE OF aufk WITH HEADER LINE.
  DATA:gt_resb TYPE TABLE OF resb WITH HEADER LINE.
  DATA:order_objects TYPE bapi_pp_order_objects,
       return        TYPE bapiret2,
       operation     TYPE TABLE OF  bapi_order_operation1 WITH HEADER LINE,
       gt_makt       TYPE TABLE OF makt WITH HEADER LINE.

  DATA:BEGIN OF gt_temp OCCURS 0,
         zrknum TYPE zbfnum,
         zrspos TYPE zrspos,
         aufnr  TYPE aufnr,
         gamng1 TYPE menge_d,
       END OF gt_temp.

  DATA:l_line TYPE bsvx-sttxt.
  IF r1 = 'X'.
    IF r3 = 'X'.”产品入库
      SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_afpo FROM afpo JOIN aufk ON afpo~aufnr = aufk~aufnr
               WHERE werks IN p_werks
               AND afpo~aufnr IN s_aufnr
               AND autyp = '10'
               AND elikz = ''”交货完成标识
               AND idat2 = '00000000'”TECO时间
      AND idat3 = '00000000'.”关闭时间

      LOOP AT gt_afpo.
        AUTHORITY-CHECK OBJECT 'ZRKD'
         ID 'ZWERKS' FIELD gt_afpo-werks.”检查工厂权限
        IF sy-subrc NE 0.
          CLEAR gt_afpo.
          CONTINUE.
        ENDIF.

        CLEAR l_line.
        CALL FUNCTION 'STATUS_TEXT_EDIT'
          EXPORTING
            objnr            = gt_afpo-objnr
            spras            = '1'
          IMPORTING
            line             = l_line
          EXCEPTIONS
            object_not_found = 1
            OTHERS           = 2.
        IF sy-subrc <> 0.
* Implement suitable error handling here
        ENDIF.

        SEARCH l_line FOR 'CRTD'.
        IF sy-subrc EQ 0.
          CLEAR gt_afpo.
          CONTINUE..
        ELSE.
          gt_item-werks = gt_afpo-werks.
          gt_item-auart = gt_afpo-auart.
          gt_item-aufnr = gt_afpo-aufnr.
          gt_item-matnr = gt_afpo-matnr.
          gt_item-amein = gt_afpo-amein.
          gt_item-psmng = gt_afpo-psmng.
          gt_item-wemng = gt_afpo-wemng.
          gt_item-gamng1 = gt_item-psmng – gt_item-wemng.
          gt_item-lgort = gt_afpo-lgort.
          gt_item-zrktp = 'CP'.
          APPEND gt_item.
          CLEAR:gt_afpo,gt_item.
        ENDIF.
      ENDLOOP.

    ELSEIF r4 = 'X'.
      “副产品入库
      SELECT *
           INTO TABLE gt_resb FROM resb
            WHERE werks IN p_werks
               AND aufnr IN s_aufnr
               AND shkzg = 'S'
               AND xwaok = 'X'”允许的货物移动
               AND xloek = ''”删除标识
               AND kzear = ''”最后发货标识
      AND bdmng > 0.
      IF gt_resb[] IS NOT INITIAL.
        SELECT * INTO TABLE gt_aufk FROM aufk FOR ALL ENTRIES IN gt_resb
                      WHERE aufnr = gt_resb-aufnr.
        SORT gt_aufk BY aufnr.
      ENDIF.
      LOOP AT gt_resb.
        AUTHORITY-CHECK OBJECT 'ZRKD'
        ID 'ZWERKS' FIELD gt_resb-werks.”检查工厂权限
        IF sy-subrc NE 0.
          CLEAR gt_resb.
          CONTINUE.
        ENDIF.
        gt_item-werks = gt_resb-werks.
        gt_item-aufnr = gt_resb-aufnr.
        gt_item-matnr = gt_resb-matnr.
        gt_item-amein = gt_resb-meins.
        gt_item-psmng = gt_resb-bdmng.
        gt_item-wemng = gt_resb-enmng.
        gt_item-lgort = gt_resb-lgort.
        gt_item-rsnum = gt_resb-rsnum.
        gt_item-rspos = gt_resb-rspos.
        gt_item-gamng1 = gt_item-psmng – gt_item-wemng.
        gt_item-zrktp = 'FCP'.

        READ TABLE gt_aufk WITH KEY aufnr = gt_item-aufnr BINARY SEARCH.
        IF sy-subrc EQ 0.
          gt_item-auart = gt_aufk-auart.
        ENDIF.
        APPEND gt_item.
        CLEAR:gt_resb,gt_item.

      ENDLOOP.
    ENDIF.
    IF gt_item[] IS INITIAL.
      MESSAGE '没有符合条件的数据' TYPE 'I' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.
  ELSEIF r2 = 'X'.
    IF r3 = 'X'.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
                FROM ztpp006 AS a JOIN ztpp006_head AS b ON a~zrknum = b~zrknum
                WHERE werks IN p_werks
                AND aufnr IN s_aufnr
                AND a~zrknum IN s_zrknum
                AND matnr IN s_matnr
                AND erdat IN s_erdat
                AND zid IN s_zid
                AND kostl IN s_kostl
      AND zrktp = 'CP'.
      IF gt_ztpp006[] IS NOT INITIAL.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_afpo FROM afpo FOR ALL ENTRIES IN gt_ztpp006
        WHERE aufnr = gt_ztpp006-aufnr.
        SORT gt_afpo BY aufnr.

        SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
        FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
        SORT gt_ztpp006_head BY zrknum.
      ENDIF.

    ELSEIF r4 = 'X'.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
          FROM ztpp006 JOIN ztpp006_head ON ztpp006~zrknum = ztpp006_head~zrknum
            WHERE werks IN p_werks
            AND aufnr IN s_aufnr
            AND ztpp006~zrknum IN s_zrknum
            AND matnr IN s_matnr
            AND erdat IN s_erdat
            AND zid IN s_zid
            AND kostl IN s_kostl
      AND zrktp = 'FCP'.
      IF gt_ztpp006[] IS NOT INITIAL.

        SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
        FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
        SORT gt_ztpp006_head BY zrknum.

        SELECT * INTO TABLE gt_resb FROM resb FOR ALL ENTRIES IN gt_ztpp006
                WHERE rsnum = gt_ztpp006-rsnum  AND rspos = gt_ztpp006-rspos.
        SORT gt_resb BY rsnum rspos.
      ENDIF.
    ENDIF.

    LOOP AT gt_ztpp006.
      IF cx = '' AND gt_ztpp006-loekz = 'X'.
        CLEAR gt_ztpp006.
        CONTINUE.
      ENDIF.
      MOVE-CORRESPONDING gt_ztpp006 TO gt_item.
      gt_item-amein = gt_ztpp006-meins.
      CLEAR gt_ztpp006_head.
      READ TABLE gt_ztpp006_head WITH KEY zrknum = gt_item-zrknum BINARY SEARCH.
      IF sy-subrc EQ 0.
        gt_item-erdat = gt_ztpp006_head-erdat.
        gt_item-zid = gt_ztpp006_head-zid.
        gt_item-werks = gt_ztpp006_head-werks.
        gt_item-arbpl = gt_ztpp006_head-arbpl.
        gt_item-kostl = gt_ztpp006_head-kostl.
        gt_item-ztxt4 = gt_ztpp006_head-ztxt4.
        gt_item-zrktp = gt_ztpp006_head-zrktp.
        gt_item-mblnr = gt_ztpp006_head-mblnr.
        gt_item-zmptp = gt_ztpp006_head-zmptp.
        gt_item-statu = gt_ztpp006_head-statu.
      ENDIF.
      AUTHORITY-CHECK OBJECT 'ZRKD'
        ID 'ZWERKS' FIELD gt_item-werks.”检查工厂权限
      IF sy-subrc NE 0.
        CLEAR gt_item.
        CONTINUE.
      ENDIF.

      APPEND gt_item.
      CLEAR gt_item.
    ENDLOOP.
    IF zzt <> ''.
      SEARCH zzt FOR '0'.
      IF sy-subrc EQ 0.
        DELETE gt_item WHERE statu = '1'.
      ELSE.
        DELETE gt_item WHERE statu = '0' OR statu = '2'.
      ENDIF.
    ENDIF.

    IF gt_item[] IS INITIAL.
      MESSAGE '没有符合条件的数据' TYPE 'I' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.

  ELSEIF rr = 'X'.
    IF r3 = 'X'.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
                FROM ztpp006 AS a JOIN ztpp006_head AS b ON a~zrknum = b~zrknum
                WHERE a~zrknum = p_zrknum
      AND zrktp = 'CP'.
      IF gt_ztpp006[] IS NOT INITIAL.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_afpo FROM afpo FOR ALL ENTRIES IN gt_ztpp006
        WHERE aufnr = gt_ztpp006-aufnr.
        SORT gt_afpo BY aufnr.

        SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
        FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
        SORT gt_ztpp006_head BY zrknum.
      ENDIF.
    ELSEIF r4 = 'X'.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
          FROM ztpp006 JOIN ztpp006_head ON ztpp006~zrknum = ztpp006_head~zrknum
            WHERE ztpp006~zrknum = p_zrknum
      AND zrktp = 'FCP'.

      IF gt_ztpp006[] IS NOT INITIAL.
        SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
        FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
        SORT gt_ztpp006_head BY zrknum.

        SELECT * INTO TABLE gt_resb FROM resb FOR ALL ENTRIES IN gt_ztpp006
                        WHERE rsnum = gt_ztpp006-rsnum  AND rspos = gt_ztpp006-rspos.
        SORT gt_resb BY rsnum rspos.
      ENDIF.
    ENDIF.

    LOOP AT gt_ztpp006.
      MOVE-CORRESPONDING gt_ztpp006 TO gt_item.
      gt_item-amein = gt_ztpp006-meins.
      CLEAR gt_ztpp006_head.
      READ TABLE gt_ztpp006_head WITH KEY zrknum = gt_item-zrknum BINARY SEARCH.
      IF sy-subrc EQ 0.
        gt_item-erdat = gt_ztpp006_head-erdat.
        gt_item-zid = gt_ztpp006_head-zid.
        gt_item-werks = gt_ztpp006_head-werks.
        gt_item-arbpl = gt_ztpp006_head-arbpl.
        gt_item-kostl = gt_ztpp006_head-kostl.
        gt_item-ztxt4 = gt_ztpp006_head-ztxt4.
        gt_item-zrktp = gt_ztpp006_head-zrktp.
        gt_item-mblnr = gt_ztpp006_head-mblnr.
        gt_item-zmptp = gt_ztpp006_head-zmptp.
        gt_item-statu = gt_ztpp006_head-statu.
      ENDIF.
      AUTHORITY-CHECK OBJECT 'ZRKD'
        ID 'ZWERKS' FIELD gt_item-werks.”检查工厂权限
      IF sy-subrc NE 0.
        CLEAR gt_item.
        CONTINUE.
      ENDIF.
      APPEND gt_item.
      CLEAR gt_item.
    ENDLOOP.
    IF gt_item[] IS INITIAL.
      MESSAGE '没有符合条件的数据' TYPE 'I' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.
  ENDIF.
  IF r1 = 'X'.
    SELECT * INTO TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_item
    WHERE matnr = gt_item-matnr AND spras = 1.
  ELSE.
    IF r3 = 'X'.
      SELECT * INTO TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_afpo
      WHERE matnr = gt_afpo-matnr AND spras = 1.
    ELSE.
      SELECT * INTO TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_resb
      WHERE matnr = gt_resb-matnr AND spras = 1.
    ENDIF.
  ENDIF.
  SORT gt_makt BY matnr.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt FROM cskt FOR ALL ENTRIES IN gt_item
  WHERE kostl = gt_item-kostl.
  SORT gt_cskt BY kostl.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_temp FROM ztpp006 AS a JOIN ztpp006_head AS b “已创建入库单数量
            ON a~zrknum = b~zrknum
            FOR ALL ENTRIES IN gt_item
            WHERE aufnr = gt_item-aufnr
             AND loekz = ''
             AND ( statu = '0' OR statu = '2' ).

  order_objects-operations = 'X'.
  LOOP AT gt_item.

    IF gt_item-psmng = 0 .
      IF r3 = 'X'.
        READ TABLE gt_afpo WITH KEY aufnr = gt_item-aufnr BINARY SEARCH.
        IF sy-subrc EQ 0.
          gt_item-psmng = gt_afpo-psmng.
          gt_item-wemng = gt_afpo-wemng.
          gt_item-matnr = gt_afpo-matnr.
        ENDIF.
      ELSE.
        READ TABLE gt_resb WITH KEY rsnum = gt_item-rsnum  rspos = gt_item-rspos BINARY SEARCH.
        IF sy-subrc EQ 0.
          gt_item-psmng = gt_resb-bdmng.
          gt_item-wemng = gt_resb-enmng.
          gt_item-matnr = gt_resb-matnr.
        ENDIF.
      ENDIF.
    ENDIF.
    READ TABLE gt_makt WITH KEY matnr = gt_item-matnr BINARY SEARCH.
    IF sy-subrc EQ 0.
      gt_item-maktx = gt_makt-maktx.
    ENDIF.
    IF gt_item-kostl = ''.
      CLEAR operation[].
      CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
        EXPORTING
          number        = gt_item-aufnr
*         COLLECTIVE_ORDER       =
          order_objects = order_objects
        IMPORTING
          return        = return
        TABLES
          operation     = operation.
      IF sy-subrc EQ 0.
        READ TABLE operation INDEX 1.
        gt_item-arbpl = operation-work_center.
      ENDIF.
      SELECT SINGLE kostl INTO gt_item-kostl
         FROM crhd JOIN crco ON crhd~objid = crco~objid AND crhd~objty = crco~objty
      WHERE arbpl = gt_item-arbpl AND werks = gt_item-werks.

      SELECT SINGLE ltext INTO gt_item-ltext FROM cskt WHERE kostl = gt_item-kostl AND spras = 1.
    ENDIF.

    READ TABLE gt_cskt WITH KEY kostl = gt_item-kostl BINARY SEARCH.
    IF sy-subrc EQ 0.
      gt_item-ltext = gt_cskt-ltext.
    ENDIF.

    IF r3 = 'X'.
      gt_item-zrktp = 'CP'.
      gt_item-zrkd = '生产入库'.
    ELSE.
      gt_item-zrktp = 'FCP'.
      gt_item-zrkd = '副产品入库'.
    ENDIF.

    IF r1 = 'X'.
      LOOP AT gt_temp WHERE aufnr = gt_item-aufnr.
        gt_item-gamng1 = gt_item-gamng1 – gt_temp-gamng1.
        CLEAR gt_temp.
      ENDLOOP.
    ENDIF.

    MODIFY gt_item.
    CLEAR:gt_makt,gt_afpo,gt_resb,gt_cskt,gt_item.
  ENDLOOP.
  DELETE gt_item WHERE gamng1 <= 0.

  “fieldcat 字段填充
  CLEAR lt_fcat[].
  PERFORM frm_fill_fcat TABLES lt_fcat.
  is_grid_settings-edt_cll_cb = 'X'.

  “布局设置
  CLEAR ls_layo.
  ls_layo-zebra = 'X'.”斑马线
FORM frm_fill_fcat TABLES t_fcat TYPE lvc_t_fcat.
  “局部变量的定义
  DATA ls_fcat TYPE lvc_s_fcat.

  DEFINE m_fieldcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-coltext   = &2.
    ls_fcat-outputlen = &3.
    ls_fcat-edit   = &4.
    ls_fcat-ref_field = &5.
    ls_fcat-ref_table   = &6.
    ls_fcat-drdn_hndl = &7.
    ls_fcat-fix_column = &8.
    ls_fcat-inttype = &9.

    IF &1 EQ 'MARK'.
      ls_fcat-checkbox = 'X'.
    ENDIF.
     IF &1 EQ 'MATNR' OR &1 EQ 'AUFNR'.
       ls_fcat-no_zero = 'X'.
    ENDIF.

    IF &1 EQ 'PSMNG' OR &1 EQ 'WEMNG' OR &1 EQ 'GAMNG1'.
       ls_fcat-inttype = 'C'.
    ENDIF.
    APPEND ls_fcat TO t_fcat.
  END-OF-DEFINITION.
  IF r1 = 'X'.
  ELSE.
    m_fieldcat 'MARK'  '选择框' '5' 'X' '' ''   ''   'X'  ''.
  ENDIF.
  m_fieldcat 'ZRKNUM'  '入库单号' '14' '' ''  ''   ''  'X'   ''.
  m_fieldcat 'ZRSPOS'  '行项目' '4' '' ''  ''   ''  'X'   ''.
  m_fieldcat 'ZRKD'  '入库类型' '8' '' ''  ''   ''  ''    ''.
  m_fieldcat 'WERKS'  '工厂' '4' '' '' ''     ''  ''    ''.
  m_fieldcat 'AUFNR'  '工单号' '11' '' '' ''   ''  ''    ''.
  m_fieldcat 'MATNR'  '物料编码' '9' '' '' ''  ''   ''   ''.
  m_fieldcat 'MAKTX'  '物料描述' '20' '' '' ''    ''   ''    ''.
  m_fieldcat 'PSMNG'  '总数量' '10' '' '' ''    ''   ''     'C'.
  m_fieldcat 'WEMNG'  '收货数量' '10' '' '' ''    ''   ''     'C'.
  m_fieldcat 'AMEIN'  '计量单位' '4' '' '' ''    ''    ''     ''.
  m_fieldcat 'GAMNG1'  '应收数量' '11' 'X' '' 'ZTPP006'   ''   ''    'C'.
  m_fieldcat 'LGORT'  '库存地点' '' 'X' '' ''   ''   ''    ''.
  m_fieldcat 'ZTXT2'  '备注' '50' 'X' '' ''   ''   ''     ''.
  m_fieldcat 'ARBPL'  '工作中心' '8' '' '' ''    ''   ''     ''.
  m_fieldcat 'KOSTL'  '成本中心' '10' '' '' ''    ''   ''     ''.
  m_fieldcat 'LTEXT'  '成本中心描述' '' '' '' ''     ''   ''    ''.
  m_fieldcat 'ERDAT'  '入库单创建日期' '' '' ''  ''  ''    ''    ''.
  m_fieldcat 'ZID'  '用户名'  '' '' ''  ''  ''   ''     ''.
  m_fieldcat 'ZTXT4'  '打印次数' '4' '' ''  ''    ''   ''    ''.
  m_fieldcat 'LOEKZ'  '删除标识' '5' '' ''  ''    ''   ''    ''.
  m_fieldcat 'STATU'  '入库单状态' '5' '' ''  ''    ''   ''    ''.
  m_fieldcat 'AUART'  '订单类型' '' '' ''  ''    ''   ''    ''.
  m_fieldcat 'MBLNR'  '物料凭证号' '' '' ''  ''    ''   ''    ''.
  m_fieldcat 'ZMPTP'  '移动类型' '' '' ''  ''    ''   ''    ''.

* ALV显示数据
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = ls_layo
      i_callback_pf_status_set = 'FRM_SET_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      i_grid_settings          = is_grid_settings
      it_fieldcat_lvc          = lt_fcat[]
      i_save                   = 'A'
      i_grid_title             = i_grid_title
      it_events                = gt_events
    TABLES
      t_outtab                 = gt_item[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
* 数据显示失败
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

FORM frm_set_status USING rt_extab TYPE slis_t_extab.
*    获取gui状态
  DATA: wa_extab TYPE slis_extab.
  DATA: lt_extab TYPE TABLE OF sy-ucomm.
  IF rr <> 'X'.
    REFRESH: lt_extab.
    APPEND 'POST' TO lt_extab.
    APPEND 'RETURN' TO lt_extab.
  ENDIF.
  SET PF-STATUS 'STANDARD' EXCLUDING lt_extab.
ENDFORM.

FORM frm_user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.

  DATA: l_grid TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = l_grid.

  CALL METHOD l_grid->check_changed_data.
  CASE r_ucomm.
    WHEN 'ALL'.
      LOOP AT gt_item.
        gt_item-mark = 'X'.
        MODIFY gt_item .
        CLEAR gt_item.
      ENDLOOP.
    WHEN 'CLEAR'.
      LOOP AT gt_item .
        gt_item-mark = ''.
        MODIFY gt_item.
        CLEAR gt_item.
      ENDLOOP.
    WHEN 'PRINT'.
      IF actvt_02 <> 'X'.
        MESSAGE '无权限打印领料单' TYPE 'I' DISPLAY LIKE 'E' .
        RETURN.
      ELSE.
        PERFORM print.
      ENDIF.
    WHEN 'SAVE'.
      PERFORM save.
    WHEN 'DEL'.
      IF actvt_03 <> 'X'.
        MESSAGE '无权限删除领料单' TYPE 'I' DISPLAY LIKE 'E' .
        RETURN.
      ELSE.
        PERFORM delete.
      ENDIF.
    WHEN 'POST'.
      IF rr <> 'X'.
        MESSAGE '请在过账界面过账单据' TYPE 'I' DISPLAY LIKE 'E'.
        RETURN.
      ELSE.
        PERFORM post.
      ENDIF.
    WHEN 'RETURN'.
      IF rr <> 'X'.
        MESSAGE '请在过账界面过账单据' TYPE 'I' DISPLAY LIKE 'E'.
        RETURN.
      ELSE.
        PERFORM return.
      ENDIF.
    WHEN'&IC1'.
      READ TABLE gt_item INDEX rs_selfield-tabindex.
      CASE rs_selfield-sel_tab_field.
        WHEN '1-AUFNR'.
          SET PARAMETER ID 'ANR' FIELD rs_selfield-value.
          SET PARAMETER ID 'AUFNR' FIELD gt_item-aufnr.
          CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
        WHEN '1-MATNR'.
          SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
          SET PARAMETER ID 'MATNR' FIELD gt_item-matnr.
          CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
      ENDCASE.
    WHEN OTHERS.
  ENDCASE.
  rs_selfield-refresh = 'X'.

ENDFORM.

FORM print .
  CLEAR:gs_ztpp006,gt_ztpp006[].
  LOOP AT gt_item WHERE mark = 'X' AND zrknum <> ''.
    MOVE-CORRESPONDING gt_item TO gs_ztpp006.
    APPEND gs_ztpp006 TO gt_ztpp006.
    CLEAR:gs_ztpp006,gt_item.
  ENDLOOP.

  SORT gt_ztpp006 BY zrknum.
  DELETE ADJACENT DUPLICATES FROM gt_ztpp006 COMPARING zrknum.
  CHECK gt_ztpp006[] IS NOT INITIAL.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'ZSFPP_002'
    IMPORTING
      fm_name            = g_fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.

  gw_options-tdnewid = ''.    “New Spool
  gw_options-tdimmed = 'X'.
  gw_options-tddelete = 'X'.    “Delete Spool After Print
  gw_options-tdfinal = 'X'.
  gw_options-tdiexit = 'X'.    “Exit after printing in print preview
  gw_options-tddest = 'LP01'.

  gw_control-no_dialog = ''.
  gw_control-preview   = 'X'.
  gw_control-no_open   = 'X'.
  gw_control-no_close  = 'X'.

  CALL FUNCTION 'SSF_OPEN'    “打开打印窗口
    EXPORTING
      control_parameters = gw_control
      output_options     = gw_options
      user_settings      = ''
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.

  LOOP AT gt_ztpp006 INTO gs_ztpp006.
    LOOP AT gt_item WHERE zrknum = gs_ztpp006-zrknum.
      ls_ztpp006-zrknum = gt_item-zrknum.
      ls_ztpp006-zrspos = gt_item-zrspos.
      ls_ztpp006-meins = gt_item-amein.
      ls_ztpp006-aufnr = gt_item-aufnr.
      ls_ztpp006-werks = gt_item-werks.
      ls_ztpp006-matnr = gt_item-matnr.
      ls_ztpp006-gamng1 = gt_item-gamng1.
      ls_ztpp006-gamng2 = gt_item-gamng2.
      ls_ztpp006-lgort = gt_item-lgort.
      ls_ztpp006-kostl = gt_item-kostl.
      ls_ztpp006-ltext = gt_item-ltext.
      ls_ztpp006-maktx = gt_item-maktx.
      ls_ztpp006-zrktp = gt_item-zrktp.
      ls_ztpp006-ztxt2 = gt_item-ztxt2.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = ls_ztpp006-aufnr
        IMPORTING
          output = ls_ztpp006-aufnr.
      APPEND ls_ztpp006 TO lt_out.
      CLEAR:gt_item,ls_ztpp006.
    ENDLOOP.

    CALL FUNCTION g_fm_name
      EXPORTING
        control_parameters = gw_control
        output_options     = gw_options
      TABLES
        it_out             = lt_out[]
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.

    CLEAR:gs_ztpp006,lt_out[].
  ENDLOOP.

  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      job_output_info  = job_output_info
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      OTHERS           = 4.

  IF job_output_info-outputdone = 'X'.
    LOOP AT gt_ztpp006.
      SELECT SINGLE * INTO wt_ztpp006 FROM ztpp006_head WHERE zrknum = gt_ztpp006-zrknum.
      wt_ztpp006-ztxt4 = wt_ztpp006-ztxt4 + 1.
      MODIFY ztpp006_head FROM wt_ztpp006.
      CLEAR:gt_ztpp006,wt_ztpp006.
    ENDLOOP.
  ENDIF.

ENDFORM.

FORM save .
  DATA:str TYPE i.
  DATA:znum TYPE string.
  CLEAR:gs_ztpp006,gt_ztpp006[],gs_ztpp006_head.
  IF r1 = 'X'.
    SELECT MAX( zrknum ) INTO gs_ztpp006_head-zrknum FROM ztpp006_head WHERE erdat = sy-datum.
    IF gs_ztpp006_head-zrknum IS NOT INITIAL.
      CLEAR:znum.
      znum = gs_ztpp006_head-zrknum+6(9).
      znum = znum + 1.
      gs_ztpp006_head-zrknum = 'XXWORC' && znum.
    ELSE.
      gs_ztpp006_head-zrknum = 'XXWORC' && sy-datum+2(6) && '001'.
    ENDIF.

    gs_ztpp006_head-erdat = sy-datum.
    gs_ztpp006_head-uzeit = sy-uzeit.
    gs_ztpp006_head-zid = sy-uname.
    gs_ztpp006_head-statu = '0'.
    MODIFY ztpp006_head FROM gs_ztpp006_head.
    CLEAR str.
    LOOP AT gt_item WHERE gamng1 > 0 AND zrknum = ''.
      IF gt_item-gamng1 > gt_item-psmng – gt_item-wemng.
        MESSAGE '工单号' && gt_item-aufnr && '入库数量不能大于未清数!' TYPE 'I' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
      str = str + 1.
      gt_ztpp006-zrspos = str.
      gt_ztpp006-zrknum = gs_ztpp006_head-zrknum.
      gt_ztpp006-aufnr = gt_item-aufnr.
      gt_ztpp006-rsnum = gt_item-rsnum.
      gt_ztpp006-rspos = gt_item-rspos.
      gt_ztpp006-matnr = gt_item-matnr.
      gt_ztpp006-ztxt2 = gt_item-ztxt2.
      gt_ztpp006-meins = gt_item-amein.
      gt_ztpp006-gamng1 = gt_item-gamng1.
      gt_ztpp006-gamng2 = gt_item-gamng2.
      gt_ztpp006-lgort = gt_item-lgort.
      gt_ztpp006-auart = gt_item-auart.
      APPEND gt_ztpp006.
      gt_item-zrknum = gs_ztpp006_head-zrknum.
      gt_item-zrspos = gt_ztpp006-zrspos.
      gt_item-erdat = gs_ztpp006_head-erdat.
      gt_item-zid = gs_ztpp006_head-zid.
      gt_item-statu = gs_ztpp006_head-statu.
      MODIFY gt_item.

      gs_ztpp006_head-werks = gt_item-werks.
      gs_ztpp006_head-zrktp = gt_item-zrktp.
      gs_ztpp006_head-arbpl = gt_item-arbpl.
      gs_ztpp006_head-kostl = gt_item-kostl.

      CLEAR:gt_item,gt_ztpp006.
    ENDLOOP.
    IF gt_ztpp006[] IS NOT INITIAL.
      MODIFY ztpp006 FROM TABLE gt_ztpp006.
      MODIFY ztpp006_head FROM gs_ztpp006_head.
      COMMIT WORK.
      MESSAGE '入库单号:' && gs_ztpp006_head-zrknum && '已生成' TYPE 'S'.
    ELSE.
      DELETE ztpp006_head FROM gs_ztpp006_head.
    ENDIF.

  ELSE.
    LOOP AT gt_item WHERE zrknum <> '' AND mblnr = '' AND  mark = 'X' AND loekz = ''.
      IF gt_item-zid <> sy-uname AND rr <> 'X'.
        MESSAGE '不能修改' && gt_item-zid && '创建的入库单!' TYPE 'I' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
      IF gt_item-gamng1 > gt_item-psmng – gt_item-wemng.
        MESSAGE '工单号' && gt_item-aufnr && '入库数量不能大于未清数!' TYPE 'I' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.
      CLEAR gt_ztpp006.
      SELECT SINGLE * INTO gt_ztpp006 FROM ztpp006
      WHERE zrknum = gt_item-zrknum AND zrspos = gt_item-zrspos.
      IF sy-subrc EQ 0.
        gt_ztpp006-gamng1 = gt_item-gamng1.
        gt_ztpp006-ztxt2 = gt_item-ztxt2.
        MODIFY ztpp006 FROM gt_ztpp006.
      ENDIF.
      CLEAR:gt_item.
    ENDLOOP.
    IF sy-subrc <> 0.
      MESSAGE '入库单号:' && gt_ztpp006-zrknum && '不允许修改' TYPE 'E'.
    ENDIF.
  ENDIF.
ENDFORM.
FORM delete .
  CLEAR:gs_ztpp006,gt_ztpp006[].
  LOOP AT gt_item WHERE mark = 'X' AND zrknum <> '' AND mblnr = '' AND loekz = ''.
    SELECT SINGLE * INTO gs_ztpp006 FROM ztpp006 WHERE zrknum = gt_item-zrknum AND zrspos = gt_item-zrspos.
    IF sy-subrc EQ 0.
      gs_ztpp006-loekz = 'X'.
      APPEND  gs_ztpp006 TO gt_ztpp006.
      gt_item-loekz = 'X'.
    ENDIF.
    MODIFY gt_item.
    CLEAR gs_ztpp006.
  ENDLOOP.
  IF gt_ztpp006[] IS NOT INITIAL.
    MODIFY ztpp006 FROM TABLE gt_ztpp006.
    COMMIT WORK.
    MESSAGE '入库单号删除成功' TYPE 'S'.
  ELSE.
    MESSAGE '入库单号不允许删除' TYPE 'E'.
  ENDIF.
ENDFORM.

FORM show_values .
  SELECT bname name_last INTO TABLE gt_name
  FROM usr21 JOIN adrp ON adrp~persnumber = usr21~persnumber.
  SORT gt_name.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'BNAME'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_ZID-LOW'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_name
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.

FORM show_values1 .
  SELECT bname name_last INTO TABLE gt_name
  FROM usr21 JOIN adrp ON adrp~persnumber = usr21~persnumber.
  SORT gt_name.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'BNAME'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_ZID-HIGH'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_name
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.
FORM show_values2 .
  SELECT zrknum “TYPE ztpp005-zbfnum,
*         aufnr  “TYPE ztpp005-aufnr,
         erdat  “TYPE ztpp005-erdat,
         zid    “TYPE ztpp005-zid,
         werks  “TYPE ztpp005-werks,
         zrktp  “TYPE ztpp005-loekz,
  INTO TABLE gt_zrkdh FROM ztpp006_head.
  SORT gt_zrkdh BY zrknum.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ZRKNUM'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_ZBFNUM-LOW'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_zrkdh
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.
FORM show_values3 .
  SELECT zrknum “TYPE ztpp005-zbfnum,
*          aufnr  “TYPE ztpp005-aufnr,
          erdat  “TYPE ztpp005-erdat,
          zid    “TYPE ztpp005-zid,
          werks  “TYPE ztpp005-werks,
          zrktp  “TYPE ztpp005-loekz,
  INTO TABLE gt_zrkdh FROM ztpp006_head.
  SORT gt_zrkdh BY zrknum.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ZRKNUM'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_ZBFNUM-HIGH'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_zrkdh
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.

FORM show_values4 .
  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt FROM cskt.
  SORT gt_cskt BY kostl.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'KOSTL'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_KOSTL-LOW'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_cskt
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.
FORM show_values5 .
  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt FROM cskt.
  SORT gt_cskt BY kostl.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'KOSTL'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_KOSTL-HIGH'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_cskt
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.

ENDFORM.
*&———————————————————————*
*& Form post
*&———————————————————————*
*& text
*&———————————————————————*
*& –>  p1        text
*& <–  p2        text
*&———————————————————————*
FORM post .
  CLEAR :gs_ztpp006,wt_ztpp006.
  REFRESH gt_ztpp006.
  DATA:p_message TYPE string.
  READ TABLE gt_item WITH KEY mark = 'X'.
  IF  sy-subrc <> 0.
    MESSAGE '请选择要过账的单据' TYPE 'E'.
  ENDIF.
  IF p_data = '00000000'.
    p_data = sy-datum.
  ENDIF.

  goodsmvt_header-pstng_date = p_data.
  goodsmvt_header-doc_date = sy-datum.

  ” 01: Goods receipt for purchase order
  ” 02: Goods receipt for production order
  ” 03: Goods issue
  ” 04: Transfer posting
  ” 05: Other goods receipts
  ” 06: Reversal of goods movements
  ” 07: Subsequent adjustment to a subcontract order
  IF r3 = 'X'.
    goodsmvt_code = '02' .
  ELSEIF r4 = 'X'.
    goodsmvt_code = '03' .
  ENDIF.
  REFRESH goodsmvt_item[].
  LOOP AT gt_item WHERE loekz = '' AND ( mblnr = '' OR zmptp = '102' OR zmptp = '532' ) AND gamng1 > 0.
    IF gt_item-gamng1 > gt_item-psmng – gt_item-wemng.
      MESSAGE '工单号' && gt_item-aufnr && '入库数量不能大于未清数!' TYPE 'I' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.

    goodsmvt_item-plant = gt_item-werks.
    goodsmvt_item-material = gt_item-matnr.
    goodsmvt_item-stge_loc = gt_item-lgort.
    goodsmvt_item-entry_qnt = gt_item-gamng1.
    goodsmvt_item-entry_uom = gt_item-amein.

    IF r3 = 'X'.
      goodsmvt_item-move_type = '101'.
      goodsmvt_item-orderid = gt_item-aufnr.
      goodsmvt_item-mvt_ind = 'F'.
*      goodsmvt_item-order_itno = '10'.
    ELSEIF r4 = 'X'.
      goodsmvt_item-move_type = '531'.
      goodsmvt_item-reserv_no = gt_item-rsnum.
      goodsmvt_item-res_item = gt_item-rspos.
    ENDIF.

    goodsmvt_header-header_txt = gt_item-zrknum.

    APPEND goodsmvt_item.
    CLEAR :goodsmvt_item,gt_item.
  ENDLOOP.
  IF goodsmvt_item[] IS NOT INITIAL.
    CLEAR:t_return[],l_mblnr,goodsmvt_headret.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        goodsmvt_header  = goodsmvt_header
        goodsmvt_code    = goodsmvt_code
      IMPORTING
        goodsmvt_headret = goodsmvt_headret
        materialdocument = l_mblnr
      TABLES
        goodsmvt_item    = goodsmvt_item
        return           = t_return.
  ENDIF.
  IF l_mblnr <> ''.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    LOOP AT gt_item WHERE ( mblnr = '' OR zmptp = '102' OR zmptp = '532') AND loekz = '' .
      gt_item-mblnr = l_mblnr.
      IF r3 = 'X'.
        gt_item-zmptp = '101'.
      ELSEIF r4 = 'X'.
        gt_item-zmptp = '531'.
      ENDIF.

      SELECT SINGLE * INTO gt_ztpp006 FROM ztpp006 WHERE zrknum = gt_item-zrknum AND zrspos = gt_item-zrspos.
      gt_ztpp006-gamng1 = gt_item-gamng1.
      gt_ztpp006-lgort = gt_item-lgort.
      gt_ztpp006-ztxt2 = gt_item-ztxt2.
      APPEND gt_ztpp006.
      MODIFY gt_item .
      CLEAR :gt_ztpp006, gt_item.
    ENDLOOP.
    MESSAGE '物料凭证' && l_mblnr && '过账成功!' TYPE 'S'.

    SELECT SINGLE * INTO wt_ztpp006 FROM ztpp006_head WHERE zrknum = p_zrknum.
    wt_ztpp006-mblnr = l_mblnr.
    IF r3 = 'X'.
      wt_ztpp006-zmptp = '101'.
    ELSEIF r4 = 'X'.
      wt_ztpp006-zmptp = '531'.
    ENDIF.
    wt_ztpp006-statu = '1'.
    MODIFY ztpp006_head FROM wt_ztpp006.
    MODIFY ztpp006 FROM TABLE  gt_ztpp006.
    CLEAR  :gt_ztpp006[],wt_ztpp006.

  ELSE.
    CLEAR p_message.
    LOOP AT t_return WHERE type = 'E' OR type = 'A'.
      IF p_message = ''.
        p_message = t_return-message .
      ELSE.
        p_message = p_message && t_return-message .
      ENDIF.
    ENDLOOP.
    MESSAGE p_message TYPE 'E'.
  ENDIF.
ENDFORM.
*&———————————————————————*
*& Form return
*&———————————————————————*
*& text
*&———————————————————————*
*& –>  p1        text
*& <–  p2        text
*&———————————————————————*
FORM return .
  DATA:s_mkpf  TYPE mkpf.
  CLEAR :wt_ztpp006.
  DATA:p_message TYPE string.
  DATA:goodsmvt_headret      TYPE bapi2017_gm_head_ret,
       l_return              TYPE TABLE OF bapiret2 WITH HEADER LINE,
       t_goodsmvt_matdocitem TYPE TABLE OF bapi2017_gm_item_04 WITH HEADER LINE.

  READ TABLE gt_item INDEX 1.
  IF gt_item-mblnr <> '' AND ( gt_item-zmptp = '101' OR gt_item-zmptp = '531' ).
    SELECT SINGLE * INTO s_mkpf FROM mkpf WHERE mblnr = gt_item-mblnr.
    SELECT zeile INTO TABLE t_goodsmvt_matdocitem FROM mseg WHERE mblnr = gt_item-mblnr.
    IF sy-subrc EQ 0.
      IF p_data = '00000000'.
        p_data = sy-datum.
      ENDIF.
      CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
        EXPORTING
          materialdocument    = s_mkpf-mblnr
          matdocumentyear     = s_mkpf-mjahr
          goodsmvt_pstng_date = p_data
          goodsmvt_pr_uname   = sy-uname
        IMPORTING
          goodsmvt_headret    = goodsmvt_headret
        TABLES
          return              = l_return
          goodsmvt_matdocitem = t_goodsmvt_matdocitem.

      IF goodsmvt_headret IS NOT INITIAL .
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        LOOP AT gt_item.
          gt_item-mblnr = goodsmvt_headret-mat_doc.
          IF r3 = 'X'.
            gt_item-zmptp = '102'.
          ELSEIF r4 = 'X'.
            gt_item-zmptp = '532'.
          ENDIF.
          gt_item-statu = '2'.
          MODIFY gt_item .
          CLEAR gt_item.
        ENDLOOP.
        MESSAGE '物料凭证' && goodsmvt_headret-mat_doc && '冲销成功!' TYPE 'S'.
        SELECT SINGLE * INTO wt_ztpp006 FROM ztpp006_head WHERE zrknum = p_zrknum.
        wt_ztpp006-mblnr = goodsmvt_headret-mat_doc.
        IF r3 = 'X'.
          wt_ztpp006-zmptp = '102'.
        ELSEIF r4 = 'X'.
          wt_ztpp006-zmptp = '532'.
        ENDIF.
        wt_ztpp006-statu = '2'.
        MODIFY ztpp006_head FROM wt_ztpp006.

      ELSE.
        CLEAR p_message.
        LOOP AT l_return WHERE type = 'E' OR type = 'A'.
          IF p_message = ''.
            p_message = l_return-message .
          ELSE.
            p_message = p_message && l_return-message .
          ENDIF.
        ENDLOOP.
        MESSAGE p_message TYPE 'E'.
      ENDIF.

    ELSE.
      MESSAGE '凭证不允许冲销' TYPE 'E'.
    ENDIF.

  ENDIF.
ENDFORM.
*&———————————————————————*
*& Form show_values6
*&———————————————————————*
*& text
*&———————————————————————*
*& –>  p1        text
*& <–  p2        text
*&———————————————————————*
FORM show_values6 .
  SELECT zrknum “TYPE ztpp005-zbfnum,
*          aufnr  “TYPE ztpp005-aufnr,
          erdat  “TYPE ztpp005-erdat,
          zid    “TYPE ztpp005-zid,
          werks  “TYPE ztpp005-werks,
          zrktp  “TYPE ztpp005-loekz,
  INTO TABLE gt_zrkdh FROM ztpp006_head.
  SORT gt_zrkdh BY zrknum.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ZRKNUM'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'P_ZBFNUM'
      value_org       = 'S'
*     callback_program = sy-repid
*     callback_form   = 'CM_FORM'
    TABLES
      value_tab       = gt_zrkdh
*     field_tab       = lt_field_tab
*     return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.

  ENDIF.
ENDFORM.

© 版权声明

相关文章

暂无评论

none
暂无评论...