2016 Jun 29 2:37 PM
HI,
I Have an issue.
I have created a method in am implementing class of BADI in SAP EWM. In this method i am calling the FM /SCWM/TO_CREATE_WHR in which i get the TO and WHO .
As i am using a COMMIT after this Fm it gives me a dump because it is a BADI.
So i also passed space to the Commit work.
CALL FUNCTION '/SCWM/TO_CREATE_WHR'
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
it_create_whr = lt_create_whr
IV_UPDATE_TASK = 'X'
iv_commit_work = ''
IMPORTING
ev_tanum = lv_tanum
et_ltap_vb = lt_ltap
et_bapiret = lt_bapiret
ev_severity = lv_severity.
But i am now not able to get results in the lt_ltap and lv_tanum.
Please help.
HI,
I Have an issue.
I have created a method in am implementing class of BADI in SAP EWM. In this method i am calling the FM /SCWM/TO_CREATE_WHR in which i get the TO and WHO .
As i am using a COMMIT after this Fm it gives me a dump because it is a BADI.
So i also passed space to the Commit work.
CALL FUNCTION '/SCWM/TO_CREATE_WHR'
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
it_create_whr = lt_create_whr
IV_UPDATE_TASK = 'X'
iv_commit_work = ''
IMPORTING
ev_tanum = lv_tanum
et_ltap_vb = lt_ltap
et_bapiret = lt_bapiret
ev_severity = lv_severity.
But i am now not able to get results in the lt_ltap and lv_tanum.
Please help.
2016 Jun 29 3:05 PM
You are correct. You shouldn't ever be doing a COMMIT/ ROLL BACK inside a BADI/ Enhancement/ User Exit.
Hence, if you can shed some more light on what is the requirement you are trying to achieve here, it may help in finding answers.
Thanks,
Juwin
2016 Jun 30 11:23 AM
Hi Juwin,
Thanks for your reply.
Let me try to explain.
I am using the TO create FM to create a WHO and TO and I get these once I COMMIT them . In my method, I need those values for further processing. But as I am using this in a method which is written in the BADI implementing class , so I am not supposed to use a COMMIT. .
Later also in my method , there are various places where I need to COMMIT , I am a bit uncertain as to how to proceed.
Thanks
Gayatri
2016 Jun 30 12:02 PM
Still didn't explain the complete scenario. Which BADI is this?
I hope you understand by now that, this current design will not work, due to need for commit. So, what is the complete requirement you are trying to satisfy here?
Thanks
2016 Jun 30 12:08 PM
Description Class for BAdI Impl.: ZDWM_REPLN_CANCEL_WT
Inst.Generation Public.
METHOD inb_idoc_weighing_labelling.
DATA : lt_huitm TYPE /scwm/tt_huitm_int,
ls_ordim_c TYPE /scwm/ordim_c,
lv_guid_hu TYPE /scwm/guid_hu,
ls_huitm TYPE /scwm/s_huitm_int.
DATA: lv_vlenr TYPE /scwm/ltap_vlenr, " source HU
lv_nlenr TYPE /scwm/ltap_nlenr, " Dest HU
lv_ilenr TYPE /dsrt/ewm_de_ilenr.
DATA : ls_ewm_vaslst TYPE /dsrt/ewm_vaslst,
gs_vas_header TYPE /scwm/s_vas_header_int,
ls_vas_header TYPE /scwm/s_vas_header_int,
ls_dest_hdr TYPE /scwm/s_huhdr_int,
gs_src_hdr TYPE /scwm/s_huhdr_int,
ls_ewm_wal_sc TYPE /dsrt/ewm_wal_sc,
lt_vas_act TYPE /scwm/tt_vas_act_int,
lo_vas_model TYPE REF TO /scwm/cl_vas_model.
DATA : ls_txtmsg TYPE string.
DATA : lv_vas_art TYPE char04,
lv_vas_type TYPE /scwm/de_vas_type,
lv_tstmp TYPE tzntstmps,
lv_timezone TYPE tznzone,
lv_quan TYPE /scwm/de_quantity,
lv_uom TYPE /scwm/de_unit,
lv_matid TYPE /scwm/de_matid,
lv_batch_error TYPE boole_d.
DATA : lt_bom TYPE /scwm/tt_bom_components_vas,
lo_log TYPE REF TO /scwm/cl_log,
ls_bom TYPE /scwm/s_bom_components_vas.
DATA : ls_vas_act TYPE /scwm/s_vas_act_int,
ls_vas_itm TYPE /scwm/s_vas_itm_int.
DATA : lt_create_whr TYPE /scwm/tt_to_prep_whr_int,
ls_create_whr TYPE /scwm/s_to_prep_whr_int,
lt_ltap TYPE /scwm/tt_ltap_vb,
ls_ltap TYPE /scwm/ltap.
DATA : lt_bapiret TYPE bapirettab,
ls_bapiret TYPE bapiret2,
lv_severity TYPE bapi_mtype.
DATA : lv_tanum TYPE /scwm/tanum.
DATA : ls_ordim_o TYPE /scwm/ordim_o.
DATA : lt_conf TYPE /scwm/to_conf_tt,
ls_conf TYPE /scwm/to_conf.
DATA : lo_dlv_bo_manag TYPE REF TO /scdl/cl_bo_management,
lo_sp TYPE REF TO /scdl/cl_sp_prd_out,
lo_message_box TYPE REF TO /scdl/cl_sp_message_box,
lt_message TYPE /scdl/dm_message_tab,
ls_message TYPE /scdl/dm_message_str,
lt_k_head TYPE /scdl/t_sp_k_head,
ls_k_head TYPE /scdl/s_sp_k_head,
lv_rejected TYPE boole_d,
lt_return TYPE /scdl/t_sp_return_code,
ls_return TYPE /scdl/s_sp_return_code.
DATA:
lt_in_stock_o TYPE /scdl/t_sp_a_item_stock,
lt_out_stock_o TYPE /scdl/t_sp_a_item_stock,
ls_stock_o TYPE /scdl/s_sp_a_item_stock,
gv_stock_type TYPE /scdl/dl_stock_category,
lv_entitl TYPE /dsrt/ewm_scc_entitled.
DATA : lt_items TYPE /scwm/tt_vas_item_to_post,
lt_items_stor TYPE /scwm/tt_vas_item_to_post,
ls_items TYPE /scwm/s_vas_item_to_post,
lt_kit TYPE /scwm/tt_vas_item_to_post.
DATA: lt_post_item TYPE /scwm/tt_vas_post_itm,
lt_post_item_alt TYPE /scwm/tt_vas_post_itm,
ls_post_item TYPE /scwm/s_vas_post_itm.
DATA : lv_refresh TYPE xfeld,
p_error TYPE xfeld,
gv_vas_err TYPE n.
DATA : ls_read_options TYPE /scwm/dlv_query_contr_str,
ls_include_data TYPE /scwm/dlv_query_incl_str_prd,
ls_docno TYPE /scwm/dlv_docno_itemno_str,
lt_docno TYPE /scwm/dlv_docno_itemno_tab.
DATA : ls_inb_del TYPE /scwm/s_gr_egr,
lt_head TYPE /scwm/dlv_header_out_prd_tab.
DATA : lo_prd TYPE REF TO /scwm/cl_dlv_management_prd.
DATA : pt_items TYPE /scwm/dlv_item_out_prd_tab,
ps_items TYPE /scwm/dlv_item_out_prd_str.
DATA : lo_sp_inb TYPE REF TO /scdl/cl_sp_prd_inb.
* DATA : lo_dlv_bo_manag TYPE REF TO /scdl/cl_bo_management.
* DATA : lt_k_head TYPE /scdl/t_sp_k_head,
* ls_k_head TYPE /scdl/s_sp_k_head.
* DATA : lv_rejected TYPE boole_d,
* lt_return TYPE /scdl/t_sp_return_code,
* ls_return TYPE /scdl/s_sp_return_code.
DATA : lt_in_product TYPE /scdl/t_sp_a_item_product,
ls_prdct TYPE /scdl/s_sp_a_item_product,
lt_out_product TYPE /scdl/t_sp_a_item_product.
DATA : lv_batchno TYPE /scdl/dl_batchno.
DATA:
lt_in_stock_i TYPE /scdl/t_sp_a_item_stock,
lt_out_stock_i TYPE /scdl/t_sp_a_item_stock,
ls_stock_i TYPE /scdl/s_sp_a_item_stock.
FIELD-SYMBOLS: <ls_items> TYPE /scwm/dlv_item_out_prd_str.
DATA : ls_create_hu TYPE /scwm/s_to_prep_hu_int,
lt_create_hu TYPE /scwm/tt_to_prep_hu_int.
CONSTANTS:
wmegc_whr_proc_pu TYPE /scwm/de_to_whr_proc VALUE '1',
gc_multi_batch TYPE /scwm/de_vendor_batchno VALUE 'MULTIBATCH'.
DATA : lv_who TYPE /scwm/de_who,
lt_config TYPE /dsrt/ewm_t_config,
ls_config TYPE /dsrt/ewm_config,
lv_src_hu TYPE /scwm/ltap_vlenr.
DATA: lv_types TYPE char20,
ls_lagp TYPE /scwm/lagp,
lv_source_id TYPE /scwm/s_pack_view_scanner-source_id,
lt_new_hu TYPE /scwm/tt_huident.
DATA : lt_hutree TYPE /scwm/tt_hutree,
lt_huhdr TYPE /scwm/tt_huhdr_int.
CONSTANTS : gc_id_type_hu TYPE char1 VALUE '1'.
DATA : go_if_pack TYPE REF TO /scwm/cl_wm_packing.
DATA: gs_workstation TYPE /scwm/tworkst,
gs_worksttyp TYPE /scwm/twrktyp.
DATA: lv_id_typ_src TYPE /scwm/s_pack_view_scanner-id_type_source,
gt_huitm TYPE /scwm/tt_huitm_int,
gs_huhdr TYPE /scwm/s_huhdr_int,
lv_id TYPE /scwm/s_pack_view_scanner-source_id,
pt_huident TYPE /scwm/tt_ident_int,
wa_huitm TYPE /scwm/s_huitm_int.
DATA : v_task TYPE char20,
v_index_do TYPE char4,
gt_saved_batch TYPE TABLE OF /dsrt/s_pack_view_scanner,
gs_saved_batch TYPE /dsrt/s_pack_view_scanner.
" End data declarations
***************************************************************************************
break 212106.
CLEAR : ls_ewm_wal_sc.
LOOP AT it_ordim_c INTO ls_ordim_c WHERE tostat = 'C'.
SELECT SINGLE *
INTO ls_dest_hdr
FROM /scwm/huhdr
WHERE huident = ls_ordim_c-nlenr. " dest HU
SELECT SINGLE *
INTO gs_src_hdr
FROM /scwm/huhdr
WHERE huident = ls_ordim_c-vlenr. " source HU
" get the data from the table /dsrt/ewm_wal_sc for the Warehouse order
CALL FUNCTION 'CONVERSION_EXIT_ALPH0_INPUT'
EXPORTING
input = ls_ordim_c-who
IMPORTING
output = lv_who.
CALL FUNCTION 'CONVERSION_EXIT_HUID_OUTPUT'
EXPORTING
input = ls_ordim_c-vlenr
IMPORTING
output = lv_src_hu.
" get data for the source HU
SELECT SINGLE *
FROM /dsrt/ewm_wal_sc
INTO ls_ewm_wal_sc
WHERE lgnum = ls_ordim_c-lgnum
AND who = lv_who "ls_ordim_c-who
AND source_id = lv_src_hu."ls_ordim_c-vlenr."source HU
" move the data to global attribute
gs_ewm_wal_sc = ls_ewm_wal_sc.
*****************************************************************************************
CLEAR gs_huhdr.
lv_types(1) = gc_id_type_hu.
CALL FUNCTION '/SCWM/TWORKST_READ_SINGLE'
EXPORTING
iv_lgnum = ls_ordim_c-lgnum "/scwm/lagp-lgnum "pa_lgnum
iv_workstation = 'ZZCW' "/scwm/s_wrk_pack-workstation " pa_wrkst
IMPORTING
es_workst = gs_workstation
es_wrktyp = gs_worksttyp
EXCEPTIONS
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Set the packing reference
IF go_if_pack IS NOT BOUND.
CALL METHOD /scwm/cl_wm_packing=>get_instance
IMPORTING
eo_instance = go_if_pack.
ENDIF.
CALL METHOD go_if_pack->init_by_workstation
EXPORTING
is_workstation = gs_workstation
* ir_huident =
* ir_bin =
* ir_dstgrp =
* ir_wave =
* is_pack_controle =
* ir_docno =
* ir_route =
* ir_vas =
* ir_vas_status =
* ir_entitled =
* ir_owner =
* ir_matnr =
* iv_trtyp =
* iv_no_hu_by_wc =
* iv_empty_hu =
CHANGING
it_new_hu = lt_new_hu
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*
CALL METHOD /scwm/cl_wm_packing=>get_all
IMPORTING
et_hutree = lt_hutree
et_huhdr = lt_huhdr
et_huitm = gt_huitm.
lv_id = ls_ordim_c-vlenr.
CALL FUNCTION '/SCWM/WC_SCAN_SOURCE_GEN'
EXPORTING
iv_types = lv_types
iv_id = lv_id "ls_ordim_c-vlenr "p_source_id
iv_lgnum = ls_ordim_c-lgnum "/scwm/lagp-lgnum
iv_model = go_if_pack
IMPORTING
ev_id = lv_source_id
es_huhdr = gs_huhdr
es_lagp = ls_lagp
ev_id_type = lv_id_typ_src. "/scwm/s_pack_view_scanner-id_type_source.
* IF /scwm/s_pack_view_scanner-id_type_source IS INITIAL.
* MESSAGE e028(/scwm/ui_packing).
* ENDIF.
CALL FUNCTION '/SCWM/HUHEADER_READ'
EXPORTING
iv_guid_hu = gs_huhdr-guid_hu "lv_guid_hu
IMPORTING
es_huheader = gs_huhdr
et_huident = pt_huident
EXCEPTIONS
not_found = 1
input = 2
error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*****************************************************************************************
* Get data from HUITM
CALL FUNCTION '/SCWM/HUITM_READ'
EXPORTING
iv_guid_hu = gs_huhdr-guid_hu "ls_ordim_c-sguid_hu "guid_stock "lv_guid_hu
IMPORTING
et_huitm = lt_huitm
EXCEPTIONS
no_item = 1
OTHERS = 2.
READ TABLE lt_huitm INTO ls_huitm INDEX 1.
" if the HU content qty is same as the confirmed order qty the the source HU is passed to the dest.HU
* if ls_huitm-quan = ls_ordim_c-.
* CLEAR: lv_vlenr, lv_nlenr, lv_ilenr.
* lv_vlenr = ls_ordim_c-vlenr."/scwm/s_pack_view_scanner-source_id.
* lv_nlenr = ls_ordim_c-vlenr. "/scwm/s_pack_view_scanner-dest_hu_prop_ui.
* lv_ilenr = gs_int_dest_huhdr-huident.
" else then source HU and Dest HU would be different
* else.
CLEAR: lv_vlenr, lv_nlenr, lv_ilenr.
lv_vlenr = ls_ordim_c-vlenr."/scwm/s_pack_view_scanner-source_id.
lv_nlenr = ls_ordim_c-nlenr. "/scwm/s_pack_view_scanner-dest_hu_prop_ui.
* lv_ilenr = gs_int_dest_huhdr-huident.
* endif.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_vlenr
IMPORTING
output = lv_vlenr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_nlenr
IMPORTING
output = lv_nlenr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_ilenr
IMPORTING
output = lv_ilenr.
CLEAR ls_ewm_vaslst.
SELECT SINGLE *
FROM /dsrt/ewm_vaslst
INTO ls_ewm_vaslst
WHERE lgnum = ls_ordim_c-lgnum
AND vlenr = lv_vlenr "source HU
AND nlenr = lv_nlenr. " Dest HU
IF sy-subrc = 0.
* Get VAS Order
CALL METHOD /scwm/cl_vas_manager=>get_vas
EXPORTING
iv_lgnum = ls_ordim_c-lgnum "ls_ewm_vaslst-lgnum
iv_vas_id = ls_ewm_vaslst-vas_id
IMPORTING
es_header = gs_vas_header
et_activity = lt_vas_act
er_model = lo_vas_model
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ELSE.
CLEAR ls_txtmsg.
SHIFT ls_ewm_vaslst-vas_id LEFT DELETING LEADING '0'.
CONCATENATE ls_ewm_vaslst-vas_id 'VAS Order Created,Please contact Super user'(e25)
INTO ls_txtmsg SEPARATED BY space.
MESSAGE i001(00) WITH ls_txtmsg.
RETURN.
ENDIF.
ELSE.
CLEAR ls_ewm_vaslst.
SELECT SINGLE *
FROM /dsrt/ewm_vaslst
INTO ls_ewm_vaslst
WHERE lgnum = ls_ordim_c-lgnum"/dsrt/s_pack_view_scanner-lgnum
AND vlenr = lv_vlenr " source HU
AND ilenr = lv_ilenr.
IF sy-subrc = 0.
* Get VAS Order
CALL METHOD /scwm/cl_vas_manager=>get_vas
EXPORTING
iv_lgnum = ls_ewm_vaslst-lgnum
iv_vas_id = ls_ewm_vaslst-vas_id
IMPORTING
es_header = gs_vas_header
et_activity = lt_vas_act
er_model = lo_vas_model
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ELSE.
CLEAR ls_txtmsg.
SHIFT ls_ewm_vaslst-vas_id LEFT DELETING LEADING '0'.
CONCATENATE ls_ewm_vaslst-vas_id 'VAS Order Created,Please contact Super user'(e25)
INTO ls_txtmsg SEPARATED BY space.
MESSAGE i001(00) WITH ls_txtmsg.
RETURN.
ENDIF.
ENDIF.
ENDIF.
** Check if HU already exists..
* PERFORM check_create_desthu
* Create th VAS Order to convert the weighed item to BOM header material
* Create VAS order for weighed Qty
CLEAR ls_vas_header.
CALL METHOD /scwm/cl_tm=>cleanup( iv_lgnum = iv_lgnum ).
* use VAS model
CREATE OBJECT lo_vas_model.
* Whs timezone
CALL FUNCTION '/SCWM/LGNUM_TZONE_READ'
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
IMPORTING
ev_tzone = lv_timezone
EXCEPTIONS
interface_error = 1
data_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Create start date & time
CONVERT DATE sy-datum TIME sy-uzeit
INTO TIME STAMP lv_tstmp TIME ZONE lv_timezone.
* Hdr
lv_vas_art = 'KTS'.
lv_vas_type = 'D'.
lv_quan = ls_huitm-quana. "ps_pack_view-sum_quantity.
lv_uom = ls_huitm-altme. "ps_pack_view-unit.
lv_matid = ls_ewm_wal_sc-kts_comp_matid.
* Component
ls_bom-productid = ls_ewm_wal_sc-source_matid.
ls_bom-quantity = '1'. "ps_pack_view-sum_quantity. " IBMKBH 7 Apr 2014
ls_bom-uom = ls_huitm-altme."ps_pack_view-unit.
APPEND ls_bom TO lt_bom.
* Call Create
CALL METHOD lo_vas_model->create_vas_ktso
EXPORTING
iv_vas_art = lv_vas_art
iv_vas_type = lv_vas_type
iv_kit_prod = lv_matid
iv_quan = lv_quan
iv_unit = lv_uom
iv_warehouse = iv_lgnum "ps_pack_view-lgnum
iv_start = lv_tstmp
it_comp = lt_bom
IMPORTING
es_vas_header = ls_vas_header
ev_batch_error = lv_batch_error
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
CLEAR ls_vas_header.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
IF lv_batch_error = abap_true.
MESSAGE i131(/scwm/vas).
ENDIF.
* Save VAS orders
CALL METHOD /scwm/cl_vas_manager=>save
EXPORTING
iv_commit = abap_false
iv_wait = abap_false
EXCEPTIONS
OTHERS = 99.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ELSE.
* COMMIT WORK AND WAIT.
ENDIF.
* Get VAS Order
CALL METHOD /scwm/cl_vas_manager=>get_vas
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
iv_vas_id = ls_vas_header-vas_id
* iv_vas_guid =
* iv_changeable =
IMPORTING
es_header = ls_vas_header
et_activity = lt_vas_act
er_model = lo_vas_model
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_error = abap_true.
EXIT.
ENDIF.
gs_vas_header = ls_vas_header.
* Create & confirm WT for the generated Outb. delivery
CALL METHOD /scwm/cl_tm=>cleanup( iv_lgnum = iv_lgnum ).
* Get ODO details
READ TABLE lt_vas_act INTO ls_vas_act INDEX 1.
IF sy-subrc = 0.
READ TABLE ls_vas_act-items INTO ls_vas_itm INDEX 1.
ENDIF.
IF sy-subrc <> 0.
MESSAGE e197(/dsrt/ewm_messages) WITH ls_vas_header-vas_id.
ENDIF.
*----Begin Update Stock type Q4 for outbound delivery
/scwm/cl_tm=>set_lgnum( iv_lgnum ).
FREE lt_in_stock_o.
IF gv_stock_type IS NOT INITIAL
AND gv_stock_type = 'Q4'.
CLEAR ls_k_head.FREE lt_k_head.
ls_k_head-docid = ls_vas_itm-rdocid.
APPEND ls_k_head TO lt_k_head.
SELECT SINGLE ecc_entitled
FROM zdwmctycode
INTO lv_entitl
WHERE lgnum = iv_lgnum."ps_pack_view-lgnum.
TRY.
CREATE OBJECT lo_message_box.
CREATE OBJECT lo_sp
EXPORTING
io_message_box = lo_message_box
iv_doccat = /scdl/if_dl_doc_c=>sc_doccat_out_prd
iv_mode = /scdl/cl_sp=>sc_mode_classic.
ENDTRY.
CLEAR ls_stock_o.
ls_stock_o-docid = ls_vas_itm-rdocid.
ls_stock_o-itemid = ls_vas_itm-ritmid.
ls_stock_o-stock_cat_ind = 'M'.
ls_stock_o-stock_category = gv_stock_type.
ls_stock_o-stock_owner = lv_entitl.
ls_stock_o-stock_owner_role ='BP'.
APPEND ls_stock_o TO lt_in_stock_o.
IF lt_in_stock_o[] IS NOT INITIAL.
* lock delivery for editing
lo_sp->lock(
EXPORTING inkeys = lt_k_head
lockmode = /scdl/if_sp1_locking=>sc_exclusive_lock
aspect = /scdl/if_sp_c=>sc_asp_head
IMPORTING rejected = lv_rejected
return_codes = lt_return ).
* update inbound delivery stock category
CLEAR lv_rejected.
CALL METHOD lo_sp->/scdl/if_sp1_aspect~update
EXPORTING
aspect = /scdl/if_sp_c=>sc_asp_item_stock
inrecords = lt_in_stock_o
IMPORTING
outrecords = lt_out_stock_o
rejected = lv_rejected
return_codes = lt_return.
* save delivery
CALL METHOD lo_sp->before_save
IMPORTING
rejected = lv_rejected.
IF lv_rejected IS INITIAL.
CALL METHOD lo_sp->save
EXPORTING
synchronously = abap_true
IMPORTING
rejected = lv_rejected.
ENDIF.
IF lv_rejected IS INITIAL.
CALL METHOD lo_sp->cleanup
EXPORTING
reason = /scmb/if_sp_transaction=>sc_cleanup_end.
CALL METHOD lo_sp->end_of_queue.
lo_dlv_bo_manag = /scdl/cl_bo_management=>get_instance( ).
lo_dlv_bo_manag->save( ).
* COMMIT WORK AND WAIT.
lo_dlv_bo_manag->cleanup( ).
ELSE.
ROLLBACK WORK.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
ENDIF.
ENDIF.
*----End Update Stock type Q4 for outbound delivery
* Create WT for ODO
ls_create_whr-rdoccat = ls_vas_itm-rdoccat.
ls_create_whr-rdocid = ls_vas_itm-rdocid.
ls_create_whr-ritmid = ls_vas_itm-ritmid.
* Ensure that the stock is taken from the interim HU that has
* been weighed in the previous steps
ls_create_whr-vlenr = ls_dest_hdr-huident.
APPEND ls_create_whr TO lt_create_whr.
CALL FUNCTION '/SCWM/TO_CREATE_WHR'
* STARTING NEW TASK v_task
* DESTINATION IN GROUP DEFAULT
* CALLING result_to_create ON END OF TASK
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
it_create_whr = lt_create_whr
iv_update_task = 'X'
iv_commit_work = ''
IMPORTING
ev_tanum = lv_tanum
et_ltap_vb = lt_ltap
et_bapiret = lt_bapiret
ev_severity = lv_severity.
IF lv_tanum IS INITIAL OR lv_severity CA 'EA'.
MESSAGE e330(/scwm/rf_en).
ELSE.
* COMMIT WORK AND WAIT.
* CALL METHOD /scwm/cl_tm=>cleanup( ).
* CALL METHOD me->result_to_create.
ENDIF.
* Read WT open items
CALL FUNCTION '/SCWM/TO_READ_SINGLE'
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
iv_tanum = lv_tanum
iv_flglock = ' '
IMPORTING
es_ordim_o = ls_ordim_o
EXCEPTIONS
wrong_input = 1
not_found = 2
foreign_lock = 3
error = 4
OTHERS = 5.
IF sy-subrc <> 0.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
* Confirm the WT with Catchweight & Batch
MOVE-CORRESPONDING ls_ordim_o TO ls_conf.
MOVE 'X' TO ls_conf-squit.
ls_conf-cwquan = ls_huitm-cwquan."ps_pack_view-sum_cwquantity.
ls_conf-cwunit = ls_huitm-cwunit."ps_pack_view-cwunit.
* Check if batch already used before in this run
* DESCRIBE TABLE gt_saved_batch LINES gv_lines.
* IF gv_lines > 1. "chk this
* ls_conf-dbatch = gc_multi_batch.
* ELSE.
*
ls_conf-dbatch = ls_ewm_wal_sc-orig_batch_ref."ps_pack_view-orig_batch_ref.
*
* ENDIF.
APPEND ls_conf TO lt_conf.
CALL FUNCTION '/SCWM/TO_CONFIRM'
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
it_conf = lt_conf
iv_update_task = 'X'
iv_commit_work = ''
IMPORTING
ev_severity = lv_severity
et_bapiret = lt_bapiret.
IF lv_severity CA 'EA'.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
* COMMIT WORK AND WAIT.
* Only continue when the TO has been confirmed ...
* otherwise the VAS Order does not have any items to POST
DO 3 TIMES.
SELECT SINGLE tanum INTO lv_tanum
FROM /scwm/ordim_c
WHERE lgnum = iv_lgnum"ps_pack_view-lgnum
AND tanum = lv_tanum.
IF sy-subrc = 0.
EXIT.
ENDIF.
* No confirmation found, wait
WAIT UP TO 1 SECONDS.
ENDDO.
* Post VAS order items
CALL METHOD /scwm/cl_tm=>cleanup( iv_lgnum = ls_vas_header-lgnum ).
REFRESH lt_vas_act.
* Get Latest VAS Order details
CALL METHOD /scwm/cl_vas_manager=>get_vas
EXPORTING
iv_lgnum = ls_vas_header-lgnum
iv_vas_id = ls_vas_header-vas_id
* iv_vas_guid =
* iv_changeable =
IMPORTING
es_header = ls_vas_header
et_activity = lt_vas_act
er_model = lo_vas_model
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
gv_vas_err = 2.
* PERFORM update_vas_process_error. ***********chk this*************
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
* Get items to post
LOOP AT lt_vas_act INTO ls_vas_act.
CHECK ls_vas_act-activity-kit_act IS NOT INITIAL.
CALL METHOD lo_vas_model->get_items_to_post
EXPORTING
iv_act_guid = ls_vas_act-activity-act_guid
IMPORTING
et_comp = lt_items
* et_kit = lt_kit
* et_comp_hu =
* et_kit_hu =
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
gv_vas_err = 2.
* PERFORM update_vas_process_error. ***********chk this*************
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
APPEND LINES OF lt_items TO lt_items_stor.
ENDLOOP.
CHECK p_error IS INITIAL.
* Gather items to post
LOOP AT lt_items_stor INTO ls_items.
CLEAR ls_post_item.
ls_post_item-ritmid = ls_items-ritmid.
ls_post_item-rdocid = ls_items-rdocid.
ls_post_item-rdoccat = ls_items-rdoccat.
ls_post_item-matid = ls_items-matid.
ls_post_item-batchid = ls_items-batchid.
ls_post_item-quan = ls_items-ui_to_postqty.
ls_post_item-unit = ls_items-unit.
ls_post_item-cwquan = ls_items-ui_to_postqty_cw.
ls_post_item-cwunit = ls_items-cwunit.
ls_post_item-complete = abap_true.
IF ls_items-av_qty > 0.
* check if we have any avail.qty items first
APPEND ls_post_item TO lt_post_item.
ELSE.
APPEND ls_post_item TO lt_post_item_alt.
ENDIF.
ENDLOOP.
* If no avail.qty item to post.. post other
IF lt_post_item IS INITIAL.
lt_post_item = lt_post_item_alt.
ENDIF.
* Post
CALL METHOD /scwm/cl_vas_manager=>post
EXPORTING
iv_vas_guid = ls_vas_header-vas_guid
it_comp = lt_post_item
IMPORTING
ev_refresh = lv_refresh
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
gv_vas_err = 2.
* PERFORM update_vas_process_error. "check this
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
* save VAS order
CALL METHOD /scwm/cl_vas_manager=>save
EXPORTING
iv_commit = abap_false
iv_wait = abap_false
EXCEPTIONS
OTHERS = 99.
IF sy-subrc <> 0.
gv_vas_err = 2.
* PERFORM update_vas_process_error. "check this
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ELSE.
* COMMIT WORK AND WAIT.
ENDIF.
CHECK p_error IS INITIAL.
* Update Inb. delivery delivery with Documentary batch
CALL METHOD /scwm/cl_tm=>cleanup( iv_lgnum = ls_vas_header-lgnum ).
* Set whs internal
/scwm/cl_tm=>set_lgnum( ls_vas_header-lgnum ).
* Read existing data
ls_read_options-data_retrival_only = abap_true.
ls_read_options-mix_in_object_instances = /scwm/if_dl_c=>sc_mix_in_load_instance.
* Read data for items
ls_docno-docno = ls_vas_header-rdocno.
ls_docno-itemno = ls_vas_header-ritmno.
ls_docno-doccat = ls_vas_header-rdoccat.
APPEND ls_docno TO lt_docno.
TRY.
lo_prd = /scwm/cl_dlv_management_prd=>get_instance( ).
lo_prd->query(
EXPORTING it_docno = lt_docno
iv_doccat = ls_vas_header-rdoccat "/scdl/if_dl_doc_c=>sc_doccat_inb_prd
iv_whno = ls_vas_header-lgnum
is_read_options = ls_read_options
IMPORTING et_items = pt_items ).
CATCH /scdl/cx_delivery. "#EC NO_HANDLER
ENDTRY.
* Update delivery item with Batchno
* Service provider
TRY.
CREATE OBJECT lo_sp_inb
EXPORTING
iv_doccat = /scdl/if_dl_doc_c=>sc_doccat_inb_prd
iv_mode = /scdl/cl_sp=>sc_mode_classic.
ENDTRY.
READ TABLE pt_items INTO ps_items INDEX 1.
ls_k_head-docid = ps_items-docid.
APPEND ls_k_head TO lt_k_head.
* lock delivery for editing
lo_sp_inb->lock(
EXPORTING inkeys = lt_k_head
lockmode = /scdl/if_sp1_locking=>sc_exclusive_lock
aspect = /scdl/if_sp_c=>sc_asp_head
IMPORTING
rejected = lv_rejected
return_codes = lt_return ).
IF lt_return[] IS NOT INITIAL.
READ TABLE lt_return INTO ls_return
WITH KEY failed = 'X'.
IF sy-subrc = 0 OR
lv_rejected IS NOT INITIAL.
gv_vas_err = 4.
* PERFORM update_vas_process_error. " check this
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
ENDIF.
* DESCRIBE TABLE gt_saved_batch LINES gv_lines.
* IF gv_lines > 1.
* lv_batchno = gc_multi_batch.
* ELSE.
* lv_batchno = ps_pack_view-new_charg.
* ENDIF.
* Set new Product batch no
FREE: lt_in_stock_i.
LOOP AT pt_items ASSIGNING <ls_items>. "INTO ls_items.
MOVE-CORRESPONDING <ls_items> TO ls_prdct.
MOVE-CORRESPONDING <ls_items>-product TO ls_prdct.
ls_prdct-batchno = lv_batchno.
IF gv_stock_type IS NOT INITIAL
AND gv_stock_type = 'Q4'.
IF <ls_items>-stock-stock_category = gv_stock_type.
ELSE.
<ls_items>-stock-stock_cat_ind = 'M'.
<ls_items>-stock-stock_category = gv_stock_type.
CLEAR ls_stock_i.
MOVE-CORRESPONDING <ls_items> TO ls_stock_i.
MOVE-CORRESPONDING <ls_items>-stock TO ls_stock_i.
APPEND ls_stock_i TO lt_in_stock_i.
ENDIF.
ENDIF.
APPEND ls_prdct TO lt_in_product.
ENDLOOP.
IF gv_stock_type IS NOT INITIAL
AND gv_stock_type = 'Q4'
AND lt_in_stock_i[] IS NOT INITIAL.
* update inbound delivery stock category
CALL METHOD lo_sp_inb->/scdl/if_sp1_aspect~update
EXPORTING
aspect = /scdl/if_sp_c=>sc_asp_item_stock
inrecords = lt_in_stock_i
IMPORTING
outrecords = lt_out_stock_i
rejected = lv_rejected
return_codes = lt_return.
ENDIF.
*---------End IBMHRE MOD+++ 13.01.2015 INBOUND Delivery
* Update product
CALL METHOD lo_sp_inb->/scdl/if_sp1_aspect~update
EXPORTING
aspect = /scdl/if_sp_c=>sc_asp_item_product
inrecords = lt_in_product
IMPORTING
outrecords = lt_out_product
rejected = lv_rejected
return_codes = lt_return.
* save delivery
CALL METHOD lo_sp_inb->before_save
IMPORTING
rejected = lv_rejected.
IF lv_rejected IS INITIAL.
CALL METHOD lo_sp_inb->save
EXPORTING
synchronously = abap_true
IMPORTING
rejected = lv_rejected.
ENDIF.
IF lv_rejected IS INITIAL.
CALL METHOD lo_sp_inb->cleanup
EXPORTING
reason = /scmb/if_sp_transaction=>sc_cleanup_end.
CALL METHOD lo_sp_inb->end_of_queue.
lo_dlv_bo_manag = /scdl/cl_bo_management=>get_instance( ).
lo_dlv_bo_manag->save( ).
* COMMIT WORK AND WAIT.
lo_dlv_bo_manag->cleanup( ).
ELSE.
ROLLBACK WORK.
gv_vas_err = 4.
* PERFORM update_vas_process_error. " chk this
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
p_error = abap_true.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CHECK p_error IS INITIAL.
* Pack the Generated Inb. delvy material into scanned label HU
* PERFORM pack_vas_inb_del USING /dsrt/s_pack_view_scanner
* gs_huhdr
* lt_items
* CHANGING gs_lbl_dest_huhdr
* gv_error.
* Create the WT for the Inb.del and confirm
CALL METHOD /scwm/cl_tm=>cleanup( iv_lgnum = iv_lgnum ).
* fill TO create structure
CLEAR ls_create_hu.
ls_create_hu-guid_hu = ls_dest_hdr-guid_hu. "gs_lbl_dest_huhdr-guid_hu.
ls_create_hu-procty = ls_dest_hdr-procty. "gs_lbl_dest_huhdr-procty.
* ls_create_hu-squit = 'X'. (to confirm the task)
APPEND ls_create_hu TO lt_create_hu.
*To create Warehouse order with HU warehouse Task
* without confirmation for Inbound delivery
CALL FUNCTION '/SCWM/TO_CREATE_WHR'
EXPORTING
iv_lgnum = iv_lgnum "ps_pack_view-lgnum
iv_process = wmegc_whr_proc_pu
iv_mve_hu = 'X'
it_crea_hu = lt_create_hu
iv_commit_work = ' '
IMPORTING
ev_tanum = lv_tanum
et_ltap_vb = lt_ltap
et_bapiret = lt_bapiret
ev_severity = lv_severity.
READ TABLE lt_ltap INTO ls_ltap INDEX 1.
IF sy-subrc = 0.
lv_tanum = ls_ltap-tanum.
ENDIF.
IF lv_tanum IS INITIAL OR lv_severity CA 'EA'.
* ROLLBACK WORK.
MESSAGE e330(/scwm/rf_en).
ELSE.
* COMMIT WORK AND WAIT.
CALL METHOD /scwm/cl_tm=>cleanup( ).
ENDIF.
CHECK p_error IS INITIAL.
gv_vas_err = 8.
* PERFORM update_vas_process_error. " chk this
CALL METHOD me->update_vas_process_error
EXPORTING
huident = ls_create_whr-vlenr
vas_id = ls_ewm_vaslst-vas_id
iv_lgnum = iv_lgnum
it_ordim_c = it_ordim_c
gs_vas_header = gs_vas_header
ls_ordim_c = ls_ordim_c
gs_dest_huhdr = ls_dest_hdr
gv_vas_err = gv_vas_err.
IF p_error IS INITIAL.
CLEAR : lt_huitm,ls_ordim_c,lv_guid_hu,ls_huitm,lv_vlenr,lv_nlenr,lv_ilenr,ls_ewm_vaslst,
gs_vas_header,ls_vas_header,ls_dest_hdr,ls_ewm_wal_sc,lt_vas_act,lo_vas_model,
ls_txtmsg,lv_vas_art,lv_vas_type,lv_tstmp,lv_timezone,lv_quan,lv_uom,lv_matid,
lv_batch_error,lt_bom,lo_log,ls_bom,ls_vas_act,ls_vas_itm,lt_create_whr,ls_create_whr ,
lt_ltap,ls_ltap,lt_bapiret,ls_bapiret,lv_severity,lv_tanum,ls_ordim_o,lt_conf,ls_conf,
lo_dlv_bo_manag,lo_sp,lo_message_box,lt_message,ls_message,lt_k_head,ls_k_head,lv_rejected,
lt_return,ls_return,lt_in_stock_o,lt_out_stock_o,ls_stock_o,gv_stock_type ,lv_entitl,
lt_items,lt_items_stor,ls_items,lt_kit,lt_post_item,lt_post_item_alt,ls_post_item,
lv_refresh,p_error,gv_vas_err,ls_read_options,ls_include_data,ls_docno,lt_docno,
ls_inb_del,lt_head,lo_prd,pt_items,ps_items,lo_sp_inb,lt_in_product,ls_prdct,lt_out_product,
lt_in_stock_i,lt_out_stock_i,ls_stock_i,lv_batchno,ls_create_hu,lt_create_hu.
ENDIF.
ENDLOOP.
ENDMETHOD.
This is the code. Now there are many places where I need to commit but not able to do how.
Message was edited by: Gayatri Rajani Bellala
2016 Jun 30 12:31 PM
Madam, I asked for complete requirements, not complete code.
Thanks
2016 Jun 29 3:41 PM
Gayatri,
I do not know what this FM does but looking at the parameter interface, when you pass an 'X' to update task, I am guessing this FM will be called only after a COMMIT work. Since COMMIT inside the BADI is not allowed, did you try passing update task as SPACE?
Thanks,
Vikram.M
2016 Jun 30 11:31 AM
Hi,
Mentioned BADI might be triggering after save and before commit. Already LUW is in process, so session will not allow to use commit / update task.
So for this purpose you have to check another enhancement point which is before save or after store.
Regards,
Chandra
2016 Jun 30 11:43 AM
Hi
I don't think the problem is the BADI, but in which moment the BADI is called
Probably you should post the dump, but I suppose that badi is called in the saving so probably you don't need any commit and you should call the fm /SCWM/TO_CREATE_WHR with IV_UPDATE_TASK = space
but I don't know that fm
Max
2016 Jun 30 11:59 AM
I Understand that I need to use a new LUW, If that is the case how should the values be called again to the parent method as basing on these values a lot of COMMITS need to happen in the further process.
2016 Jun 30 12:05 PM
Hi
Why do you think you need a new LUW?
Try to call the fm without the option IV_UPDATE_TASK
2016 Jun 30 12:07 PM
2016 Jun 30 12:31 PM
Gayatri,
Commit in a BADI is going to dump anytime. Is there not another way to create WHO and TO before this BADI? When is this BADI called and why do you want to create a WHO and TO inside a BADI? Please explain the scenario.
Thanks,
Sowbhagya