Code listing for function ZFM_EWM_DN_QTY_MOD
Description: DELETE DN
Extracted by Mass Download version 1.5.5 - E.G.Mellodew. 1998-2021. Sap Release 751
FUNCTION zfm_ewm_dn_qty_mod.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IV_DN) TYPE VBELN_VL
*" VALUE(IV_LGNUM) TYPE /SCWM/LGNUM
*" VALUE(IT_QTY) TYPE ZEWMT_DN_QTY
* Global data declarations
TYPES BEGIN OF ty_key.
TYPES docid TYPE /scdl/db_refdoc-docid.
TYPES END OF ty_key.
DATA lt_key TYPE TABLE OF ty_key.
DATA lv_as TYPE string.
DATA lt_rec TYPE TABLE OF /scdl/s_sp_a_head.
DATA lt_qty TYPE /scdl/t_sp_a_item_quantity.
DATA et_rec TYPE /scdl/t_sp_a_item_quantity.
* DATA lo_dn_i TYPE REF TO /scdl/cl_sp.
DO.
SELECT DISTINCT ( a~docid )
FROM /scdl/db_refdoc AS a
INTO TABLE @lt_key
WHERE refdoccat EQ 'ERP'
AND refitemno EQ 0
AND refdocno EQ @iv_dn.
IF sy-subrc EQ 0 OR sy-index EQ 20.
EXIT.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
CHECK lt_key IS NOT INITIAL.
/scwm/cl_tm=>set_lgnum( EXPORTING iv_lgnum = iv_lgnum ).
DATA(lo_dn_i) = NEW /scdl/cl_sp_prd_inb(
iv_doccat = /scdl/if_dl_doc_c=>sc_doccat_inb_prd
iv_mode = /scdl/cl_sp=>sc_mode_classic ) .
lv_as = '/SCDL/S_SP_A_HEAD'.
CALL METHOD lo_dn_i->/scdl/if_sp1_locking~lock(
EXPORTING
inkeys = lt_key
aspect = lv_as
lockmode = /scdl/if_sp1_locking=>sc_exclusive_lock
IMPORTING
rejected = DATA(lv_rejected)
return_codes = DATA(l_code) ).
CHECK lv_rejected NE abap_true.
LOOP AT it_qty
INTO DATA(ls_qty).
DATA(lv_item) = NEW /scdl/dl_refitemno( ls_qty-dn_item ).
SELECT SINGLE docid,itemid
INTO @DATA(ls_doc)
AND refdocno EQ @iv_dn
AND refitemno EQ @lv_item->*.
IF sy-subrc NE 0.
RETURN.
lt_qty = VALUE #(
BASE lt_qty
( docid = ls_doc-docid
itemid = ls_doc-itemid
qty = ls_qty-qty
uom = ls_qty-uom ) ).
ENDLOOP.
lv_as = '/SCDL/S_SP_A_ITEM_QUANTITY'.
lo_dn_i->/scdl/if_sp1_aspect~update(
EXPORTING aspect = lv_as
inrecords = lt_qty
* inkeys = lt_key
* action = 'UPD_ITEM_QUANTITY'
* inparam = lt_qty
IMPORTING return_codes = DATA(lt_ret)
rejected = lv_rejected
outrecords = et_rec
).
CHECK NOT line_exists( lt_ret[ failed = abap_true ] ).
CALL METHOD lo_dn_i->/scdl/if_sp1_transaction~save( abap_true ).
COMMIT WORK AND WAIT.
CALL METHOD lo_dn_i->/scdl/if_sp1_transaction~cleanup(
reason = /scdl/if_sp1_transaction=>sc_cleanup_commit ).
ENDFUNCTION.