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: , , , , , , , , ,

Leave a Reply