Vous êtes sur la page 1sur 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.

Vous aimerez peut-être aussi