cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

SAP EWM Transport planning type not updated while delivery assignment to TU

Former Member
0 Likes
3,236

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

Accepted Solutions (0)

Answers (3)

Answers (3)

chetan_sharma7
Discoverer
0 Likes

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.

chetan_sharma7
Discoverer
0 Likes

Hi Khushbu,

Your solution has worked for me with some changes. Thanks a lot !!! this was really helpfull.

tprobinson16
Newcomer
0 Likes

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

former_member198721
Participant

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.