0% found this document useful (0 votes)
103 views7 pages

Delivery Proxy Code

Uploaded by

adavellys
This document contains an SAP ECC program for saving and publishing delivery documents to trigger fulfillment in WMS integration. It includes data declarations, logic to retrieve order details from tables, and fill a proxy header and item details to send to WMS. Service items and lot priced items are excluded from the payload.

Copyright:

© All Rights Reserved

Available Formats

Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
0% found this document useful (0 votes)
103 views7 pages

Delivery Proxy Code

Uploaded by

adavellys
This document contains an SAP ECC program for saving and publishing delivery documents to trigger fulfillment in WMS integration. It includes data declarations, logic to retrieve order details from tables, and fill a proxy header and item details to send to WMS. Service items and lot priced items are excluded from the payload.

Copyright:

© All Rights Reserved

Available Formats

Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 7

FulfillmentOrder -> FulfillmentOrders

Shipments -> shipment (From ecc inbound)


Receipt -> Receipts (From ecc inbound)

ECC
save_and_publish_document

METHOD if_ex_le_shp_delivery_proc~save_and_publish_document.

************************************************************************
* Class Method name : IF_EX_LE_SHP_DELIVERY_PROC~ *
* SAVE_AND_PUBLISH_DOCUMENT *
* Online/Batch : ONLINE/BATCH *
* Date : 01/18/2018 *
* Transport no. : DEVK943253 *
* Description : WMS Integration - Fulfillment Order Interface *
* Trigger delivery proxy *
*----------------------------------------------------------------------*
* Changes (History) *
*----------------------------------------------------------------------*
* Date Name Transport no. Description *
*----------------------------------------------------------------------*
* 01/18/2018 Smita Patel DEVK943253 Initial Program *
************************************************************************

* Data declaration
TYPES:
BEGIN OF ty_vbkd,
zterm TYPE vbkd-zterm,
bstkd TYPE vbkd-bstkd,
bstdk TYPE bstdk,
END OF ty_vbkd.

TYPES:
BEGIN OF ty_vbak,
bname TYPE vbak-bname,
telf1 TYPE vbak-telf1,
END OF ty_vbak.

TYPES:
BEGIN OF ty_adrc,
kunnr TYPE kna1-kunnr,
addrnumber TYPE adrc-addrnumber,
name1 TYPE adrc-name1,
street TYPE adrc-street,
city1 TYPE adrc-city1,
region TYPE adrc-region,
post_code1 TYPE adrc-post_code1,
country TYPE adrc-country,
END OF ty_adrc.
TYPES:
tt_adrc TYPE STANDARD TABLE OF ty_adrc.

TYPES:
BEGIN OF ty_vbap,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
kwmeng TYPE vbap-kwmeng,
END OF ty_vbap,
BEGIN OF t_matnr,
matnr TYPE matnr,
END OF t_matnr.
TYPES:
tt_vbap TYPE STANDARD TABLE OF ty_vbap.

DATA: lt_vbap TYPE tt_vbap.


DATA: ls_vbap LIKE LINE OF lt_vbap.
DATA: lt_adrc TYPE tt_adrc.
DATA: ls_adrc LIKE LINE OF lt_adrc.
DATA: ls_vbak TYPE ty_vbak.

DATA: ls_xlikp LIKE LINE OF it_xlikp.


DATA: ls_xlips LIKE LINE OF it_xlips.
DATA: ls_vbkd TYPE ty_vbkd.
DATA: ls_xvbpa_ag LIKE LINE OF it_xvbpa.
DATA: ls_xvbpa_we LIKE LINE OF it_xvbpa.
DATA: lv_tdname TYPE thead-tdname.
DATA: lt_filter_werks TYPE RANGE OF lips-werks.
DATA: lv_timestamp TYPE xsddatetime_z.

DATA: ls_header TYPE zvdc_dlv_dt_summit_fulfillment. " Proxy Header


DATA: lt_detail TYPE zvdc_dlv_dt_summit_fulfill_tab. " Proxy Item
DATA: ls_detail LIKE LINE OF lt_detail.
DATA: ls_output TYPE zvdc_dlv_mt_summit_fulfillment.
DATA: lo_delv_ob_proxy TYPE REF TO zvdc_dlv_co_si_summit_fulfillm.
DATA: lo_sys_fault TYPE REF TO cx_ai_system_fault.
DATA: lv_object TYPE balobj_d,
lv_subobject TYPE balsubobj,
lv_extnumber TYPE balnrext.

* STO Orders
DATA: l_menge TYPE bstmg,
l_zbom_exist TYPE char01,
lt_svc_matnr TYPE SORTED TABLE OF t_matnr WITH UNIQUE KEY matnr.

