删除PO

FUNCTION zrfc_mm002.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(CALLNO) TYPE  ZCALLNO
*"     VALUE(PO_NUMBER) LIKE  BAPIMEPOHEADER-PO_NUMBER
*"  EXPORTING
*"     VALUE(FLAG) LIKE  BAPIRET2-TYPE
*"     VALUE(MESSAGE) LIKE  BAPIRET2-MESSAGE
*"  TABLES
*"      ZPOITEM STRUCTURE  ZPOITEM01
*"----------------------------------------------------------------------
DATA: ls_zpoitem TYPE zpoitem01,
      lv_message TYPE bapiret2-message,
      lv_datano  TYPE zdatano.

DATA:
      gv_po_number         LIKE  bapimepoheader-po_number,              "PO号
      gt_return            LIKE  TABLE OF bapiret2,                     "返回消息
      gs_return            LIKE  LINE  OF gt_return,
      gt_poitem            LIKE  TABLE OF bapimepoitem,                 "行项目
      gs_poitem            LIKE  LINE  OF gt_poitem,
      gt_poitemx           LIKE  TABLE OF bapimepoitemx,
      gs_poitemx           LIKE  LINE  OF gt_poitemx.


CLEAR:gv_po_number,gs_poitemx,gs_poitem,gs_return,gt_poitemx,gt_poitem,gt_return.

gv_po_number = po_number.

LOOP AT zpoitem INTO ls_zpoitem.
gs_poitem-po_item    = ls_zpoitem-po_item.
gs_poitem-delete_ind = ls_zpoitem-delete_ind.
APPEND gs_poitem TO gt_poitem.

gs_poitemx-po_item    = ls_zpoitem-po_item.
gs_poitemx-po_itemx    = g_flag.
gs_poitemx-delete_ind = g_flag.
APPEND gs_poitemx TO gt_poitemx.

CLEAR:gs_poitemx,gs_poitem.
ENDLOOP.


CALL FUNCTION 'BAPI_PO_CHANGE'
  EXPORTING
    purchaseorder               = gv_po_number
 TABLES
   return                       = gt_return
   poitem                       = gt_poitem
   poitemx                      = gt_poitemx.

  READ TABLE gt_return INTO gs_return WITH KEY type = 'E'.
  IF sy-subrc NE 0.
    flag = 'S'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    CONCATENATE 'PO:'gv_po_number '处理完成' INTO message .
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
        MESSAGE ID     gs_return-id
                TYPE   gs_return-type
                NUMBER gs_return-number
                WITH   gs_return-message_v1 gs_return-message_v2
                       gs_return-message_v3 gs_return-message_v4
                       INTO lv_message.
        CONCATENATE message lv_message INTO message SEPARATED BY ''.
    ENDLOOP.
    SHIFT message LEFT DELETING LEADING  ''.
    flag = 'E'.
  ENDIF.


*记录日志
  CLEAR:gt_log,gs_log,ls_zpoitem.
  LOOP AT zpoitem INTO ls_zpoitem.
    lv_datano     = lv_datano + 1.
    gs_log-datano = lv_datano.
    gs_log-name   = 'ZRFC_MM002'.
    gs_log-cdate  = sy-datum.
    GET TIME.
    gs_log-ctime  = sy-uzeit.
    gs_log-callno = callno.
    gs_log-flag   = flag.
    gs_log-log    = message.

    CONCATENATE  po_number  ls_zpoitem-po_item   ls_zpoitem-delete_ind
    INTO gs_log-content SEPARATED BY '|'.

    CONDENSE gs_log-content NO-GAPS.
    gs_log-length = STRLEN( gs_log-content ).
    APPEND gs_log TO gt_log.
    CLEAR ls_zpoitem.
  ENDLOOP.

IF gt_log IS NOT INITIAL.
INSERT zrfc_mm01in_log FROM TABLE gt_log.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
ENDIF.
ENDFUNCTION.

 

posted @ 2016-11-17 16:10  学习笔记NO.1  阅读(850)  评论(0编辑  收藏  举报