Skip to content

发货过账

VL09N发货过账

由于全局参数缓存,会导致连续发货过账失败,建议新建程序进行处理。

示例代码
*&---------------------------------------------------------------------*
*& Report Z_GTM_RPT_0095_VL_VL09
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_gtm_rpt_0095_vl_vl09.

PARAMETERS p_vbeln TYPE likp-vbeln.
PARAMETERS p_mid TYPE char20 NO-DISPLAY.

AT SELECTION-SCREEN.
  PERFORM frm_vl09.

*&---------------------------------------------------------------------*
*& Form frm_vl09
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_vl09 .

  DATA es_emkpf TYPE emkpf.
  DATA t_mesg   TYPE STANDARD TABLE OF mesg.

  SELECT SINGLE
    wadat_ist ,
    vbtyp
    FROM likp
    WHERE vbeln = @p_vbeln
    INTO @DATA(ls_likp).

  SET PARAMETER ID 'BAPI_TCODE' FIELD 'VL09'.

  " 这BUG有点难受,如果连续冲销交货单,会导致第二次操作失败
  " 因此通过切换程序来重置这个过程
  CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
    EXPORTING
      i_vbeln                   = p_vbeln
      i_budat                   = sy-datum
      i_tcode                   = 'VL09'
      i_vbtyp                   = ls_likp-vbtyp
    IMPORTING
      es_emkpf                  = es_emkpf
    TABLES
      t_mesg                    = t_mesg
    EXCEPTIONS
      error_reverse_goods_issue = 1
      OTHERS                    = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  SET PARAMETER ID 'BAPI_TCODE' FIELD ''.

  IF es_emkpf-mblnr IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.

  " 返回执行结果
  IF p_mid IS NOT INITIAL.
    EXPORT
      es_emkpf = es_emkpf
      t_mesg = t_mesg
    TO MEMORY ID p_mid.
  ENDIF.

ENDFORM.