凭证冲销、取消

FUNCTION zrfc_mes_017 .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_MBLNR) TYPE  MBLNR OPTIONAL
*"     VALUE(I_ZEILE) TYPE  MBLPO OPTIONAL
*"     VALUE(I_MJAHR) TYPE  MJAHR OPTIONAL
*"     VALUE(I_BKTXT) TYPE  BKTXT OPTIONAL
*"     VALUE(I_VBELN) TYPE  VBELN_VL OPTIONAL
*"  EXPORTING
*"     VALUE(ZSTATUS) TYPE  CHAR01
*"     VALUE(ZMSG) TYPE  CHAR50
*"     VALUE(ZMBLNR) TYPE  MBLNR
*"     VALUE(ZYEAR) TYPE  MJAHR
*"----------------------------------------------------------------------
  DATA lv_bapi2017_gm_head_ret  TYPE bapi2017_gm_head_ret."冲销PO收货的返回物料凭证号
  DATA : lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
  DATA  :lt_goodsmvt_matdocitem TYPE TABLE OF  bapi2017_gm_item_04  WITH HEADER LINE .
  DATA: lv_time TYPE erzet.

****************过账日期 QJ 20240807****************STA
  DATA: lv_budat TYPE mkpf-budat.
  SELECT SINGLE budat
    FROM mkpf INTO lv_budat
    WHERE mkpf~mblnr = i_mblnr AND mkpf~mjahr = i_mjahr.
****************过账日期 QJ 20240807****************END

  IF i_vbeln IS NOT INITIAL.
    "该函数在此版中存在一定问题,先用录屏替代
*    DATA   ls_emkpf TYPE emkpf.
*    DATA   lt_mesgx TYPE mesg OCCURS 0 WITH HEADER LINE.
*
    i_vbeln = |{ i_vbeln ALPHA = IN }|. "增加前导零
*
*    CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
*      EXPORTING
*        i_vbeln                   = i_vbeln
*        i_budat                   = sy-datum
*        i_tcode                   = 'VL09'
*        i_vbtyp                   = 'J'
*      IMPORTING
*        es_emkpf                  = ls_emkpf
*      TABLES
*        t_mesg                    = lt_mesgx
*      EXCEPTIONS
*        error_reverse_goods_issue = 1
*        OTHERS                    = 2.
*    COMMIT WORK.
*    WAIT UP TO 1 SECONDS.
*    IF ls_emkpf  IS NOT INITIAL.
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*        EXPORTING
*          wait = 'X'.
*      zstatus = 'S'.
*      zmsg = '冲销成功'.
*      zmblnr = ls_emkpf-mblnr.
*      zyear = ls_emkpf-mjahr.
*    ELSE.
*      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*      zstatus = 'E'.
*      zmsg = '冲销失败'.
*      LOOP AT lt_return.
*
*        zmsg  =  zmsg  && lt_mesgx-text .
*      ENDLOOP.
*    ENDIF.


    PERFORM bdc_dynpro USING   'RVV50L09'    '1000'.
    PERFORM bdc_field  USING   'BDC_CURSOR'  'I_VSTEL-LOW'.
    PERFORM bdc_field  USING   'I_VBELN-LOW'  i_vbeln.
    PERFORM bdc_field  USING   'LF_ANAUS'    'X'.
    PERFORM bdc_field  USING   'BDC_OKCODE'  '=ONLI'.


    CALL TRANSACTION 'VL09' USING bdcdata
                                    MODE  gv_mode
                                    UPDATE 'S'
*                                    options from X_OPTIONS
                                    MESSAGES INTO messtab.

    DATA: msgno   TYPE sy-msgno,
          message TYPE message.
    READ TABLE messtab WITH KEY msgtyp = 'S' .
