SAP-物料凭证反冲

&---------------------------------------------------------------------
*& Report YTEST05
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT ytest05.

METHOD zeq_ii_si_materialdoc_reverse~si_materialdoc_reverse.
*** **** INSERT IMPLEMENTATION HERE **** ***

DATA: table1    TYPE  STANDARD TABLE OF zeq_dt_materialdoc_reverse_upl,
      table1_wa TYPE zeq_dt_materialdoc_reverse_upl,
      l_header  TYPE zeq_dt_tec_header.
  •  定义bapi变量
    

    DATA: t_item TYPE TABLE OF bapi2017_gm_item_04,
    l_pstngdate TYPE d,
    l_materialdocument TYPE bapi2017_gm_head_02-mat_doc,
    l_matdocumentyear TYPE bapi2017_gm_head_02-doc_year,
    l_goodsmvt_headret TYPE bapi2017_gm_head_ret,
    table_return TYPE STANDARD TABLE OF bapiret2,
    table_return_wa TYPE bapiret2.
    ** 定义下传的类.
    DATA: obj1 TYPE REF TO zeq_co_si_upinfo_retun_downloa,
    row_date TYPE zeq_dt_upinfo_retun_download_u,
    out_para TYPE zeq_mt_upinfo_retun_download,
    row_date_header TYPE zeq_dt_tec_header.
    DATA:
    ls_locked TYPE zzmt_materialdoc_reverse,
    l_id TYPE indx_srtfd.

    DATA: l_doc106 TYPE bapi2017_gm_head_02-mat_doc,
    l_doc302 TYPE bapi2017_gm_head_02-mat_doc.

    CLEAR table1_wa.
    CLEAR l_header.
    l_header-receiver = input-mt_materialdoc_reverse-dt_tec_header-sender.
    l_header-message_id = input-mt_materialdoc_reverse-dt_tec_header-message_id.
    l_header-interface_name = input-mt_materialdoc_reverse-dt_tec_header-interface_name.
    l_header-plant = input-mt_materialdoc_reverse-dt_tec_header-plant.
    l_header-refeid = input-mt_materialdoc_reverse-dt_tec_header-refeid.
    20100401 增加锁定处理 by maguoyu******


  •  modify by yuxl   2008/11/04*
    

    LOOP AT input-mt_materialdoc_reverse-materialdoc_reverse INTO table1_wa.
    SEARCH table1_wa-mat_doc FOR ‘,’.
    IF sy-subrc <> 0.
    l_materialdocument = table1_wa-mat_doc.
    l_matdocumentyear = table1_wa-doc_year.
    2014/04/02 ma*****************************
    IF table1_wa-doc_year IS INITIAL.
    row_date-messageid_send = l_header-message_id.
    row_date-bill_of_lading = table1_wa-standby_1.
    row_date-header_txt = l_header-plant.

        row_date-ref_doc_no     =  l_header-refeid.
        row_date-type = 'E'.
        row_date-message = '凭证年度不能为空!'.
        APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
        CLEAR table1_wa.
        CONTINUE.
      ENDIF.
    

2014/04/02 ma*****************************
20120906 by magy
IF table1_wa-standby_1 IS NOT INITIAL.
l_pstngdate = table1_wa-standby_1.
ELSE.
SELECT SINGLE budat FROM mkpf INTO l_pstngdate WHERE mblnr = l_materialdocument AND mjahr = l_matdocumentyear.
ENDIF.

*反冲指定凭证的行项目 20190515
IF table1_wa-standby_2 IS NOT INITIAL.
SPLIT table1_wa-standby_2 AT ‘+’ INTO TABLE t_item.
ENDIF.
*反冲指定凭证的行项目 20190515

2013/05/30 供应处已结算的物料凭证禁止反冲
TRY.
CALL FUNCTION ‘BAPI_GOODSMVT_CANCEL’
EXPORTING
materialdocument = l_materialdocument
matdocumentyear = l_matdocumentyear
goodsmvt_pstng_date = l_pstngdate

  •           GOODSMVT_PR_UNAME   =
            IMPORTING
              goodsmvt_headret    = l_goodsmvt_headret
            TABLES
              goodsmvt_matdocitem = t_item
              return              = table_return.
    
  •              GOODSMVT_MATDOCITEM       =
      ENDTRY.
    

