O pedido de serviço de frete criado através do lançamento do documento de faturamento é bloqueado para alterações manuais. Nesse caso precisamos muitas vezes implementar uma badi para ajustar os dados do pedido no momento da criação. Exemplos: ajustar a descrição do item, determinar o IVA (tax code) entre outras informações.
Veja abaixo um exemplo de implementação:
BAdI /SCMTMS/BADI_MODIFY_PO_DATA.
METHOD /scmtms/if_sfir_posting~modify_po_creation.
DATA: lo_post_sfir TYPE REF TO /scmtms/cl_post_sfir_for_accru,
lt_sfir_item_data TYPE /scmtms/t_sfir_item_k,
lt_tor_root_data TYPE /scmtms/t_tor_root_k,
lv_transport_mode TYPE /scmtms/trmodcat.
lo_post_sfir = /scmtms/cl_post_sfir_for_accru=>get_instance( ).
CALL METHOD lo_post_sfir->get_data
IMPORTING
* et_sfir_root_data =
et_sfir_item_data = lt_sfir_item_data
* et_charge_item =
* et_charge_root =
* et_bupa_data =
* et_charge_element =
et_tor_root_data = lt_tor_root_data
* et_tor_item_data =
* et_ref_sfitm_docref_keylink =
* et_ref_sfir_itemdocref_data =
* et_sfir_itmassgnment_data =
* et_sfir_item_keys =
* et_loc_key =
* et_tor_stop =
* et_postal_addr =
* et_formatted_addr =
* et_tor_charge_item =
* et_tor_charge_root =
* et_tor_charge_element =
* et_sfir_poitm_kl =
* et_tor_succ =
* et_stage =
* et_root_loc_data =
* et_item_loc_data =
* et_stage_loc_data =
* et_loc_key2 =
* et_cca_sfir_ref_key =
* et_loc_addr =
* et_location_data =
* et_fsd_po_item =
* et_sfir_mt_tc_chele_da_comm =
* et_sfir_mt_tc_chele_oth =
* ev_package_no =
* ev_item_no =
.
READ TABLE lt_sfir_item_data ASSIGNING FIELD-SYMBOL(<ls_sfir_item>) WITH KEY parent_key COMPONENTS parent_key = iv_sfir_key.
IF sy-subrc = 0.
READ TABLE lt_tor_root_data ASSIGNING FIELD-SYMBOL(<ls_tor_root>) WITH TABLE KEY key = <ls_sfir_item>-tor_root_key.
IF sy-subrc = 0.
lv_transport_mode = <ls_tor_root>-trmodcat.
ENDIF.
ENDIF.
LOOP AT ct_po_items ASSIGNING FIELD-SYMBOL(<ls_po_items>).
CASE lv_transport_mode.
WHEN /scmtms/if_common_c=>c_tr_mode_category-air.
CONCATENATE 'AIR - ' <ls_po_items>-short_text INTO <ls_po_items>-short_text.
WHEN /scmtms/if_common_c=>c_tr_mode_category-rail.
CONCATENATE 'RAIL - ' <ls_po_items>-short_text INTO <ls_po_items>-short_text.
WHEN /scmtms/if_common_c=>c_tr_mode_category-road.
CONCATENATE 'ROAD - ' <ls_po_items>-short_text INTO <ls_po_items>-short_text.
WHEN /scmtms/if_common_c=>c_tr_mode_category-sea.
CONCATENATE 'SEA - ' <ls_po_items>-short_text INTO <ls_po_items>-short_text.
ENDCASE.
ENDLOOP.
ENDMETHOD.
Abraço
Eduardo Chagas