Ir al contenido

BAdI para determinar local de origem ou destino na UF

6 de marzo de 2025 por
BAdI para determinar local de origem ou destino na UF
eduardo@seinspire.com.br
| Sin comentarios aún

A SAP provê a BAdI /SCMTMS/BADI_LOGINT_CHG_TTRQ para fazer modificações na integração dos documentos de MM, SD e LE para o TM. 

Neste artigo vou abordar o ponto de ampliação /SCMTMS/BADI_LI_SRCDST_CHG que pode ser utilizada para alterar os locais de origem  e destino. Infelizmente não tem a opção nessa interface para alterar o local incoterm. :-(. A vantagem dela digamos seria a simplicidade de implementação.


Ao implementar a BAdI você tem a opção de copiar um código exemplo que tratando pedidos de compra (MM). No meu caso, eu precisava alterar o destino final com base no código do fornecedor definido na remessa como Agente de Frete (Partner Function SP).




Importante.. nesse caso tive que definir a location, visto que o cliente tem o código do cliente, difente do código de fornecedor que é diferente do código do BP. Se os códigos fossem os mesmos bastaria preencher o campo lr_srcdst->des_partner.


Veja abaixo o código implementado. 

Eu destaquei em amarelo as alterações que fiz no exemplo da classe.

* o uso do código é por sua conta e risco.


   METHOD /scmtms/if_li_badi_srcdst_chg~change_srcdst.

* This is an example implementation of source and destination change.

* In this example the destination shipping point and its address is exchanged by the receiving plant with his address.

* First determining the integration context here MM. Dereferencing the input IR_BTD_DATA pointer and for all

* destination receiving points the shipping point is cleared, the receiving plant from EKPO data is taken, the

* plant address is read from T001W and the destination address is overwritten by the plant address

* ======================================================================================== *

    CASE iv_int_context.

      WHEN /scmtms/if_li_c=>sc_li_int_context-int_mm.

        " Get referenced MM input data

        FIELD-SYMBOLS: <mm_data> TYPE /scmtms/cl_li_srcdst_hndlr_mm=>ts_mm_data.

        ASSIGN ir_btd_data->* TO <mm_data>.

        LOOP AT ct_srcdst REFERENCE INTO DATA(lr_srcdst).

          ASSIGN <mm_data>-ekko[ ebeln = lr_srcdst->btd_id ] TO FIELD-SYMBOL(<ekko>).

          IF sy-subrc = 0.

            ASSIGN <mm_data>-ekpo[ ebeln = lr_srcdst->btd_id

                                   ebelp = CONV #( |{ lr_srcdst->item_id ALPHA = IN }| ) ] TO FIELD-SYMBOL(<ekpo>).

            IF sy-subrc = 0.

              SELECT SINGLE werks, adrnr FROM t001w INTO @DATA(ls_t001w) WHERE werks = @<ekpo>-werks.

              IF sy-subrc = 0.

                CLEAR lr_srcdst->des_vstel.

                lr_srcdst->des_werks = ls_t001w-werks.

                lr_srcdst->des_adrnr = ls_t001w-adrnr.

              ENDIF.

            ENDIF.

          ENDIF.

        ENDLOOP.

      WHEN /scmtms/if_li_c=>sc_li_int_context-int_sd.

        " Source Destination changes of Sales Documents

      WHEN /scmtms/if_li_c=>sc_li_int_context-int_le.

        " Source Destination changes of Inbound/Outbound Deliveries

        " Get referenced LE input data

        FIELD-SYMBOLS: <le_data> TYPE /scmtms/if_li_srcdst=>ts_le_data.

        ASSIGN ir_btd_data->* TO <le_data>.

        ASSIGN <le_data>-vbpavb TO FIELD-SYMBOL(<lt_vbpavb>).

        READ TABLE <lt_vbpavb> INTO DATA(ls_vbpavb) WITH KEY parvw = 'SP'.

        LOOP AT ct_srcdst REFERENCE INTO lr_srcdst.

          lr_srcdst->des_partner = ''. "ls_vbpavb-lifnr.

          lr_srcdst->des_adrnr = ''. "ls_vbpavb-adrnr.

          SELECT SINGLE businesspartneruuid INTO @DATA(lv_bp_guid) FROM i_suppliertobusinesspartner WHERE supplier = @ls_vbpavb-lifnr.

          SELECT SINGLE * INTO @DATA(ls_loc_data) FROM /sapapo/loc WHERE partner_guid = @lv_bp_guid.

          lr_srcdst->des_loc_key = ls_loc_data-loc_uuid.

          lr_srcdst->des_loc_id = ls_loc_data-locno.

        ENDLOOP.

      WHEN OTHERS.

    ENDCASE.

  ENDMETHOD.
Iniciar sesión para dejar un comentario