** *** * 数据上传信息反馈
LOOP AT table_return INTO table_return_wa.
ENDLOOP.

    IF table_return_wa-message <> '' .
      row_date-messageid_send = l_header-message_id.
      row_date-bill_of_lading = table1_wa-standby_1.
      row_date-header_txt     = l_header-plant.
      row_date-ref_doc_no     =  l_header-refeid.
      row_date-type = 'E'.
      row_date-message = table_return_wa-message.
      APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
  •    ENDIF.
      ELSEIF
      l_goodsmvt_headret <> ''.
        row_date-messageid_send = l_header-message_id.
        row_date-bill_of_lading = table1_wa-standby_1.
        row_date-header_txt     = l_header-plant.
        row_date-ref_doc_no     =  l_header-refeid.
        row_date-type = 'S'.
        row_date-mat_doc = l_goodsmvt_headret-mat_doc.
        row_date-mjahr = l_goodsmvt_headret-doc_year.
        APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
        COMMIT WORK.
      ENDIF.
      CLEAR table1_wa. "20120912 增加
      REFRESH t_item.
    ELSE. "20230105--先302,再106
      SPLIT table1_wa-mat_doc AT ',' INTO l_doc302 l_doc106.
    
      l_materialdocument = l_doc106.
      l_matdocumentyear  = table1_wa-doc_year.
      IF table1_wa-doc_year IS INITIAL.
        row_date-messageid_send = l_header-message_id.
        row_date-bill_of_lading = table1_wa-standby_1.
        row_date-header_txt     = l_header-plant.
        row_date-ref_doc_no     =  l_header-refeid.
        row_date-type = 'E'.
        row_date-message = '凭证年度不能为空!'.
        APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
        CLEAR table1_wa.
        CONTINUE.
      ENDIF.
    

2014/04/02 ma*****************************
IF table1_wa-standby_1 IS NOT INITIAL.
l_pstngdate = table1_wa-standby_1.
ELSE.
SELECT SINGLE budat FROM mkpf INTO l_pstngdate WHERE mblnr = l_materialdocument AND mjahr = l_matdocumentyear.
ENDIF.

*反冲指定凭证的行项目 20190515
IF table1_wa-standby_2 IS NOT INITIAL.
SPLIT table1_wa-standby_2 AT ‘+’ INTO TABLE t_item.
ENDIF.

    TRY.
        CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
          EXPORTING
            materialdocument    = l_materialdocument
            matdocumentyear     = l_matdocumentyear
            goodsmvt_pstng_date = l_pstngdate
  •           GOODSMVT_PR_UNAME   =
            IMPORTING
              goodsmvt_headret    = l_goodsmvt_headret
            TABLES
              goodsmvt_matdocitem = t_item
              return              = table_return.
    
  •              GOODSMVT_MATDOCITEM       =
      ENDTRY.
    