READ TABLE it_xlikp INTO ls_xlikp INDEX 1.


READ TABLE it_xlips INTO ls_xlips INDEX 1.

* Comment out the below code as someone changed their opinion :)


* IF ls_xlikp-lfart <> 'NL' AND
* ls_xlikp-lfart <> 'ZNLB' AND
* ls_xlikp-lfart <> 'ZNL'.
"condition to proceed
SELECT sign opti low high
INTO TABLE lt_filter_werks
FROM tvarvc
WHERE name = 'ZVDC_PLANT'.

IF ls_xlips-werks NOT IN lt_filter_werks.


RETURN.
ENDIF.
* ENDIF.
*-------------------- Send Delivery Information ---------------------------*
* Get all service items to exclude down in the code.
SELECT matnr FROM mvke
INTO TABLE lt_svc_matnr
WHERE mtpos = 'DIEN'.

* Get payment terms


SELECT SINGLE
zterm
bstkd
INTO ls_vbkd
FROM vbkd
WHERE vbeln = ls_xlips-vgbel
AND posnr = '000000'.

SELECT SINGLE
bname
telf1
INTO ls_vbak
FROM vbak
WHERE vbeln = ls_xlips-vgbel.

* Get order details


SELECT vbeln
posnr
kwmeng
INTO TABLE lt_vbap
FROM vbap
FOR ALL ENTRIES IN it_xlips
WHERE vbeln = it_xlips-vgbel
AND posnr = it_xlips-vgpos.

IF ls_xlikp-updkz = 'D'. "Delete code


ls_header-delete_code = 'Y'.
ENDIF.

* Fill Header output


ls_header-host_priority = ls_xlikp-lprio.
ls_header-warehouse = ls_xlikp-vstel.
ls_header-order_number = ls_xlikp-vbeln.
ls_header-customer_number = ls_xlikp-kunnr.

* Timestamp for the creation date / time


CONVERT DATE ls_xlikp-erdat TIME ls_xlikp-erzet
INTO TIME STAMP lv_timestamp
TIME ZONE sy-zonlo.
ls_header-date_ordered = lv_timestamp.

ls_header-payment_terms_code = ls_vbkd-zterm.
ls_header-shipment_terms_code = ls_xlikp-inco1.
ls_header-carrier_code = ls_xlikp-vsart.
ls_header-customer_ponumber = ls_vbkd-bstkd.
ls_header-date_promised = ls_vbkd-bstdk. " Customer expected date.

READ TABLE it_xvbpa INTO ls_xvbpa_ag WITH KEY parvw = 'AG'. "Sold To
READ TABLE it_xvbpa INTO ls_xvbpa_we WITH KEY parvw = 'WE'. "Ship To

SELECT k~kunnr " Customer Address


a~addrnumber
a~name1
a~street
a~city1
a~region
a~post_code1
a~country
INTO TABLE lt_adrc
FROM kna1 AS k
INNER JOIN adrc AS a
ON k~adrnr = a~addrnumber
WHERE ( kunnr = ls_xvbpa_ag-kunnr
OR kunnr = ls_xvbpa_we-kunnr ).

READ TABLE lt_adrc INTO ls_adrc WITH KEY kunnr = ls_xvbpa_ag-kunnr.


IF sy-subrc EQ 0.
ls_header-customer_soldto_name = ls_adrc-name1.
ls_header-customer_soldto_address1 = ls_adrc-street.
ls_header-customer_soldto_city = ls_adrc-city1.
ls_header-customer_soldto_state = ls_adrc-region.
ls_header-customer_soldto_zip = ls_adrc-post_code1.
ls_header-customer_soldto_country = ls_adrc-country.
ENDIF.

READ TABLE lt_adrc INTO ls_adrc WITH KEY kunnr = ls_xvbpa_we-kunnr.


IF sy-subrc EQ 0.
ls_header-customer_shipto_name = ls_adrc-name1.
ls_header-customer_shipto_address1 = ls_adrc-street.
ls_header-customer_shipto_city = ls_adrc-city1.
ls_header-customer_shipto_state = ls_adrc-region.
ls_header-customer_shipto_zip = ls_adrc-post_code1.
ls_header-customer_shipto_country = ls_adrc-country.
ENDIF.

ls_header-contact_name = ls_vbak-bname.
ls_header-contact_phone_number = ls_vbak-telf1.

ls_header-order_type = ls_xlikp-lfart.
ls_header-user_name = ls_xlikp-ernam.

* Read Header Text

ls_header-warehouse_message = s_proxy_header-warehouse_message.
ls_header-customer_message = s_proxy_header-customer_message.

