on ‎2019 Jul 09 9:45 AM
Hello,
I have been trying assigning a delivery( which got created in run time only) to a TU using class: /SCWM/CL_SR_BO_TU -> Method: ADD_TU_DLV.
Delivery is getting assigned to TU successfully but transport planning type and Receiving system fields under Header section of TU are not getting updated from delivery, though it gets updated when i do it manually in Transaction /SCWM/TU. Also in debug mode, i have checked all parameter values passed to method: ADD_TU_DLV are exactly same as while doing it manually.
Please help if i am missing something here, to get these fields in header section of TU updated from delivery values.
Thanks in advance!
Regards,
Raj
Request clarification before answering.
Here is my code that I am using..
FREE: lo_tu_management_prd, lo_tu_query, lt_bo_tu, lt_do_tu.
/scwm/cl_sr_bom=>cleanup( ).
CREATE OBJECT lo_tu_management_prd.
FREE eo_log.
TRY.
lo_sr_bom = /scwm/cl_sr_bom=>get_instance( ).
eo_log = lo_sr_bom->get_log( ).
CATCH /scwm/cx_sr_error .
ENDTRY.
lo_tu_query = NEW #( eo_log ).
lst_sel_tu_num_ext-sign = /scdl/if_dl_query_c=>sc_sign_include.
lst_sel_tu_num_ext-option = /scdl/if_dl_query_c=>sc_option_eq.
lst_sel_tu_num_ext-low = |{ ext_tu_num ALPHA = OUT }| .
lo_tu_query->add_tu_num_ext( is_tu_num_ext = lst_sel_tu_num_ext ).
* Execute query
TRY.
CALL METHOD lo_sr_bom->query
EXPORTING
io_tu_query = lo_tu_query
IMPORTING
et_bo_tu = lt_bo_tu
et_bo_door = lt_do_tu.
CATCH /scwm/cx_sr_error. "#EC NO_HANDLER
RETURN.
ENDTRY.
ls_read_options-docflow_succ_1level_only = abap_true.
ls_read_options-data_retrival_only = abap_true.
ls_read_options-mix_in_object_instances = abap_true.
TRY.
CLEAR ls_excl_prd_data WITH abap_true.
CLEAR ls_excl_prd_data-item_all.
CLEAR ls_excl_prd_data-head_all.
* DATA : lt_selection TYPE /scwm/dlv_selection_tab .
LOOP AT lt_del_tu INTO DATA(lwa_del_tu).
IF sy-tabix = 1 .
DATA(lt_selection) = VALUE /scwm/dlv_selection_tab(
( fieldname = '/SCWM/WHNO_I' sign = 'I' option = 'EQ' low = '1040' )
( fieldname = 'STATUS_VALUE_DWA_I' sign = 'E' option = 'EQ' low = '9' )
( fieldname = 'STATUS_VALUE_DWA_I' sign = 'E' option = 'EQ' low = '0' )
( fieldname = 'STATUS_VALUE_DTU_I' sign = 'I' option = 'CP' low = '*' )
( fieldname = 'DOCNO_H' sign = 'I' option = 'EQ' low = |{ lwa_del_tu-docno ALPHA = IN }| )
).
ELSE.
DATA(ls_selection) = VALUE /scwm/dlv_selection_str( fieldname = 'DOCNO_H' sign = 'I'
option = 'EQ' low = |{ lwa_del_tu-docno ALPHA = IN }| ).
APPEND ls_selection TO lt_selection.
ENDIF.
ENDLOOP .
ls_read_options-docflow_succ_1level_only = abap_true.
ls_read_options-data_retrival_only = abap_true.
ls_read_options-mix_in_object_instances = abap_true.
CALL METHOD lo_tu_management_prd->query
EXPORTING
it_selection = lt_selection
iv_doccat = 'PDO'
is_exclude_data = ls_excl_prd_data
is_read_options = ls_read_options
IMPORTING
et_headers = lt_header_whr.
CATCH /scdl/cx_delivery.
ENDTRY.
LOOP AT lt_bo_tu ASSIGNING FIELD-SYMBOL(<lfs_bo_tu>) WHERE tu_sr_act_num = lv_act_num.
TRY.
ls_tu_sr_act_num-tu_num = <lfs_bo_tu>-tu_num.
ls_tu_sr_act_num-tu_sr_act_num = <lfs_bo_tu>-tu_sr_act_num.
LOOP AT lt_header_whr ASSIGNING FIELD-SYMBOL(<fs_header_whr>).
CLEAR: ls_bo_tu_dlv.
MOVE-CORRESPONDING <fs_header_whr> TO ls_bo_tu_dlv.
MOVE-CORRESPONDING ls_tu_sr_act_num TO ls_bo_tu_dlv.
MOVE '1040' TO ls_bo_tu_dlv-lgnum.
APPEND ls_bo_tu_dlv TO lt_bo_tu_dlv_no_sort.
ENDLOOP.
*Method to assign delivery to TU
<lfs_bo_tu>-bo_ref->add_tu_dlv(
EXPORTING
iv_check_only = abap_true
iv_action_only = abap_false
it_bo_tu_dlv_no_sort = lt_bo_tu_dlv_no_sort
iv_cross_hu_add = abap_true
IMPORTING
et_bo_tu_dlv_cross = lt_bo_tu_dlv_cross
et_bo_tu_dlv_no_sort_success = lt_bo_tu_dlv_success ).
IF eo_log->mp_severity CA 'E'.
* ev_rejected = abap_true.
EXIT.
ENDIF.
* Calling the same method with different parameters
* to sync buffers after TU creation
<lfs_bo_tu>-bo_ref->add_tu_dlv(
EXPORTING
iv_check_only = abap_false
iv_action_only = abap_true
it_bo_tu_dlv_no_sort = lt_bo_tu_dlv_no_sort
IMPORTING
et_bo_tu_dlv_no_sort_success = lt_bo_tu_dlv_success ) .
IF eo_log->mp_severity CA 'E'.
* ev_rejected = abap_true.
EXIT.
ELSE.
* Commiting the changes to database with the below methods.
lo_sr_bom->save( ).
/scwm/cl_sr_tm=>tm( ).
COMMIT WORK AND WAIT.
ENDIF.
* CATCH cx_root INTO DATA(lx_root).
CATCH /scwm/cx_sr_error INTO DATA(lx_root).
DATA(l_message) = lx_root->get_text( ).
ENDTRY.
ENDLOOP.
CLEAR : lt_selection, lt_header_whr, lt_bo_tu_dlv_no_sort,
lt_bo_tu_dlv_cross, lt_bo_tu_dlv_success, lt_bo_tu_dlv_success.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Khushbu,
Your solution has worked for me with some changes. Thanks a lot !!! this was really helpfull.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Raj,
I'm having trouble assigning a delivery to a TU using the ADD_TU_DLV. Can you provide any insight on how you did this? There is very little documentation.
Thanks,
Tamara
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Use below sample code:
DATA:
lo_log TYPE REF TO /scwm/cl_log,
lo_sr_bom TYPE REF TO /scwm/cl_sr_bom,
lo_tu_query TYPE REF TO /scwm/cl_sr_tu_query.
DATA:
lt_bo_tu TYPE /scwm/tt_bo_tunit,
lt_do_tu TYPE /scwm/tt_bo_door.
DATA:
lst_asp_tu TYPE /scwm/s_asp_tu,
lst_tu_door TYPE /scwm/s_bo_tu_door,
lst_sel_tu_num_ext TYPE /scwm/s_sel_tu_num_ext.
DATA:
lv_seq_num TYPE /scmb/de_seq_num,
ls_tu_dlv TYPE /scwm/s_bo_tu_dlv,
lt_tu_dlv TYPE /scwm/tt_bo_tu_dlv,
lt_bo_tu_dlv_no_sort TYPE /scwm/tt_bo_tu_dlv_no_sort,
lt_bo_tu_dlv_cross TYPE /scwm/tt_bo_tu_dlv,
lt_bo_tu_dlv_success TYPE /scwm/tt_bo_tu_dlv_no_sort,
lo_bo_tu TYPE REF TO /scwm/cl_sr_bo_tu,
ls_tu_sr_act_num TYPE /scwm/s_tu_sr_act_num,
lt_protocol TYPE bapirettab.
lst_tu_door-tu_num = is_bo_tu_dlv-tu_num.
lst_tu_door-tu_sr_act_num = is_bo_tu_dlv-tu_sr_act_num.
lst_tu_door-lgnum = is_bo_tu_dlv-lgnum.
/scwm/cl_sr_bom=>cleanup( ).
* Create instance for business object manager --------------------------
FREE eo_log.
CLEAR ev_rejected.
TRY.
lo_sr_bom = /scwm/cl_sr_bom=>get_instance( ).
eo_log = lo_sr_bom->get_log( ).
CATCH /scwm/cx_sr_error .
ENDTRY.
lo_tu_query = NEW #( eo_log ).
lst_sel_tu_num_ext-sign = /scdl/if_dl_query_c=>sc_sign_include.
lst_sel_tu_num_ext-option = /scdl/if_dl_query_c=>sc_option_eq.
lst_sel_tu_num_ext-low = |{ is_bo_tu_dlv-tu_num ALPHA = OUT }| .
lo_tu_query->add_tu_num_ext( is_tu_num_ext = lst_sel_tu_num_ext ).
* Execute query
TRY.
CALL METHOD lo_sr_bom->query
EXPORTING
io_tu_query = lo_tu_query
IMPORTING
et_bo_tu = lt_bo_tu
et_bo_door = lt_do_tu.
CATCH /scwm/cx_sr_error. "#EC NO_HANDLER
RETURN.
ENDTRY.
DATA: ls_bo_data TYPE /scwm/s_bo_tu_data.
"Assign deliveries
LOOP AT it_docid ASSIGNING FIELD-SYMBOL(<lv_docid>).
lv_seq_num = lv_seq_num + 1.
CLEAR ls_tu_dlv.
ls_tu_dlv-tu_num = is_bo_tu_dlv-tu_num.
ls_tu_dlv-tu_sr_act_num = is_bo_tu_dlv-tu_sr_act_num.
ls_tu_dlv-doccat = COND /scdl/dl_doccat( WHEN iv_doccat IS SUPPLIED THEN iv_doccat ELSE wmegc_doccat_pdo ).
ls_tu_dlv-docid = <lv_docid>.
ls_tu_dlv-seq_num = lv_seq_num.
ls_tu_dlv-lgnum = is_bo_tu_dlv-lgnum.
APPEND ls_tu_dlv TO lt_bo_tu_dlv_no_sort.
ENDLOOP.
LOOP AT lt_bo_tu ASSIGNING FIELD-SYMBOL(<lfs_bo_tu>).
TRY .
<lfs_bo_tu>-bo_ref->add_tu_dlv(
EXPORTING
iv_check_only = abap_true
iv_action_only = abap_false
it_bo_tu_dlv_no_sort = lt_bo_tu_dlv_no_sort
iv_cross_hu_add = abap_true
IMPORTING
et_bo_tu_dlv_cross = lt_bo_tu_dlv_cross
et_bo_tu_dlv_no_sort_success = lt_bo_tu_dlv_success ).
IF eo_log->mp_severity CA 'E'.
ev_rejected = abap_true.
EXIT.
ENDIF.
<lfs_bo_tu>-bo_ref->add_tu_dlv(
EXPORTING
iv_check_only = abap_false
iv_action_only = abap_true
it_bo_tu_dlv_no_sort = lt_bo_tu_dlv_no_sort
IMPORTING
et_bo_tu_dlv_no_sort_success = lt_bo_tu_dlv_success ) .
IF eo_log->mp_severity CA 'E'.
ev_rejected = abap_true.
EXIT.
ELSE.
lo_sr_bom->save( ).
/scwm/cl_sr_tm=>tm( ).
COMMIT WORK AND WAIT.
ENDIF.
CATCH cx_root INTO DATA(lx_root).
DATA(l_message) = lx_root->get_text( ).
ENDTRY.
ENDLOOP.
| User | Count |
|---|---|
| 17 | |
| 16 | |
| 3 | |
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.