Function Module: XSI_E1EDL47 - How Delivery Tracking Data Selected [SAP]
SAP ECC 6.0 - SAP_BASIS 700
XSI_E1EDL47 function module is used to populate E1EDL47 IDoc segment for IDoc type DELVRY03; processing function module IDOC_OUTPUT_DELVRY.
E1EDL47 is used for delivery tracking data. So can get a logic how tracking data is selected for a delivery from function module XSI_E1EDL47.
There are some tricky points. At first you can think VTRKH (Tracking Data - Header) table can be used direclty. Yes, you will use the table VTRKH, but there are some dependencies for the deliveries forwarding agent (carrier) partner. There is a key table for the partner: VLBLTD (Express Delivery Company’s Carrier Assignment).
I grabbed the logic from the function module XSI_E1EDL47 and wrote a new method GET_TRACKING for my custom Delivery class ZCL_PCC_SD_DELIVERY.
Here is the code:
METHOD get_tracking.
TYPES: lty_t_vlbltd TYPE STANDARD TABLE OF vlbltd.
CONSTANTS:
lc_true(1) TYPE c VALUE ‘X’.DATA: ls_vbpa TYPE vbpa.
DATA: lt_vlbltd TYPE lty_t_vlbltd,
ls_vlbltd TYPE vlbltd.
DATA: ls_likp TYPE likp.CLEAR ext_tracking[].
* Get Forwarding Agent Partner
CALL METHOD me->get_partner_forwarding_agent
IMPORTING
exs_partner = ls_vbpa.* Get Delivery header data
CALL METHOD me->get_header
IMPORTING
exs_header = ls_likp.* If there is forwarding agent partner
IF NOT ls_vbpa-lifnr IS INITIAL.* Read “Express Delivery Company’s Carrier Assignment”
CLEAR lt_vlbltd[].
SELECT * INTO TABLE lt_vlbltd
FROM vlbltd.* If Export indicator
IF ls_likp-expkz IS NOT INITIAL.CLEAR ls_vlbltd.
READ TABLE lt_vlbltd INTO ls_vlbltd
WITH KEY tdlnr = ls_vbpa-lifnr
expkz = lc_true
BINARY SEARCH.ELSE.
CLEAR ls_vlbltd.
READ TABLE lt_vlbltd INTO ls_vlbltd
WITH KEY tdlnr = ls_vbpa-lifnr
BINARY SEARCH.ENDIF.
* Read tracking data with Express Delivery Company
SELECT *
FROM vtrkh
INTO TABLE ext_tracking
WHERE vbtyp = ls_likp-vbtyp AND
vbeln = gv_delivery AND
xsitd = ls_vlbltd-xsitd.ELSE.
* Read tracking data
SELECT *
FROM vtrkh
INTO TABLE ext_tracking
WHERE vbtyp = ls_likp-vbtyp AND
vbeln = gv_delivery.ENDIF.
IF ext_tracking[] IS INITIAL.
RAISE not_found.
ENDIF.ENDMETHOD.
Tags: ABAP, carrier, class, delivery, IDoc, LE, method, partner, segment, tracking