Skip to Content
0
Dec 28, 2022 at 12:21 PM

Deleted delivery block for sub components in Userexit USEREXIT_MOVE_FIELD_TO_VBEP

89 Views Last edit Dec 28, 2022 at 12:46 PM 2 rev

Hello,

I am trying to delete delivery blocks for sub components in user exit USEREXIT_MOVE_FIELD_TO_VBEP.

I want that when the delivery block is deleted in the main component all sub components should be deleted to.

This works and also in debugger I see that all delivery block in XVBEP[] are deleted. But when I reopen the order delivery blocks are there but only for schedule line 1.

image.png

Delete block in main component

image.png

XVBEP[] seems to be good. All delivery blocks has been deleted for both schedule lines:

image.png

After reopen via VA02: block is still set in 1st schedule line.image.png

Can someone help me on this?

Code:

CALL FUNCTION 'Z_V_CHANGE_DEL_BLOCK_SUBCOMP'
EXPORTING
it_vbap = xvbap[]
is_vbep = vbep
it_vbep_old = yvbep[]
iv_del_block = 'Z9' "should only be done when this block is deleted
CHANGING
ct_vbep = xvbep[].

--------------------------------------------------------------------------------------------------

FUNCTION z_v_change_del_block_subcomp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IT_VBAP) TYPE VA_VBAPVB_T
*" REFERENCE(IS_VBEP) TYPE VBEP
*" REFERENCE(IT_VBEP_OLD) TYPE VA_VBEPVB_T
*" REFERENCE(IV_DEL_BLOCK) TYPE VBEP-LIFSP OPTIONAL
*" REFERENCE(IV_ONLY_HIGHEST) TYPE ABAP_BOOL DEFAULT ABAP_TRUE
*" CHANGING
*" REFERENCE(CT_VBEP) TYPE VA_VBEPVB_T
*"----------------------------------------------------------------------
DATA: ls_vbep_old TYPE vbepvb,
ls_vbap TYPE vbapvb,
lv_posnr TYPE vbap-posnr.
FIELD-SYMBOLS: <ls_vbep> TYPE vbepvb.

IF iv_del_block IS NOT INITIAL.
READ TABLE it_vbep_old WITH KEY posnr = is_vbep-posnr lifsp = iv_del_block TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
RETURN. "Block was different then import block
ENDIF.
ENDIF.

READ TABLE it_vbap INTO ls_vbap WITH KEY posnr = is_vbep-posnr.
IF sy-subrc <> 0.
RETURN.
ENDIF.

"Only change delivery block when changed on conversion kit
IF ls_vbap-uepos IS NOT INITIAL.
MESSAGE ....

RETURN. "Changed at sub component level. Do nothing
ELSE.
"Check if material has subcomponents
READ TABLE it_vbap WITH KEY uepos = is_vbep-posnr TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
RETURN. "Material does not has sub components. Do nothing
ENDIF.
ENDIF.

lv_posnr = is_vbep-posnr.
PERFORM clear_del_block USING it_vbap
CHANGING ct_vbep
lv_posnr.
ENDFUNCTION.

--------------------------------------------------------------------------------------------------

FORM clear_del_block USING ut_vbap TYPE va_vbapvb_t
CHANGING ct_vbep TYPE va_vbepvb_t
cv_posnr TYPE vbap-posnr.

DATA: ls_vbap TYPE vbapvb.
FIELD-SYMBOLS: <ls_vbep> TYPE vbepvb.

LOOP AT ut_vbap INTO ls_vbap WHERE uepos = cv_posnr.
LOOP AT ct_vbep ASSIGNING <ls_vbep> WHERE posnr = ls_vbap-posnr.
CLEAR: <ls_vbep>-lifsp.
ENDLOOP.
"Check if item has subcomponents
READ TABLE ut_vbap WITH KEY uepos = ls_vbap-posnr TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
cv_posnr = ls_vbap-posnr.
PERFORM clear_del_block USING ut_vbap
CHANGING ct_vbep
cv_posnr.
ENDIF.
ENDLOOP.

ENDFORM. " CLEAR_DEL_BLOCK

Attachments

image.png (21.4 kB)
image.png (21.4 kB)
image.png (9.9 kB)
image.png (40.7 kB)
image.png (31.2 kB)