** *** * 数据上传信息反馈
LOOP AT table_return INTO table_return_wa.
ENDLOOP.
IF table_return_wa-message <> ‘’ AND table_return_wa-message NS ‘短缺未限制使用的SL’.
row_date-messageid_send = l_header-message_id.
row_date-bill_of_lading = table1_wa-standby_1.
row_date-header_txt = l_header-plant.
row_date-ref_doc_no = l_header-refeid.
row_date-type = ‘E’.
row_date-message = table_return_wa-message.
APPEND row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

  •    ENDIF.
      ELSEIF l_goodsmvt_headret <> ''.
    
  •      row_date-messageid_send = l_header-message_id.
    
  •      row_date-bill_of_lading = table1_wa-standby_1.
    
  •      row_date-header_txt     = l_header-plant.
    
  •      row_date-ref_doc_no     =  l_header-refeid.
    
  •      row_date-type = 'S'.
    
  •      row_date-mat_doc = l_goodsmvt_headret-mat_doc.
    
  •      row_date-mjahr = l_goodsmvt_headret-doc_year.
    
  •      APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
    
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
        """302
        CLEAR:l_materialdocument,table_return,table_return_wa,l_goodsmvt_headret.
        l_materialdocument = l_doc302.
        TRY.
            CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
              EXPORTING
                materialdocument    = l_materialdocument
                matdocumentyear     = l_matdocumentyear
                goodsmvt_pstng_date = l_pstngdate
    
  •             GOODSMVT_PR_UNAME   =
              IMPORTING
                goodsmvt_headret    = l_goodsmvt_headret
              TABLES
                goodsmvt_matdocitem = t_item
                return              = table_return.
    
  •              GOODSMVT_MATDOCITEM       =
        ENDTRY.
    
        LOOP AT table_return INTO table_return_wa.
        ENDLOOP.
        IF table_return_wa-message <> '' .
          row_date-messageid_send =  l_header-message_id.
          row_date-bill_of_lading =  table1_wa-standby_1.
          row_date-header_txt     =  l_header-plant.
          row_date-ref_doc_no     =  l_header-refeid.
          row_date-type = 'E'.
          row_date-message = table_return_wa-message.
          APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
    
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
  •    ENDIF.
        ELSEIF
          l_goodsmvt_headret <> ''.
          row_date-messageid_send =  l_header-message_id.
          row_date-bill_of_lading =  table1_wa-standby_1.
          row_date-header_txt     =  l_header-plant.
          row_date-ref_doc_no     =  l_header-refeid.
          row_date-type = 'S'.
          row_date-mat_doc        = l_goodsmvt_headret-mat_doc.
          row_date-mjahr          = l_goodsmvt_headret-doc_year.
    
  •        APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
    
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
    
          WAIT UP TO 1 SECONDS.
          """106
          CLEAR:l_materialdocument,table_return,table_return_wa,l_goodsmvt_headret.
          l_materialdocument = l_doc106.
          TRY.
              CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
                EXPORTING
                  materialdocument    = l_materialdocument
                  matdocumentyear     = l_matdocumentyear
                  goodsmvt_pstng_date = l_pstngdate
    
  •               GOODSMVT_PR_UNAME   =
                IMPORTING
                  goodsmvt_headret    = l_goodsmvt_headret
                TABLES
                  goodsmvt_matdocitem = t_item
                  return              = table_return.
    
  •              GOODSMVT_MATDOCITEM       =
          ENDTRY.
    
    
          LOOP AT table_return INTO table_return_wa.
          ENDLOOP.
          IF table_return_wa-message <> '' .
            row_date-messageid_send =  l_header-message_id.
            row_date-bill_of_lading =  table1_wa-standby_1.
            row_date-header_txt     =  l_header-plant.
            row_date-ref_doc_no     =  l_header-refeid.
            row_date-type = 'E'.
            row_date-message = table_return_wa-message.
            APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
    
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
  •    ENDIF.
          ELSEIF
            l_goodsmvt_headret <> ''.
    
  •          row_date-messageid_send =  l_header-message_id.
    
  •          row_date-bill_of_lading =  table1_wa-standby_1.
    
  •          row_date-header_txt     =  l_header-plant.
    
  •          row_date-ref_doc_no     =  l_header-refeid.
    
  •          row_date-type = 'S'.
            row_date-mat_doc        = row_date-mat_doc  &&   ',' && l_goodsmvt_headret-mat_doc.
    
  •          row_date-mjahr          = l_goodsmvt_headret-doc_year.
            APPEND  row_date TO out_para-mt_upinfo_retun_download-upinfo_return.
    
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
          ENDIF.
        ENDIF.
    
      ENDIF.
      CLEAR table1_wa. "20120912 增加
      REFRESH t_item.
    ENDIF.
    

    ENDLOOP.

    ENDMETHOD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值