ls_header-sales_order_number = ls_xlips-vgbel.

* Fill Item details


LOOP AT it_xlips INTO ls_xlips.

* Do not send Lot price items to WLINK - NTDC Issue list Line 23.
IF ls_xlips-pstyv = 'ZHBI' OR
ls_xlips-pstyv = 'ZHTS'.
CLEAR: ls_xlips. CONTINUE.
ENDIF.

* Exclude service items from the xml.


READ TABLE lt_svc_matnr WITH TABLE KEY matnr = ls_xlips-matnr TRANSPORTING NO
FIELDS.
IF sy-subrc = 0.
CLEAR: ls_xlips. CONTINUE.
ENDIF.

IF ls_xlips-updkz = 'D'. "Delete code


ls_detail-delete_code = 'Y'.
ENDIF.

ls_detail-order_number = ls_xlips-vbeln.
ls_detail-line_number = ls_xlips-posnr.
ls_detail-item_number = ls_xlips-matnr.
ls_detail-item_status = ls_xlips-lgort.
ls_detail-uom = ls_xlips-meins.

* Make sure BOM, KIT and TEXT Items are sent by the WLINK requirements.
* Send ENDOFKIT where there is a text and no material exist for KIT items
* Send ship complete indicator for KIT items.
IF ls_xlips-pstyv = 'ZBOM'.
l_zbom_exist = 'X'.
ENDIF.

IF ls_xlips-pstyv = 'TEXT' AND


l_zbom_exist = 'X' AND
ls_xlips-arktx CP 'end*of*kit*'.

CLEAR: l_zbom_exist.

ls_detail-item_number = 'ENDOFKIT'.
ENDIF.

* Also send the order quantity for PO's - STO


* This should always equal to PO Qty.
IF ls_xlips-vgtyp = 'V'. "PO's.
CLEAR: l_menge.
SELECT SINGLE menge INTO l_menge FROM ekpo
WHERE ebeln = ls_xlips-vgbel
AND ebelp = ls_xlips-vgpos.
IF sy-subrc EQ 0.
ls_detail-qty_ordered = l_menge.
ENDIF.
ENDIF.

READ TABLE lt_vbap INTO ls_vbap


WITH KEY vbeln = ls_xlips-vgbel
posnr = ls_xlips-vgpos.
IF sy-subrc EQ 0.
ls_detail-qty_ordered = ls_vbap-kwmeng.
ENDIF.

ls_detail-qty_released = ls_xlips-lfimg.
ls_detail-lot_number = ls_xlips-charg.

************************** Revisit this part of the code *********************


* Can this be used for ship complete - kit items?
* What is WLINK is using for now.
********** 3/26/18 - Removed this line of code as ship complete indicator is not a
********** requirement in WLINK.
* ls_detail-line_complete = ls_xlips-kztlf.
********** End of code changes on 3/26/18.
************************** Revisit this part of the code *********************

* Read warehouse text and customer Text


READ TABLE t_proxy_detail INTO DATA(ls_proxy_detail) WITH KEY line_number =
ls_detail-line_number.
IF sy-subrc EQ 0.
ls_detail-warehouse_message = ls_proxy_detail-warehouse_message.
ls_detail-customer_message = ls_proxy_detail-customer_message.
ENDIF.

APPEND ls_detail TO lt_detail.


CLEAR ls_detail.

ENDLOOP.

* pass data to Proxy


ls_output-mt_summit_fulfillment_order-fulfillment_order-header-item =
ls_header.
ls_output-mt_summit_fulfillment_order-fulfillment_order-detail-item =
lt_detail.

* Generate proxy - Send Delivery information to WLINK. Only upon delivery creation.
IF if_trtyp = 'H'. " Only on delivery creation.
TRY.
CREATE OBJECT lo_delv_ob_proxy.
lo_delv_ob_proxy->si_summit_fulfillment_order_ou( ls_output ).
CATCH cx_ai_system_fault INTO lo_sys_fault.

"write into application log

lv_object = 'ZVDC_INTF'.
lv_subobject = 'FULFILLMENT_ORD'.
lv_extnumber = ls_xlikp-vbeln.

DATA(lo_msg_list) =
cf_reca_message_list=>create( id_object = lv_object
id_subobject = lv_subobject
id_extnumber = lv_extnumber ).

lo_msg_list->add_from_exception( lo_sys_fault ).
lo_msg_list->store( ).

ENDTRY.
ENDIF.

*-------------------- Send PGI information ---------------------------*


* Always if there is a PGI ????

_call_erp_ship_order_proxy(
it_xlikp = it_xlikp
it_xvbuk = it_xvbuk
).
ENDMETHOD.

You might also like