*    IF sy-subrc = 0.
    IF messtab[] IS INITIAL OR sy-subrc = 0.

      zstatus = 'S'.
      zmsg = '冲销成功'.
      SELECT mblnr,mjahr INTO TABLE @DATA(gt_tab) FROM mkpf WHERE le_vbeln = @i_vbeln.
      SORT gt_tab BY mblnr.
      READ TABLE gt_tab INTO DATA(gs_tab) INDEX lines( gt_tab ).
      IF sy-subrc = 0.
        zmblnr = gs_tab-mblnr.
        zyear  = gs_tab-mjahr.
      ENDIF.
    ELSE.
      LOOP AT messtab WHERE msgtyp = 'E' OR msgtyp = 'A'.
        MOVE messtab-msgnr TO msgno.
        CALL FUNCTION 'WRITE_MESSAGE'
          EXPORTING
            msgid = messtab-msgid
            msgno = msgno
            msgty = messtab-msgtyp
            msgv1 = messtab-msgv1
            msgv2 = messtab-msgv2
            msgv3 = messtab-msgv3
            msgv4 = messtab-msgv4
          IMPORTING
            messg = message.

*      if MESSTAB-MSGTYP = 'E'.
        CONCATENATE l_msg message-msgtx ';' INTO l_msg .
        CLEAR: msgno,message.
*      endif.
      ENDLOOP.
      zstatus = 'E'.
      zmsg = '冲销失败'.
      zmsg  =  zmsg  &&  l_msg.
    ENDIF.









  ELSE.
    IF i_zeile IS INITIAL.
      CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
        EXPORTING
          materialdocument    = i_mblnr
          matdocumentyear     = i_mjahr
          goodsmvt_pstng_date = lv_budat
    "     goodsmvt_pr_uname   = 'RFCUSER'
        IMPORTING
          goodsmvt_headret    = lv_bapi2017_gm_head_ret
        TABLES
          return              = lt_return.
*    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*      EXPORTING
*        wait = 'X'.







      IF lv_bapi2017_gm_head_ret-mat_doc  IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        zstatus = 'S'.
        zmsg = '冲销成功'.
        zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
        zyear = lv_bapi2017_gm_head_ret-doc_year.



      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        zstatus = 'E'.
        zmsg = '冲销失败'.
        LOOP AT lt_return.

          zmsg  =  zmsg  && lt_return-message  .
        ENDLOOP.
        " zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
        " zyear = lv_bapi2017_gm_head_ret-doc_year.
      ENDIF.


    ELSE.
      lt_goodsmvt_matdocitem-matdoc_item = i_zeile.
      APPEND lt_goodsmvt_matdocitem.
      CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
        EXPORTING
          materialdocument    = i_mblnr
          matdocumentyear     = i_mjahr
          goodsmvt_pstng_date = lv_budat
    "     goodsmvt_pr_uname   = 'RFCUSER'
        IMPORTING
          goodsmvt_headret    = lv_bapi2017_gm_head_ret
        TABLES
          goodsmvt_matdocitem = lt_goodsmvt_matdocitem[]
          return              = lt_return.


      IF lv_bapi2017_gm_head_ret-mat_doc  IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        zstatus = 'S'.
        zmsg = '冲销成功'.
        zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
        zyear = lv_bapi2017_gm_head_ret-doc_year.



      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        zstatus = 'E'.
        zmsg = '冲销失败'.
        LOOP AT lt_return.

          zmsg  =  zmsg  && lt_return-message  .
        ENDLOOP.
        " zmblnr = lv_bapi2017_gm_head_ret-mat_doc.
        "  zyear = lv_bapi2017_gm_head_ret-doc_year.
      ENDIF.


    ENDIF.

  ENDIF.



ENDFUNCTION.
接口名称取消物料凭证接口接口描述 函数名称ZRFC_MES_017
接口表:
字段描述SAP字段WMS来源多语言备注
字段是否必填数据类型长度字段类型
表头参数
物料凭证号I_MBLNRCHAR10凭证取消后,不能对取消凭证进行再取消
物料凭证行号I_ZEILENUMC4如果为空则整个凭证取消
凭证年度I_MJAHRNUMC4
抬头备注I_BKTXTCHAR25
交货单I_VBELNCHAR10如果不为空,即冲销交货单
行参数
ITAB
返回结构字段
字段描述SAP字段WMS备注
字段是否必填数据类型长度字段类型
处理结果状态ZSTATUSCHAR1  S:成功;E:失败
处理结果信息ZMSGCHAR50   
物料凭证号ZMBLNRCHAR10   
凭证年度ZYEARCHAR4   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值