Registration

Dear SAP Community Member,
In order to fully benefit from what the SAP Community has to offer, please register at:
http://scn.sap.com
Thank you,
The SAP Community team.
Skip to end of metadata
Go to start of metadata

FUNCTION Z_BAPI_PO_CREATE.*"----------------------------------------------------------------------

*"*"Local Interface:

*" IMPORTING

*" VALUE(TESTRUN) TYPE BAPIFLAG-BAPIFLAG

*" VALUE(MEMORY_UNCOMPLETE) TYPE BAPIFLAG-BAPIFLAG

*" VALUE(MEMORY_COMPLETE) TYPE BAPIFLAG-BAPIFLAG

*" VALUE(POEXPIMPHEADER) TYPE BAPIEIKP

*" VALUE(POEXPIMPHEADERX) TYPE BAPIEIKPX

*" VALUE(VERSIONS) TYPE BAPIMEDCM

*" VALUE(NO_MESSAGING) TYPE BAPIFLAG-BAPIFLAG

*" VALUE(NO_MESSAGE_REQ) TYPE BAPIFLAG-BAPIFLAG

*" VALUE(NO_AUTHORITY) TYPE BAPIFLAG-BAPIFLAG

*" VALUE(NO_PRICE_FROM_PO) TYPE BAPIFLAG-BAPIFLAG

*" EXPORTING

*" VALUE(EXPPURCHASEORDER) TYPE BAPIMEPOHEADER-PO_NUMBER

*" VALUE(EXPHEADER) TYPE BAPIMEPOHEADER

*" VALUE(EXPPOEXPIMPHEADER) TYPE BAPIEIKP

*" TABLES

*" RETURN STRUCTURE BAPIRET2

*" POITEM STRUCTURE BAPIMEPOITEM

*" POITEMX STRUCTURE BAPIMEPOITEMX

*" POADDRDELIVERY STRUCTURE BAPIMEPOADDRDELIVERY

*" POSCHEDULE STRUCTURE BAPIMEPOSCHEDULE

*" POSCHEDULEX STRUCTURE BAPIMEPOSCHEDULX

*" POACCOUNT STRUCTURE BAPIMEPOACCOUNT

*" POACCOUNTPROFITSEGMENT STRUCTURE BAPIMEPOACCOUNTPROFITSEGMENT

*" POACCOUNTX STRUCTURE BAPIMEPOACCOUNTX

*" POCONDHEADER STRUCTURE BAPIMEPOCOND

*" POCONDHEADERX STRUCTURE BAPIMEPOCONDX

*" POCOND STRUCTURE BAPIMEPOCOND

*" POCONDX STRUCTURE BAPIMEPOCONDX

*" POLIMITS STRUCTURE BAPIESUHC

*" POCONTRACTLIMITS STRUCTURE BAPIESUCC

*" POSERVICES STRUCTURE BAPIESLLC*" POSRVACCESSVALUES STRUCTURE BAPIESKLC

*" POSERVICESTEXT STRUCTURE BAPIESLLTX

*" EXTENSIONIN STRUCTURE BAPIPAREX

*" EXTENSIONOUT STRUCTURE BAPIPAREX

*" POEXPIMPITEM STRUCTURE BAPIEIPO

*" POEXPIMPITEMX STRUCTURE BAPIEIPOX

*" POTEXTHEADER STRUCTURE BAPIMEPOTEXT

*" POTEXTITEM STRUCTURE BAPIMEPOTEXT

*" ALLVERSIONS STRUCTURE BAPIMEDCM_ALLVERSIONS

*" POPARTNER STRUCTURE BAPIEKKOP

*" CHANGING

*" VALUE(POHEADER) TYPE BAPIMEPOHEADER

*" VALUE(POHEADERX) TYPE BAPIMEPOHEADERX

*" VALUE(POADDRVENDOR) TYPE BAPIMEPOADDRVENDOR

*" EXCEPTIONS

*" WRONG_FUNCTION_CALLED

*" TIMEOUT

*" TCPIP_ERROR

*" CONNECT_FAILED

*" INTERNAL_ERROR

*" SYSTEM_FAILURE

*" COMMUNICATION_FAILURE

*"----------------------------------------------------------------------

**"---------------------------------------------------------------------

*-

*This function module is called during PR Creation in Ariba ( at

*checkpoint1, checkpoint2 and checkpoint3) and also during posting of

*PO in SAP. The call to this function module is from WebMethods.

**"---------------------------------------------------------------------

"----------------------------------------------------------------------

************************************************************************

* Program : Z_BC1_BAPI_PO_CREATE01

* TITLE Function Module to create PO using BAPI

* AUTHOR Aveek Ghose, IBM

* DATE WRITTEN 20-May-2006

* R/3 RELEASE 4.6C

* CTS: RD1K912067

*-----------------------------------------------------------------------

* COPIED FROM N/A

*

* This function module is called during PR Creation in Ariba ( at

* checkpoint1, checkpoint2 and checkpoint3) and also during posting of

* PO in SAP. The call to this function module is from WebMethods.

*

*-----------------------------------------------------------------------

* PROGRAM TYPE Function Module

* DEV. CLASS ZP2P

* LOGICAL DB N/A

*-----------------------------------------------------------------------

* SCREENS N/A

* GUl TITLE N/A

* GUl STATUS N/A

* TRANSACTIONS N/A

* USER EXITS N/A

*-----------------------------------------------------------------------

*----------------------------------------------------------------------*

* Local variables

*----------------------------------------------------------------------*

CONSTANTS: C_VENDOR TYPE ELIFN VALUE '4259999999',

C_DOC_TYPE TYPE ESART VALUE 'ZAPS',

C_CURRENCY TYPE WAERS VALUE 'EUR',

C_NETPR TYPE NETPR VALUE '1.00',

C_99 TYPE CHAR2 VALUE '99',

C_00 TYPE CHAR2 VALUE '00'.

DATA : L_VEND_ACTGRP(30) TYPE C, "Vendor Account Group

L_VEND_PAYTRM(30) TYPE C, "Vendor Payment Terms

L_VEND_RECON(30) TYPE C, "Vendor Reconciliation Account

L_MSGV1 LIKE SY-MSGV1, "Message variable1

L_LENGTH TYPE I, "Vendor string length.

L_WBS_EXTERNAL LIKE BAPIMEPOACCOUNT-WBS_ELEMENT,

"WBS external format

L_WBS_INTERNAL LIKE BAPIMEPOACCOUNT-WBS_ELEMENT,

L_bukrs type bukrs.

DATA: l_werks1 type werks_d.

"WBS internal format

*BV-08-July-2004 -Begin - Change error handling for zxa_get_constant

DATA : L_CONST_NAME LIKE SY-MSGV1, "Constant name

L_COMP_CODE LIKE SY-MSGV2. "Company code

* DATA: L_WA_TIMESTAMP TYPE ZPO_TIMESTAMP.

DATA: L_WA_TIMESTAMP TYPE ZP2P_TIMESTAMP.

DATA: l_serial_no LIKE poaccount-serial_no.

DATA: L_SERIAL TYPE I.

DATA: L_RETURN TYPE C.

DATA: L_EXIT TYPE I.

*BV-08-July-2004 -End - Change error handling for zxa_get_constant

*----------------------------------------------------------------------*

* Internal Table

*----------------------------------------------------------------------*

DATA : T_TEMP_POACCOUNT LIKE POACCOUNT OCCURS 0 WITH HEADER LINE,

"To store items with blank GL

*PVU-22-May-2004 - Start Changes for SCR1

G_T_ITEMX_TMP LIKE POITEMX OCCURS 0 WITH HEADER LINE,

G_T_SCHDX_TMP LIKE POSCHEDULEX OCCURS 0 WITH HEADER LINE,

G_T_SCHD_TMP LIKE POSCHEDULE OCCURS 0 WITH HEADER LINE,

G_T_ACCNTX_TMP LIKE POACCOUNTX OCCURS 0 WITH HEADER LINE,

G_T_CONDX_TMP LIKE POCONDX OCCURS 0 WITH HEADER LINE.

*----------------------------------------------------------------------*

* Structure

*----------------------------------------------------------------------*

DATA: G_W_HDRX_TMP LIKE POHEADERX.

DATA: p_constname TYPE zconstname, "Constant Name

g_constval TYPE zconstval, "Constant Value

tbx TYPE SY-TABIX.

data: l_waers type waers.

DATA: L_EKORG TYPE EKORG.

*PVU-22-May-2004 - End Changes for SCR1

*----------------------------------------------------------------------*

CLEAR : G_FLG_VENDOR,

* start of change for TPR2220 - DDUTTA - 07/08/2004

t_znonpo_document,

t_znonpo_acctg,

* End of change for TPR2220 - DDUTTA - 07/08/2004

*PVU-22-May-2004 - Start Changes for SCR1

G_IDOC_NO,

G_W_HDRX_TMP.

*PVU-22-May-2004 - End Changes for SCR1

REFRESH : RETURN, T_ZRETURN,

* start of change for TPR2220 - DDUTTA - 07/08/2004

t_znonpo_document,

t_znonpo_acctg,

* End of change for TPR2220 - DDUTTA - 07/08/2004

*PVU-22-May-2004 - Start Changes for SCR1

G_T_IDOC_DATA,

G_T_ITEMX_TMP,

G_T_SCHDX_TMP,

G_T_ACCNTX_TMP,

G_T_CONDX_TMP.

*PVU-22-May-2004 - End Changes for SCR1

* Srini 17-May-2005 Start of changes

* Developer Flexibility to debug issues

p_constname = 'BAPI_PO_CREATE2'.

do.

CALL FUNCTION 'ZXA_GET_CONSTANT'

EXPORTING

const_name = p_constname

comp_code = poheader-comp_code

IMPORTING

const_value = g_constval

EXCEPTIONS

no_value_found = 1

null_value = 2

OTHERS = 3.

if g_constval ne 'X'.

exit.

endif.

enddo.

*

* Add of change: SDR: 12-Aug-2005

* IF poheader-po_number IS INITIAL.

* poheader-doc_type = 'ZEHS'.

* else.

**********************************************************

*mod-003

**********************************************************

IF poheader-po_number+0(1) = 'C'.

poheader-doc_type = 'ZAC'.

ENDIF.

IF poheader-po_number+0(1) = 'P'.

poheader-doc_type = 'ZAP'.

ENDIF.

IF poheader-po_number IS INITIAL.

poheader-doc_type = 'ZAPS'.

ENDIF.

DELETE FROM ZP2P_ERRORS WHERE BEACON_DOC_NO = POHEADER-PO_NUMBER.

DELETE FROM ZP2P_ERRORS WHERE TYPE NE C_E.

* DELETE FROM ZERRORS WHERE BEACON_DOC_NO = POHEADER-PO_NUMBER.

* DELETE FROM ZERRORS WHERE TYPE NE C_E.

*MOD-004

l_wa_timestamp-mandt = SY-MANDT.

l_wa_timestamp-EBELN = POHEADER-PO_NUMBER.

l_wa_timestamp-EBELP = '00'.

l_wa_timestamp-CREATE_TIMESTMP = POHEADER-ARIBACRTtIMESTMP.

l_wa_timestamp-CREATE_TIMESTMP = POHEADER-ARIBACHGTIMESTMP.

insert into ZP2P_TIMESTAMP values l_wa_timestamp.

*MOD-004

* ENDIF.

**********************************************************

*mod-003

**********************************************************

**********************************************************

*mod-003

**********************************************************

* if not poheader-comp_code is initial.

if poheader-comp_code is initial.

clear: l_bukrs.

* select single companycode

* into l_bukrs

* from zcompanycodes01

** where companycode = poheader-comp_code and

* where FSID = poheader-fsid and

* le = poheader-le and

* frmrc = poheader-frmrc.

select single companycode

into l_bukrs

from ZP2P_COMPANYCODE

where FSID = poheader-fsid and

le = poheader-le and

frmrc = poheader-frmrc.

if sy-subrc ne 0.

CLEAR L_MSGV1.

L_MSGV1 = T_TEMP_POACCOUNT-PO_ITEM.

* Please Enter an Account number for line

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = C_MSGTYPE_E

CL = C_MSGID_Z001

NUMBER = C_MSGNR_618

PAR1 = L_MSGV1

IMPORTING

RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

else.

poheader-comp_code = l_bukrs.

endif.

endif.

**********************************************************

*mod-003

**********************************************************

* End of Change: SDR: 12-Aug-2005

* Srini 10-May-2005 Start of changes

* Pass the value of SERIAL_NO from POACCOUNT to POACCOUNTX.

LOOP AT POACCOUNTX.

MOVE SY-TABIX to TBX.

READ TABLE POACCOUNT INDEX TBX.

IF SY-SUBRC EQ 0 AND POACCOUNTX-SERIAL_NO IS INITIAL.

POACCOUNTX-SERIAL_NO = POACCOUNT-SERIAL_NO.

MODIFY POACCOUNTX INDEX TBX.

ENDIF.

ENDLOOP.

* Srini 10-May-2005 End of changes

* Srini 17-May-2005 End of changes

T_TEMP_POACCOUNT[] = POACCOUNT[].

* To retrieve the line items with blank GL Account Number

PERFORM FILTER_ITEMS TABLES T_TEMP_POACCOUNT.

LOOP AT T_TEMP_POACCOUNT.

CLEAR L_MSGV1.

L_MSGV1 = T_TEMP_POACCOUNT-PO_ITEM.

* Please Enter an Account number for line

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = C_MSGTYPE_E "E

CL = C_MSGID_Z001 "Z001

NUMBER = C_MSGNR_037 "037

PAR1 = L_MSGV1

IMPORTING

RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at return.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-type = return-type.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

ENDLOOP.

* On Error, exit the function module

READ TABLE RETURN WITH KEY TYPE = C_E. " 'E'

IF SY-SUBRC EQ 0.

EXPHEADER = POHEADER.

EXPHEADER-CODE = '99'.

EXIT.

ENDIF.

*MOD-005

** On Error, exit the function module

* l_exit = 0.

* LOOP AT RETURN WHERE TYPE = C_E.

* L_EXIT = 1.

* expheader = poheader.

* EXPHEADER-CODE = C_99.

* RETURN-RETURN_CODE = C_99.

* RETURN-SEQ_CODE = C_99.

* MODIFY RETURN TRANSPORTING RETURN_CODE SEQ_CODE.

* ENDLOOP..

* IF L_EXIT = 1.

* EXIT.

* ENDIF.

**MOD-005

*MOD-005

**MOD-004

* L_RETURN = ' '..

* LOOP AT RETURN WHERE TYPE = C_E.

* RETURN-RETURN_CODE = '99'.

* L_RETURN = C_X.

* MODIFY RETURN TRANSPORTING RETURN_CODE.

* ENDLOOP.

*

* IF L_RETURN = C_X.

* EXIT.

* ENDIF.

*

**MOD-004

** Begin of Change: Soumya D Roy: 12/27/2005

* Forcibly refresh the T_YRETURN table as a part of the conversion

* program since this table is not getting refreshed

REFRESH t_yreturn.

CLEAR t_yreturn.

** End of Change: Soumya D Roy: 12/27/2005

***BV-27-May-2004 - Begin of Changes for SCR2***

****************************************************

*mod-003

****************************************************

DATA: L_TABIX TYPE SY-TABIX.

LOOP AT POITEM.

TBX = SY-TABIX.

l_wa_timestamp-mandt = SY-MANDT.

l_wa_timestamp-EBELN = POHEADER-PO_NUMBER.

l_wa_timestamp-EBELP = POITEM-PO_ITEM.

* l_wa_timestamp-CHANGE_IND = 'A'.

l_wa_timestamp-CREATE_TIMESTMP = POITEM-ARIBACRTTIMESTMP.

l_wa_timestamp-CREATE_TIMESTMP = POITEM-ARIBAUPDTIMESTMP.

* l_wa_timestamp-DATE_TIME_STMP = POITEM-ARIBACRTTIMESTMP.

* insert into ZPO_TIMESTAMP values l_wa_timestamp.

insert into ZP2P_TIMESTAMP values l_wa_timestamp.

clear: poheader-ARIBACRTTIMESTMP,

poheader-ARIBACHGTIMESTMP.

IF NOT POITEM-DISTRIB IS INITIAL.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

READ TABLE POACCOUNT INDEX L_TABIX.

IF SY-SUBRC EQ 0.

L_CONST_NAME = POACCOUNT-GL_ACCOUNT.

L_COMP_CODE = L_comp_code.

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

type = c_msgtype_e "E

cl = c_msgid_z001

number = c_msgnr_613

PAR1 = L_CONST_NAME

PAR2 = L_COMP_CODE

IMPORTING

return = t_yreturn.

APPEND t_yreturn.

CLEAR t_yreturn.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-type = t_yreturn-type.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = t_yreturn-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

ENDIF.

ENDIF.

ENDLOOP.

* if not poheader-currency is initial.

* if not poheader-vendor is initial.

* loop at pocond.

* SELECT SINGLE WAERS

* INTO L_WAERS

* FROM LFM1 WHERE

* LIFNR = POHEADER-VENDOR

* AND EKORG = POHEADER-PURCH_ORG.

*

* IF SY-SUBRC NE 0.

* IF L_WAERS NE poheader-currency.

* pocond-cond_type = 'PBXX'.

* pocond-currency = l_waers.

* modify pocond transporting cond_value currency.

* endif.

* ENDIF.

* endloop.

* ENDIF.

* ENDIF.

*

IF NOT TESTRUN IS INITIAL.

POHEADER-VENDOR = '4259999999'.

poheader-doc_type = 'ZAPS'.

ENDIF.

* IF NOT POHEADER-PURCH_ORG IS INITIAL.

IF POHEADER-PURCH_ORG IS INITIAL.

SELECT SINGLE PUR_ORG

INTO L_EKORG

FROM ZP2P_PURCHASEORG

* FROM ZPUR_ORG

WHERE LE = POHEADER-LE AND

FRMRC = POHEADER-FRMRC AND

FSID = POHEADER-FSID.

IF SY-SUBRC NE 0.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_p2p_pur_ORG.

L_COMP_CODE = POHEADER-COMP_CODE.

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = c_msgtype_e

CL = c_msgid_z001

NUMBER = c_msgnr_619

PAR1 = L_CONST_NAME

PAR2 = L_COMP_CODE

IMPORTING

RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

ELSE.

POHEADER-PURCH_ORG = L_EKORG.

ENDIF.

ENDIF.

* IF NOT POHEADER-PUR_GROUP IS INITIAL.

IF POHEADER-PUR_GROUP IS INITIAL.

clear: g_constval.

CALL FUNCTION 'ZXA_GET_CONSTANT'

EXPORTING

const_name = c_p2p_pur_org

comp_code = POHEADER-COMP_CODE

IMPORTING

const_value = g_constval

EXCEPTIONS

no_value_found = 1

null_value = 2

OTHERS = 3.

IF SY-SUBRC NE 0.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_p2p_pur_org.

L_COMP_CODE = POHEADER-COMP_CODE.

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = c_msgtype_e

CL = c_msgid_z001

NUMBER = c_msgnr_046

PAR1 = L_CONST_NAME

PAR2 = L_COMP_CODE

IMPORTING

RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

ELSE.

POHEADER-PUR_GROUP = G_CONSTVAL.

ENDIF.

ENDIF.

LOOP AT poitem.

if poitem-plant is initial.

clear: l_werks1.

select single plant

into l_werks1

from ZP2P_PLANTMAPING

* from zpo_plantmapping

where COMPANY_CODE = poheader-comp_code and

* PUR_ORG = poheader-purch_org and

* PUR_GROUP = poheader-pur_group and

LE = poheader-le and

FSID = poheader-fsid and

MRC = poheader-mrc and

FRMRC = poheader-frmrc.

if sy-subrc ne 0.

PERFORM ERROR_HANDLING_PLANT USING POHEADER

poheader-comp_code

L_WA_ZERRORS.

EXIT.

else.

poitem-plant = l_werks1.

CLEAR: L_WERKS1.

endif.

endif.

* IF POITEM-NET_PRICE NE POHEADER-CURRENCY.

* POITEM-NET_PRICE = POHEADER-CURRENCY.

* ENDIF.

*mod-004

IF POITEM-net_price NE 0.

POITEM-IR_IND = 'X'.

ENDIF.

*mod-004

IF POITEM-net_price eq 0.

POITEM-IR_IND = 'X'.

ENDIF.

*MOD-004

if POITEM-GR_IND = C_Y..

POITEM-GR_IND = C_X.

ELSEIF POITEM-GR_IND = C_X.

POITEM-GR_IND = C_X.

ELSE.

POITEM-GR_IND = ' '.

endif.

*MOD-004

* if POITEM-GR_IND = 'Y'..

* POITEM-GR_IND = 'X'.

* endif.

if POITEM-INCOTERMS1 is initial.

POITEM-INCOTERMS1 = 'CIF'.

endif.

if POITEM-INCOTERMS2 is initial.

POITEM-INCOTERMS2 = 'CIF'.

endif.

LOOP AT POACCOUNT WHERE PO_ITEM = POITEM-PO_ITEM.

IF POITEM-DISTRIB IS INITIAL.

POACCOUNT-DISTR_PERC = '0.00'.

MODIFY POACCOUNT TRANSPORTING DISTR_PERC.

ENDIF.

ENDLOOP.

POITEM-UNLIMITED_DLV = 'X'.

POITEM-UNDER_DLV_TOL = 0.

clear: poitem-ARIBACRTTIMESTMP,

poitem-ARIBAUPDTIMESTMP.

MODIFY POITEM TRANSPORTING UNLIMITED_DLV

UNDER_DLV_TOL

PLANT

IR_IND

GR_IND

INCOTERMS1

INCOTERMS2

ARIBACRTTIMESTMP

ARIBAUPDTIMESTMP.

ENDLOOP.

*-- Retrieve Account Assignment

PERFORM get_account_assignment TABLES poitem

poitemx

poaccount

poaccountx

t_yreturn

USING poheader-comp_code

poheader.

****************************************************

*mod-003

****************************************************

IF NOT t_yreturn[] IS INITIAL.

APPEND LINES OF t_yreturn TO RETURN.

*&------------------------------------------------------*&

*& Begin of Change: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------*&

READ TABLE t_yreturn WITH KEY type = 'W'.

IF sy-subrc <> 0.

expheader = poheader.

EXPHEADER-CODE = '99'.

ENDIF.

**MOD-005

** On Error, exit the function module

* l_exit = 0.

* LOOP AT RETURN WHERE TYPE = C_E.

* L_EXIT = 1.

* expheader = poheader.

* EXPHEADER-CODE = '99'.

* RETURN-RETURN_CODE = C_99.

* RETURN-SEQ_CODE = C_99.

* MODIFY RETURN TRANSPORTING RETURN_CODE SEQ_CODE.

* ENDLOOP..

* IF L_EXIT = 1.

* EXIT.

* ENDIF.

**MOD-005

*&------------------------------------------------------*&

*& End of Change: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------*&

ENDIF.

**********************************************************

*mod-003

***********************************************************

*

* if not poheader-currency is initial.

* if not poheader-vendor is initial.

* loop at pocond.

* SELECT SINGLE WAERS

* INTO L_WAERS

* FROM LFM1 WHERE

* LIFNR = POHEADER-VENDOR

* AND EKORG = POHEADER-PURCH_ORG.

*

* IF SY-SUBRC NE 0.

* IF L_WAERS NE poheader-currency.

* pocond-cond_type = 'PBXX'.

* pocond-currency = l_waers.

* modify pocond transporting cond_value currency.

* endif.

* ENDIF.

* endloop.

* ENDIF.

* ENDIF.

*

*************************************************************

*currency check MOD-004

*************************************************************

* DATA: l_header TYPE REF TO cl_po_header_handle_mm,

* l_item TYPE REF TO cl_po_item_handle_mm,

* l_tkomv TYPE STANDARD TABLE OF komv INITIAL SIZE 10,

* l_item_conditions_changed TYPE mmpur_bool.

*

** header level pocond data

* CHECK NOT l_item IS INITIAL.

*

* CHECK NOT l_item->po_item_number IS INITIAL.

*

* l_header ?= l_item->my_parent.

*

* CALL METHOD l_header->get_tkomv IMPORTING

* ex_tkomv = l_tkomv.

*

*

* l_item_conditions_changed = mmpur_no.

* PERFORM pai_item_conditions IN PROGRAM saplmepo

* TABLES l_tkomv

* USING poitem-po_item

* CHANGING l_item_conditions_changed.

*

* IF NOT l_item_conditions_changed IS INITIAL.

*

* CALL METHOD l_header->set_tkomv EXPORTING

* im_tkomv = l_tkomv

* im_item_conditions_changed = l_item_conditions_changed.

*

* Item level POCOND data

* LOOP AT POITEM.

*. CALL FUNCTION 'MEPO_DOC_PBO_ITEM_CONDITIONS'

* EXPORTING

* im_ebelp = poitem-po_item

* EXCEPTIONS

* error_message = 1.

* ENDLOOP.

* ENDIF.

*************************************************************

*currency check mod-004

*************************************************************

*******************************************************************

*MOD-003

IF NOT TESTRUN IS INITIAL.

POHEADER-VENDOR = '4259999999'.

poheader-doc_type = 'ZAPS'.

ENDIF.

*MOD-003

******************************************************************

* IF NOT POHEADER-PURCH_ORG IS INITIAL.

IF POHEADER-PURCH_ORG IS INITIAL.

SELECT SINGLE PUR_ORG

INTO L_EKORG

* FROM ZPUR_ORG

FROM ZP2P_PURCHASEORG

WHERE LE = POHEADER-LE AND

FRMRC = POHEADER-FRMRC AND

FSID = POHEADER-FSID.

IF SY-SUBRC NE 0.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_p2p_pur_ORG.

L_COMP_CODE = POHEADER-COMP_CODE.

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = c_msgtype_e

CL = c_msgid_z001

NUMBER = c_msgnr_619

PAR1 = L_CONST_NAME

PAR2 = L_COMP_CODE

IMPORTING

RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = t_yreturn-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

ELSE.

POHEADER-PURCH_ORG = L_EKORG.

ENDIF.

ENDIF.

* IF NOT POHEADER-PUR_GROUP IS INITIAL.

IF POHEADER-PUR_GROUP IS INITIAL.

clear: g_constval.

CALL FUNCTION 'ZXA_GET_CONSTANT'

EXPORTING

const_name = c_p2p_pur_org

comp_code = POHEADER-COMP_CODE

IMPORTING

const_value = g_constval

EXCEPTIONS

no_value_found = 1

null_value = 2

OTHERS = 3.

IF SY-SUBRC NE 0.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_p2p_pur_org.

L_COMP_CODE = POHEADER-COMP_CODE.

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = c_msgtype_e

CL = c_msgid_z001

NUMBER = c_msgnr_046

PAR1 = L_CONST_NAME

PAR2 = L_COMP_CODE

IMPORTING

RETURN = RETURN.

*

APPEND RETURN.

CLEAR RETURN.

loop at return.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

ELSE.

POHEADER-PUR_GROUP = G_CONSTVAL.

ENDIF.

ENDIF.

*MOD-004

LOOP AT POACCOUNT.

if POACCOUNT-COSTCENTER EQ '0000000000' OR

POACCOUNT-COSTCENTER EQ '0'.

POACCOUNT-COSTCENTER = ' '.

MODIFY POACCOUNT.

endif.

ENDLOOP.

*MOD-004

**********************************************************************

*MOD-003

**********************************************************************

IF NOT TESTRUN IS INITIAL.

L_SERIAL_NO = 0.

L_TABIX = 0.

POHEADER-VENDOR = C_VENDOR.

poheader-doc_type = C_DOC_TYPE.

poheader-comp_code = l_bukrs.

POHEADER-DOC_DATE = SY-DATUM.

POHEADER-CURRENCY = C_CURRENCY.

POHEADER-NETPR = C_NETPR.

LOOP AT POACCOUNT.

L_TABIX = L_TABIX + 1.

LOOP AT POITEM.

if POACCOUNT-PO_ITEM is initial.

POACCOUNT-PO_ITEM = SY-TABIX.

endif.

if POACCOUNT-SERIAL_NO is initial.

POACCOUNT-SERIAL_NO = L_TABIX.

endif.

MODIFY POACCOUNT.

ENDLOOP.

ENDLOOP.

*MOD-004

IF POCOND[] IS INITIAL and

NOT TESTRUN IS INITIAL.

** SELECT SINGLE WAERS

** INTO L_WAERS

** FROM LFM1 WHERE

** LIFNR = POHEADER-VENDOR

** AND EKORG = POHEADER-PURCH_ORG.

** IF SY-SUBRC NE 0.

** IF L_WAERS NE poheader-currency.

LOOP AT POITEM.

pocond-itm_number = poitem-po_item.

POCOND-COND_ST_NO = SY-TABIX.

POCOND-COND_COUNT = SY-TABIX.

pocond-cond_value = poitem-net_price.

pocond-cond_type = 'PBXX'.

POCOND-CHANGE_ID = 'I'.

if not pocond-currency is initial.

pocond-currency = l_waers.

endif.

POCONDHEADER-itm_number = poitem-po_item.

POCONDHEADER-COND_ST_NO = SY-TABIX.

POCONDHEADER-COND_COUNT = SY-TABIX.

pocondHEADER-cond_value = poitem-net_price.

pocondHEADER-cond_type = 'PBXX'.

POCONDHEADER-CHANGE_ID = 'I'.

if not pocond-currency is initial.

pocondHEADER-currency = l_waers.

endif.

APPEND: POCOND,POCONDHEADER.

CLEAR: POCOND, POCONDHEADER.

ENDLOOP.

* endif.

* ENDIF.

ENDIF.

*MOD-004

IF POITEM[] IS INITIAL.

POITEM-SHORT_TEXT = 'Simulation'(001).

if poitem-plant is initial.

clear: l_werks1.

select single plant

into l_werks1

* from zpo_plantmapping

from zp2p_plantmaping

where COMPANY_CODE = poheader-comp_code and

* PUR_ORG = poheader-purch_org and

* PUR_GROUP = poheader-pur_group and

LE = poheader-le and

MRC = poheader-mrc and

FSID = poheader-fsid and

FRMRC = poheader-frmrc.

IF SY-SUBRC = 0.

poitem-plant = l_werks1.

ENDIF.

endif.

if poitem-po_item is initial.

POITEM-PO_ITEM = L_TABIX.

endif.

if poitem-plant is initial.

poitem-plant = l_werks1.

endif.

if POITEM-MATL_GROUP is initial.

POITEM-MATL_GROUP = '99'.

endif.

if POITEM-QUANTITY is initial.

POITEM-QUANTITY = '1'.

endif.

if POITEM-PO_UNIT is initial.

POITEM-PO_UNIT = 'EA'.

endif.

if POITEM-ORDERPR_UN is initial.

POITEM-ORDERPR_UN = 'EA'.

endif.

if POITEM-NET_PRICE is initial.

POITEM-NET_PRICE = '1.00'.

endif.

if POITEM-PRICE_UNIT is initial.

POITEM-PRICE_UNIT = '1.00'.

endif.

* if POITEM-DISTRIB is initial.

* POITEM-DISTRIB = ' '.

* endif.

* if POITEM-PART_INV is initial.

* POITEM-PART_INV = ' '.

* endif.

*MOD-004

if POITEM-GR_IND = C_Y..

POITEM-GR_IND = C_X.

ELSEIF POITEM-GR_IND = C_X.

POITEM-GR_IND = C_X.

ELSE.

POITEM-GR_IND = ' '.

endif.

*MOD-004

**MOD-004

* if POITEM-GR_IND is initial or

* POITEM-GR_IND = c_y.

* POITEM-GR_IND = c_x.

* ELSE.

* POITEM-GR_IND = ' '.

* ENDIF.

**MOD-004

if POITEM-IR_IND is initial.

POITEM-IR_IND = 'X'.

endif.

if POITEM-INCOTERMS1 is initial.

POITEM-INCOTERMS1 = 'CIF'.

endif.

if POITEM-INCOTERMS2 is initial.

POITEM-INCOTERMS2 = 'CIF'.

endif.

if POITEM-PREQ_ITEM is initial.

POITEM-PREQ_ITEM = '123456'.

endif.

APPEND POITEM.

CLEAR: POITEM.

ENDIF.

* if POACCOUNT-PO_ITEM is initial.

* POACCOUNT-PO_ITEM = SY-TABIX.

* endif.

* if POACCOUNT-SERIAL_NO is initial.

* POACCOUNT-SERIAL_NO = L_TABIX.

* endif.

* MODIFY POACCOUNT.

* ENDIF.

* ENDLOOP.

PERFORM get_account_assignment TABLES poitem

poitemx

poaccount

poaccountx

t_yreturn

USING poheader-comp_code

poheader.

IF NOT t_yreturn[] IS INITIAL.

APPEND LINES OF t_yreturn TO RETURN.

READ TABLE t_yreturn WITH KEY type = 'W'.

IF sy-subrc <> 0.

EXPHEADER = POHEADER.

EXPHEADER-CODE = '99'.

SELECT max( SERIALNO )

INTO L_SERIAL

FROM ZP2P_ERRORS.

LOOP AT T_ERRORS.

L_SERIAL = L_SERIAL + 1.

T_ERRORS-SERIALNO = L_SERIAL.

MODIFY T_ERRORS TRANSPORTING SERIALNO.

ENDLOOP.

* INSERT ZERRORS FROM TABLE T_ERRORS.

INSERT ZP2P_ERRORS FROM TABLE T_ERRORS.

**MOD-005

** On Error, exit the function module

* l_exit = 0.

* LOOP AT RETURN WHERE TYPE = C_E.

* L_EXIT = 1.

* EXPHEADER = POHEADER.

* EXPHEADER-CODE = '99'.

* RETURN-RETURN_CODE = C_99.

* RETURN-SEQ_CODE = C_99.

* MODIFY RETURN TRANSPORTING RETURN_CODE SEQ_CODE.

* ENDLOOP.

* IF L_EXIT = 1.

* EXIT.

* ENDIF.

**MOD-005

EXIT.

ENDIF.

ENDIF.

PERFORM GET_INCOTERMS_LINE_ITEM tables poitem

using poheader.

perform get_uom_conversion tables poitem

POITEMX

poaccount

poaccountx

poschedule

poschedulex

pocond

pocondx

Pocondheader

pocondheaderx

changing poheader

poheaderx.

ENDIF.

**********************************************************

*mod-003

***********************************************************

***BV-27-May-2004 - End of Changes for SCR2***

*sraman2 10/14/04

IF POHEADER-PO_NUMBER(3) = C_PCO.

* DATA: l_serial_no LIKE poaccount-serial_no.

loop at POACCOUNT.

ADD 1 TO l_serial_no.

POACCOUNT-SERIAL_NO = l_serial_no.

modify POACCOUNT.

endloop.

endif.

*sraman2 10/14/04

SORT POACCOUNT BY PO_ITEM.

LOOP AT POACCOUNT.

check poheader-quotation+0(2) ne 'CR' and

poheader-quotation+0(2) ne 'UT'.

IF NOT POACCOUNT-WBS_ELEMENT IS INITIAL. "line item posting to

"WBS element

CLEAR L_MSGV1.

L_MSGV1 = POACCOUNT-PO_ITEM.

* Mod-004

* Line Item NOT eligible for PCARD

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = C_MSGTYPE_I "I

* CL = C_MSGID_Z001 "Z001

* NUMBER = C_MSGNR_038 "038

* PAR1 = L_MSGV1

* IMPORTING

* RETURN = RETURN.

* APPEND RETURN.

* CLEAR RETURN.

*mod-004

loop at return.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

clear: l_wa_zerrors.

ELSE.

IF NOT POACCOUNT-COSTCENTER IS INITIAL.

"line item posting to cost center.

READ TABLE POITEM WITH KEY PO_ITEM = POACCOUNT-PO_ITEM.

IF SY-SUBRC = 0.

IF NOT POITEM-DISTRIB IS INITIAL.

CLEAR L_MSGV1.

L_MSGV1 = POACCOUNT-PO_ITEM.

*Mod-004

* Line Item NOT eligible for PCARD

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = C_MSGTYPE_I "I

* CL = C_MSGID_Z001 "Z001

* NUMBER = C_MSGNR_038 "038

* PAR1 = L_MSGV1

* IMPORTING

* RETURN = RETURN.

* APPEND RETURN.

* CLEAR RETURN.

*mod-004

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

ELSE. "line item does NOT contain split accounting

CLEAR L_MSGV1.

L_MSGV1 = POACCOUNT-PO_ITEM.

** Line Item Eligible for PCARD

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = C_MSGTYPE_I "I

* CL = C_MSGID_Z001 "Z001

* NUMBER = C_MSGNR_039 "039

* PAR1 = L_MSGV1

* IMPORTING

* RETURN = RETURN.

* APPEND RETURN.

* CLEAR RETURN.

*MOD-004

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

* To convert WBS Element from External format to Internal Format.

LOOP AT POACCOUNT WHERE NOT WBS_ELEMENT IS INITIAL.

CLEAR : L_WBS_EXTERNAL,

L_WBS_INTERNAL.

L_WBS_EXTERNAL = POACCOUNT-WBS_ELEMENT.

CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'

EXPORTING

INPUT = L_WBS_EXTERNAL

IMPORTING

OUTPUT = L_WBS_INTERNAL.

POACCOUNT-WBS_ELEMENT = L_WBS_INTERNAL.

*sraman2 06/23/04

* MODIFY POACCOUNT INDEX SY-TABIX TRANSPORTING WBS_ELEMENT.

MODIFY POACCOUNT.

*sraman2 06/23/04

ENDLOOP.

*Rounding off to 100 percent.

SORT POACCOUNT BY PO_ITEM DISTR_PERC.

*MOD-003

LOOP AT POACCOUNT.

ADD POACCOUNT-DISTR_PERC TO G_DISTR_PERC.

AT END OF PO_ITEM.

*-- Round off to 100 percent due to small difference in one decimal

*-- point rounding (in Ariba/wM)

IF G_DISTR_PERC GT 0.

G_DISTR_PERC = 100 - G_DISTR_PERC.

G_ADJUST_PERC = C_X. " 'X'

ENDIF.

ENDAT.

IF G_ADJUST_PERC = C_X. " 'X'

* ADD g_distr_perc TO POACCOUNT-DISTR_PERC.

G_DISTR_PERC1 = G_DISTR_PERC + POACCOUNT-DISTR_PERC.

IF G_DISTR_PERC1 = 100.

POACCOUNT-DISTR_PERC = 0.

ELSE.

POACCOUNT-DISTR_PERC = G_DISTR_PERC1.

ENDIF.

MODIFY POACCOUNT.

CLEAR POACCOUNT.

CLEAR: G_DISTR_PERC, G_DISTR_PERC1.

ENDIF.

CLEAR G_ADJUST_PERC.

ENDLOOP.

*MOD-003

*For PO Create, check the existence of Vendor in SAP for the given

*company code.

*If Vendor do not exist, create a new one. However, If Vendor exists,

*but not for the incoming company code, extend the Vendor Master for

*that company code.

* Retrieve vendor account group Constant

CALL FUNCTION 'ZXA_GET_CONSTANT'

EXPORTING

CONST_NAME = C_VEND_ACTGRP

COMP_CODE = POHEADER-COMP_CODE

IMPORTING

CONST_VALUE = L_VEND_ACTGRP

EXCEPTIONS

NO_VALUE_FOUND = 1

NULL_VALUE = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

**BV-08-July-2004 -Begin - Change error handling for zxa_get_constant

*Constant not defined for company code.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_VEND_ACTGRP. "ZRP_VEND_ACTGRP

L_COMP_CODE = POHEADER-COMP_CODE.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = c_msgtype_e

* CL = c_msgid_z001

* NUMBER = c_msgnr_046

* PAR1 = L_CONST_NAME "ZRP_VEND_ACTGRP

* PAR2 = L_COMP_CODE

* IMPORTING

* RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = t_yreturn-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

**BV-08-July-2004 -End- Change error handling for zxa_get_constant

ENDIF.

*Retrieve vendor payment terms Constant

CALL FUNCTION 'ZXA_GET_CONSTANT'

EXPORTING

CONST_NAME = C_VEND_PAYTRM

COMP_CODE = POHEADER-COMP_CODE

IMPORTING

CONST_VALUE = L_VEND_PAYTRM

EXCEPTIONS

NO_VALUE_FOUND = 1

NULL_VALUE = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

**BV-08-July-2004 -Begin- Change error handling for zxa_get_constant

*Constant not defined for company code

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_VEND_PAYTRM. "ZRP_VEND_PAYTRM

L_COMP_CODE = POHEADER-COMP_CODE.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = c_msgtype_e

* CL = c_msgid_z001

* NUMBER = c_msgnr_046

* PAR1 = L_CONST_NAME "ZRP_VEND_PAYTRM

* PAR2 = L_COMP_CODE

* IMPORTING

* RETURN = RETURN.

*

APPEND RETURN.

CLEAR RETURN.

loop at return.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

**BV-08-July-2004 -End- Change error handling for zxa_get_constant

ENDIF.

*Retrieve vendor Reconciliation Account Constant

CALL FUNCTION 'ZXA_GET_CONSTANT'

EXPORTING

CONST_NAME = C_VEND_RECON

COMP_CODE = POHEADER-COMP_CODE

IMPORTING

CONST_VALUE = L_VEND_RECON

EXCEPTIONS

NO_VALUE_FOUND = 1

NULL_VALUE = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

***BV-08-July-2004 -Begin- Change error handling for zxa_get_constant

*Constant not defined for company code.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

L_CONST_NAME = C_VEND_RECON. "ZRP_VEND_RECON

L_COMP_CODE = POHEADER-COMP_CODE.

*

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = c_msgtype_e

* CL = c_msgid_z001

* NUMBER = c_msgnr_046

* PAR1 = L_CONST_NAME "ZRP_VEND_RECON

* PAR2 = L_COMP_CODE

* IMPORTING

* RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = t_yreturn-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

EXIT.

***BV-08-July-2004 -End- Change error handling for zxa_get_constant

ENDIF.

*Zero Pad and Prefix 1 to Vendor.

IF NOT POHEADER-VENDOR IS INITIAL.

*remove any leading zeros for vendor populated from webmethods

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

INPUT = POHEADER-VENDOR

IMPORTING

OUTPUT = POHEADER-VENDOR.

L_LENGTH = STRLEN( POHEADER-VENDOR ).

IF L_LENGTH < 10.

*To pad leading zeros to Vendor

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = POHEADER-VENDOR

IMPORTING

OUTPUT = POHEADER-VENDOR.

*To replace first character with 1.

MOVE '1' TO POHEADER-VENDOR(1).

ELSE. "Vendor is 10 char in length

CLEAR L_MSGV1.

L_MSGV1 = POHEADER-VENDOR.

*Zero Padding and Prefixing 1 Not possible.Vendor is 10 Character

*length

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

TYPE = C_MSGTYPE_I "I

CL = C_MSGID_Z001 "Z001

NUMBER = C_MSGNR_040 "040

PAR1 = L_MSGV1

IMPORTING

RETURN = RETURN.

APPEND RETURN.

CLEAR RETURN.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

ENDIF.

ENDIF.

IF TESTRUN IS INITIAL.

SELECT SINGLE * FROM LFA1 WHERE

LIFNR = POHEADER-VENDOR.

IF SY-SUBRC NE 0.

* Vendor Master (General Section)

IF POADDRVENDOR-NAME IS INITIAL.

MOVE C_ARIBAVENDOR TO POADDRVENDOR-NAME. " 'ARIBA VENDOR'

ENDIF.

W_LFA1-LIFNR = POHEADER-VENDOR.

W_LFA1-NAME1 = POADDRVENDOR-NAME.

W_LFA1-MCOD1 = POADDRVENDOR-NAME.

W_LFA1-LAND1 = C_US. " 'US'

W_LFA1-SPRAS = C_E. " 'E'

W_LFA1-KTOKK = L_VEND_ACTGRP.

W_LFB1-LIFNR = POHEADER-VENDOR.

W_LFB1-BUKRS = POHEADER-COMP_CODE.

W_LFB1-AKONT = L_VEND_RECON.

W_LFB1-ZTERM = L_VEND_PAYTRM.

W_LFM1-LIFNR = POHEADER-VENDOR.

W_LFM1-EKORG = POHEADER-PURCH_ORG.

W_LFM1-WAERS = POHEADER-CURRENCY.

MOVE C_N TO G_FLG_VENDOR. " 'N'

ELSE.

* Vendor Master (General Section)

IF POADDRVENDOR-NAME IS INITIAL.

MOVE C_ARIBAVENDOR TO POADDRVENDOR-NAME. " 'ARIBA VENDOR'

ENDIF.

W_LFA1-LIFNR = POHEADER-VENDOR.

W_LFA1-NAME1 = POADDRVENDOR-NAME.

W_LFA1-MCOD1 = POADDRVENDOR-NAME.

W_LFA1-LAND1 = C_US. " 'US'

W_LFA1-SPRAS = C_E. " 'E'

W_LFA1-KTOKK = L_VEND_ACTGRP.

SELECT SINGLE * FROM LFB1 WHERE

LIFNR = POHEADER-VENDOR

AND BUKRS = POHEADER-COMP_CODE.

IF SY-SUBRC NE 0.

W_LFB1-LIFNR = POHEADER-VENDOR.

W_LFB1-BUKRS = POHEADER-COMP_CODE.

W_LFB1-AKONT = L_VEND_RECON.

W_LFB1-ZTERM = L_VEND_PAYTRM.

G_FLG_VENDOR = C_N. " 'N'

ENDIF.

SELECT SINGLE * FROM LFM1 WHERE

LIFNR = POHEADER-VENDOR

AND EKORG = POHEADER-PURCH_ORG.

IF SY-SUBRC NE 0.

W_LFM1-LIFNR = POHEADER-VENDOR.

W_LFM1-EKORG = POHEADER-PURCH_ORG.

W_LFM1-WAERS = POHEADER-CURRENCY.

G_FLG_VENDOR = C_N. " 'N'

ENDIF.

ENDIF.

IF G_FLG_VENDOR = C_N. " 'N'

* CALL FUNCTION 'Z_VENDOR_INSERT'

* EXPORTING

* I_LFA1 = W_LFA1

* I_LFB1 = W_LFB1

* I_LFM1 = W_LFM1

* TABLES

* T_XLFAS = T_XLFAS

* T_XLFB5 = T_XLFB5

* T_XLFBK = T_XLFBK

* T_XLFZA = T_XLFZA

* ZRETURN = T_ZRETURN.

*

** If Vendor create fails or the transaction commit fails, populate the

** the Return structure and exit the program

*

* READ TABLE T_ZRETURN WITH KEY TYPE = C_E. " 'E'

* IF SY-SUBRC EQ 0.

* APPEND LINES OF T_ZRETURN TO RETURN.

* EXIT.

* ELSE.

* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

* EXPORTING

* WAIT = C_X " 'X'

* IMPORTING

* RETURN = RETURN.

*

* IF RETURN-TYPE = C_E. " 'E'

* APPEND RETURN.

* EXIT.

* ELSE.

* CLEAR RETURN.

* ENDIF.

* ENDIF.

ELSE.

*M0D-003

SELECT SINGLE * FROM LFA1 WHERE

LIFNR = POHEADER-VENDOR.

IF SY-SUBRC EQ 0.

SELECT SINGLE * FROM LFB1 WHERE

LIFNR = POHEADER-VENDOR

AND BUKRS = POHEADER-COMP_CODE.

IF SY-SUBRC NE 0.

SELECT SINGLE * FROM LFM1 WHERE

LIFNR = POHEADER-VENDOR AND

EKORG = POHEADER-PURCH_ORG.

IF SY-SUBRC = 0.

POHEADER-INCOTERMS1 = LFM1-INCO1.

POHEADER-INCOTERMS2 = LFM1-INCO2.

ENDIF.

ENDIF.

ENDIF.

*MOD-003

ENDIF.

* For PCO Order, populate the PO and accounting data into a Z table .

IF POHEADER-PO_NUMBER(3) = C_PCO. " 'PCO'

PERFORM POPULATE_NONPO_DOCUMENT TABLES POITEM

RETURN

POTEXTHEADER

USING POHEADER-PO_NUMBER

POHEADER.

PERFORM POPULATE_NONPO_ACCOUNTING TABLES POACCOUNT

RETURN

USING POHEADER.

PERFORM UPDATE_NONPODOCUMENT.

LOOP AT T_RETURN.

MOVE: T_RETURN-TYPE TO RETURN-TYPE,

T_RETURN-ID TO RETURN-ID,

T_RETURN-NUMBER TO RETURN-NUMBER,

T_RETURN-MESSAGE TO RETURN-MESSAGE.

APPEND RETURN.

CLEAR RETURN.

ENDLOOP.

EXIT.

ENDIF.

ENDIF.

*Move RETURN table messages to temp return table.

REFRESH T_TEMPRETURN.

APPEND LINES OF RETURN TO T_TEMPRETURN.

*PVU-22-May-2004 - Start Changes for SCR1

**************************************************************

*mod-003

**************************************************************

**Populate the change indicator structures before calling

* BAPI_PO_CREATE1

**so that IDOC can be populated with this data

* IF NOT POHEADERX IS INITIAL.

* G_W_HDRX_TMP = POHEADERX.

* ENDIF.

* IF NOT POITEMX[] IS INITIAL.

* G_T_ITEMX_TMP[] = POITEMX[].

* ENDIF.

* IF NOT POSCHEDULEX[] IS INITIAL.

* G_T_SCHDX_TMP[] = POSCHEDULEX[].

* ENDIF.

**MOD-003

* IF NOT POSCHEDULE[] IS INITIAL.

* G_T_SCHD_TMP[] = POSCHEDULE[].

* ENDIF.

**MOD-03

* IF NOT POACCOUNTX[] IS INITIAL.

* G_T_ACCNTX_TMP[] = POACCOUNTX[].

* ENDIF.

* IF NOT POCONDX[] IS INITIAL.

* G_T_CONDX_TMP[] = POCONDX[].

* ENDIF.

**************************************************************

*mod-003

**************************************************************

*PVU-22-May-2004 - End Changes for SCR1

*sraman2 06/07/04

*-- Default the Material Group to 99 if the incoming commodity

*-- code don't exist in SAP

LOOP AT poitem.

SELECT SINGLE matkl INTO t023-matkl FROM t023

WHERE matkl = poitem-matl_group.

IF sy-subrc NE 0.

MOVE: '99' TO poitem-matl_group.

MODIFY poitem TRANSPORTING matl_group.

ENDIF.

CLEAR poitem.

ENDLOOP.

*sraman2 06/07/04

**************************************************************

*mod-003

**************************************************************

* data: l_werks1 type werks_d.

* LOOP AT poitem.

* if poitem-plant is initial.

* clear: l_werks1.

* select single plant

* into l_werks1

* from zpo_plantmapping

* where COMPANY_CODE = poheader-comp_code and

* PUR_ORG = poheader-purch_org and

* PUR_GROUP = poheader-pur_group and

* LE = poheader-le and

* FSID = poheader-fsid and

* FRMRC = poheader-frmrc.

* if sy-subrc ne 0.

* PERFORM ERROR_HANDLING_PLANT USING POHEADER

* poheader-comp_code

* L_WA_ZERRORS.

* EXIT.

* else.

* poitem-plant = l_werks1.

* CLEAR: L_WERKS1.

* endif.

* endif.

** IF POITEM-NET_PRICE NE POHEADER-CURRENCY.

** POITEM-NET_PRICE = POHEADER-CURRENCY.

** ENDIF.

* IF POITEM-PRICE_UNIT NE 0.

* POITEM-IR_IND = 'X'.

* ENDIF.

*

* POITEM-UNLIMITED_DLV = 'X'.

* POITEM-UNDER_DLV_TOL = 0.

* clear: poitem-ARIBACRTTIMESTMP,

* poitem-ARIBAUPDTIMESTMP.

*

* MODIFY POITEM TRANSPORTING UNLIMITED_DLV

* UNDER_DLV_TOL

* PLANT

* IR_IND

* ARIBACRTTIMESTMP

* ARIBAUPDTIMESTMP.

*

*

* ENDLOOP.

**************************************************************

*mod-003

**************************************************************

**************************************************************

*mod-003

**************************************************************

if testrun is initial.

PERFORM GET_INCOTERMS_LINE_ITEM tables poitem

using poheader.

perform get_uom_conversion tables poitem

POITEMX

poaccount

poaccountx

poschedule

poschedulex

pocond

pocondx

pocondheader

pocondheaderx

changing poheader

poheaderx.

endif.

*MOD-004

LOOP AT POITEM.

IF NOT POITEM-DISTRIB IS INITIAL.

CLEAR : L_CONST_NAME,

L_COMP_CODE.

READ TABLE POACCOUNT INDEX SY-TABIX.

IF SY-SUBRC EQ 0.

L_CONST_NAME = POACCOUNT-GL_ACCOUNT.

L_COMP_CODE = L_comp_code.

CALL FUNCTION 'BALW_BAPIRETURN_GET2'

EXPORTING

type = c_msgtype_e "E

cl = c_msgid_z001

number = c_msgnr_613

PAR1 = L_CONST_NAME

PAR2 = L_COMP_CODE

IMPORTING

return = t_yreturn.

APPEND t_yreturn.

CLEAR t_yreturn.

loop at t_yreturn.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = t_yreturn-id.

l_wa_zerrors-type = t_yreturn-type.

l_wa_zerrors-znumber = t_yreturn-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = t_yreturn-message.

append l_wa_zerrors to t_errors.

clear: l_wa_zerrors.

endloop.

IF NOT t_yreturn[] IS INITIAL.

APPEND LINES OF t_yreturn TO RETURN.

READ TABLE t_yreturn WITH KEY type = 'E'.

IF sy-subrc = 0.

SELECT max( SERIALNO )

INTO L_SERIAL

FROM ZP2P_ERRORS.

LOOP AT T_ERRORS.

L_SERIAL = L_SERIAL + 1.

T_ERRORS-SERIALNO = L_SERIAL.

MODIFY T_ERRORS TRANSPORTING SERIALNO.

ENDLOOP.

DELETE T_ERRORS WHERE TYPE NE C_E.

DELETE T_ERRORS WHERE TYPE IS INITIAL.

INSERT ZP2P_ERRORS FROM TABLE T_ERRORS.

**MOD-005

** On Error, exit the function module

* l_exit = 0.

* LOOP AT RETURN WHERE TYPE = C_E.

* L_EXIT = 1.

* EXPHEADER = POHEADER.

* EXPHEADER-CODE = '99'.

* RETURN-RETURN_CODE = C_99.

* RETURN-SEQ_CODE = C_99.

* MODIFY RETURN TRANSPORTING RETURN_CODE SEQ_CODE.

* ENDLOOP.

* IF L_EXIT = 1.

* EXIT.

* ENDIF.

**MOD-005

* INSERT ZERRORS FROM TABLE T_ERRORS.

**MOD-004

* L_RETURN = ' '.

* LOOP AT RETURN WHERE TYPE = C_E.

* RETURN-RETURN_CODE = '99'.

* L_RETURN = C_X.

* MODIFY RETURN TRANSPORTING RETURN_CODE.

* ENDLOOP.

* IF L_RETURN = C_X.

* EXIT.

* ENDIF.

**MOD-004

* EXPHEADER = POHEADER.

* EXPHEADER-CODE = '99'.

*MOD-004

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

IF NOT t_yreturn[] IS INITIAL.

APPEND LINES OF t_yreturn TO RETURN.

READ TABLE t_yreturn WITH KEY type = 'E'.

IF sy-subrc = 0.

**MOD-005

** On Error, exit the function module

* l_exit = 0.

* LOOP AT RETURN WHERE TYPE = C_E.

* L_EXIT = 1.

* EXPHEADER = POHEADER.

* EXPHEADER-CODE = '99'.

* RETURN-RETURN_CODE = C_99.

* RETURN-SEQ_CODE = C_99.

* MODIFY RETURN TRANSPORTING RETURN_CODE SEQ_CODE.

* ENDLOOP.

* IF L_EXIT = 1.

* EXIT.

* ENDIF.

**MOD-005

*MOD-005

* EXPHEADER = POHEADER.

* EXPHEADER-CODE = '99'.

*MOD-005

EXIT.

ENDIF.

ENDIF.

*MOD-004

**************************************************************

*mod-003

**************************************************************

*Populate the change indicator structures before calling BAPI_PO_CREATE1

*so that IDOC can be populated with this data

IF NOT POHEADERX IS INITIAL.

G_W_HDRX_TMP = POHEADERX.

ENDIF.

IF NOT POITEMX[] IS INITIAL.

G_T_ITEMX_TMP[] = POITEMX[].

ENDIF.

IF NOT POSCHEDULEX[] IS INITIAL.

G_T_SCHDX_TMP[] = POSCHEDULEX[].

ENDIF.

*MOD-003

IF NOT POSCHEDULE[] IS INITIAL.

G_T_SCHD_TMP[] = POSCHEDULE[].

ENDIF.

*MOD-03

IF NOT POACCOUNTX[] IS INITIAL.

G_T_ACCNTX_TMP[] = POACCOUNTX[].

ENDIF.

IF NOT POCONDX[] IS INITIAL.

G_T_CONDX_TMP[] = POCONDX[].

ENDIF.

**************************************************************

*mod-003

**************************************************************

*MOD-004

LOOP AT poitem.

IF NOT poitem-delete_ind IS INITIAL. "delete ind marked.

*For item deletion to work properly

*indicator should be 'D'. webmethods passes indicator 'X'.

CASE POITEM-DELETE_IND.

WHEN 'A'.

POITEM-DELETE_IND = ' '.

WHEN 'C'.

POITEM-DELETE_IND = ' '.

WHEN 'D'.

POITEM-DELETE_IND = 'D'.

CLEAR poitem-final_inv.

WHEN 'X'.

POITEM-DELETE_IND = 'D'.

CLEAR poitem-final_inv.

ENDCASE.

MODIFY poitem.

READ TABLE poitemx WITH KEY po_item = poitem-po_item.

IF sy-subrc = 0.

poitemx-final_inv = c_checked. "X

MODIFY poitemx INDEX sy-tabix.

ENDIF.

else.

ENDIF.

ENDLOOP.

*MOD-004

*Call PO Create BAPI.

CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

POHEADER = POHEADER

POHEADERX = POHEADERX

POADDRVENDOR = POADDRVENDOR

TESTRUN = TESTRUN

MEMORY_UNCOMPLETE = MEMORY_UNCOMPLETE

MEMORY_COMPLETE = MEMORY_COMPLETE

* POEXPIMPHEADER = POEXPIMPHEADER

* POEXPIMPHEADERX = POEXPIMPHEADERX

* VERSIONS = VERSIONS

* NO_MESSAGING = NO_MESSAGING

* NO_MESSAGE_REQ = NO_MESSAGE_REQ

* NO_AUTHORITY = NO_AUTHORITY

* NO_PRICE_FROM_PO = NO_PRICE_FROM_PO

IMPORTING

EXPPURCHASEORDER = EXPPURCHASEORDER

EXPHEADER = EXPHEADER

* EXPPOEXPIMPHEADER = EXPPOEXPIMPHEADER

TABLES

RETURN = RETURN

POITEM = POITEM

POITEMX = POITEMX

POADDRDELIVERY = POADDRDELIVERY

POSCHEDULE = POSCHEDULE

POSCHEDULEX = POSCHEDULEX

POACCOUNT = POACCOUNT

POACCOUNTPROFITSEGMENT = POACCOUNTPROFITSEGMENT

POACCOUNTX = POACCOUNTX

POCONDHEADER = POCONDHEADER

POCONDHEADERX = POCONDHEADERX

POCOND = POCOND

POCONDX = POCONDX

POLIMITS = POLIMITS

POCONTRACTLIMITS = POCONTRACTLIMITS

POSERVICES = POSERVICES

POSRVACCESSVALUES = POSRVACCESSVALUES

POSERVICESTEXT = POSERVICESTEXT

EXTENSIONIN = EXTENSIONIN

EXTENSIONOUT = EXTENSIONOUT

* POEXPIMPITEM = POEXPIMPITEM

* POEXPIMPITEMX = POEXPIMPITEMX

POTEXTHEADER = POTEXTHEADER

POTEXTITEM = POTEXTITEM.

* ALLVERSIONS = ALLVERSIONS

* POPARTNER = POPARTNER.

sort return by TYPE

ID

NUMBER

MESSAGE

LOG_NO

LOG_MSG_NO

MESSAGE_V1

MESSAGE_V2

MESSAGE_V3

MESSAGE_V4

PARAMETER

ROW

FIELD

SYSTEM.

delete adjacent duplicates from RETURN

comparing TYPE

ID

NUMBER

MESSAGE

LOG_NO

LOG_MSG_NO

MESSAGE_V1

MESSAGE_V2

MESSAGE_V3

MESSAGE_V4

PARAMETER

ROW

FIELD

SYSTEM.

loop at return.

l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

l_wa_zerrors-serialno = sy-tabix.

l_wa_zerrors-COMP_CODE = poheader-comp_code.

l_wa_zerrors-zid = return-id.

l_wa_zerrors-type = return-type.

l_wa_zerrors-znumber = return-number.

l_wa_zerrors-BEACON_DOC_NO = poheader-po_number.

l_wa_zerrors-SRC_DOC_NO = poheader-po_number.

l_wa_zerrors-ZDATE = sy-datum.

l_wa_zerrors-ERR_MSG = return-message.

append l_wa_zerrors to t_errors.

* insert into zerrors values l_wa_zerrors.

clear: l_wa_zerrors.

endloop.

*append temp return table to RETURN table.

APPEND LINES OF T_TEMPRETURN TO RETURN.

READ TABLE RETURN WITH KEY TYPE = C_E.

IF SY-SUBRC = 0 .

EXPHEADER-CODE = C_99.

ELSE.

EXPHEADER-CODE = C_00.

ENDIF.

**MOD-005

** On Error, exit the function module

* l_exit = 0.

* LOOP AT RETURN WHERE TYPE = C_E.

* L_EXIT = 1.

* EXPHEADER = POHEADER.

* EXPHEADER-CODE = C_99.

* RETURN-RETURN_CODE = C_99.

* RETURN-SEQ_CODE = C_99.

* MODIFY RETURN TRANSPORTING RETURN_CODE SEQ_CODE.

* ENDLOOP.

* IF L_EXIT = 1.

* EXIT.

* ENDIF.

**MOD-005

IF TESTRUN IS INITIAL AND

NOT EXPPURCHASEORDER IS INITIAL.

*sraman2 6/25/04

*This check for 'E' is not necessary.

*This is causing order creation issues

*for some scenarios

* READ TABLE RETURN WITH KEY TYPE = C_E. "E

* IF SY-SUBRC NE 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

* ENDIF.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

*PVU-22-May-2004 - Start Changes for SCR1

*To generate inbound IDOC for failed PO

* IF TESTRUN IS INITIAL.

* PERFORM IDOC_CREATE

* TABLES

* POITEM

* G_T_ITEMX_TMP

* POADDRDELIVERY

* POSCHEDULE

* G_T_SCHDX_TMP

* POACCOUNT

* POACCOUNTPROFITSEGMENT

* G_T_ACCNTX_TMP

* POCOND

* G_T_CONDX_TMP

* POLIMITS

* POCONTRACTLIMITS

* POSERVICES

* POSRVACCESSVALUES

* POSERVICESTEXT

* EXTENSIONIN

* RETURN

* USING

* C_FLG_POCREATE "CREA

* EXPPURCHASEORDER

* POHEADER

* G_W_HDRX_TMP

* POADDRVENDOR

* TESTRUN

* MEMORY_UNCOMPLETE

* MEMORY_COMPLETE.

*

* ENDIF.

*PVU-22-May-2004 - End Changes for SCR1

ENDIF.

*Generate Custom Return messages based on Message Id and number from

*maintenance table ZMESSAGES

CALL FUNCTION 'Z_MM_BUILD_MESSAGES'

TABLES

RETURN = RETURN.

READ TABLE RETURN WITH KEY ID = SPACE

NUMBER = C_MSGNR_000. "000

IF SY-SUBRC EQ 0 AND SY-TABIX NE 1.

DELETE RETURN INDEX SY-TABIX.

INSERT RETURN INDEX 1.

ENDIF.

* DATA: L_SERIAL TYPE I.

SELECT max( SERIALNO )

INTO L_SERIAL

FROM ZP2P_ERRORS.

LOOP AT T_ERRORS.

L_SERIAL = L_SERIAL + 1.

T_ERRORS-SERIALNO = L_SERIAL.

MODIFY T_ERRORS TRANSPORTING SERIALNO.

ENDLOOP.

DELETE T_ERRORS WHERE TYPE NE C_E.

DELETE T_ERRORS WHERE TYPE IS INITIAL.

* INSERT ZERRORS FROM TABLE T_ERRORS.

* DELETE FROM ZERRORS WHERE TYPE NE C_E.

IF NOT T_ERRORS IS INITIAL.

INSERT ZP2P_ERRORS FROM TABLE T_ERRORS.

ENDIF.

DELETE FROM ZP2P_ERRORS WHERE TYPE NE C_E.

ENDFUNCTION.

***********************************************************************

*

**----------------------------------------------------------------------

**

** INCLUDE LZZ_M3_PURCHASEORDER02F02

**

**----------------------------------------------------------------------

**

************************************************************************

**

** PROGRAM LZZ_M3_PURCHASEORDERF01

** TITLE Include containing subroutines for Function group

** ZZ_M3_PURCHASEORDER

** AUTHOR Aveek Ghose

** DATE WRITTEN 25.05.2006

** R/3 RELEASE 4.6C

**----------------------------------------------------------------------

*

**&---------------------------------------------------------------------

**

**& Form filter_items

**&---------------------------------------------------------------------

**

** Subroutine to obtain line items which have GL Account as blank.

**----------------------------------------------------------------------

**

** -->P_T_TEMP_POACCOUNT line item accounting data

**----------------------------------------------------------------------

**

*FORM filter_items TABLES p_t_temp_poaccount STRUCTURE bapimepoaccount.

*

* IF NOT p_t_temp_poaccount[] IS INITIAL.

*

* SORT p_t_temp_poaccount BY po_item.

*

* DELETE p_t_temp_poaccount WHERE NOT gl_account IS initial.

*

* DELETE ADJACENT DUPLICATES FROM p_t_temp_poaccount

* COMPARING po_item.

*

* ENDIF.

*

*ENDFORM. " filter_items

*

**&--------------------------------------------------------------------*

**& Form POPULATE_NONPO_DOCUMENT

**&--------------------------------------------------------------------*

** Update the table ZNONPO_DOCUMENT

**---------------------------------------------------------------------*

** --> p_poitem Item data

** --> p_return Error Messages

** --> p_textheader Texts - Purchase Order

** --> u_po Purchase Order Number

** --> u_poheader Purchase Order Header Data

**---------------------------------------------------------------------*

*FORM populate_nonpo_document TABLES p_poitem STRUCTURE bapimepoitem

* p_return STRUCTURE bapiret2

* p_textheader STRUCTURE bapimepotext

* USING u_po

* u_poheader STRUCTURE bapimepoheader

*.

*

* DATA: l_price LIKE p_poitem-net_price,

* c_poitem LIKE bapimepotext-po_item VALUE '00000'.

*

* CLEAR l_price.

*

* t_znonpo_document-client = sy-mandt.

*

* IF u_po IS INITIAL.

* t_znonpo_document-documentnumber = u_poheader-po_number.

* ELSE.

* t_znonpo_document-documentnumber = u_po.

* ENDIF.

*

* t_znonpo_document-companycode = u_poheader-comp_code.

* t_znonpo_document-documenttype = u_poheader-doc_type.

* t_znonpo_document-suppliernumber = u_poheader-vendor.

* t_znonpo_document-currency = u_poheader-currency.

*

** LOOP AT p_textheader WHERE po_item = '00000'.

* LOOP AT p_textheader WHERE po_item = c_poitem.

* t_znonpo_document-description = p_textheader-text_line.

* ENDLOOP.

*

* LOOP AT p_poitem.

* l_price = l_price + ( p_poitem-net_price * p_poitem-quantity ).

** t_znonpo_document-requester = p_poitem-preq_name.

* ENDLOOP.

*

* t_znonpo_document-amount = l_price.

*

* APPEND t_znonpo_document.

* CLEAR t_znonpo_document.

*

*ENDFORM. "POPULATE_NONPO_DOCUMENT

*

**&--------------------------------------------------------------------*

**& Form POPULATE_NONPO_ACCOUNTING

**&--------------------------------------------------------------------*

** Update the table ZNONPO_ACCTG

**---------------------------------------------------------------------*

** --> p_poaccount Account Assignment data for PO

** --> p_return Error Messages

** --> u_poheader Purchase Order Header Data

**---------------------------------------------------------------------*

*FORM populate_nonpo_accounting TABLES p_poaccount STRUCTURE

* bapimepoaccount

* p_return STRUCTURE bapiret2

* USING u_poheader STRUCTURE

* bapimepoheader.

*

* DATA: l_serial_no LIKE p_poaccount-serial_no.

**begin of change by DD - 09-Aug-2004,tpr2289

*

* SORT p_poaccount BY GL_ACCounT COSTCENTER wbs_element

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K911060 *&

*&------------------------------------------------------&

* serial_no. "@SDR

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K911060 *&

*&------------------------------------------------------&

* DELETE ADJACENT DUPLICATES FROM p_poaccount

* COMPARING GL_ACCounT

* COSTCENTER

* wbs_element

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K911060 *&

*&------------------------------------------------------&

* serial_no. "@SDR

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K911060 *&

*&------------------------------------------------------&

**end of change by DD - 09-Aug-2004,tpr2289

* SORT p_poaccount BY po_item.

**begin of change by DD - 13-Aug-2004,tpr2289

* CLEAR l_serial_no.

**end of change by DD - 13-Aug-2004,tpr2289

* LOOP AT p_poaccount.

**begin of change by DD - 13-Aug-2004,tpr2289

** AT NEW po_item.

** CLEAR l_serial_no.

** ENDAT.

**end of change by DD - 13-Aug-2004,tpr2289

*

**sraman2 10/14/04

** ADD 1 TO l_serial_no.

**sraman2 10/14/04

*

* t_znonpo_acctg-client = sy-mandt.

* t_znonpo_acctg-documentnumber = u_poheader-po_number.

**sraman2 10/14/04

** t_znonpo_acctg-distnumber = l_serial_no.

**sraman2 10/14/04

*

* t_znonpo_acctg-distnumber = p_poaccount-SERIAL_NO.

* t_znonpo_acctg-distpercent = p_poaccount-distr_perc.

* t_znonpo_acctg-distquantity = p_poaccount-quantity.

* t_znonpo_acctg-glacct = p_poaccount-gl_account.

* t_znonpo_acctg-costcenter = p_poaccount-costcenter.

**begin of change by DD - 24-June-2004

** t_znonpo_acctg-internalorder = p_poaccount-orderid.

* t_znonpo_acctg-pspnr = p_poaccount-wbs_element.

**end of change by DD - 24-June-2004

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

* t_znonpo_acctg-ex_pro_no = p_poaccount-unload_pt.

* "@SDR

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

*

* APPEND t_znonpo_acctg.

* CLEAR t_znonpo_acctg.

*

* ENDLOOP.

*

*ENDFORM. "POPULATE_NONPO_ACCOUNTING

*

**&--------------------------------------------------------------------*

**& Form UPDATE_NONPODOCUMENT

**&--------------------------------------------------------------------*

** Update the Non PO Document

**---------------------------------------------------------------------*

** --> t_RETURN Error Messages

**---------------------------------------------------------------------*

*FORM update_nonpodocument.

* CALL FUNCTION 'Z_P2P_INT_IN_NONPODOCUMENT'

* EXPORTING

* BYPASS_VENDOR = 'X' "add TPR2220 DDUTTA 08-Jul-2004

* TABLES

* p_nonpodoc = t_znonpo_document

* p_nonpoacctg = t_znonpo_acctg

* return = t_return.

*

*ENDFORM. "UPDATE_NONPODOCUMENT

*

**&---------------------------------------------------------------------

**

**& Form EXTRACT_MESSAGES

**&---------------------------------------------------------------------

**

** Select data from table zmessages

**----------------------------------------------------------------------

**

**FORM extract_messages .

**

** SELECT * FROM zmessages INTO TABLE t_messages.

**

**ENDFORM. " EXTRACT_MESSAGES

**&---------------------------------------------------------------------

**

**& Form extract_longtext

**&---------------------------------------------------------------------

**

** Extract the long text

**----------------------------------------------------------------------

**

** --> u_id Message class

** --> u_number Message number

** --> u_msgv1 Message variable

** --> u_msgv2 Message variable

** --> u_msgv3 Message variable

** --> u_msgv4 Message variable

** --> u_override Override flag

** --> u_shorttext Shorttext flag

** --> u_longtext Longtext flag

** --> u_message Message text

**----------------------------------------------------------------------

**

*FORM extract_longtext USING u_id

* u_number

* u_msgv1

* u_msgv2

* u_msgv3

* u_msgv4

* u_override

* u_shorttext

* u_longtext

* CHANGING u_message.

*

* DATA: l_object LIKE doktl-object,

* l_initial TYPE c,

* l_variable(20) TYPE c,

* l_length type i.

*

* CLEAR: l_initial,

* l_variable,

* l_object.

*

* IF u_override IS INITIAL AND

* NOT u_longtext IS INITIAL.

** extract long text

* CONCATENATE u_id u_number INTO

* l_object.

*

* SELECT * FROM doktl WHERE

* id EQ c_na AND "'NA'

* object EQ l_object AND

* langu EQ c_e. "E

*

* IF doktl-doktext EQ c_cause. " '&CAUSE&'

* l_initial = c_x. " 'X'

* CLEAR u_message.

* ELSE.

* IF l_initial EQ c_x. "'X'

* IF doktl-dokformat NE c_as AND " 'AS'

* doktl-dokformat NE space.

* EXIT.

* ELSE.

* DO.

* REPLACE c_ampv INTO doktl-doktext WITH c_amp. " '&V' '&'

*

* IF sy-subrc NE 0.

* EXIT.

* ENDIF.

*

* ENDDO.

* CONCATENATE u_message doktl-doktext

* INTO u_message

* SEPARATED BY space.

* ENDIF.

* ENDIF.

*

* ENDIF.

*

* ENDSELECT.

* IF sy-subrc EQ 0.

* SHIFT u_message LEFT DELETING LEADING space.

* ENDIF.

* ENDIF.

*

** replace variables in the long text with the return message variables

* DO.

* l_variable = sy-index.

* CONDENSE l_variable NO-GAPS.

*

* CONCATENATE c_amp l_variable c_amp INTO l_variable. " '&'

* l_length = strlen( l_variable ).

*

* CASE sy-index.

* WHEN 1.

* REPLACE l_variable length l_length WITH u_msgv1 into u_message.

* condense u_message.

* IF sy-subrc NE 0.

* EXIT.

* ENDIF.

* WHEN 2.

* REPLACE l_variable length l_length INTO u_message WITH u_msgv2.

* condense u_msgv2.

* IF sy-subrc NE 0.

* EXIT.

* ENDIF.

* WHEN 3.

* REPLACE l_variable length l_length INTO u_message WITH u_msgv3.

* condense u_msgv3.

* IF sy-subrc NE 0.

* EXIT.

* ENDIF.

* WHEN 4.

* REPLACE l_variable length l_length INTO u_message WITH u_msgv4.

* condense u_msgv4.

* IF sy-subrc NE 0.

* EXIT.

* ENDIF.

* WHEN OTHERS.

* EXIT.

* ENDCASE.

* ENDDO.

*

*ENDFORM. " extract_longtext

*

**PVU-20-May-2004 - Start Changes for SCR1

*

**&---------------------------------------------------------------------

**

**& Form get_constant

**&---------------------------------------------------------------------

**

** Get the constant value from table ZCONSTANTS_NEW

**----------------------------------------------------------------------

**

** -->U_CONST_NAME Name of constant

** -->U_COMP_CODE Company code

** <--CH_CONST_VAL Value of constant

** <--CH_RET SY-SUBRC value

**----------------------------------------------------------------------

**

*FORM get_constant USING u_const_name TYPE zconstname

* u_comp_code TYPE bukrs

* CHANGING ch_const_val TYPE zconstval

* ch_ret TYPE sy-subrc.

*

**The constant value retrieval function module

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* const_name = u_const_name

* comp_code = u_comp_code

* IMPORTING

* const_value = ch_const_val

* EXCEPTIONS

* no_value_found = 1

* null_value = 2

* OTHERS = 3.

*

* IF sy-subrc <> 0.

* ch_ret = sy-subrc.

* ELSE.

* ch_ret = 0.

* ENDIF.

*

*ENDFORM. " get_constant

**&---------------------------------------------------------------------

**

**& Form idoc_create

**&---------------------------------------------------------------------

**

** Create IDOC if BAPI fails

**----------------------------------------------------------------------

**

**FORM idoc_create TABLES t_poitem STRUCTURE bapimepoitem

** t_itemx_tmp STRUCTURE bapimepoitemx

** t_poaddrdelivery STRUCTURE

*bapimepoaddrdelivery

** t_poschedule STRUCTURE bapimeposchedule

** t_schdx_tmp STRUCTURE bapimeposchedulx

** t_poaccount STRUCTURE bapimepoaccount

** t_poaccountprofitsegment STRUCTURE

** bapimepoaccountprofitsegment

** t_accntx_tmp STRUCTURE bapimepoaccountx

** t_pocond STRUCTURE bapimepocond

** t_condx_tmp STRUCTURE bapimepocondx

** t_polimits STRUCTURE bapiesuhc

** t_pocontractlimits STRUCTURE bapiesucc

** t_poservices STRUCTURE bapiesllc

** t_posrvaccessvalues STRUCTURE bapiesklc

** t_poservicestext STRUCTURE bapieslltx

** t_extensionin STRUCTURE bapiparex

** t_return_msg STRUCTURE bapiret2

** USING

** u_flg_create_change TYPE c

** u_purchaseorder LIKE bapimepoheader-po_number

** u_poheader STRUCTURE bapimepoheader

** u_hdrx_tmp STRUCTURE bapimepoheaderx

** u_poaddrvendor STRUCTURE bapimepoaddrvendor

** u_testrun LIKE bapiflag-bapiflag

** u_memory_uncomplete LIKE bapiflag-bapiflag

** u_memory_complete LIKE bapiflag-bapiflag.

**

***---------------------------------------------------------------------

***

*** Local variables

***---------------------------------------------------------------------

***

** DATA: l_bukrs_val TYPE zconstval, "Company Code value

** l_bukrs TYPE bukrs, "Company code

** l_sndpor TYPE zconstval, "Sender Port

** l_sndprt TYPE zconstval, "Sender Partner Type

** l_sndprn TYPE zconstval, "Sender Partner No

** l_rcvpor TYPE zconstval, "Receiver Port

** l_rcvprt TYPE zconstval, "Receiver Partner Type

** l_rcvprn TYPE zconstval, "Receiver Partner No

** l_dist_list TYPE zconstval, "Distribution List

** l_sy_subrc LIKE sy-subrc, "Return value

** l_subline(35) TYPE c, "Subject Line

** l_errmsg(200) TYPE c. "Error Message

**

***---------------------------------------------------------------------

***

*** Internal Tables/Ranges

***---------------------------------------------------------------------

***

*** Table to store error messages

** RANGES : t_errmsg FOR l_errmsg.

**

**

*** create IDoc control-record

** CASE u_flg_create_change.

** WHEN c_flg_pocreate. "CREA

** w_idoc_comm-idoctyp = c_create_idoctyp. "ZMMPOC01

** w_idoc_comm-mestyp = c_create_mestyp. "ZMMPOC

** WHEN c_flg_pochange. "CHNG

** w_idoc_comm-idoctyp = c_change_idoctyp. "ZMMPOH01

** w_idoc_comm-mestyp = c_change_mestyp. "ZMMPOH

** ENDCASE.

** w_idoc_comm-mandt = sy-mandt.

** w_idoc_comm-docrel = c_saprel. "46C

** w_idoc_comm-direct = c_idoc_dir. "2

**

*** Get constant value of Company Code

** PERFORM get_constant USING c_bukrs "ZRP_COMPCODE

** u_poheader-comp_code

** CHANGING l_bukrs_val

** l_sy_subrc.

** IF l_sy_subrc = 0.

*** Get constant value of Sender Port

** l_bukrs = l_bukrs_val.

** PERFORM get_constant USING c_sndpor "ZRP_SNDPOR

** l_bukrs

** CHANGING l_sndpor

** l_sy_subrc.

** IF l_sy_subrc = 0.

** w_idoc_comm-sndpor = l_sndpor.

** ENDIF.

**

*** Get constant value of Sender Partner type

** PERFORM get_constant USING c_sndprt "ZRP_SNDPRT

** l_bukrs

** CHANGING l_sndprt

** l_sy_subrc.

** IF l_sy_subrc = 0.

** w_idoc_comm-sndprt = l_sndprt.

** ENDIF.

**

*** Get constant value of sender partner number

** PERFORM get_constant USING c_sndprn "ZRP_SNDPRN

** l_bukrs

** CHANGING l_sndprn

** l_sy_subrc.

** IF l_sy_subrc = 0.

** w_idoc_comm-sndprn = l_sndprn.

** ENDIF.

**

*** Get constant value of Receiver port

** PERFORM get_constant USING c_rcvpor "ZRP_RCVPOR

** l_bukrs

** CHANGING l_rcvpor

** l_sy_subrc.

** IF l_sy_subrc = 0.

** w_idoc_comm-rcvpor = l_rcvpor.

** ENDIF.

**

*** Get constant value of Receiver partner type

** PERFORM get_constant USING c_rcvprt "ZRP_RCVPRT

** l_bukrs

** CHANGING l_rcvprt

** l_sy_subrc.

** IF l_sy_subrc = 0.

** w_idoc_comm-rcvprt = l_rcvprt.

** ENDIF.

**

*** Get constant value of Receiver partner number

** PERFORM get_constant USING c_rcvprn "ZRP_RCVPRN

** l_bukrs

** CHANGING l_rcvprn

** l_sy_subrc.

** IF l_sy_subrc = 0.

** w_idoc_comm-rcvprn = l_rcvprn.

** ENDIF.

** ENDIF.

**

** CLEAR: w_syst_info, g_t_idoc_data.

** REFRESH g_t_idoc_data.

**

*** call subroutine to create IDoc data-record

** IF u_flg_create_change = c_flg_pocreate. "CREA

** PERFORM zidoc_po_create1

** TABLES

** t_poitem

** t_itemx_tmp

** t_poaddrdelivery

** t_poschedule

** t_schdx_tmp

** t_poaccount

** t_poaccountprofitsegment

** t_accntx_tmp

** t_pocond

** t_condx_tmp

** t_polimits

** t_pocontractlimits

** t_poservices

** t_posrvaccessvalues

** t_poservicestext

** t_extensionin

** g_t_idoc_data

** USING

** u_poheader

** u_hdrx_tmp

** u_poaddrvendor

** u_testrun

** u_memory_uncomplete

** u_memory_complete

** w_syst_info.

**

** ELSEIF u_flg_create_change = c_flg_pochange. "CHNG

** PERFORM zidoc_po_change

** TABLES

** t_poitem

** t_itemx_tmp

** t_poaddrdelivery

** t_poschedule

** t_schdx_tmp

** t_poaccount

** t_poaccountprofitsegment

** t_accntx_tmp

** t_pocond

** t_condx_tmp

** t_polimits

** t_pocontractlimits

** t_poservices

** t_posrvaccessvalues

** t_poservicestext

** t_extensionin

** g_t_idoc_data

** USING

** u_purchaseorder

** u_poheader

** u_hdrx_tmp

** u_poaddrvendor

** u_testrun

** u_memory_uncomplete

** u_memory_complete

** w_syst_info.

**

** ENDIF.

**

**

***Call Function to create and post the IDOC

** CALL FUNCTION 'IDOC_INBOUND_SINGLE'

** EXPORTING

** pi_idoc_control_rec_40 = w_idoc_comm

** IMPORTING

** pe_idoc_number = g_idoc_no

** TABLES

** pt_idoc_data_records_40 = g_t_idoc_data

** EXCEPTIONS

** idoc_not_saved = 1

** OTHERS = 2.

**

** IF sy-subrc <> 0.

*** IDOC_INBOUND_SINGLE failed. IDOC can not be created.

** MESSAGE e000(z001) WITH text-004.

** ELSE.

*** Get constant value of Distribution list

** PERFORM get_constant USING c_dist_list "ZRP_DISTLIST

** l_bukrs

** CHANGING l_dist_list

** l_sy_subrc.

** IF l_sy_subrc <> 0.

*** Distribution list does not exist

** MESSAGE e000(z001) WITH text-001.

** ELSE.

***Subject Line

** CASE u_flg_create_change.

** WHEN c_flg_pocreate. "CREA

***PO CREATE failed for PO

** CONCATENATE text-005

** u_poheader-po_number

** INTO l_subline

** SEPARATED BY space.

** WHEN c_flg_pochange. "CHNG

***PO change failed for PO

** CONCATENATE text-002

** u_purchaseorder

** INTO l_subline

** SEPARATED BY space.

** ENDCASE.

**

***Generate Error Message table to display along with message in inbox.

**

** CLEAR t_errmsg.

** REFRESH t_errmsg.

**

** t_errmsg-sign = c_sign. "I

** t_errmsg-option = c_option. "EQ

**

***Error Messages :

** t_errmsg-low = text-006.

** APPEND t_errmsg.

**

** CLEAR t_errmsg-low.

** LOOP AT t_return_msg

** WHERE type = c_msgtype_e. "E

** t_errmsg-low = t_return_msg-message.

** APPEND t_errmsg.

** CLEAR t_errmsg-low.

** ENDLOOP.

**

***IDOC number posted is

** CONCATENATE text-003

** g_idoc_no

** INTO l_errmsg

** SEPARATED BY space.

**

** t_errmsg-low = l_errmsg.

** APPEND t_errmsg.

**

***Notify users in distribution list of the failure

** SUBMIT z_util_notify_distlist AND RETURN

** WITH p_rgroup = l_dist_list

** WITH p_objdes = l_subline

** WITH s_msg IN t_errmsg

** WITH p_idocno = g_idoc_no.

** ENDIF.

** ENDIF.

**ENDFORM. " idoc_create

*

**&--------------------------------------------------------------------*

**& Form ZIDOC_PO_CHANGE

**&--------------------------------------------------------------------*

** CREATE IDOC DATA RECORD FOR PO CHANGE

**---------------------------------------------------------------------*

**FORM zidoc_po_change

** TABLES poitem STRUCTURE bapimepoitem

** poitemx STRUCTURE bapimepoitemx

** poaddrdelivery STRUCTURE bapimepoaddrdelivery

** poschedule STRUCTURE bapimeposchedule

** poschedulex STRUCTURE bapimeposchedulx

** poaccount STRUCTURE bapimepoaccount

** poaccountprofitsegment STRUCTURE

** bapimepoaccountprofitsegment

** poaccountx STRUCTURE bapimepoaccountx

** pocond STRUCTURE bapimepocond

** pocondx STRUCTURE bapimepocondx

** polimits STRUCTURE bapiesuhc

** pocontractlimits STRUCTURE bapiesucc

** poservices STRUCTURE bapiesllc

** posrvaccessvalues STRUCTURE bapiesklc

** poservicestext STRUCTURE bapieslltx

** extensionin STRUCTURE bapiparex

** idoc_data STRUCTURE edi_dd40

** USING

** purchaseorder LIKE bapimepoheader-po_number

** poheader LIKE bapimepoheader

** poheaderx LIKE bapimepoheaderx

** poaddrvendor LIKE bapimepoaddrvendor

** testrun LIKE bapiflag-bapiflag

** memoryuncomplete LIKE bapiflag-bapiflag

** memorycomplete LIKE bapiflag-bapiflag

** syst_info LIKE syst .

**

** DATA: z1zmmpoh LIKE z1zmmpoh.

** DATA: z1bpmepoheader LIKE z1bpmepoheader.

** DATA: z1bpmepoheaderx LIKE z1bpmepoheaderx.

** DATA: z1bpmepoaddrvendor LIKE z1bpmepoaddrvendor.

** DATA: z1bpmepoaddrvendor1 LIKE z1bpmepoaddrvendor1.

** DATA: z1bpmepoitem LIKE z1bpmepoitem.

** DATA: z1bpmepoitemx LIKE z1bpmepoitemx.

** DATA: z1bpmepoaddrdelivery LIKE z1bpmepoaddrdelivery.

** DATA: z1bpmepoaddrdelivery1 LIKE z1bpmepoaddrdelivery1.

** DATA: z1bpmeposchedule LIKE z1bpmeposchedule.

** DATA: z1bpmeposchedulx LIKE z1bpmeposchedulx.

** DATA: z1bpmepoaccount LIKE z1bpmepoaccount.

** DATA: z1bpmepoaccountprofitsegmen LIKE z1bpmepoaccountprofitsegmen.

** DATA: z1bpmepoaccountx LIKE z1bpmepoaccountx.

** DATA: z1bpmepocond LIKE z1bpmepocond.

** DATA: z1bpmepocondx LIKE z1bpmepocondx.

** DATA: e1bpesuhc LIKE e1bpesuhc.

** DATA: e1bpesucc LIKE e1bpesucc.

** DATA: e1bpesllc LIKE e1bpesllc.

** DATA: e1bpesklc LIKE e1bpesklc.

** DATA: e1bpeslltx LIKE e1bpeslltx.

** DATA: e1bpparex LIKE e1bpparex.

**

*** go through all IDoc-segments

***

**

*** for segment 'Z1ZMMPOH'

***

** CLEAR: z1zmmpoh,

** idoc_data.

** MOVE purchaseorder

** TO z1zmmpoh-purchaseorder.

** MOVE testrun

** TO z1zmmpoh-testrun.

** MOVE memoryuncomplete

** TO z1zmmpoh-memory_uncomplete.

** MOVE memorycomplete

** TO z1zmmpoh-memory_complete.

** idoc_data-sdata = z1zmmpoh.

** idoc_data-segnam = c_z1zmmpoh. "Z1ZMMPOH

** APPEND idoc_data.

**

**

*** for segment 'Z1BPMEPOHEADER'

***

** CLEAR: z1bpmepoheader,

** idoc_data.

** MOVE-CORRESPONDING poheader

** TO z1bpmepoheader.

** IF NOT z1bpmepoheader IS INITIAL.

** CONDENSE z1bpmepoheader-dscnt1_to.

** CONDENSE z1bpmepoheader-dscnt2_to.

** CONDENSE z1bpmepoheader-dscnt3_to.

** CONDENSE z1bpmepoheader-dsct_pct1.

** CONDENSE z1bpmepoheader-dsct_pct2.

** CONDENSE z1bpmepoheader-exch_rate.

** idoc_data-sdata = z1bpmepoheader.

** idoc_data-segnam = c_z1bpmepoheader. "Z1BPMEPOHEADER

** APPEND idoc_data.

** ENDIF.

**

*** for segment 'Z1BPMEPOHEADERX'

***

** CLEAR: z1bpmepoheaderx,

** idoc_data.

** MOVE-CORRESPONDING poheaderx

** TO z1bpmepoheaderx.

** IF NOT z1bpmepoheaderx IS INITIAL.

** idoc_data-sdata = z1bpmepoheaderx.

** idoc_data-segnam = c_z1bpmepoheaderx. "Z1BPMEPOHEADERX.

** APPEND idoc_data.

** ENDIF.

**

*** for segment 'Z1BPMEPOADDRVENDOR'

***

** CLEAR: z1bpmepoaddrvendor,

** idoc_data.

** MOVE-CORRESPONDING poaddrvendor

** TO z1bpmepoaddrvendor.

** idoc_data-sdata = z1bpmepoaddrvendor.

** idoc_data-segnam = c_z1bpmepoaddrvendor.

*"Z1BPMEPOADDRVENDOR

** APPEND idoc_data.

**

*** for segment 'Z1BPMEPOADDRVENDOR1'

***

** CLEAR: z1bpmepoaddrvendor1,

** idoc_data.

** MOVE-CORRESPONDING poaddrvendor

** TO z1bpmepoaddrvendor1.

** idoc_data-sdata = z1bpmepoaddrvendor1.

** idoc_data-segnam = c_z1bpmepoaddrvendor1.

**"Z1BPMEPOADDRVENDOR1

** APPEND idoc_data.

**

*** for segment 'Z1BPMEPOITEM'

***

** LOOP AT poitem

** .

** CLEAR: z1bpmepoitem,

** idoc_data.

** MOVE-CORRESPONDING poitem

** TO z1bpmepoitem.

** CONDENSE z1bpmepoitem-quantity.

** CONDENSE z1bpmepoitem-conv_num1.

** CONDENSE z1bpmepoitem-conv_den1.

** CONDENSE z1bpmepoitem-net_price.

** CONDENSE z1bpmepoitem-price_unit.

** CONDENSE z1bpmepoitem-gr_pr_time.

** CONDENSE z1bpmepoitem-reminder1.

** CONDENSE z1bpmepoitem-reminder2.

** CONDENSE z1bpmepoitem-reminder3.

** CONDENSE z1bpmepoitem-over_dlv_tol.

** CONDENSE z1bpmepoitem-under_dlv_tol.

** CONDENSE z1bpmepoitem-plan_del.

** CONDENSE z1bpmepoitem-net_weight.

** CONDENSE z1bpmepoitem-gross_wt.

** CONDENSE z1bpmepoitem-volume.

** CONDENSE z1bpmepoitem-points.

** CONDENSE z1bpmepoitem-minremlife.

** idoc_data-sdata = z1bpmepoitem.

** idoc_data-segnam = c_z1bpmepoitem. "Z1BPMEPOITEM

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOITEMX'

***

** LOOP AT poitemx

** .

** CLEAR: z1bpmepoitemx,

** idoc_data.

** MOVE-CORRESPONDING poitemx

** TO z1bpmepoitemx.

** idoc_data-sdata = z1bpmepoitemx.

** idoc_data-segnam = c_z1bpmepoitemx. "Z1BPMEPOITEMX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOADDRDELIVERY'

***

** LOOP AT poaddrdelivery

** .

** CLEAR: z1bpmepoaddrdelivery,

** idoc_data.

** MOVE-CORRESPONDING poaddrdelivery

** TO z1bpmepoaddrdelivery.

** idoc_data-sdata = z1bpmepoaddrdelivery.

** idoc_data-segnam = c_z1bpmepoaddrdelivery.

**"Z1BPMEPOADDRDELIVERY

** APPEND idoc_data.

**

*** for segment 'Z1BPMEPOADDRDELIVERY1'

***

** CLEAR: z1bpmepoaddrdelivery1,

** idoc_data.

** MOVE-CORRESPONDING poaddrdelivery

** TO z1bpmepoaddrdelivery1.

** idoc_data-sdata = z1bpmepoaddrdelivery1.

** idoc_data-segnam = c_z1bpmepoaddrdelivery1.

*"Z1BPMEPOADDRDELIVERY1

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOSCHEDULE'

***

** LOOP AT poschedule

** .

** CLEAR: z1bpmeposchedule,

** idoc_data.

** MOVE-CORRESPONDING poschedule

** TO z1bpmeposchedule.

** CONDENSE z1bpmeposchedule-quantity.

** idoc_data-sdata = z1bpmeposchedule.

** idoc_data-segnam = c_z1bpmeposchedule. "Z1BPMEPOSCHEDULE

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOSCHEDULX'

***

** LOOP AT poschedulex

** .

** CLEAR: z1bpmeposchedulx,

** idoc_data.

** MOVE-CORRESPONDING poschedulex

** TO z1bpmeposchedulx.

** idoc_data-sdata = z1bpmeposchedulx.

** idoc_data-segnam = c_z1bpmeposchedulx. "Z1BPMEPOSCHEDULX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOACCOUNT'

***

** LOOP AT poaccount

** .

** CLEAR: z1bpmepoaccount,

** idoc_data.

** MOVE-CORRESPONDING poaccount

** TO z1bpmepoaccount.

** CONDENSE z1bpmepoaccount-quantity.

** CONDENSE z1bpmepoaccount-distr_perc.

** CONDENSE z1bpmepoaccount-net_value.

** CONDENSE z1bpmepoaccount-nond_itax.

** idoc_data-sdata = z1bpmepoaccount.

** idoc_data-segnam = c_z1bpmepoaccount. "Z1BPMEPOACCOUNT

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOACCOUNTPROFITSEGMEN'

***

** LOOP AT poaccountprofitsegment

** .

** CLEAR: z1bpmepoaccountprofitsegmen,

** idoc_data.

** MOVE-CORRESPONDING poaccountprofitsegment

** TO z1bpmepoaccountprofitsegmen.

** idoc_data-sdata = z1bpmepoaccountprofitsegmen.

*** "Z1BPMEPOACCOUNTPROFITSEGMEN

** idoc_data-segnam = c_z1bpmepoaccountprofitsegmen.

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOACCOUNTX'

***

** LOOP AT poaccountx

** .

** CLEAR: z1bpmepoaccountx,

** idoc_data.

** MOVE-CORRESPONDING poaccountx

** TO z1bpmepoaccountx.

** idoc_data-sdata = z1bpmepoaccountx.

** idoc_data-segnam = c_z1bpmepoaccountx. "Z1BPMEPOACCOUNTX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOCOND'

***

** LOOP AT pocond

** .

** CLEAR: z1bpmepocond,

** idoc_data.

** MOVE-CORRESPONDING pocond

** TO z1bpmepocond.

** CONDENSE z1bpmepocond-cond_value.

** CONDENSE z1bpmepocond-cond_p_unt.

** CONDENSE z1bpmepocond-conbaseval.

** CONDENSE z1bpmepocond-conexchrat.

** CONDENSE z1bpmepocond-numconvert.

** CONDENSE z1bpmepocond-denominato.

** CONDENSE z1bpmepocond-scalbasval.

** idoc_data-sdata = z1bpmepocond.

** idoc_data-segnam = c_z1bpmepocond. "Z1BPMEPOCOND

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOCONDX'

***

** LOOP AT pocondx

** .

** CLEAR: z1bpmepocondx,

** idoc_data.

** MOVE-CORRESPONDING pocondx

** TO z1bpmepocondx.

** idoc_data-sdata = z1bpmepocondx.

** idoc_data-segnam = c_z1bpmepocondx. "Z1BPMEPOCONDX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'E1BPESUHC'

***

** LOOP AT polimits

** .

** CLEAR: e1bpesuhc,

** idoc_data.

** MOVE-CORRESPONDING polimits

** TO e1bpesuhc.

** CONDENSE e1bpesuhc-limit.

** CONDENSE e1bpesuhc-exp_value.

** CONDENSE e1bpesuhc-free_limit.

** CONDENSE e1bpesuhc-ssc_limit.

** CONDENSE e1bpesuhc-ssc_perc.

** CONDENSE e1bpesuhc-tmp_limit.

** CONDENSE e1bpesuhc-tmp_perc.

** CONDENSE e1bpesuhc-cont_perc.

** idoc_data-sdata = e1bpesuhc.

** idoc_data-segnam = c_e1bpesuhc. "E1BPESUHC

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'E1BPESUCC'

***

** LOOP AT pocontractlimits

** .

** CLEAR: e1bpesucc,

** idoc_data.

** MOVE-CORRESPONDING pocontractlimits

** TO e1bpesucc.

** CONDENSE e1bpesucc-limit.

** idoc_data-sdata = e1bpesucc.

** idoc_data-segnam = c_e1bpesucc. "E1BPESUCC

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'E1BPESLLC'

***

** LOOP AT poservices

** .

** CLEAR: e1bpesllc,

** idoc_data.

** MOVE-CORRESPONDING poservices

** TO e1bpesllc.

** CONDENSE e1bpesllc-outl_level.

** CONDENSE e1bpesllc-quantity.

** CONDENSE e1bpesllc-ovf_tol.

** CONDENSE e1bpesllc-price_unit.

** CONDENSE e1bpesllc-gr_price.

** CONDENSE e1bpesllc-target_val.

** CONDENSE e1bpesllc-form_val1.

** CONDENSE e1bpesllc-form_val2.

** CONDENSE e1bpesllc-form_val3.

** CONDENSE e1bpesllc-form_val4.

** CONDENSE e1bpesllc-form_val5.

** CONDENSE e1bpesllc-userf2_num.

** idoc_data-sdata = e1bpesllc.

** idoc_data-segnam = c_e1bpesllc. "E1BPESLLC

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'E1BPESKLC'

***

** LOOP AT posrvaccessvalues

** .

** CLEAR: e1bpesklc,

** idoc_data.

** MOVE-CORRESPONDING posrvaccessvalues

** TO e1bpesklc.

** CONDENSE e1bpesklc-percentage.

** idoc_data-sdata = e1bpesklc.

** idoc_data-segnam = c_e1bpesklc. "E1BPESKLC

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'E1BPESLLTX'

***

** LOOP AT poservicestext

** .

** CLEAR: e1bpeslltx,

** idoc_data.

** MOVE-CORRESPONDING poservicestext

** TO e1bpeslltx.

** idoc_data-sdata = e1bpeslltx.

** idoc_data-segnam = c_e1bpeslltx.

* "E1BPESLLTX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'E1BPPAREX'

***

** LOOP AT extensionin

** .

** CLEAR: e1bpparex,

** idoc_data.

** MOVE-CORRESPONDING extensionin

** TO e1bpparex.

** idoc_data-sdata = e1bpparex.

** idoc_data-segnam = c_e1bpparex. "E1BPPAREX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** end of through all IDoc-segments

***

**

**ENDFORM. " ZIDOC_PO_CHANGE

**&---------------------------------------------------------------------

**

**& Form ZIDOC_PO_CREATE1

**&---------------------------------------------------------------------

**

** CREATE IDOC DATA RECORD FOR PO CREATE1

**----------------------------------------------------------------------

**

**FORM zidoc_po_create1

** TABLES poitem STRUCTURE bapimepoitem

** poitemx STRUCTURE bapimepoitemx

** poaddrdelivery STRUCTURE bapimepoaddrdelivery

** poschedule STRUCTURE bapimeposchedule

** poschedulex STRUCTURE bapimeposchedulx

** poaccount STRUCTURE bapimepoaccount

** poaccountprofitsegment STRUCTURE

** bapimepoaccountprofitsegment

** poaccountx STRUCTURE bapimepoaccountx

** pocond STRUCTURE bapimepocond

** pocondx STRUCTURE bapimepocondx

** polimits STRUCTURE bapiesuhc

** pocontractlimits STRUCTURE bapiesucc

** poservices STRUCTURE bapiesllc

** posrvaccessvalues STRUCTURE bapiesklc

** poservicestext STRUCTURE bapieslltx

** extensionin STRUCTURE bapiparex

** idoc_data STRUCTURE edi_dd40

** USING poheader LIKE bapimepoheader

** poheaderx LIKE bapimepoheaderx

** poaddrvendor LIKE bapimepoaddrvendor

** testrun LIKE bapiflag-bapiflag

** memoryuncomplete LIKE bapiflag-bapiflag

** memorycomplete LIKE bapiflag-bapiflag

** syst_info LIKE syst .

**

** DATA: z1zmmpoc LIKE z1zmmpoc.

** DATA: z1bpmepoheader LIKE z1bpmepoheader.

** DATA: z1bpmepoheaderx LIKE z1bpmepoheaderx.

** DATA: z1bpmepoaddrvendor LIKE z1bpmepoaddrvendor.

** DATA: z1bpmepoaddrvendor1 LIKE z1bpmepoaddrvendor1.

** DATA: z1bpmepoitem LIKE z1bpmepoitem.

** DATA: z1bpmepoitemx LIKE z1bpmepoitemx.

** DATA: z1bpmepoaddrdelivery LIKE z1bpmepoaddrdelivery.

** DATA: z1bpmepoaddrdelivery1 LIKE z1bpmepoaddrdelivery1.

** DATA: z1bpmeposchedule LIKE z1bpmeposchedule.

** DATA: z1bpmeposchedulx LIKE z1bpmeposchedulx.

** DATA: z1bpmepoaccount LIKE z1bpmepoaccount.

** DATA: z1bpmepoaccountprofitsegmen LIKE z1bpmepoaccountprofitsegmen.

** DATA: z1bpmepoaccountx LIKE z1bpmepoaccountx.

** DATA: z1bpmepocond LIKE z1bpmepocond.

** DATA: z1bpmepocondx LIKE z1bpmepocondx.

** DATA: e1bpesuhc LIKE e1bpesuhc.

** DATA: e1bpesucc LIKE e1bpesucc.

** DATA: e1bpesllc LIKE e1bpesllc.

** DATA: e1bpesklc LIKE e1bpesklc.

** DATA: e1bpeslltx LIKE e1bpeslltx.

** DATA: e1bpparex LIKE e1bpparex.

**

*** go through all IDoc-segments

***

**

*** for segment 'Z1ZMMPOC'

***

** CLEAR: z1zmmpoc,

** idoc_data.

** MOVE testrun

** TO z1zmmpoc-testrun.

** MOVE memoryuncomplete

** TO z1zmmpoc-memory_uncomplete.

** MOVE memorycomplete

** TO z1zmmpoc-memory_complete.

** idoc_data-sdata = z1zmmpoc.

** idoc_data-segnam = c_z1zmmpoc. "Z1ZMMPOC

** APPEND idoc_data.

**

**

*** for segment 'Z1BPMEPOHEADER'

***

** CLEAR: z1bpmepoheader,

** idoc_data.

** MOVE-CORRESPONDING poheader

** TO z1bpmepoheader.

** IF NOT z1bpmepoheader IS INITIAL.

** CONDENSE z1bpmepoheader-dscnt1_to.

** CONDENSE z1bpmepoheader-dscnt2_to.

** CONDENSE z1bpmepoheader-dscnt3_to.

** CONDENSE z1bpmepoheader-dsct_pct1.

** CONDENSE z1bpmepoheader-dsct_pct2.

** CONDENSE z1bpmepoheader-exch_rate.

** idoc_data-sdata = z1bpmepoheader.

** idoc_data-segnam = c_z1bpmepoheader. "Z1BPMEPOHEADER

** APPEND idoc_data.

** ENDIF.

**

*** for segment 'Z1BPMEPOHEADERX'

***

** CLEAR: z1bpmepoheaderx,

** idoc_data.

** MOVE-CORRESPONDING poheaderx

** TO z1bpmepoheaderx.

** IF NOT z1bpmepoheaderx IS INITIAL.

** idoc_data-sdata = z1bpmepoheaderx.

** idoc_data-segnam = c_z1bpmepoheaderx. "Z1BPMEPOHEADERX

** APPEND idoc_data.

** ENDIF.

**

*** for segment 'Z1BPMEPOADDRVENDOR'

***

** CLEAR: z1bpmepoaddrvendor,

** idoc_data.

** MOVE-CORRESPONDING poaddrvendor

** TO z1bpmepoaddrvendor.

** idoc_data-sdata = z1bpmepoaddrvendor.

** idoc_data-segnam = c_z1bpmepoaddrvendor. "Z1BPMEPOADDRVENDOR

** APPEND idoc_data.

**

*** for segment 'Z1BPMEPOADDRVENDOR1'

***

** CLEAR: z1bpmepoaddrvendor1,

** idoc_data.

** MOVE-CORRESPONDING poaddrvendor

** TO z1bpmepoaddrvendor1.

** idoc_data-sdata = z1bpmepoaddrvendor1.

** idoc_data-segnam = c_z1bpmepoaddrvendor1. "Z1BPMEPOADDRVENDOR1

** APPEND idoc_data.

**

*** for segment 'Z1BPMEPOITEM'

***

** LOOP AT poitem

** .

** CLEAR: z1bpmepoitem,

** idoc_data.

** MOVE-CORRESPONDING poitem

** TO z1bpmepoitem.

** CONDENSE z1bpmepoitem-quantity.

** CONDENSE z1bpmepoitem-conv_num1.

** CONDENSE z1bpmepoitem-conv_den1.

** CONDENSE z1bpmepoitem-net_price.

** CONDENSE z1bpmepoitem-price_unit.

** CONDENSE z1bpmepoitem-gr_pr_time.

** CONDENSE z1bpmepoitem-reminder1.

** CONDENSE z1bpmepoitem-reminder2.

** CONDENSE z1bpmepoitem-reminder3.

** CONDENSE z1bpmepoitem-over_dlv_tol.

** CONDENSE z1bpmepoitem-under_dlv_tol.

** CONDENSE z1bpmepoitem-plan_del.

** CONDENSE z1bpmepoitem-net_weight.

** CONDENSE z1bpmepoitem-gross_wt.

** CONDENSE z1bpmepoitem-volume.

** CONDENSE z1bpmepoitem-points.

** CONDENSE z1bpmepoitem-minremlife.

** idoc_data-sdata = z1bpmepoitem.

** idoc_data-segnam = c_z1bpmepoitem. "Z1BPMEPOITEM

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOITEMX'

***

** LOOP AT poitemx

** .

** CLEAR: z1bpmepoitemx,

** idoc_data.

** MOVE-CORRESPONDING poitemx

** TO z1bpmepoitemx.

** idoc_data-sdata = z1bpmepoitemx.

** idoc_data-segnam = c_z1bpmepoitemx. "Z1BPMEPOITEMX

** APPEND idoc_data.

** ENDLOOP.

**

**

*** for segment 'Z1BPMEPOADDRDELIVERY'

***

** LOOP AT poaddrdelivery

** .

** CLEAR: z1bpmepoaddrdelivery,

** idoc_data.

** MOVE-CORRESPONDING poaddrdelivery

** TO z1bpmepoaddrdelivery.

** idoc_data-sdata = z1bpmepoaddrdelivery.

** idoc_data-segnam = c_z1bpmepoaddrdelivery. "Z1BPMEPOADDRDELIVERY

** APPEND idoc_data.

**

*** for segment 'Z1BPMEPOADDRDELIVERY1'

***

** CLEAR: z1bpmepoaddrdelivery1,

** idoc_data.

** MOVE-CORRESPONDING poaddrdelivery

** TO z1bpmepoaddrdelivery1.

** idoc_data-sdata = z1bpmepoaddrdelivery1.

*** Z1BPMEPOADDRDELIVERY1

** idoc_data-segnam = c_z1bpmepoaddrdelivery1.

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOSCHEDULE'

***

** LOOP AT poschedule

** .

** CLEAR: z1bpmeposchedule,

** idoc_data.

** MOVE-CORRESPONDING poschedule

** TO z1bpmeposchedule.

** CONDENSE z1bpmeposchedule-quantity.

** idoc_data-sdata = z1bpmeposchedule.

** idoc_data-segnam = c_z1bpmeposchedule. "Z1BPMEPOSCHEDULE

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOSCHEDULX'

***

** LOOP AT poschedulex

** .

** CLEAR: z1bpmeposchedulx,

** idoc_data.

** MOVE-CORRESPONDING poschedulex

** TO z1bpmeposchedulx.

** idoc_data-sdata = z1bpmeposchedulx.

** idoc_data-segnam = c_z1bpmeposchedulx. "Z1BPMEPOSCHEDULX

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOACCOUNT'

***

** LOOP AT poaccount

** .

** CLEAR: z1bpmepoaccount,

** idoc_data.

** MOVE-CORRESPONDING poaccount

** TO z1bpmepoaccount.

** CONDENSE z1bpmepoaccount-quantity.

** CONDENSE z1bpmepoaccount-distr_perc.

** CONDENSE z1bpmepoaccount-net_value.

** CONDENSE z1bpmepoaccount-nond_itax.

** idoc_data-sdata = z1bpmepoaccount.

** idoc_data-segnam = c_z1bpmepoaccount. "Z1BPMEPOACCOUNT

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOACCOUNTPROFITSEGMEN'

***

** LOOP AT poaccountprofitsegment

** .

** CLEAR: z1bpmepoaccountprofitsegmen,

** idoc_data.

** MOVE-CORRESPONDING poaccountprofitsegment

** TO z1bpmepoaccountprofitsegmen.

** idoc_data-sdata = z1bpmepoaccountprofitsegmen.

*** Z1BPMEPOACCOUNTPROFITSEGMEN

** idoc_data-segnam = c_z1bpmepoaccountprofitsegmen.

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOACCOUNTX'

***

** LOOP AT poaccountx

** .

** CLEAR: z1bpmepoaccountx,

** idoc_data.

** MOVE-CORRESPONDING poaccountx

** TO z1bpmepoaccountx.

** idoc_data-sdata = z1bpmepoaccountx.

** idoc_data-segnam = c_z1bpmepoaccountx. "Z1BPMEPOACCOUNTX

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOCOND'

***

** LOOP AT pocond

** .

** CLEAR: z1bpmepocond,

** idoc_data.

** MOVE-CORRESPONDING pocond

** TO z1bpmepocond.

** CONDENSE z1bpmepocond-cond_value.

** CONDENSE z1bpmepocond-cond_p_unt.

** CONDENSE z1bpmepocond-conbaseval.

** CONDENSE z1bpmepocond-conexchrat.

** CONDENSE z1bpmepocond-numconvert.

** CONDENSE z1bpmepocond-denominato.

** CONDENSE z1bpmepocond-scalbasval.

** idoc_data-sdata = z1bpmepocond.

** idoc_data-segnam = c_z1bpmepocond. "Z1BPMEPOCOND

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'Z1BPMEPOCONDX'

***

** LOOP AT pocondx

** .

** CLEAR: z1bpmepocondx,

** idoc_data.

** MOVE-CORRESPONDING pocondx

** TO z1bpmepocondx.

** idoc_data-sdata = z1bpmepocondx.

** idoc_data-segnam = c_z1bpmepocondx. "Z1BPMEPOCONDX

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'E1BPESUHC'

***

** LOOP AT polimits

** .

** CLEAR: e1bpesuhc,

** idoc_data.

** MOVE-CORRESPONDING polimits

** TO e1bpesuhc.

** CONDENSE e1bpesuhc-limit.

** CONDENSE e1bpesuhc-exp_value.

** CONDENSE e1bpesuhc-free_limit.

** CONDENSE e1bpesuhc-ssc_limit.

** CONDENSE e1bpesuhc-ssc_perc.

** CONDENSE e1bpesuhc-tmp_limit.

** CONDENSE e1bpesuhc-tmp_perc.

** CONDENSE e1bpesuhc-cont_perc.

** idoc_data-sdata = e1bpesuhc.

** idoc_data-segnam = c_e1bpesuhc. "E1BPESUHC

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'E1BPESUCC'

***

** LOOP AT pocontractlimits

** .

** CLEAR: e1bpesucc,

** idoc_data.

** MOVE-CORRESPONDING pocontractlimits

** TO e1bpesucc.

** CONDENSE e1bpesucc-limit.

** idoc_data-sdata = e1bpesucc.

** idoc_data-segnam = c_e1bpesucc. "E1BPESUCC

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'E1BPESLLC'

***

** LOOP AT poservices

** .

** CLEAR: e1bpesllc,

** idoc_data.

** MOVE-CORRESPONDING poservices

** TO e1bpesllc.

** CONDENSE e1bpesllc-outl_level.

** CONDENSE e1bpesllc-quantity.

** CONDENSE e1bpesllc-ovf_tol.

** CONDENSE e1bpesllc-price_unit.

** CONDENSE e1bpesllc-gr_price.

** CONDENSE e1bpesllc-target_val.

** CONDENSE e1bpesllc-form_val1.

** CONDENSE e1bpesllc-form_val2.

** CONDENSE e1bpesllc-form_val3.

** CONDENSE e1bpesllc-form_val4.

** CONDENSE e1bpesllc-form_val5.

** CONDENSE e1bpesllc-userf2_num.

** idoc_data-sdata = e1bpesllc.

** idoc_data-segnam = c_e1bpesllc. "E1BPESLLC

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'E1BPESKLC'

***

** LOOP AT posrvaccessvalues

** .

** CLEAR: e1bpesklc,

** idoc_data.

** MOVE-CORRESPONDING posrvaccessvalues

** TO e1bpesklc.

** CONDENSE e1bpesklc-percentage.

** idoc_data-sdata = e1bpesklc.

** idoc_data-segnam = c_e1bpesklc. "E1BPESKLC

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'E1BPESLLTX'

***

** LOOP AT poservicestext

** .

** CLEAR: e1bpeslltx,

** idoc_data.

** MOVE-CORRESPONDING poservicestext

** TO e1bpeslltx.

** idoc_data-sdata = e1bpeslltx.

** idoc_data-segnam = c_e1bpeslltx.

**"E1BPESLLTX

** APPEND idoc_data.

** ENDLOOP.

**

*** for segment 'E1BPPAREX'

***

** LOOP AT extensionin

** .

** CLEAR: e1bpparex,

** idoc_data.

** MOVE-CORRESPONDING extensionin

** TO e1bpparex.

** idoc_data-sdata = e1bpparex.

** idoc_data-segnam = c_e1bpparex. "E1BPPAREX

** APPEND idoc_data.

** ENDLOOP.

**

*** end of through all IDoc-segments

***

**

**ENDFORM. " ZIDOC_PO_CREATE1

**

**PVU-20-May-2004 - End Changes for SCR1

**

***BV-27-May-2004 - Begin of Changes for SCR2***

**&---------------------------------------------------------------------

**

**& Form get_account_assignment

**&---------------------------------------------------------------------

**

** Retrieve the account assignment value from Z table zacctasgmnt

** and modify the poitem and poitemx data.

**----------------------------------------------------------------------

**

** -->T_POITEM PO item data

** -->T_POITEMX PO itemx data

** -->T_POACCOUNT PO account data

** -->T_COMPCODE Company code

**----------------------------------------------------------------------

**

*FORM get_account_assignment TABLES t_poitem STRUCTURE bapimepoitem

* t_poitemx STRUCTURE bapimepoitemx

* t_poaccount STRUCTURE

* bapimepoaccount

* t_poaccountx STRUCTURE

*bapimepoaccountx

* t_yreturn STRUCTURE bapiret2

* USING t_compcode TYPE bukrs

* t_poheader TYPE bapimepoheader

*.

*

* DATA: t_acct_assignmt LIKE zacctasgmnt OCCURS 0 WITH HEADER LINE.

*

* DATA: l_acct_present(1) TYPE c,

* l_cc_present(1) TYPE c,

* l_wbs_present(1) TYPE c,

* l_acct_assign TYPE zconstval,

* l_wa_poaccount type bapimepoaccount,

* l_flag(1) type c,

* L_flag1(1) type c,

*

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

* l_index TYPE sy-tabix,

*"@SDR

* l_itemindex TYPE sy-tabix,

*"@SDR

* l_msgv1 TYPE sy-msgv1,

*"@SDR

* l_msgv2 TYPE sy-msgv2,

*"@SDR

* l_constname TYPE zconstname VALUE 'CONVERSION',

*"@SDR

* l_constval TYPE zconstval ,

*"@SDR

* l_conv_val TYPE zconstval ,

*"@SDR

* l_constname_gr TYPE zconstname VALUE 'NONVAL_GRIR' ,

*"@SDR

* l_constval_gr TYPE zconstval ,

*"@SDR

* l_ex_pro_no TYPE zexprono ,

*"@SDR

* l_ex_cc TYPE z_ex_cc ,

*"@SDR

* l_ex_acc_no TYPE z_acc_no ,

*"@SDR

* l_costcenter TYPE kostl ,

*"@SDR

* l_reference TYPE ablad ,

*"@SDR

* l_psga_glacct TYPE zconstname VALUE 'PSGA_ACCOUNT'.

* "@SDR

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

*

**BV-08-July-2004 -Begin - Change error handling for zxa_get_constant

* DATA : L_CONST_NAME LIKE SY-MSGV1, "Constant name

* L_COMP_CODE LIKE SY-MSGV2, "Company code

* l_acct_assmnt TYPE knttp.

*

**BV-08-July-2004 -End - Change error handling for zxa_get_constant

*

** Retrieve Account assignment category

* SELECT * FROM zacctasgmnt

* INTO TABLE t_acct_assignmt

* WHERE comp_code EQ t_compcode.

*

* IF sy-subrc = 0.

** Retrieve Account assignment constant

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* const_name = c_acct_assign

* comp_code = t_compcode

* IMPORTING

* const_value = l_acct_assign

* EXCEPTIONS

* no_value_found = 1

* null_value = 2

* OTHERS = 3.

* IF sy-subrc <> 0.

**BV-08-July-2004 -Begin - Change error handling for zxa_get_constant

**Constant not defined for company code.

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_acct_assign. "ZRP_ACCT_ASSIGN

* L_COMP_CODE = t_compcode.

***BV-08-July-2004 -End - Change error handling for zxa_get_constant

*

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e "E

* cl = c_msgid_z001

***BV-08-July-2004 -Begin - Change error handling for zxa_get_constant

** number = c_msgnr_045 "045

* number = c_msgnr_046 "046

* PAR1 = L_CONST_NAME "ZRP_ACCT_ASSIGN

* PAR2 = L_COMP_CODE

***BV-08-July-2004 -End - Change error handling for zxa_get_constant

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

*

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT.

* ENDIF.

* ENDIF.

*

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

** Requirement very specific to Alza

* IF t_compcode = c_bukrs_alza. " 1155 "@SDR

** Check whether the conversion check is switched on for the

*specific

** business unit.

* CLEAR: l_constval. "@SDR

* CALL FUNCTION 'ZXA_GET_CONSTANT' "@SDR

* EXPORTING "@SDR

* const_name = l_constname "@SDR

* comp_code = t_compcode "@SDR

* IMPORTING "@SDR

* const_value = l_conv_val "@SDR

* EXCEPTIONS "@SDR

* no_value_found = 1 "@SDR

* null_value = 2 "@SDR

* OTHERS = 3. "@SDR

* "@SDR

* IF sy-subrc <> 0. "@SDR

* CLEAR l_conv_val. "@SDR

* l_msgv1 = l_constname. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_046 "@SDR

* PAR1 = l_msgv1 "CONVERSION "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn , "@SDR

* l_conv_val, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 .

*

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

* ENDIF. "@SDR

** Check whether the Non-valuated GR indicator is Switched ON or OFF

* CLEAR: l_constval_gr. "@SDR

* CALL FUNCTION 'ZXA_GET_CONSTANT' "@SDR

* EXPORTING "@SDR

* const_name = l_constname_gr "@SDR

* comp_code = t_compcode "@SDR

* IMPORTING "@SDR

* const_value = l_constval_gr "@SDR

* EXCEPTIONS "@SDR

* no_value_found = 1 "@SDR

* null_value = 2 "@SDR

* OTHERS = 3. "@SDR

* "@SDR

*** IF sy-subrc <> 0.

* "@SDR

* CLEAR l_constval_gr. "@SDR

* l_msgv1 = l_constname_gr. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_046 "@SDR

* PAR1 = l_msgv1 "CONVERSION "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn , "@SDR

* l_constval_gr, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

** ENDIF. "@SDR

* ENDIF. "@SDR

*

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

*

* LOOP AT t_poitem.

* CLEAR: l_acct_present, l_cc_present, l_wbs_present.

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

* l_itemindex = sy-tabix.

* "@SDR

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

* LOOP AT t_poaccount WHERE po_item = t_poitem-po_item.

* CLEAR: t_acct_assignmt.

*&------------------------------------------------------&

**& Begin of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

** Requirement very specific to Alza

* IF t_compcode = c_bukrs_alza. " 1155 "@SDR

** Arrest the cuurent record number for the loop.

* l_index = sy-tabix. "@SDR

** If the conversion switch is on for the specific business unit

** use custom mapping tables to fetch the corresponding WBS

** Elements, GL accounts and Cost Centers

* IF l_conv_val = 'X'. " Conversion is switched ON "@SDR

** Use the below custom FM to retrieve the corresponding GL

** account from SAP fro the external GL Account Number

* IF ( NOT t_compcode IS INITIAL ) "@SDR

* AND ( NOT t_poaccount-gl_account IS INITIAL ). "@SDR

*

* IF NOT t_poaccount-costcenter IS INITIAL. "@SDR

* SHIFT t_poaccount-costcenter LEFT "@SDR

* DELETING LEADING c_zeros. "@SDR

* l_ex_cc = t_poaccount-costcenter. "@SDR

* CALL FUNCTION 'Z_COSTCTR_GET' "@SDR

* EXPORTING "@SDR

* P_BUKRS = t_compcode "@SDR

* P_EX_CC = l_ex_cc "@SDR

* IMPORTING "@SDR

* P_COSTCTR = l_costcenter "@SDR

* EXCEPTIONS "@SDR

* NO_VALUE_FOUND = 1 "@SDR

* NULL_VALUE_FOUND = 2 "@SDR

* OTHERS = 3. "@SDR

* IF sy-subrc <> 0. "@SDR

* t_poaccount-costcenter = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING costcenter. "@SDR

* READ TABLE t_poaccountx WITH "@SDR

* KEY po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-costcenter = space. "@SDR

* MODIFY t_poaccountx INDEX l_index "@SDR

* TRANSPORTING costcenter. "@SDR

* ENDIF. "@SDR

* l_msgv1 = l_costcenter. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_072 "@SDR

* PAR1 = l_msgv1 "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* CLEAR: l_index, "@SDR

* l_costcenter. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn, "@SDR

* l_constval, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* EXIT. "@SDR

* ELSE. "@SDR

* SHIFT l_costcenter LEFT "@SDR

* DELETING LEADING c_zeros. "@SDR

* IF l_costcenter = c_psgaw_cc. " 54123 "@SDR

* CLEAR: l_constval. "@SDR

* CALL FUNCTION 'ZXA_GET_CONSTANT' "@SDR

* EXPORTING "@SDR

* const_name = l_psga_glacct "@SDR

* comp_code = t_compcode "@SDR

* IMPORTING "@SDR

* const_value = l_constval "@SDR

* EXCEPTIONS "@SDR

* no_value_found = 1 "@SDR

* null_value = 2 "@SDR

* OTHERS = 3. "@SDR

* "@SDR

* IF sy-subrc <> 0. "@SDR

* t_poaccount-gl_account = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING gl_account. "@SDR

* READ TABLE t_poaccountx WITH KEY "@SDR

* po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-gl_account = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING gl_account. "@SDR

* ENDIF. "@SDR

* CLEAR l_constval. "@SDR

* l_msgv1 = l_constname. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_046 "@SDR

* PAR1 = l_msgv1 "CONVERSION "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn , "@SDR

* l_constval, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number

*.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

* ELSE. "@SDR

* MOVE l_constval TO "@SDR

* t_poaccount-gl_account. "@SDR

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = t_poaccount-gl_account.

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING gl_account. "@SDR

* ENDIF. "@SDR

* ELSE. "@SDR

* SHIFT t_poaccount-gl_account LEFT "@SDR

* DELETING LEADING c_zeros. "@SDR

* SHIFT t_poaccount-gl_account "@SDR

* BY 1 PLACES RIGHT. "@SDR

* t_poaccount-gl_account+0(1) = 'P'. "@SDR

* l_ex_acc_no = t_poaccount-gl_account. "@SDR

* CALL FUNCTION 'Z_GLACCT_GET' "@SDR

* EXPORTING "@SDR

* P_BUKRS = t_compcode "@SDR

* P_EX_ACC_NO = l_ex_acc_no "@SDR

* IMPORTING "@SDR

* P_GLACCT = "@SDR

* t_poaccount-gl_account "@SDR

* EXCEPTIONS "@SDR

* NO_VALUE_FOUND = 1 "@SDR

* NULL_VALUE_FOUND = 2 "@SDR

* OTHERS = 3. "@SDR

* "@SDR

* IF sy-subrc = 0. "@SDR

** Assign the retrieved GL Account from SAP tothe

** account assignment strcuture after the mapping

** is successful

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = t_poaccount-gl_account.

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING gl_account. "@SDR

* ELSE. "@SDR

* t_poaccount-gl_account = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING gl_account. "@SDR

* READ TABLE t_poaccountx WITH KEY "@SDR

* po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-gl_account = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING gl_account. "@SDR

* ENDIF. "@SDR

** Issue an error message that the mapping of the

** external Reference Number to SAP GL Account

*has

** not been possible as no mapping or null

*mapping

** has been maintained in the custom mapping

*table

* l_msgv1 = t_poaccount-gl_account. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_071 "@SDR

* PAR1 = l_msgv1 "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* CLEAR: l_index, "@SDR

* t_poaccount-gl_account. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn, "@SDR

* l_constval, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number

*.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

* ELSE. "@SDR

* t_poaccount-gl_account = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING gl_account. "@SDR

* READ TABLE t_poaccountx "@SDR

* WITH KEY po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-gl_account = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING gl_account. "@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

* IF l_costcenter = c_psgaw_cc. " 54123 "@SDR

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "@SDR

* EXPORTING "@SDR

* INPUT = l_costcenter "@SDR

* IMPORTING "@SDR

* OUTPUT = l_costcenter. "@SDR

* t_poaccount-costcenter = l_costcenter. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING costcenter. "@SDR

* t_poaccount-wbs_element = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING wbs_element. "@SDR

* READ TABLE t_poaccountx "@SDR

* WITH KEY po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-wbs_element = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING wbs_element. "@SDR

* ENDIF. "@SDR

* ELSE. "@SDR

** Check whether REFERENCE field is the same as Department

* MOVE t_poaccount-unload_pt TO l_reference. "@SDR

* SHIFT l_reference LEFT DELETING LEADING c_zeros. "@SDR

** Check for external GL accounts starting with P164, P165 or

** P169 and Reference is blank or starts with 4 zeros

* IF ( ( l_ex_acc_no+0(4) = c_p164 "P164 "@SDR

* OR l_ex_acc_no+0(4) = c_p165 "P165 "@SDR

* OR l_ex_acc_no+0(4) = c_p169 ) "P169 "@SDR

* AND ( l_reference IS INITIAL

*"@SDR

* OR ( t_poaccount-unload_pt+0(4) = c_4zeros ) ) ).

* "@SDR

* CLEAR: l_constval. "@SDR

* CALL FUNCTION 'ZXA_GET_CONSTANT' "@SDR

* EXPORTING "@SDR

* const_name = c_wbs_default "@SDR

* comp_code = t_compcode "@SDR

* IMPORTING "@SDR

* const_value = l_constval "@SDR

* EXCEPTIONS "@SDR

* no_value_found = 1 "@SDR

* null_value = 2 "@SDR

* OTHERS = 3. "@SDR

* "@SDR

* IF sy-subrc <> 0. "@SDR

* t_poaccount-wbs_element = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING wbs_element. "@SDR

* READ TABLE t_poaccountx WITH KEY "@SDR

* po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-wbs_element = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING wbs_element. "@SDR

* ENDIF. "@SDR

* CLEAR l_constval. "@SDR

* l_msgv1 = l_constname. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_046 "@SDR

* PAR1 = l_msgv1 "CONVERSION "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn , "@SDR

* l_constval, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

* ELSE. "@SDR

* t_poaccount-wbs_element = l_constval. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING wbs_element. "@SDR

* READ TABLE t_poaccountx WITH KEY "@SDR

* po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-wbs_element = 'X'. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING wbs_element. "@SDR

* ENDIF. "@SDR

* t_poaccount-costcenter = space. "@SDR

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING costcenter. "@SDR

* READ TABLE t_poaccountx WITH KEY "@SDR

* po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-costcenter = space. "@SDR

* MODIFY t_poaccountx INDEX l_index "@SDR

* TRANSPORTING costcenter. "@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

* ELSE.

* "@SDR

* IF t_poaccount-costcenter = l_reference.

* "@SDR

** Map the Popelsoft Cost Center into SAP Cost Center

* IF ( NOT t_compcode IS INITIAL )

*"@SDR

* AND ( NOT t_poaccount-costcenter IS INITIAL ).

* "@SDR

* SHIFT t_poaccount-costcenter LEFT "@SDR

* DELETING LEADING c_zeros. "@SDR

* l_ex_cc = t_poaccount-costcenter. "@SDR

* CALL FUNCTION 'Z_COSTCTR_GET' "@SDR

* EXPORTING "@SDR

* P_BUKRS = t_compcode "@SDR

* P_EX_CC = l_ex_cc "@SDR

* IMPORTING "@SDR

* P_COSTCTR = "@SDR

* t_poaccount-costcenter "@SDR

* EXCEPTIONS "@SDR

* NO_VALUE_FOUND = 1 "@SDR

* NULL_VALUE_FOUND = 2 "@SDR

* OTHERS = 3. "@SDR

* "@SDR

* IF sy-subrc = 0. "@SDR

** Assign the retrieved Cost Center from SAP to the

** account assignment strcuture after the mapping is

** successful

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "@SDR

* EXPORTING "@SDR

* INPUT = t_poaccount-costcenter

* IMPORTING "@SDR

* OUTPUT = t_poaccount-costcenter.

* MODIFY t_poaccount INDEX l_index "@SDR

* TRANSPORTING costcenter. "@SDR

* ELSE. "@SDR

* READ TABLE t_poaccountx WITH KEY "@SDR

* po_item = t_poaccount-po_item "@SDR

* serial_no = t_poaccount-serial_no. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poaccountx-costcenter = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING costcenter. "@SDR

* ENDIF. "@SDR

** Issue an error message that the mapping of the

** external Reference Number to SAP WBS Element has

** not been possible as no mapping or null mapping

** has been maintained in the custom mapping table

* l_msgv1 = t_poaccount-costcenter. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_072 "@SDR

* PAR1 = l_msgv1 "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* CLEAR: l_index, "@SDR

* t_poaccount-costcenter. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn, "@SDR

* l_constval, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number

*.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

* ENDIF. "@SDR

* ENDIF.

* "@SDR

* ELSE.

* "@SDR

** IF the first 4 digits of the Reference field is 0, even

** then charge it to a cost center else to a project

* IF ( NOT t_poaccount-unload_pt IS INITIAL )

*"@SDR

* AND ( NOT t_compcode IS INITIAL ).

* "@SDR

* IF t_poaccount-unload_pt+0(4) = c_4zeros.

* "@SDR

* IF NOT t_poaccount-costcenter IS INITIAL.

* "@SDR

* SHIFT t_poaccount-costcenter LEFT

* "@SDR

* DELETING LEADING c_zeros.

* "@SDR

* l_ex_cc = t_poaccount-costcenter.

* "@SDR

* CALL FUNCTION 'Z_COSTCTR_GET'

* "@SDR

* EXPORTING

* "@SDR

* P_BUKRS = t_compcode

* "@SDR

* P_EX_CC = l_ex_cc

* "@SDR

* IMPORTING

* "@SDR

* P_COSTCTR =

* "@SDR

* t_poaccount-costcenter

* "@SDR

* EXCEPTIONS

* "@SDR

* NO_VALUE_FOUND = 1

* "@SDR

* NULL_VALUE_FOUND = 2

* "@SDR

* OTHERS = 3.

* "@SDR

* "@SDR

* IF sy-subrc = 0.

* "@SDR

** Assign the retrieved Cost Center from SAP to the

** account assignment strcuture after the mapping is

** successful

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* "@SDR

* EXPORTING

* "@SDR

* INPUT = t_poaccount-costcenter

* IMPORTING

* "@SDR

* OUTPUT = t_poaccount-costcenter

* .

* MODIFY t_poaccount INDEX l_index

* "@SDR

* TRANSPORTING costcenter.

* "@SDR

* ELSE.

* "@SDR

* READ TABLE t_poaccountx WITH KEY

* "@SDR

* po_item = t_poaccount-po_item

* "@SDR

* serial_no = t_poaccount-serial_no.

* "@SDR

* IF sy-subrc = 0.

* "@SDR

* t_poaccountx-costcenter = space.

* "@SDR

* MODIFY t_poaccountx INDEX sy-tabix

* "@SDR

* TRANSPORTING costcenter.

* "@SDR

* ENDIF.

* "@SDR

** Issue an error message that the mapping of the

** external Reference Number to SAP WBS Element has

** not been possible as no mapping or null mapping

** has been maintained in the custom mapping table

* l_msgv1 = t_poaccount-costcenter.

* "@SDR

* l_msgv2 = t_compcode.

* "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* "@SDR

* EXPORTING

* "@SDR

* TYPE = c_msgtype_e

* "@SDR

* CL = c_msgid_z001

* "@SDR

* NUMBER = c_msgnr_072

* "@SDR

* PAR1 = l_msgv1

* "@SDR

* PAR2 = l_msgv2

* "@SDR

* IMPORTING

* "@SDR

* RETURN = t_yreturn.

* "@SDR

* CLEAR: l_index,

* "@SDR

* t_poaccount-costcenter.

* "@SDR

* "@SDR

* APPEND t_yreturn.

* "@SDR

* CLEAR: t_yreturn,

* "@SDR

* l_constval,

* "@SDR

* l_msgv1 ,

* "@SDR

* l_msgv2 .

* "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number

*.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number

*.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* EXIT.

* "@SDR

* ENDIF.

* "@SDR

* ENDIF.

* "@SDR

* ELSE.

** Use the below custom FM to retrieve the corresponding

** WBS element from SAP for the external Reference number

** available if at all

* l_ex_pro_no = t_poaccount-unload_pt.

* "@SDR

* CALL FUNCTION 'Z_WBSELEM_GET'

* "@SDR

* EXPORTING

* "@SDR

* P_BUKRS = t_compcode

* "@SDR

* P_EX_PRO_NO = l_ex_pro_no

* "@SDR

* IMPORTING

* "@SDR

* P_WBS_ELEMENT =

* "@SDR

* t_poaccount-wbs_element

* "@SDR

* EXCEPTIONS

* "@SDR

* NO_VALUE_FOUND = 1

* "@SDR

* NULL_VALUE_FOUND = 2

* "@SDR

* OTHERS = 3.

* "@SDR

* "@SDR

* IF sy-subrc = 0.

* "@SDR

** Assign the retrieved WBS Element from SAP to the

** account assignment strcuture after the mapping is

** successful

* MODIFY t_poaccount INDEX l_index

*"@SDR

* TRANSPORTING wbs_element.

* "@SDR

* READ TABLE t_poaccountx WITH KEY

*"@SDR

* po_item = t_poaccount-po_item

*"@SDR

* serial_no = t_poaccount-serial_no.

* "@SDR

* IF sy-subrc = 0.

* "@SDR

* t_poaccountx-wbs_element = 'X'. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING wbs_element. "@SDR

* ENDIF.

* "@SDR

* t_poaccount-costcenter = space.

* "@SDR

* MODIFY t_poaccount INDEX l_index

*"@SDR

* TRANSPORTING costcenter.

* "@SDR

* READ TABLE t_poaccountx

*"@SDR

* WITH KEY po_item = t_poaccount-po_item

*"@SDR

* serial_no = t_poaccount-serial_no.

* "@SDR

* IF sy-subrc = 0.

* "@SDR

* t_poaccountx-costcenter = space. "@SDR

* MODIFY t_poaccountx INDEX sy-tabix "@SDR

* TRANSPORTING costcenter. "@SDR

* ENDIF.

* "@SDR

* ELSE.

* "@SDR

** Issue an error message that the mapping of the

** external Reference Number to SAP WBS Element has

** not been possible as no mapping or null mapping

** has been maintained in the custom mapping table

* l_msgv1 = t_poaccount-unload_pt. "@SDR

* l_msgv2 = t_compcode. "@SDR

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_e "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_066 "@SDR

* PAR1 = l_msgv1 "@SDR

* PAR2 = l_msgv2 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* CLEAR: l_index, "@SDR

* t_poaccount-wbs_element. "@SDR

* "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn, "@SDR

* l_constval, "@SDR

* l_msgv1 , "@SDR

* l_msgv2 . "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number

*.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* EXIT. "@SDR

* ENDIF.

* "@SDR

* ENDIF.

* "@SDR

* ENDIF.

* "@SDR

* ENDIF.

* "@SDR

* ENDIF.

* "@SDR

* ENDIF. "@SDR

** IF t_poaccount-wbs_element IS INITIAL.

* "@SDR

** ELSE.

* "@SDR

** CLEAR t_poaccount-costcenter.

* "@SDR

** MODIFY t_poaccount INDEX l_index

* "@SDR

** TRANSPORTING costcenter.

* "@SDR

** READ TABLE t_poaccountx

* "@SDR

** WITH KEY po_item = t_poaccount-po_item.

* "@SDR

** IF sy-subrc = 0.

* "@SDR

** t_poaccountx-costcenter = space.

* "@SDR

** MODIFY t_poaccountx INDEX sy-tabix TRANSPORTING

* "@SDR

** costcenter.

* "@SDR

**

** ENDIF.

* "@SDR

** ENDIF.

* "@SDR

* ELSE. " Conversion is switched OFF "@SDR

** If the conversion switch is OFF, issue a warning message

** saying that the Division/Location, Subcode and Reference

** fields are no longer used for Alza; contents will be

** ignored

* IF NOT t_poaccount-unload_pt IS INITIAL.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2' "@SDR

* EXPORTING "@SDR

* TYPE = c_msgtype_w "@SDR

* CL = c_msgid_z001 "@SDR

* NUMBER = c_msgnr_067 "@SDR

* IMPORTING "@SDR

* RETURN = t_yreturn. "@SDR

* "@SDR

* APPEND t_yreturn. "@SDR

* CLEAR: t_yreturn, "@SDR

* l_constval. "@SDR

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* ENDIF. "@SDR

* ENDIF. "@SDR

* ENDIF.

* "@SDR

*&------------------------------------------------------&

**& End of Addition: 26-Sep-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

* IF NOT t_poaccount-costcenter IS INITIAL.

* l_cc_present = c_x. "X

* ENDIF.

* IF NOT t_poaccount-wbs_element IS INITIAL.

* l_wbs_present = c_x. "X

* ENDIF.

* IF NOT t_poaccount-gl_account IS INITIAL.

* l_acct_present = c_x. "X

* ENDIF.

*

* READ TABLE t_acct_assignmt WITH KEY

* cost_center = l_cc_present

* wbs_element = l_wbs_present

* gl_account = l_acct_present.

*

* IF t_acct_assignmt-acct_assgmnt = l_acct_assign. "F

* EXIT.

* ENDIF.

* ENDLOOP.

*

* IF sy-subrc EQ 0.

* t_poitem-acctasscat = t_acct_assignmt-acct_assgmnt.

* MODIFY t_poitem.

*

* READ TABLE t_poitemx WITH KEY po_item = t_poitem-po_item.

* IF sy-subrc EQ 0.

* t_poitemx-acctasscat = c_x. "X

* MODIFY t_poitemx INDEX sy-tabix.

* ENDIF.

* ENDIF.

*&------------------------------------------------------&

**& Begin of Addition: 21-oct-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

** Final Invoice Indicator checked for all POs for conversion

* IF t_compcode = c_bukrs_alza AND l_constval_gr = c_x. "@SDR

* t_poitem-final_inv = c_x. "@SDR

* MODIFY t_poitem INDEX l_itemindex TRANSPORTING final_inv. "@SDR

* READ TABLE t_poitemx WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-final_inv = c_x. "@SDR

* MODIFY t_poitemx INDEX sy-tabix TRANSPORTING final_inv."@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

** NON VALUATED GR Indicator

** Case1: NONVAL GR (Active) GR from Ariba (Active) With Split

* IF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = c_x "X "@SDR

* AND t_poitem-gr_ind = c_x "X "@SDR

* AND NOT t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (Active) Non val GR (active)

* t_poitem-gr_non_val = c_x. "X "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = c_x. "X "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 2: NONVAL GR (Active) GR from Ariba (Active) Without Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = c_x "X "@SDR

* AND t_poitem-gr_ind = c_x "X "@SDR

* AND t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (Active) Non val GR (active)

* t_poitem-gr_non_val = c_x. "X "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = c_x. "X "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 3: NONVAL GR (Active) GR from Ariba (InActive) With Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = c_x "X "@SDR

* AND t_poitem-gr_ind IS INITIAL "@SDR

* AND NOT t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (InActive) Non val GR (Inactive)

* t_poitem-gr_non_val = space. "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = space. "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 4: NONVAL GR (Active) GR from Ariba (InActive) Without Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = c_x "X "@SDR

* AND t_poitem-gr_ind IS INITIAL "@SDR

* AND t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (InActive) Non val GR (Inactive)

* t_poitem-gr_non_val = space. "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = space. "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 5: NONVAL GR (InActive) GR from Ariba (Active) With Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = 'Y' "@SDR

* AND t_poitem-gr_ind = c_x "X "@SDR

* AND NOT t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (Active) Non val GR (active)

* t_poitem-gr_non_val = c_x. "X "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = c_x. "X "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 6: NONVAL GR (InActive) GR from Ariba (Active) Without Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = 'Y' "@SDR

* AND t_poitem-gr_ind = c_x "X "@SDR

* AND t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (Active) Non val GR (Inactive)

* t_poitem-gr_non_val = space. "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = space. "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 7: NONVAL GR (InActive) GR from Ariba (InActive) With Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = 'Y' "@SDR

* AND t_poitem-gr_ind IS INITIAL "@SDR

* AND NOT t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (InActive) Non val GR (Inactive)

* t_poitem-gr_non_val = space. "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = space. "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

** Case 8: NONVAL GR (InActive) GR from Ariba (InActive) W/O Split

* ELSEIF t_compcode = c_bukrs_alza "1155 "@SDR

* AND l_constval_gr = 'Y' "@SDR

* AND t_poitem-gr_ind IS INITIAL "@SDR

* AND t_poitem-distrib IS INITIAL . "@SDR

** GR Flag (InActive) Non val GR (Inactive)

* t_poitem-gr_non_val = space. "@SDR

* MODIFY t_poitem INDEX l_itemindex "@SDR

* TRANSPORTING gr_non_val. "@SDR

* READ TABLE t_poitemx "@SDR

* WITH KEY po_item = t_poitem-po_item. "@SDR

* IF sy-subrc = 0. "@SDR

* t_poitemx-gr_non_val = space. "@SDR

* MODIFY t_poitemx INDEX sy-tabix "@SDR

* TRANSPORTING gr_non_val. "@SDR

* ENDIF. "@SDR

* ENDIF. "@SDR

*

*&------------------------------------------------------&

**& End of Addition: 21-oct-2005 SDUTTARO RD1K910316 *&

*&------------------------------------------------------&

*&----------------------------------------------------&

**& Begin of Addition: -Sep-2005 SDUTTARO RD1K910316 *&

*&----------------------------------------------------&

** Clear all the local variables.

* CLEAR: l_index ,

*"@SDR

* l_constval ,

*"@SDR

* l_itemindex,

*"@SDR

* l_ex_pro_no.

* "@SDR

*&----------------------------------------------------&

**& End of Addition: -Sep-2005 SDUTTARO RD1K910316 *&

*&----------------------------------------------------&

* ENDLOOP.

*

*************************************************************

** MOD-003

************************************************************

* DATA: L_TABIX TYPE SY-TABIX.

** Retrieve Account assignment category

** SELECT * FROM zacctasgmnt

** INTO TABLE t_acct_assignmt

** WHERE comp_code EQ t_compcode.

**

** IF sy-subrc = 0.

*** Retrieve Account assignment constant

** CALL FUNCTION 'ZXA_GET_CONSTANT'

** EXPORTING

** const_name = c_acct_assign

** comp_code = t_compcode

** IMPORTING

** const_value = l_acct_assign

** EXCEPTIONS

** no_value_found = 1

** null_value = 2

** OTHERS = 3.

** IF sy-subrc <> 0.

** CLEAR : L_CONST_NAME,

** L_COMP_CODE.

**

** L_CONST_NAME = c_acct_assign. "ZRP_ACCT_ASSIGN

** L_COMP_CODE = t_compcode.

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** type = c_msgtype_e "E

** cl = c_msgid_z001

** number = c_msgnr_046 "046

** PAR1 = L_CONST_NAME "ZRP_ACCT_ASSIGN

** PAR2 = L_COMP_CODE

** IMPORTING

** return = t_yreturn.

**

** APPEND t_yreturn.

** CLEAR t_yreturn.

**

** EXIT.

** ENDIF.

** ENDIF.

*

* data: l_prart type ps_prart,

* l_belkz type ps_belkz,

* l_glaccount type ZCONSTVAL,

* l_anln1 type anln1,

* l_anln2 type anln2,

* P_XSPEB type xspeb_anla.

*

* constants: c_gl_acc_po type ZCONSTname value 'Z_P2P_GL_ACC_PO'.

* DATA: L_werks type werks_d.

*

* data: l_location type stort_t499s.

* data: l_prev_item type ebelp.

* data: l_glacc(10) type c.

* data: l_cost(10) type c.

*

* LOOP AT t_poitem.

* CLEAR: l_acct_present, l_cc_present, l_wbs_present.

* l_itemindex = sy-tabix.

* "@SDR

* CLEAR: t_acct_assignmt.

*

* LOOP AT t_poaccount WHERE po_item = t_poitem-po_item.

* l_tabix = sy-tabix.

* CLEAR: L_ACCT_ASSMNT.

* SELECT SINGLE ACCT_ASSGMNT

* INTO L_ACCT_ASSMNT

* FROM ZP2P_ACCTASSCATG

* WHERE ZACCT_TYPE = T_POACCOUNT-ZACCT_TYPE.

*

* if sy-subrc = 0.

* t_poitem-acctasscat = l_acct_assmnt.

* modify t_poitem transporting acctasscat.

* endif.

* ENDLOOP.

* ENDLOOP.

*

* LOOP AT t_poitem.

* CLEAR: l_acct_present, l_cc_present, l_wbs_present.

* l_itemindex = sy-tabix.

* "@SDR

* CLEAR: t_acct_assignmt.

*

* LOOP AT t_poaccount WHERE po_item = t_poitem-po_item.

* l_tabix = sy-tabix.

*

**MOD-004

*

* IF NOT t_poaccount-costcenter IS INITIAL.

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-costcenter

* IMPORTING

* OUTPUT = l_cost.

*

* IF L_COST NE '0000000000'.

* MOVE: L_COST TO T_POACCOUNT-COSTCENTER.

* ENDIF.

* ENDIF.

*

* IF NOT t_poaccount-gl_account IS INITIAL.

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-gl_account

* IMPORTING

* OUTPUT = l_glacc.

*

* IF L_GLACC NE '0000000000'.

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

* ENDIF.

* ENDIF.

*

**MOD-004

*

***MOD-003

** if l_tabix > 1.

** perform check_split_accounts using t_poaccount-gl_account

** l_glaccount

** t_poheader

** t_compcode

** l_prev_item

** t_poitem-po_item.

** endif.

**MOD-003

*

** Split Accounting check

** if t_poaccount-gl_account = l_glaccount.

** CLEAR : L_CONST_NAME,

** L_COMP_CODE.

**

** L_CONST_NAME = l_glaccount.

** L_COMP_CODE = t_compcode.

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** type = c_msgtype_e "E

** cl = c_msgid_z001

** number = c_msgnr_613

** PAR1 = L_CONST_NAME

** PAR2 = L_COMP_CODE

** IMPORTING

** return = t_yreturn.

**

** APPEND t_yreturn.

** CLEAR t_yreturn.

** l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

** l_wa_zerrors-COMP_CODE = t_poheader-comp_code.

** l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-ZDATE = sy-datum.

*** l_wa_zerrors-ERR_MSG = c_msgnr_613.

** read table t_yreturn index 1.

** l_wa_zerrors-ERR_MSG = t_yreturn-message.

** insert into zerrors values l_wa_zerrors.

** clear: l_wa_zerrors.

**

** ENDIF.

** endif.

* clear: l_prart, l_belkz.

*

* If t_poaccount-zacct_type = C_W1. "'W'.

**********************************************

** Case 1 Expense WBS

**********************************************

* CLEAR: L_ACCT_ASSMNT.

* SELECT SINGLE ACCT_ASSGMNT

* INTO L_ACCT_ASSMNT

* FROM ZP2P_ACCTASSCATG

*

* WHERE ZACCT_TYPE = T_POACCOUNT-ZACCT_TYPE.

*

* IF L_ACCT_ASSMNT = C_P1.

** IF t_poitem-acctasscat = C_P1. "'P'.

* IF NOT t_poaccount-gl_account IS INITIAL.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-gl_account

* IMPORTING

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

* clear: l_flag.

*

**mod-004

** perform validate_gl_account using t_poaccount-gl_account

** t_compcode

** changing l_flag.

**mod-004

* perform validate_gl_account using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE 'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* if not t_poaccount-wbs_element is initial.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

* endif.

* endif.

* endif.

* endif.

* IF L_ACCT_ASSMNT = C_K1.

** IF t_poitem-acctasscat = C_K1. "'K'.

* IF NOT t_poaccount-gl_account IS INITIAL.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-gl_account

* IMPORTING

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

**mod-004

** perform validate_gl_account using t_poaccount-gl_account

** t_compcode

** changing l_flag.

**MOD-004

*

* perform validate_gl_account using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* IF NOT T_POACCOUNT-WBS_ELEMENT IS INITIAL.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

*

* ENDIF.

* endif.

* endif.

* ENDIF.

*

* IF NOT t_poaccount-costcenter IS INITIAL AND

* t_poaccount-costcenter NE '0000000000'.

**MOD-004

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-costcenter

* IMPORTING

* OUTPUT = l_cost.

*

* MOVE: L_COST TO T_POACCOUNT-COSTCENTER.

*

** perform validate_costcenter using t_poaccount-costcenter

** changing l_flag.

**MOD-004

*

* perform validate_costcenter using l_cost

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_COST USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

* l_cc_present = c_x. "X

* ENDIF.

* ENDIF.

**Case 1

***********************************************************************

*

***********************************************************************

**Case 2 : Capital WBS- New Asset

*

* If t_poaccount-zacct_type = C_N1. "'N'.

** Case 1 Expense WBS

* CLEAR: L_ACCT_ASSMNT.

* SELECT SINGLE ACCT_ASSGMNT

* INTO L_ACCT_ASSMNT

* FROM ZP2P_ACCTASSCATG

* WHERE ZACCT_TYPE = T_POACCOUNT-ZACCT_TYPE.

*

* IF L_ACCT_ASSMNT = C_P1.

** IF t_poitem-acctasscat = C_P1. "'P'.

* IF NOT t_poaccount-gl_account IS INITIAL.

**MOD-004

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-gl_account

* IMPORTING

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

** perform validate_gl_account_exp_wbs

** using t_poaccount-gl_account

** t_compcode

** changing l_flag.

**MOD-004

*

* perform validate_gl_account_exp_wbs

* using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

* IF sy-subrc <> 0.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* EXIT.

* ELSE.

* if not t_poaccount-wbs_element is initial.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

* if sy-subrc NE 0.

* EXIT.

* ENDIF.

* endif.

* endif.

* endif.

** endif.

* if not t_poitem-plant is initial.

* clear: l_werks.

* select single werks

* into l_werks

* from t499s

* where werks = t_poitem-plant.

* if sy-subrc ne 0.

* PERFORM ERROR_HANDLING_PLANT USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* EXIT.

* endif.

*

** select single werks

** into l_werks

** from t001w

** where werks = t_poitem-plant.

** if sy-subrc ne 0.

** PERFORM ERROR_HANDLING_PLANT USING T_POHEADER

** T_COMPCODE

** L_WA_ZERRORS.

** EXIT.

** endif.

*

* Clear: l_werks.

* select single werks

* into l_werks

* from ANLZ

* where bukrs = t_compcode and

* werks = t_poitem-plant.

* if sy-subrc ne 0.

* PERFORM ERROR_HANDLING_ANLZ USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* EXIT.

* endif.

*

** clear: l_werks.

** select single werks

** into l_werks

** from t499s

** where werks = t_poitem-plant.

** if sy-subrc ne 0.

** PERFORM ERROR_HANDLING_PLANT USING T_POHEADER

** T_COMPCODE

** L_WA_ZERRORS.

** EXIT.

** endif.

* endif.

*

** If not t_poitem-plant is initial.

* If not t_poaccount-zplant is initial.

* select single werks stand

* into (l_werks, l_location )

* from t499s

* where werks = t_POACCOUNT-ZPLANT AND

** poitem-plant and

* stand = t_poaccount-zlocation.

* if sy-subrc ne 0.

* PERFORM ERROR_HANDLING_location USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* EXIT.

*

* endif.

* endif.

* endif.

*

** IF t_poitem-acctasscat = C_K1. "'K'.

* IF L_ACCT_ASSMNT = C_K1.

* CLEAR: L_ACCT_ASSMNT.

* SELECT SINGLE ACCT_ASSGMNT

* INTO L_ACCT_ASSMNT

* FROM ZP2P_ACCTASSCATG

** FROM ZPOACCTASGMNTCAT

* WHERE ZACCT_TYPE = T_POACCOUNT-ZACCT_TYPE.

*

* IF NOT t_poaccount-gl_account IS INITIAL.

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING "@SDR

** INPUT = t_poaccount-gl_account

** IMPORTING "@SDR

** OUTPUT = t_poaccount-gl_account.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

** perform validate_gl_account using t_poaccount-gl_account

** t_compcode

** changing l_flag.

*

* perform validate_gl_account using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* IF NOT T_POACCOUNT-WBS_ELEMENT IS INITIAL.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

*

* ENDIF.

* endif.

* endif.

* ENDIF.

*

**MOD-004

* IF NOT t_poaccount-costcenter IS INITIAL AND

* t_poaccount-costcenter NE '0000000000'.

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING

** INPUT = t_poaccount-costcenter

** IMPORTING

** OUTPUT = t_poaccount-costcenter.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-costcenter

* IMPORTING

* OUTPUT = l_cost.

* IF t_poaccount-costcenter NE '0000000000'.

* MOVE: L_COST TO T_POACCOUNT-COSTCENTER.

* ENDIF.

**MOD-004

** perform validate_costcenter using t_poaccount-costcenter

** changing l_flag.

**MOD-004

* perform validate_costcenter using l_cost

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_COST USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

* l_cc_present = c_x. "X

* ENDIF.

*

* l_cc_present = c_x. "X

* endif.

** Case 2

************************************************************************

**case 3 Capital WBS Existing Asset

************************************************************************

*

* If t_poaccount-zacct_type = C_A1. "'A'.

** Case 1 Expense WBS

* CLEAR: L_ACCT_ASSMNT.

* SELECT SINGLE ACCT_ASSGMNT

* INTO L_ACCT_ASSMNT

* FROM ZP2P_ACCTASSCATG

** FROM ZPOACCTASGMNTCAT

* WHERE ZACCT_TYPE = T_POACCOUNT-ZACCT_TYPE.

*

* IF L_ACCT_ASSMNT = C_P1.

* IF NOT t_poaccount-gl_account IS INITIAL.

*

**MOD-004

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING "@SDR

** INPUT = t_poaccount-gl_account

** IMPORTING "@SDR

** OUTPUT = t_poaccount-gl_account.

**

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

** perform validate_gl_account_exp_wbs

** using t_poaccount-gl_account

** t_compcode

** changing l_flag.

**MOD-004

* perform validate_gl_account_exp_wbs

* using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE 'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* EXIT.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* if not t_poaccount-wbs_element is initial.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

* if sy-subrc NE 0.

* EXIT.

* ENDIF.

* endif.

* endif.

* if not t_poaccount-asset_no is initial.

* PERFORM GET_ASSET_DATA USING T_COMPCODE

* T_POACCOUNT

* T_POHEADER

* CHANGING P_XSPEB.

* if sy-subrc ne 0.

* EXIT.

* ELSE.

* IF P_XSPEB eq C_X. "'X'.

* PERFORM ERROR_HANDLING_XSPEBG USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

*

* EXIT.

* ENDIF.

* endif.

* endif.

** if not t_poitem-plant is initial.

** select single werks

** into l_werks

** from t001w

** where werks = t_poitem-plant.

** if sy-subrc ne 0.

** PERFORM ERROR_HANDLING_PLANT USING T_POHEADER

** T_COMPCODE

** L_WA_ZERRORS.

** EXIT.

** endif.

** Clear: l_werks.

** IF NOT T_POITEM-PLANT IS INITIAL.

** select single werks

** into l_werks

** from ANLZ

** where bukrs = t_compcode and

** werks = t_poitem-plant.

** if sy-subrc ne 0.

** PERFORM ERROR_HANDLING_ANLZ USING T_POHEADER

** T_COMPCODE

** L_WA_ZERRORS.

** EXIT.

** endif.

** ENDIF.

** clear: l_werks.

** IF NOT T_POITEM-PLANT IS INITIAL.

** select single werks

** into l_werks

** from t499s

** where werks = t_poitem-plant.

** if sy-subrc ne 0.

** PERFORM ERROR_HANDLING_PLANT USING T_POHEADER

** T_COMPCODE

** L_WA_ZERRORS.

** EXIT.

** endif.

** ENDIF.

** endif.

** If not t_poitem-plant is initial.

** select single werks stand

** into (l_werks, l_location )

** from t499s

** where werks = t_POACCOUNT-ZPLANT AND

** stand = t_poaccount-Zlocation.

** if sy-subrc ne 0.

** PERFORM ERROR_HANDLING_location USING T_POHEADER

** T_COMPCODE

** L_WA_ZERRORS.

** EXIT.

** endif.

** endif.

* endif.

* endif.

** IF t_poitem-acctasscat = C_K1. "'K'.

* IF L_ACCT_ASSMNT = C_K1.

* IF NOT t_poaccount-gl_account IS INITIAL.

**MOD-004

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING "@SDR

** INPUT = t_poaccount-gl_account

** IMPORTING "@SDR

** OUTPUT = t_poaccount-gl_account.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

** perform validate_gl_account using t_poaccount-gl_account

** t_compcode

** changing l_flag.

**MOD-004

*

* perform validate_gl_account using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* IF NOT T_POACCOUNT-WBS_ELEMENT IS INITIAL.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

*

* ENDIF.

* endif.

* endif.

* ENDIF.

*

* IF NOT t_poaccount-costcenter IS INITIAL AND

* t_poaccount-costcenter NE '0000000000'.

*

**mod-004

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING

** INPUT = t_poaccount-costcenter

** IMPORTING

** OUTPUT = t_poaccount-costcenter.

**MOD-004

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-costcenter

* IMPORTING

* OUTPUT = l_cost.

*

* IF T_POACCOUNT-COSTCENTER NE '0000000000'.

* MOVE: L_COST TO T_POACCOUNT-COSTCENTER.

* ENDIF.

*

**MOD-004

** perform validate_costcenter using t_poaccount-costcenter

** changing l_flag.

**MOD-004

*

* perform validate_costcenter using l_cost

* changing l_flag.

*

**mod-004

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_COST USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

* l_cc_present = c_x. "X

* ENDIF.

* ENDIF.

*

** Case 3

************************************************************************

** Case 4

***********************************************************************

*

* If t_poaccount-zacct_type = C_C1. "'C'.

* CLEAR: L_ACCT_ASSMNT.

* SELECT SINGLE ACCT_ASSGMNT

* INTO L_ACCT_ASSMNT

** FROM ZPOACCTASGMNTCAT

* FROM ZP2P_ACCTASSCATG

* WHERE ZACCT_TYPE = T_POACCOUNT-ZACCT_TYPE.

*

** IF t_poitem-acctasscat = C_K1. "'K'.

* IF L_ACCT_ASSMNT = C_K1.

* IF NOT t_poaccount-gl_account IS INITIAL.

*

**MOD-004

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING "@SDR

** INPUT = t_poaccount-gl_account

** IMPORTING "@SDR

** OUTPUT = t_poaccount-gl_account.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-gl_account

* IMPORTING

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

** perform validate_gl_account using t_poaccount-gl_account

** t_compcode

** changing l_flag.

*

**mod-004

* perform validate_gl_account using l_glacc

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* IF NOT T_POACCOUNT-WBS_ELEMENT IS INITIAL.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

*

* ENDIF.

* endif.

* endif.

* ENDIF.

*

* IF NOT t_poaccount-costcenter IS INITIAL AND

* t_poaccount-costcenter NE '0000000000'.

*

**mod-004

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING

** INPUT = t_poaccount-costcenter

** IMPORTING

** OUTPUT = t_poaccount-costcenter.

**MOD-004

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = t_poaccount-costcenter

* IMPORTING

* OUTPUT = l_cost.

*

* IF t_poaccount-costcenter NE '0000000000'.

* MOVE: L_COST TO T_POACCOUNT-COSTCENTER.

* ENDIF.

*

** perform validate_costcenter using t_poaccount-costcenter

** changing l_flag.

*

* perform validate_costcenter using l_cost

* changing l_flag.

**MOD-004

* IF L_FLAG NE C_X. "'X'.

* PERFORM ERROR_HANDLING_COST USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

* l_cc_present = c_x. "X

* ENDIF.

*

** IF t_poitem-acctasscat = C_P1. "'P'.

* IF L_ACCT_ASSMNT = C_P1.

* IF NOT t_poaccount-gl_account IS INITIAL.

*

**MOD-004

** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

** EXPORTING "@SDR

** INPUT = t_poaccount-gl_account

** IMPORTING "@SDR

** OUTPUT = t_poaccount-gl_account.

*

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = l_glacc.

*

* MOVE: L_GLACC TO T_POACCOUNT-GL_ACCOUNT.

*

* clear: l_flag.

** perform validate_gl_account using t_poaccount-gl_account

** t_compcode

** changing l_flag.

*

* perform validate_gl_account using L_GLACC

* t_compcode

* changing l_flag.

*

* IF L_FLAG NE 'X'.

* PERFORM ERROR_HANDLING_GL USING T_POHEADER

* T_COMPCODE

* L_WA_ZERRORS.

* ENDIF.

*

* PERFORM GET_CONSTANT_ZXA USING t_poheader

* t_compcode

* l_wa_zerrors

* changing l_glaccount.

*

* IF sy-subrc <> 0.

* EXIT.

* ELSE.

* if not t_poaccount-wbs_element is initial.

* perform check_project_type

* using t_poaccount-wbs_element

* t_poheader

* t_compcode.

* endif.

* endif.

* endif.

* endif.

* endif.

* l_glaccount = t_poaccount-gl_account.

* l_prev_item = t_poitem-po_item.

* MODIFY T_POACCOUNT.

* ENDLOOP.

* clear: t_poitem.

* ENDLOOP.

*****************************************************************

**Case 4

*****************************************************************

*

******************************************************

**MOD-003

****************************************************

*

*ENDFORM. " get_account_assignment

****BV-27-May-2004 - End of Changes for SCR2***

**&---------------------------------------------------------------------

**

**& Form check_and_create_vendor

**&---------------------------------------------------------------------

**

** This subroutine prefixes the vendor number with 1 , checks if

** the vendor is already created in the system , if not createsthe

** vendor

**----------------------------------------------------------------------

**

** -->P_T_DOCUMENT text

**----------------------------------------------------------------------

**

*FORM check_and_create_vendor

* tables p_t_return STRUCTURE bapiret2

**Begin of Change DDUTTA 03-Aug-2004 TPR 2288

* using p_suppliername type lfa1-name1

**end of Change DDUTTA 03-Aug-2004 TPR 2288

* changing P_DOCUMENT structure znonpo_document.

* data : l_vend_actgrp type ZCONSTVAL, "vendor account grp

* l_vend_paytrm type ZCONSTVAL, "vendor payment term

* L_VEND_RECON type ZCONSTVAL, "vendor recon acct

* L_VEND_ekorg type ZCONSTVAL, "vendor recon acct

* L_MSGV1 LIKE SY-MSGV1, "Message variable1

* L_LENGTH TYPE I. "Vendor string length.

**BV-08-July-2004 -Begin - Change error handling for zxa_get_constant

* DATA : L_CONST_NAME LIKE SY-MSGV1, "Constant name

* L_COMP_CODE LIKE SY-MSGV2. "Company code

**BV-08-July-2004 -End - Change error handling for zxa_get_constant

*

**For PO Create, check the existence of Vendor in SAP for the given

**company code.

**If Vendor do not exist, create a new one. However, If Vendor exists,

**but not for the incoming company code, extend the Vendor Master for

**that company code.

*

* clear g_flg_vendor.

** Retrieve vendor account group Constant

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* CONST_NAME = C_VEND_ACTGRP

* COMP_CODE = p_document-companycode

* IMPORTING

* CONST_VALUE = L_VEND_ACTGRP

* EXCEPTIONS

* NO_VALUE_FOUND = 1

* NULL_VALUE = 2

* OTHERS = 3.

* IF SY-SUBRC <> 0.

****BV-08-July-2004 -Begin- Change error handling for zxa_get_constant

**Constant not defined for company code.

*****************************************

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** TYPE = SY-MSGTY

** CL = SY-MSGID

** NUMBER = SY-MSGNO

** PAR1 = SY-MSGV1

** PAR2 = SY-MSGV2

** PAR3 = SY-MSGV3

** PAR4 = SY-MSGV4

** IMPORTING

** RETURN = p_t_return.

**

** APPEND p_t_return.

** CLEAR p_t_return.

*****************************************

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = C_VEND_ACTGRP. "ZRP_VEND_ACTGRP

* L_COMP_CODE = p_document-companycode.

*

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = c_msgtype_e

* CL = c_msgid_z001

* NUMBER = c_msgnr_046

* PAR1 = L_CONST_NAME "ZRP_VEND_ACTGRP

* PAR2 = L_COMP_CODE

* IMPORTING

* RETURN = p_t_return.

*

* APPEND p_t_return.

* CLEAR p_t_return.

* EXIT.

***BV-08-July-2004 -End- Change error handling for zxa_get_constant

* ENDIF.

*

**Retrieve vendor payment terms Constant

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* CONST_NAME = C_VEND_PAYTRM

* COMP_CODE = p_document-companycode

* IMPORTING

* CONST_VALUE = L_VEND_PAYTRM

* EXCEPTIONS

* NO_VALUE_FOUND = 1

* NULL_VALUE = 2

* OTHERS = 3.

* IF SY-SUBRC <> 0.

****BV-08-July-2004 -Begin- Change error handling for zxa_get_constant

***Constant not defined for company code

******************************************

*** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

*** EXPORTING

*** TYPE = SY-MSGTY

*** CL = SY-MSGID

*** NUMBER = SY-MSGNO

*** PAR1 = SY-MSGV1

*** PAR2 = SY-MSGV2

*** PAR3 = SY-MSGV3

*** PAR4 = SY-MSGV4

*** IMPORTING

*** RETURN = p_t_return.

***

*** APPEND P_t_return.

*** CLEAR P_t_return.

******************************************

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = C_VEND_PAYTRM. "ZRP_VEND_PAYTRM

* L_COMP_CODE = p_document-companycode.

*

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = c_msgtype_e

* CL = c_msgid_z001

* NUMBER = c_msgnr_046

* PAR1 = L_CONST_NAME "ZRP_VEND_PAYTRM

* PAR2 = L_COMP_CODE

* IMPORTING

* RETURN = p_t_return.

*

* APPEND p_t_return.

* CLEAR p_t_return.

* EXIT.

***BV-08-July-2004 -End- Change error handling for zxa_get_constant

* ENDIF.

*

**Retrieve vendor Reconciliation Account Constant

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* CONST_NAME = C_VEND_RECON

* COMP_CODE = p_document-companycode

* IMPORTING

* CONST_VALUE = L_VEND_RECON

* EXCEPTIONS

* NO_VALUE_FOUND = 1

* NULL_VALUE = 2

* OTHERS = 3.

* IF SY-SUBRC <> 0.

****BV-08-July-2004 -Begin- Change error handling for zxa_get_constant

***Constant not defined for company code

******************************************

*** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

*** EXPORTING

*** TYPE = SY-MSGTY

*** CL = SY-MSGID

*** NUMBER = SY-MSGNO

*** PAR1 = SY-MSGV1

*** PAR2 = SY-MSGV2

*** PAR3 = SY-MSGV3

*** PAR4 = SY-MSGV4

*** IMPORTING

*** RETURN = P_t_return.

***

*** APPEND P_t_return.

*** CLEAR P_t_return.

******************************************

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = C_VEND_RECON. "ZRP_VEND_RECON

* L_COMP_CODE = p_document-companycode.

*

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = c_msgtype_e

* CL = c_msgid_z001

* NUMBER = c_msgnr_046

* PAR1 = L_CONST_NAME "ZRP_VEND_RECON

* PAR2 = L_COMP_CODE

* IMPORTING

* RETURN = p_t_return.

*

* APPEND p_t_return.

* CLEAR p_t_return.

* EXIT.

****BV-08-July-2004 -End- Change error handling for zxa_get_constant

* ENDIF.

*

**Retrieve vendor purchase org Constant

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* CONST_NAME = C_VEND_EKORG

* COMP_CODE = p_document-companycode

* IMPORTING

* CONST_VALUE = L_VEND_EKORg

* EXCEPTIONS

* NO_VALUE_FOUND = 1

* NULL_VALUE = 2

* OTHERS = 3.

* IF SY-SUBRC <> 0.

***BV-08-July-2004 -Begin- Change error handling for zxa_get_constant

**Constant not defined for company code

*****************************************

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** TYPE = SY-MSGTY

** CL = SY-MSGID

** NUMBER = SY-MSGNO

** PAR1 = SY-MSGV1

** PAR2 = SY-MSGV2

** PAR3 = SY-MSGV3

** PAR4 = SY-MSGV4

** IMPORTING

** RETURN = P_t_return.

**

** APPEND P_t_return.

** CLEAR P_t_return.

*****************************************

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = C_VEND_EKORG. "ZRP_EHUB_PURORG

* L_COMP_CODE = p_document-companycode.

*

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** TYPE = c_msgtype_e

** CL = c_msgid_z001

** NUMBER = c_msgnr_046

** PAR1 = L_CONST_NAME "ZRP_EHUB_PURORG

** PAR2 = L_COMP_CODE

** IMPORTING

** RETURN = p_t_return.

**

* APPEND p_t_return.

* CLEAR p_t_return.

* EXIT.

***BV-08-July-2004 -End- Change error handling for zxa_get_constant

* ENDIF.

*

**Zero Pad and Prefix 1 to Vendor.

*

* IF NOT p_document-suppliernumber IS INITIAL.

*

**remove any leading zeros for vendor populated from webmethods

*

* shift p_document-suppliernumber left deleting leading '0'.

* L_LENGTH = STRLEN( p_document-suppliernumber ).

*

* IF L_LENGTH < 10.

* shift p_document-suppliernumber right deleting trailing space.

**To pad leading zeros to Vendor

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING

* INPUT = p_document-suppliernumber

* IMPORTING

* OUTPUT = p_document-suppliernumber.

*

**To replace first character with 1.

* MOVE '1' TO p_document-suppliernumber(1).

*

* ELSE. "Vendor is 10 char in length

*

* CLEAR L_MSGV1.

* L_MSGV1 = p_document-suppliernumber.

**Zero Padding and Prefixing 1 Not possible.Vendor is 10 Character

**length

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* TYPE = C_MSGTYPE_I "I

* CL = C_MSGID_Z001 "Z001

* NUMBER = C_MSGNR_040 "040

* PAR1 = L_MSGV1

* IMPORTING

* RETURN = P_t_return.

*

* APPEND P_t_return.

* CLEAR P_t_return.

*

* ENDIF.

*

* ENDIF.

*

**

* SELECT SINGLE * FROM LFA1 WHERE

* LIFNR = p_document-suppliernumber.

* IF SY-SUBRC NE 0.

** Vendor Master (General Section)

*

* W_LFA1-LIFNR = p_document-suppliernumber.

**Begin of Change DDUTTA 03-Aug-2004 TPR 2288

*** if Supplier name is not passed from Ariba - populate vendor name

*** with "Ariba Vendor"

* if p_suppliername is initial.

**End of Change DDUTTA 03-Aug-2004 TPR 2288

* W_LFA1-NAME1 = C_ARIBAVENDOR." 'ARIBA VENDOR'

* W_LFA1-MCOD1 = C_ARIBAVENDOR." 'ARIBA VENDOR'

**Begin of Change DDUTTA 03-Aug-2004 TPR 2288

* else.

* W_LFA1-NAME1 = p_suppliername.

* W_LFA1-MCOD1 = p_suppliername.

* endif.

**End of Change DDUTTA 03-Aug-2004 TPR 2288

*

* W_LFA1-LAND1 = C_US. " 'US'

* W_LFA1-SPRAS = C_E. " 'E'

* W_LFA1-KTOKK = L_VEND_ACTGRP.

*

* W_LFB1-LIFNR = p_document-suppliernumber.

* W_LFB1-BUKRS = p_document-companycode.

* W_LFB1-AKONT = L_VEND_RECON.

* W_LFB1-ZTERM = L_VEND_PAYTRM.

*

* W_LFM1-LIFNR = p_document-suppliernumber.

* W_LFM1-EKORG = l_vend_ekorg.

* W_LFM1-WAERS = p_document-CURRENCY.

*

* MOVE C_N TO G_FLG_VENDOR. " 'N'

*

* ELSE.

** Vendor Master (General Section)

*

* W_LFA1-LIFNR = p_document-suppliernumber.

**Begin of Change DDUTTA 03-Aug-2004 TPR 2288

*** if Supplier name is not passed from Ariba - populate vendor name

*** with "Ariba Vendor"

* if p_suppliername is initial.

**End of Change DDUTTA 03-Aug-2004 TPR 2288

* W_LFA1-NAME1 = C_ARIBAVENDOR." 'ARIBA VENDOR'

* W_LFA1-MCOD1 = C_ARIBAVENDOR." 'ARIBA VENDOR'

**Begin of Change DDUTTA 03-Aug-2004 TPR 2288

* else.

* W_LFA1-NAME1 = p_suppliername.

* W_LFA1-MCOD1 = p_suppliername.

* endif.

**End of Change DDUTTA 03-Aug-2004 TPR 2288

* W_LFA1-LAND1 = C_US. " 'US'

* W_LFA1-SPRAS = C_E. " 'E'

* W_LFA1-KTOKK = L_VEND_ACTGRP.

*

* SELECT SINGLE * FROM LFB1 WHERE

* LIFNR = p_document-suppliernumber

* AND BUKRS = p_document-COMPanyCODE.

* IF SY-SUBRC NE 0.

* W_LFB1-LIFNR = p_document-suppliernumber.

* W_LFB1-BUKRS = P_document-COMPanyCODE.

* W_LFB1-AKONT = L_VEND_RECON.

* W_LFB1-ZTERM = L_VEND_PAYTRM.

*

* G_FLG_VENDOR = C_N. " 'N'

* ENDIF.

*

* SELECT SINGLE * FROM LFM1 WHERE

* LIFNR = p_document-suppliernumber

* AND EKORG = l_vend_ekorg.

* IF SY-SUBRC NE 0.

* W_LFM1-LIFNR = p_document-suppliernumber.

* W_LFM1-EKORG = l_vend_ekorg.

* W_LFM1-WAERS = p_document-CURRENCY.

*

* G_FLG_VENDOR = C_N. " 'N'

* ENDIF.

* ENDIF.

*

* IF G_FLG_VENDOR = C_N. " 'N'

* refresh t_zreturn.

* CALL FUNCTION 'Z_VENDOR_INSERT'

* EXPORTING

* I_LFA1 = W_LFA1

* I_LFB1 = W_LFB1

* I_LFM1 = W_LFM1

* TABLES

* T_XLFAS = T_XLFAS

* T_XLFB5 = T_XLFB5

* T_XLFBK = T_XLFBK

* T_XLFZA = T_XLFZA

* ZRETURN = T_ZRETURN.

*

** If Vendor create fails or the transaction commit fails, populate the

** the Return structure and exit the program

*

* READ TABLE T_ZRETURN WITH KEY TYPE = C_E. " 'E'

* IF SY-SUBRC EQ 0.

* APPEND LINES OF T_ZRETURN TO P_t_return.

* loop at p_t_return.

* concatenate 'Error Creating Vendor -'(010)

* p_t_return-message

* into p_t_return-message.

* modify p_t_return.

* endloop.

* EXIT.

* ELSE.

* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

* EXPORTING

* WAIT = C_X " 'X'

* IMPORTING

* RETURN = p_t_return.

*

* IF P_t_return-type = C_E. " 'E'

* APPEND P_t_return.

* EXIT.

* ELSE.

* CLEAR P_t_return.

* ENDIF.

* ENDIF.

* ENDIF.

*ENDFORM. " check_and_create_vendor

**&---------------------------------------------------------------------

**

**& Form validate_costcenter

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_L_WA_PO_ACCOUNT_COSTCENTER text

**----------------------------------------------------------------------

**

*FORM validate_costcenter USING

* P_L_WA_PO_ACCOUNT_COSTCENTER type bapimepoaccount-costcenter

* changing lv_flag type c.

*

* data: l_kostl type kostl.

*

* lv_flag = ' '.

* SELECT SINGLE kostl

* into l_kostl

* FROM CSKS

* WHERE KOSTL = P_L_WA_PO_ACCOUNT_COSTCENTER.

*

* IF SY-SUBRC = 0.

* LV_FLAG = 'X'.

* ENDIF.

*

*endform. " validate_costcenter

**&---------------------------------------------------------------------

**

**& Form validate_wbs_element

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_L_WA_POACCOUNT_WBS_ELEMENT text

** <--P_L_FLAG1 text

**----------------------------------------------------------------------

**

*FORM validate_wbs_element

*USING P_L_WA_POACCOUNT_WBS_ELEMENT type bapimepoaCcount-wbs_element

* CHANGING P_L_FLAG1.

*

* DATA: L_PSPNR type ps_posnr.

*

* SELECT SINGLE pspnr

* into l_pspnr

* FROM PRPS

* WHERE PSPNR = P_L_WA_POACCOUNT_WBS_ELEMENT.

*

* IF SY-SUBRC = 0.

* P_L_FLAG1 = 'X'.

* ENDIF.

*

*ENDFORM. " validate_wbs_element

**&---------------------------------------------------------------------

**

**& Form validate_gl_account

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_L_WA_POACCOUNT_GL_ACCOUNT text

** <--P_L_FLAG2 text

**----------------------------------------------------------------------

**

*FORM validate_gl_account USING T_POACCOUNT-GL_ACCOUNT type

*

*bapimepoaccount-gl_account

* t_compcode type t001-bukrs

* CHANGING P_L_FLAG2 type c.

*

* CONSTANTS: C_EXP_WBS_ELEMENT TYPE SAKNR VALUE '0064511012'.

* data: t_acct_assignmt type standard table of ZACCTASGMNT.

* data: l_acct_assign TYPE zconstval.

* data: l_ex_acc_no TYPE z_acc_no.

*

** SHIFT t_poaccount-gl_account LEFT

** DELETING LEADING c_zeros. "

** SHIFT t_poaccount-gl_account

** BY 1 PLACES RIGHT.

** t_poaccount-gl_account+0(1) = 'P'.

** l_ex_acc_no = t_poaccount-gl_account.

** CALL FUNCTION 'Z_GLACCT_GET'

** EXPORTING

** P_BUKRS = t_compcode

** P_EX_ACC_NO = l_ex_acc_no

** IMPORTING

** P_GLACCT = t_poaccount-gl_account

** EXCEPTIONS "

** NO_VALUE_FOUND = 1

** NULL_VALUE_FOUND = 2

** OTHERS = 3.

*

** IF sy-subrc = 0.

** Assign the retrieved GL Account from SAP to the

** account assignment strcuture after the mapping

** is successful

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount-gl_account

* IMPORTING "@SDR

* OUTPUT = t_poaccount-gl_account.

*

* DATA: L_saknr type saknr.

*

* DATA: g_glacct TYPE saknr.

* DATA: p_glacct TYPE saknr.

*

*** Retrieve the corresponding SAP GL Account from the custom mapping

*** table corresponding to the combination of the Business Unit and

*** Peoplesoft GL Account passed to the Function Module

** SELECT SINGLE saknr " WBS Element

** FROM zgl_acc_map

** INTO g_glacct

** WHERE bukrs = c_bukrs

** AND ex_acc_no = l_ex_acc_no.

**

** IF sy-subrc = 0.

* IF t_poaccount-gl_account IS INITIAL.

* p_l_flag2 = ' '.

* ELSE.

** if t_poaccount-gl_account ne '0064511012'.

**MOD-005

* if t_poaccount-gl_account ne C_EXP_WBS_ELEMENT.

** if t_poaccount-gl_account EQ C_EXP_WBS_ELEMENT.

**MOD-005

* p_l_flag2 = 'X'.

* else.

* p_l_flag2 = ' '.

* endif.

* ENDIF.

*

** endif.

*

*ENDFORM. " validate_gl_account

**&---------------------------------------------------------------------

**

**& Form validate_gl_account_exp_wbs

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POACCOUNT_GL_ACCOUNT text

** -->P_T_COMPCODE text

** <--P_L_FLAG text

**----------------------------------------------------------------------

**

*FORM validate_gl_account_exp_wbs USING T_POACCOUNT_GL_ACCOUNT type

*

*bapimepoaccount-gl_account

* t_compcode type t001-bukrs

* CHANGING P_L_FLAG2 type c.

*

* constants: c_cap_wbs_new_asset type saknr value '0064511012'.

* data: t_acct_assignmt type standard table of ZACCTASGMNT.

* data: l_acct_assign TYPE zconstval.

* data: l_ex_acc_no TYPE z_acc_no.

*

**

** SHIFT t_poaccount_gl_account LEFT

** DELETING LEADING c_zeros. "

** SHIFT t_poaccount_gl_account

** BY 1 PLACES RIGHT.

** t_poaccount_gl_account+0(1) = 'P'.

** l_ex_acc_no = t_poaccount_gl_account.

** CALL FUNCTION 'Z_GLACCT_GET'

** EXPORTING

** P_BUKRS = t_compcode

** P_EX_ACC_NO = l_ex_acc_no

** IMPORTING

** P_GLACCT = t_poaccount_gl_account

** EXCEPTIONS "

** NO_VALUE_FOUND = 1

** NULL_VALUE_FOUND = 2

** OTHERS = 3.

*

** IF sy-subrc = 0.

** Assign the retrieved GL Account from SAP to the

** account assignment strcuture after the mapping

** is successful

* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

* EXPORTING "@SDR

* INPUT = t_poaccount_gl_account

* IMPORTING "@SDR

* OUTPUT = t_poaccount_gl_account.

*

* DATA: L_saknr type saknr.

*

* DATA: g_glacct TYPE saknr.

* DATA: p_glacct TYPE saknr.

*

*** Retrieve the corresponding SAP GL Account from the custom mapping

*** table corresponding to the combination of the Business Unit and

*** Peoplesoft GL Account passed to the Function Module

** SELECT SINGLE saknr " WBS Element

** FROM zgl_acc_map

** INTO g_glacct

** WHERE bukrs = c_bukrs

** AND ex_acc_no = l_ex_acc_no.

**

** IF sy-subrc = 0.

* IF t_poaccount_gl_account IS INITIAL.

* p_l_flag2 = ' '.

* ELSE.

** if t_poaccount_gl_account eq '0064511012'.

* if t_poaccount_gl_account eq c_cap_wbs_new_asset.

* p_l_flag2 = 'X'.

* else.

* p_l_flag2 = ' '.

* endif.

* ENDIF.

** endif.

*ENDFORM. " validate_gl_account_exp_wbs

**&---------------------------------------------------------------------

**

**& Form check_split_accounts

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POACCOUNT_GL_ACCOUNT text

** -->P_L_GLACCOUNT text

**----------------------------------------------------------------------

**

**FORM check_split_accounts USING t_POACCOUNT_GL_ACCOUNT type saknr

** L_GLACCOUNT type ZCONSTVAL

** t_poheader type bapimepoheader

** t_compcode type bukrs

** l_prev_item type ebelp

** t_poitem-po_item type ebelp.

**

** .

**

** data: l_wa_zeerors type zerrors.

** DATA : L_CONST_NAME LIKE SY-MSGV1, "Constant name

** L_COMP_CODE LIKE SY-MSGV2. "Company code

**

**

** if t_poaccount_gl_account = l_glaccount.

** CLEAR : L_CONST_NAME,

** L_COMP_CODE.

**

** L_CONST_NAME = l_glaccount.

** L_COMP_CODE = t_compcode.

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** type = c_msgtype_e "E

** cl = c_msgid_z001

** number = c_msgnr_613

** PAR1 = L_CONST_NAME

** PAR2 = L_COMP_CODE

** IMPORTING

** return = t_yreturn.

**

** APPEND t_yreturn.

** CLEAR t_yreturn.

** loop at t_yreturn.

** l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

** l_wa_zerrors-serialno = sy-tabix.

** l_wa_zerrors-COMP_CODE = t_compcode.

** l_wa_zerrors-zid = t_yreturn-id.

** l_wa_zerrors-type = t_yreturn-type.

** l_wa_zerrors-znumber = t_yreturn-number.

** l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-ZDATE = sy-datum.

** l_wa_zerrors-ERR_MSG = t_yreturn-message.

** insert into ZP2P_ERRORS values l_wa_zerrors.

** clear: l_wa_zerrors.

** endloop.

**

** ENDIF.

**

**ENDFORM. " check_split_accounts

**&---------------------------------------------------------------------

**

**& Form check_project_type

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_PO_ACCOUNT_WBS_ELEMENT text

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

**----------------------------------------------------------------------

**

*FORM check_project_type USING t_WBS_ELEMENT type ps_posid

* t_POHEADER type bapimepoheader

* t_COMPCODE type bukrs.

*

* data: l_prart type ps_prart.

** l_belkz type ps_belkz.

* clear: l_prart, l_belkz.

*

* DATA :L_CONST_NAME LIKE SY-MSGV1, "Constant name

* L_COMP_CODE LIKE SY-MSGV2. "Company code

*

* select single prart belkz

* into (l_prart, l_belkz)

* from prps

* where posid = t_wbs_element.

*

* if sy-subrc = 0.

** IF l_prart ne 'NC'.

** CLEAR : L_CONST_NAME,

** L_COMP_CODE.

** L_CONST_NAME = c_gl_acc_po.

** L_COMP_CODE = t_compcode.

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** type = c_msgtype_e

** cl = c_msgid_z001

** number = c_msgnr_622

** PAR1 = L_CONST_NAME

** PAR2 = L_COMP_CODE

** IMPORTING

** return = t_yreturn.

**

** APPEND t_yreturn.

** CLEAR t_yreturn.

**

** l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

** l_wa_zerrors-COMP_CODE = t_poheader-comp_code.

** l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-ZDATE = sy-datum.

*** l_wa_zerrors-ERR_MSG = c_msgnr_614.

** read table t_yreturn index 1.

** l_wa_zerrors-ERR_MSG = t_yreturn-message.

** insert into zerrors values l_wa_zerrors.

** clear: l_wa_zerrors.

** EXIT.

** ENDIF.

** IF L_BELKZ NE 'X'.

** CLEAR : L_CONST_NAME,

** L_COMP_CODE.

** L_CONST_NAME = c_gl_acc_po.

** L_COMP_CODE = t_compcode.

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** type = c_msgtype_e

** cl = c_msgid_z001

** number = c_msgnr_623

** PAR1 = L_CONST_NAME

** PAR2 = L_COMP_CODE

** IMPORTING

** return = t_yreturn.

**

** APPEND t_yreturn.

** CLEAR t_yreturn.

** l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

** l_wa_zerrors-COMP_CODE = t_poheader-comp_code.

** l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

** l_wa_zerrors-ZDATE = sy-datum.

*** l_wa_zerrors-ERR_MSG = c_msgnr_614.

** read table t_yreturn index 1.

** l_wa_zerrors-ERR_MSG = t_yreturn-message.

** insert into zerrors values l_wa_zerrors.

** clear: l_wa_zerrors.

** EXIT.

** ENDIF.

* ENDIF.

*

*ENDFORM. " check_project_type

**&---------------------------------------------------------------------

**

**& Form ERROR_HANDLING_GL

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ERRORS text

**----------------------------------------------------------------------

**

*FORM ERROR_HANDLING_GL USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS.

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_gl_acc_po.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e

* cl = c_msgid_z001

* number = c_msgnr_614

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

*ENDFORM. " ERROR_HANDLING_GL

**&---------------------------------------------------------------------

**

**& Form GET_CONSTANT_ZXA

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ZERRORS text

** <--P_L_GLACCOUNT text

**----------------------------------------------------------------------

**

*FORM GET_CONSTANT_ZXA USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS

* CHANGING L_GLACCOUNT TYPE ZCONSTVAL.

*

* CALL FUNCTION 'ZXA_GET_CONSTANT'

* EXPORTING

* const_name = c_gl_acc_po

* comp_code = t_compcode

* IMPORTING

* const_value = l_glaccount

* EXCEPTIONS

* no_value_found = 1

* null_value = 2

* OTHERS = 3.

* IF sy-subrc <> 0.

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_gl_acc_po.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e "E

* cl = c_msgid_z001

* number = c_msgnr_614

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* EXIT.

*ENDIF.

*

*ENDFORM. " GET_CONSTANT_ZXA

**&---------------------------------------------------------------------

**

**& Form ERROR_HANDLING_COST

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ZERRORS text

**----------------------------------------------------------------------

**

*FORM ERROR_HANDLING_COST USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS.

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_acct_assign.

* L_COMP_CODE = t_compcode.

** CALL FUNCTION 'BALW_BAPIRETURN_GET2'

** EXPORTING

** type = c_msgtype_e "E

** cl = c_msgid_z001

** number = c_msgnr_621 "046

** PAR1 = L_CONST_NAME "ZRP_ACCT_ASSIGN

** PAR2 = L_COMP_CODE

** IMPORTING

** return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

*ENDFORM. " ERROR_HANDLING_COST

**&---------------------------------------------------------------------

**

**& Form ERROR_HANDLING_PLANT

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ZERRORS text

**----------------------------------------------------------------------

**

*FORM ERROR_HANDLING_PLANT USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS.

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_po_werks.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e

* cl = c_msgid_z001

* number = c_msgnr_404

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

*ENDFORM. " ERROR_HANDLING_PLANT

**&---------------------------------------------------------------------

**

**& Form ERROR_HANDLING_ANLZ

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ZERRORS text

**----------------------------------------------------------------------

**

*FORM ERROR_HANDLING_ANLZ USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS.

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_po_werks.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e

* cl = c_msgid_z001

* number = c_msgnr_615

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* EXIT.

*

*ENDFORM. " ERROR_HANDLING_ANLZ

**&---------------------------------------------------------------------

**

**& Form ERROR_HANDLING_location

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ZERRORS text

**----------------------------------------------------------------------

**

*FORM ERROR_HANDLING_location USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS.

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_po_werks.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e

* cl = c_msgid_z001

* number = c_msgnr_616

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* .

* EXIT.

*

*ENDFORM. " ERROR_HANDLING_location

**&---------------------------------------------------------------------

**

**& Form GET_ASSET_DATA

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_COMPCODE text

** -->P_T_POACCOUNT text

** -->P_T_POHEADER text

**----------------------------------------------------------------------

**

*FORM GET_ASSET_DATA USING T_COMPCODE TYPE BUKRS

* T_POACCOUNT TYPE BAPIMEPOACCOUNT

* T_POHEADER TYPE BAPIMEPOHEADER

* CHANGING L_XSPEB type xspeb_anla.

*

* data: l_prart type ps_prart,

* l_werks type werks_d,

* l_belkz type ps_belkz,

* l_glaccount type ZCONSTVAL,

* l_anln1 type anln1,

* l_anln2 type anln2.

*

* Clear: l_werks,

* l_anln1,

* l_anln2,

* l_xspeb.

*

* select single anln1 anln2 xspeb

* into (l_anln1, l_anln2, l_xspeb)

* from ANLA

* where bukrs = t_compcode and

* anln1 = t_poaccount-asset_no and

* anln2 = t_poaccount-sub_number.

* if sy-subrc ne 0.

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_po_werks.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e

* cl = c_msgid_z001

* number = c_msgnr_620

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

*

* endif.

*

*ENDFORM. " GET_ASSET_DATA

**&---------------------------------------------------------------------

**

**& Form ERROR_HANDLING_XSPEBG

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_T_POHEADER text

** -->P_T_COMPCODE text

** -->P_L_WA_ZERRORS text

**----------------------------------------------------------------------

**

*FORM ERROR_HANDLING_XSPEBG USING T_POHEADER TYPE BAPIMEPOHEADER

* T_COMPCODE TYPE BUKRS

* L_WA_ZERRORS TYPE ZP2P_ERRORS.

*

* CLEAR : L_CONST_NAME,

* L_COMP_CODE.

*

* L_CONST_NAME = c_po_werks.

* L_COMP_CODE = t_compcode.

* CALL FUNCTION 'BALW_BAPIRETURN_GET2'

* EXPORTING

* type = c_msgtype_e

* cl = c_msgid_z001

* number = c_msgnr_624

* PAR1 = L_CONST_NAME

* PAR2 = L_COMP_CODE

* IMPORTING

* return = t_yreturn.

*

* APPEND t_yreturn.

* CLEAR t_yreturn.

* loop at t_yreturn.

* l_wa_zerrors-OBJECT = 'PURCHASE_ORDER'.

* l_wa_zerrors-serialno = sy-tabix.

* l_wa_zerrors-COMP_CODE = t_compcode.

* l_wa_zerrors-zid = t_yreturn-id.

* l_wa_zerrors-type = t_yreturn-type.

* l_wa_zerrors-znumber = t_yreturn-number.

* l_wa_zerrors-BEACON_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-SRC_DOC_NO = t_poheader-po_number.

* l_wa_zerrors-ZDATE = sy-datum.

* l_wa_zerrors-ERR_MSG = t_yreturn-message.

* append l_wa_zerrors to t_errors.

** insert into zerrors values l_wa_zerrors.

* clear: l_wa_zerrors.

* endloop.

* EXIT.

*

*ENDFORM. " ERROR_HANDLING_XSPEBG

**&---------------------------------------------------------------------

**

**& Form get_uom_conversion

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_POHEADER text

** -->P_POITEM text

** -->P_POACCOUNT text

** -->P_POHEADERX text

** -->P_POITEMX text

** -->P_POACCOUNTX text

**----------------------------------------------------------------------

**

*FORM get_uom_conversion TABLES t_poitem STRUCTURE bapimepoitem

* t_poitemx STRUCTURE bapimepoitemx

* t_account STRUCTURE bapimepoaccount

* t_accountx STRUCTURE bapimepoaccountx

* t_poschedule structure

*BAPIMEPOSCHEDULE

* t_poschedulex structure

*BAPIMEPOSCHEDULX

* t_pocond structure BAPIMEPOCOND

* T_pocondx structure BAPIMEPOCONDX

* t_pocondheader structure bapimepocondheader

* t_pocondheaderx structure bapimepocondheaderx

* changing t_poheader type bapimepoheader

* t_poheaderx TYPE bapimepoheaderx.

*

**MOD-004

** DATA: t_ZAPPL_UOM_CONVER TYPE STANDARD TABLE OF ZAPPL_UOM_CONVER

** INITIAL SIZE 0 WITH HEADER LINE.

**MOD-004

*

* DATA: t_ZAPPL_UOM_CONVER TYPE STANDARD TABLE OF ZP2P_UOM_CONVERS

* INITIAL SIZE 0 WITH HEADER LINE.

*

** DATA: t_ZEHUB_UOM_CONVER TYPE STANDARD TABLE OF ZEHUB_UOM_CONVER

** INITIAL SIZE 0 WITH HEADER LINE.

**

** SELECT *

** FROM ZAPPL_UOM_CONVER

** INTO TABLE t_ZAPPL_UOM_CONVER.

** MOD-004

** SELECT *

** FROM ZAPPL_UOM_CONVER

** INTO TABLE t_ZAPPL_UOM_CONVER.

**MOD-004

*

* SELECT *

* FROM ZP2P_UOM_CONVERS

* INTO TABLE t_ZAPPL_UOM_CONVER.

*

* IF sy-subrc = 0.

* SORT t_ZAPPL_UOM_CONVER BY APPL_JNJISO ASCENDING.

* ENDIF.

*

* data:lv_polen type i,

* lv_orderpoint(3) TYPE C.

* constants : lc_zero type c value '0'.

*

**Hard-coded fields

*

* t_poheader-langu = 'E'.

* t_poheaderX-langu = c_x.

* T_POHEADERX-doc_type = c_x.

* T_POHEADERX-purch_org = c_x.

* T_POHEADERX-pur_group = c_x.

* T_POHEADERX-currency = c_x.

* T_POHEADERX-doc_date = c_x.

*

* IF NOT T_poheader-comp_code IS INITIAL.

* T_POHEADERX-comp_code = c_x.

* ENDIF.

*

* IF NOT T_poheader-po_number IS INITIAL.

* T_poheaderx-po_number = c_x.

* ENDIF.

*

*** T_poheader-creat_date = sy-datum.

** IF NOT T_poheader-creat_date IS INITIAL.

** T_poheaderx-creat_date = c_x.

** ENDIF.

*

* IF NOT T_poheader-vendor IS INITIAL.

* T_poheaderx-vendor = c_x.

* ENDIF.

*

* IF NOT T_poheader-PO_NUMBER is initial.

* t_poheaderx-po_number = c_x.

* endif.

*

* IF NOT T_poheader-COMP_CODE is initial.

* t_poheaderx-comp_code = c_x.

* endif.

*

* IF NOT T_poheader-DOC_TYPE is initial.

* t_poheaderx-doc_type = c_x.

* endif.

*

* IF NOT T_poheader-DELETE_IND is initial.

* t_poheaderx-delete_ind = c_x.

* endif.

*

* IF NOT T_poheader-STATUS is initial.

* t_poheaderx-status = c_x.

* endif.

*

* IF NOT T_poheader-CREAT_DATE is initial.

* t_poheaderx-creat_date = c_x.

* endif.

*

* IF NOT T_poheader-CREATED_BY is initial.

* t_poheaderx-created_by = c_x.

* endif.

*

* IF NOT T_poheader-ITEM_INTVL is initial.

* t_poheaderx-item_intvl = c_x.

* endif.

*

* IF NOT T_poheader-VENDOR is initial.

* t_poheaderx-vendor = c_x.

* endif.

*

* IF NOT T_poheader-LANGU is initial.

* t_poheaderx-langu = c_x.

* endif.

*

* IF NOT T_poheader-LANGU_ISO is initial.

* t_poheaderx-langu_iso = c_x.

* endif.

*

* IF NOT T_poheader-PMNTTRMS is initial.

* t_poheaderx-PMNTTRMS = c_x.

* endif.

*

* IF NOT T_poheader-DSCNT1_TO is initial.

* t_poheaderx-DSCNT1_TO = c_x.

* endif.

*

* IF NOT T_poheader-DSCNT2_TO is initial.

* t_poheaderx-DSCNT2_TO = c_x.

* endif.

*

* IF NOT T_poheader-DSCNT3_TO is initial.

* t_poheaderx-DSCNT3_TO = c_x.

* endif.

*

* IF NOT T_poheader-DSCT_PCT1 is initial.

* t_poheaderx-DSCT_PCT1 = c_x.

* endif.

*

* IF NOT T_poheader-DSCT_PCT2 is initial.

* t_poheaderx-DSCT_PCT1 = c_x.

* endif.

*

* IF NOT T_poheader-PURCH_ORG is initial.

* t_poheaderx-po_number = c_x.

* endif.

*

* IF NOT T_poheader-PUR_GROUP is initial.

* t_poheaderx-PURCH_ORG = c_x.

* endif.

*

* IF NOT T_poheader-CURRENCY is initial.

* t_poheaderx-CURRENCY = c_x.

* endif.

*

* IF NOT T_poheader-CURRENCY_ISO is initial.

* t_poheaderx-CURRENCY_ISO = c_x.

* endif.

*

* IF NOT T_poheader-EXCH_RATE is initial.

* t_poheaderx-EXCH_RATE = c_x.

* endif.

*

* IF NOT T_poheader-EX_RATE_FX is initial.

* t_poheaderx-EX_RATE_FX = c_x.

* endif.

*

* IF NOT T_poheader-DOC_DATE is initial.

* t_poheaderx-DOC_DATE = c_x.

* endif.

*

* IF NOT T_poheader-VPER_START is initial.

* t_poheaderx-VPER_START = c_x.

* endif.

*

* IF NOT T_poheader-VPER_END is initial.

* t_poheaderx-VPER_END = c_x.

* endif.

*

* IF NOT T_poheader-WARRANTY is initial.

* t_poheaderx-WARRANTY = c_x.

* endif.

*

* IF NOT T_poheader-QUOTATION is initial.

* t_poheaderx-QUOTATION = c_x.

* endif.

*

* IF NOT T_poheader-QUOT_DATE is initial.

* t_poheaderx-QUOT_DATE = c_x.

* endif.

*

* IF NOT T_poheader-REF_1 is initial.

* t_poheaderx-REF_1 = c_x.

* endif.

*

* IF NOT T_poheader-SALES_PERS is initial.

* t_poheaderx-SALES_PERS = c_x.

* endif.

*

* IF NOT T_poheader-TELEPHONE is initial.

* t_poheaderx-TELEPHONE = c_x.

* endif.

*

* IF NOT T_poheader-SUPPL_VEND is initial.

* t_poheaderx-SUPPL_VEND = c_x.

* endif.

*

* IF NOT T_poheader-CUSTOMER is initial.

* t_poheaderx-CUSTOMER = c_x.

* endif.

*

* IF NOT T_poheader-AGREEMENT is initial.

* t_poheaderx-AGREEMENT = c_x.

* endif.

*

* IF NOT T_poheader-GR_MESSAGE is initial.

* t_poheaderx-GR_MESSAGE = c_x.

* endif.

*

* IF NOT T_poheader-SUPPL_PLNT is initial.

* t_poheaderx-SUPPL_PLNT = c_x.

* endif.

*

* IF NOT T_poheader-INCOTERMS1 is initial.

* t_poheaderx-INCOTERMS1 = c_x.

* endif.

*

* IF NOT T_poheader-INCOTERMS2 is initial.

* t_poheaderx-INCOTERMS2 = c_x.

* endif.

*

* IF NOT T_poheader-COLLECT_NO is initial.

* t_poheaderx-COLLECT_NO = c_x.

* endif.

*

* IF NOT T_poheader-DIFF_INV is initial.

* t_poheaderx-DIFF_INV = c_x.

* endif.

*

* IF NOT T_poheader-OUR_REF is initial.

* t_poheaderx-OUR_REF = c_x.

* endif.

*

* IF NOT T_poheader-LOGSYSTEM is initial.

* t_poheaderx-LOGSYSTEM = c_x.

* endif.

*

* IF NOT T_poheader-SUBITEMINT is initial.

* t_poheaderx-SUBITEMINT = c_x.

* endif.

*

* IF NOT T_poheader-PO_REL_IND is initial.

* t_poheaderx-PO_REL_IND = c_x.

* endif.

*

* IF NOT T_poheader-REL_STATUS is initial.

* t_poheaderx-REL_STATUS = c_x.

* endif.

*

* IF NOT T_poheader-VAT_CNTRY is initial.

* t_poheaderx-VAT_CNTRY = c_x.

* endif.

*

* IF NOT T_poheader-VAT_CNTRY_ISO is initial.

* t_poheaderx-VAT_CNTRY_ISO = c_x.

* endif.

*

* IF NOT T_poheader-REASON_CANCEL is initial.

* t_poheaderx-REASON_CANCEL = c_x.

* endif.

*

** poitem details.

* LOOP AT T_POITEM.

** LOOP AT T_POITEMX WHERE PO_ITEM = T_POITEM-PO_ITEM.

* t_poitemx-po_item = t_poitem-po_item.

* IF NOT T_poitem-po_item IS INITIAL.

* T_POITEMX-po_itemx = c_x.

* ENDIF.

*

* IF NOT t_poitem-matl_group IS INITIAL.

* T_poitemx-matl_group = c_x.

* ENDIF.

*

* IF NOT t_poitem-plant IS INITIAL.

* T_poitemx-plant = c_x.

* ENDIF.

*

* IF NOT t_poitem-short_text IS INITIAL.

* T_poitemx-short_text = c_x.

* ENDIF.

*

* IF NOT t_poitem-vend_mat IS INITIAL.

* T_poitemx-vend_mat = c_x.

* ENDIF.

*

* READ TABLE t_ZAPPL_UOM_CONVER

** WITH KEY aribauom = t_poitem-orderpr_un.

* WITH KEY APPL_JNJISO = t_poitem-orderpr_un.

*

* IF sy-subrc = 0.

* T_poitem-orderpr_un =

** t_ZAPPL_UOM_CONVER-APPLUOM.

* t_ZAPPL_UOM_CONVER-SAP_UOM.

* IF NOT T_poitem-orderpr_un IS INITIAL.

* T_poitemx-orderpr_un = c_x.

* ENDIF.

* ENDIF.

*

* IF NOT t_poitem-orderpr_un IS INITIAL.

* T_poitemx-orderpr_un = c_x.

* ENDIF.

*

* IF NOT t_poitem-quantity IS INITIAL.

* T_POITEMX-quantity = c_x.

* ENDIF.

*

* if not t_poitem-distrib is initial.

* t_poitemx-distrib = c_x.

* endif.

*

* IF NOT t_poitem-incoterms1 IS INITIAL.

* T_POITEMX-incoterms1 = c_x.

* ENDIF.

*

* if not t_poitem-incoterms2 is initial.

* t_poitemx-incoterms2 = c_x.

* endif.

*

* if not t_poitem-PART_INV is initial.

* t_poitemx-PART_INV = c_x.

* endif.

*

* CLEAR t_ZAPPL_UOM_CONVER.

* READ TABLE t_ZAPPL_UOM_CONVER

* WITH KEY APPL_JNJISO = t_poitem-po_unit.

** WITH KEY aribauom = t_poitem-po_unit

* .

* IF sy-subrc = 0.

* T_poitem-po_unit =

** t_ZAPPL_UOM_CONVER-APPLUOM.

* t_ZAPPL_UOM_CONVER-SAP_UOM.

* IF NOT T_poitem-po_unit IS INITIAL.

* T_poitemx-po_unit = c_x.

* ENDIF.

* ENDIF.

*

* IF NOT t_poitem-net_price IS INITIAL.

* T_poitemx-net_price = c_x.

* ENDIF.

*

* IF NOT t_poitem-price_unit IS INITIAL.

* T_poitemx-price_unit = c_x.

* ENDIF.

*

* IF NOT T_poitem-net_price IS INITIAL.

* T_poitemx-ir_ind = c_x.

* ENDIF.

*

*** Translate the GR Indicator external value to internal format

** for Z_BAPI_PO_CREATE1 to handle

*

* if not t_poitem-gr_ind is initial.

* t_poitemx-gr_ind = c_x.

* endif.

*

* if not t_poitem-ORDERPR_UN is initial.

* t_poitemx-orderpr_un = c_x.

* endif.

*

* IF NOT T_poitem-preq_name IS INITIAL.

* T_poitemx-preq_name = c_x.

* ENDIF.

*

** For Service Order POs

* IF not T_poitem-trackingno is initial.

* T_poitemx-trackingno = c_x.

* ENDIF.

*

* T_poitem-unlimited_dlv = c_x.

* T_poitemx-unlimited_dlv = c_x.

* T_poitemx-delete_ind = c_x.

* T_poitemx-gr_ind = c_x.

* T_poitemx-distrib = c_x.

* T_poitemx-ir_ind = c_x.

* T_poitemx-acctasscat = c_x.

* APPEND T_POITEMX.

* CLEAR: t_poitemx.

** ENDLOOP.

* MODIFY T_POITEM TRANSPORTING PO_UNIT orderpr_un.

* ENDLOOP.

*

* delete t_poitem where po_item = '0000'.

* delete t_poitemx where po_item = '0000'.

*

**** POaccount data

* data: l_tabix type sy-tabix.

*

* LOOP AT t_poitem.

* LOOP AT t_account. " Where po_item = t_poitem-po_item.

** l_tabix = sy-tabix.

** READ TABLE t_poitem index l_tabix.

**

** t_accountx-po_item = t_account-po_item.

************************************************

***mod-004

*

* if not t_account-po_item is initial.

* t_accountx-po_item = t_account-po_item.

* else.

* t_accountx-po_item = t_poitem-po_item.

* t_account-po_item = t_poitem-po_item.

* endif.

**mod-004

***********************************************

* IF NOT t_account-po_item IS INITIAL.

* t_accountx-po_itemx = c_x.

* ENDIF.

*

* IF NOT t_account-serial_no IS INITIAL.

* t_accountx-SERIAL_NO = t_account-serial_no.

* t_accountx-serial_nox = c_x.

* ENDIF.

*

** To change the value of T_POITEM-DISTRIB

** to 2 in case of a split

* IF t_account-serial_no > 1.

* READ TABLE T_POITEM WITH KEY po_item = t_account-po_item.

* IF sy-subrc = 0.

* t_poitem-distrib = '2'.

* MODIFY t_poitem INDEX sy-tabix TRANSPORTING distrib.

* READ TABLE t_poitemx WITH KEY po_item = t_poitem-po_item.

* IF sy-subrc = 0.

* t_poitemx-distrib = 'X'.

* MODIFY t_poitemx INDEX sy-tabix TRANSPORTING distrib.

* ENDIF.

* ENDIF.

* ENDIF.

*

** l_tabix = sy-tabix.

** t_accountx-po_item = l_tabix.

** IF NOT t_accountx-po_item IS INITIAL.

** t_accountx-po_item = c_x.

** ENDIF.

**

* IF NOT t_account-costcenter IS INITIAL.

* t_accountx-costcenter = c_x.

* ENDIF.

*

* IF NOT t_account-gl_account IS INITIAL.

* t_accountx-gl_account = c_x.

* ENDIF.

*

* IF NOT t_account-unload_pt IS INITIAL.

* t_accountx-unload_pt = c_x.

* ENDIF.

*

* IF NOT t_account-wbs_element IS INITIAL.

* t_accountx-wbs_element = c_x.

* ENDIF.

*

* IF NOT t_account-distr_perc IS INITIAL.

* t_accountx-distr_perc = c_x.

* ENDIF.

*

* IF NOT t_account-net_value IS INITIAL.

* t_accountx-net_value = c_x.

* ENDIF.

*

* IF NOT t_account-quantity IS INITIAL.

* t_accountx-quantity = c_x.

* ENDIF.

*

* APPEND T_accountx.

* CLEAR: t_accountx.

*

** READ TABLE t_accountx

** WITH KEY po_item = t_account-po_item

** serial_no = t_account-serial_no.

** IF sy-subrc = 0.

** MODIFY t_accountx.

** ENDIF.

* modify t_account.

* ENDLOOP.

*

* ENDLOOP.

*

* delete t_account where po_item = '0000'.

* delete t_accountx where po_item = '0000'.

******************************************************************

**MOD-004

* sort t_accountx by po_item.

* delete adjacent duplicates from t_accountx comparing

* po_item.

*MOD-004********************************************************

*

* loop at t_poschedule.

* loop at t_poitem.

* IF NOT t_poschedule-po_item IS INITIAL.

* t_poschedulex-po_item = t_poschedule-po_item.

* t_poschedulex-PO_ITEMX = C_X.

* else.

* t_poschedule-po_item = t_poitem-po_item.

* t_poschedulex-po_item = t_poitem-po_item.

* t_poschedulex-PO_ITEMX = C_X.

* ENDIF.

*

* IF NOT t_poschedule-sched_line IS INITIAL.

* t_poschedulex-sched_line = t_poschedule-sched_line.

* ELSE.

* t_poschedule-sched_line = t_poitem-po_item.

* t_poschedulex-sched_line = t_poitem-po_item.

* ENDIF.

*

* IF NOT t_poschedule-SCHED_LINE IS INITIAL.

* t_poschedulex-SCHED_LINEX = C_X.

* ENDIF.

*

* IF NOT t_poschedule-DELIVERY_DATE IS INITIAL.

* t_poschedulex-DELIVERY_DATE = c_x.

* ENDIF.

*

* IF NOT t_poschedule-quantity IS INITIAL.

* t_poschedulex-quantity = c_x.

* ENDIF.

*

* APPEND t_poschedulex.

* Clear: t_poschedulex.

* modify t_poschedule.

* endloop.

*

* endloop.

*

* delete t_poschedule where po_item = '0000'.

* delete t_poschedulex where po_item = '0000'.

*mod-003***********************************************************

* sort t_poschedulex by po_item sched_line.

* delete adjacent duplicates from t_poschedulex comparing

* po_item

* sched_line.

*mod-003************************************************************

*

* LOOP AT t_poitem.

* LOOP AT t_POCOND.

* IF T_POCOND-ITM_NUMBER IS INITIAL.

* T_POCOND-ITM_NUMBER = t_POITEM-PO_ITEM.

* T_POCONDX-ITM_NUMBER = t_POITEM-PO_ITEM.

* T_POCONDHEADER-ITM_NUMBER = t_POITEM-PO_ITEM.

* T_POCONDHEADERX-ITM_NUMBER = t_POITEM-PO_ITEM.

* ELSE.

* T_POCONDX-ITM_NUMBER = T_POCOND-ITM_NUMBER.

* T_POCONDHEADER-ITM_NUMBER = t_POITEM-PO_ITEM.

* T_POCONDHEADERX-ITM_NUMBER = T_POCOND-ITM_NUMBER.

* ENDIF.

* IF T_POCOND-COND_ST_NO IS INITIAL.

* T_POCOND-COND_ST_NO = '001'.

* T_POCONDX-COND_ST_NO = T_POCOND-COND_ST_NO.

* T_POCONDHEADER-COND_ST_NO = T_POCOND-COND_ST_NO.

* T_POCONDHEADERX-COND_ST_NO = T_POCOND-COND_ST_NO.

* ELSE.

* T_POCONDX-COND_ST_NO = T_POCOND-COND_ST_NO.

* T_POCONDHEADER-COND_ST_NO = T_POCOND-COND_ST_NO.

* T_POCONDHEADERX-COND_ST_NO = T_POCOND-COND_ST_NO.

* ENDIF.

* IF T_POCOND-COND_COUNT IS INITIAL.

* T_POCOND-COND_COUNT = '01'.

* T_POCONDX-COND_COUNT = '01'.

* T_POCONDHEADER-COND_COUNT = '01'.

* T_POCONDHEADERX-COND_COUNT = '01'.

* ELSE.

* T_POCONDX-COND_COUNT = T_POCOND-COND_COUNT.

* T_POCONDHEADER-COND_COUNT = '01'.

* T_POCONDHEADERX-COND_COUNT = T_POCOND-COND_COUNT.

* ENDIF.

*

** MOD-004 IF T_POCOND-CHANGE_ID IS INITIAL.

* T_POCOND-CHANGE_ID = 'I'.

* T_POCONDX-CHANGE_ID = C_X.

* T_POCONDHEADER-CHANGE_ID = 'I'.

* T_POCONDHEADERX-CHANGE_ID = C_X.

** T_POCONDHEADER-CHANGE_ID = 'I'.

** T_POCONDHEADERX-CHANGE_ID = C_X.

**MOD-004 ENDIF.

*

** MDO-004

* IF NOT T_POCONDHEADER-COND_TYPE IS INITIAL.

* T_POCONDHEADER-COND_TYPE = 'PBXX'.

* ENDIF.

* IF NOT T_POCONDHEADER-COND_TYPE IS INITIAL.

* T_POCONDHEADERX-COND_TYPE = C_X..

* ENDIF.

* IF T_POCONDHEADER-COND_VALUE IS INITIAL.

* T_POCONDHEADER-COND_VALUE = T_POCOND-COND_VALUE.

* ENDIF.

* IF NOT T_POCONDHEADER-COND_VALUE IS INITIAL.

* T_POCONDHEADERX-COND_VALUE = C_X.

* ENDIF.

* IF NOT T_POCONDHEADER-CHANGE_ID IS INITIAL.

* T_POCONDHEADER-CHANGE_ID = 'I'.

* ENDIF.

* IF NOT T_POCONDHEADER-CHANGE_ID IS INITIAL.

* T_POCONDHEADERX-CHANGE_ID = C_X.

* ENDIF.

* IF NOT t_POCOND-CONDITION_NO IS INITIAL.

* t_POCONDX-CONDITION_NO = C_X.

* ENDIF.

* IF NOT t_POCONDHEADER-CONDITION_NO IS INITIAL.

* t_POCONDHEADERX-CONDITION_NO = C_X.

* ENDIF.

**MOD-004

* IF NOT t_POCOND-CONDITION_NO IS INITIAL.

* t_POCONDX-CONDITION_NOX = C_X.

* ENDIF.

* IF NOT t_POCONDHEADER-CONDITION_NO IS INITIAL.

* t_POCONDHEADERX-CONDITION_NOX = C_X.

* ENDIF.

*

* IF NOT t_POCOND-ITM_NUMBER IS INITIAL.

* t_POCONDX-ITM_NUMBERX = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-ITM_NUMBER IS INITIAL.

* t_POCONDHEADERX-ITM_NUMBERX = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_ST_NO IS INITIAL.

* t_POCONDX-COND_ST_NOX = C_X.

* ENDIF.

* IF NOT t_POCONDHEADER-COND_ST_NO IS INITIAL.

* t_POCONDHEADERX-COND_ST_NOX = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_COUNT IS INITIAL.

* t_POCONDX-COND_COUNT = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-COND_COUNT IS INITIAL.

* t_POCONDHEADERX-COND_COUNT = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_TYPE IS INITIAL.

* t_POCONDX-COND_TYPE = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-COND_TYPE IS INITIAL.

* t_POCONDHEADERX-COND_TYPE = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_VALUE IS INITIAL.

* t_POCONDX-COND_VALUE = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-COND_VALUE IS INITIAL.

* t_POCONDHEADERX-COND_VALUE = C_X.

* ENDIF.

*

* IF NOT t_POCOND-CURRENCY IS INITIAL.

* t_POCONDX-CURRENCY = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-CURRENCY IS INITIAL.

* t_POCONDHEADERX-CURRENCY = C_X.

* ENDIF.

*

* IF NOT t_POCOND-CURRENCY_ISO IS INITIAL.

* t_POCONDX-CURRENCY_ISO = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-CURRENCY_ISO IS INITIAL.

* t_POCONDHEADERX-CURRENCY_ISO = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_UNIT IS INITIAL.

* t_POCONDX-COND_UNIT = C_X.

* ENDIF.

* IF NOT t_POCONDHEADER-COND_UNIT IS INITIAL.

* t_POCONDHEADERX-COND_UNIT = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_UNIT_ISO IS INITIAL.

* t_POCONDX-COND_UNIT_ISO = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-COND_UNIT_ISO IS INITIAL.

* t_POCONDHEADERX-COND_UNIT_ISO = C_X.

* ENDIF.

*

* IF NOT t_POCOND-COND_P_UNT IS INITIAL.

* t_POCONDX-COND_P_UNT = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-COND_P_UNT IS INITIAL.

* t_POCONDHEADERX-COND_P_UNT = C_X.

* ENDIF.

*

* IF NOT t_POCOND-APPLICATIO IS INITIAL.

* t_POCONDX-APPLICATIO = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-APPLICATIO IS INITIAL.

* t_POCONDHEADERX-APPLICATIO = C_X.

* ENDIF.

*

* IF NOT T_POCOND-CONPRICDAT IS INITIAL.

* t_POCONDX-CONPRICDAT = C_X.

* ENDIF.

*

* IF NOT T_POCONDHEADER-CONPRICDAT IS INITIAL.

* t_POCONDHEADERX-CONPRICDAT = C_X.

* ENDIF.

*

* IF NOT t_POCOND-CALCTYPCON IS INITIAL.

* t_POCONDX-CALCTYPCON = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-CALCTYPCON IS INITIAL.

* t_POCONDHEADERX-CALCTYPCON = C_X.

* ENDIF.

*

* IF NOT t_POCOND-CONBASEVAL IS INITIAL.

* t_POCONDX-CONBASEVAL = C_X.

* ENDIF.

*

* IF NOT t_POCONDHEADER-CONBASEVAL IS INITIAL.

* t_POCONDHEADERX-CONBASEVAL = C_X.

* ENDIF.

*

* APPEND T_POCONDX.

* CLEAR: T_POCONDX.

* APPEND: T_POCONDHEADER, T_POCONDHEADERX.

* CLEAR: T_POCONDHEADER, T_POCONDHEADERX.

* MODIFY T_POCOND TRANSPORTING ITM_NUMBER COND_ST_NO COND_COUNT.

*

* ENDLOOP.

* ENDLOOP.

*

* sort t_pocond by itm_number.

* sort t_pocondx by itm_number.

* sort t_pocondheader by itm_number.

* sort t_pocondheaderx by itm_number.

* delete adjacent duplicates from t_pocond comparing itm_number.

* delete adjacent duplicates from t_pocondx comparing itm_number.

* delete adjacent duplicates from t_pocondheader comparing itm_number.

* delete adjacent duplicates from t_pocondheaderx comparing itm_number.

*

*ENDFORM. " get_uom_conversion

**&---------------------------------------------------------------------

**

**& Form GET_INCOTERMS_LINE_ITEM

**&---------------------------------------------------------------------

**

** text

**----------------------------------------------------------------------

**

** -->P_POHEADER text

** <--P_POITEM text

**----------------------------------------------------------------------

**

*FORM GET_INCOTERMS_LINE_ITEM tables

* T_POITEM STRUCTURE BAPIMEPOITEM

* using

* T_POHEADER type BAPIMEPOHEADER.

*

* DATA: t_zmm_mapping_flds LIKE zmm_mapping_flds

* OCCURS 0 WITH HEADER LINE.

*

* CONSTANTS: c_inco_trms type ZFLDNAME value 'INCOTERMS'.

*

* SELECT * FROM zmm_mapping_flds

* INTO TABLE t_zmm_mapping_flds.

*

* IF sy-subrc EQ 0.

*

* LOOP AT T_POITEM.

* SORT t_zmm_mapping_flds BY mapg_field gsdb_val.

*

* READ TABLE t_zmm_mapping_flds WITH KEY

* mapg_field = c_inco_trms " 'INCOTERMS'

* gsdb_val = T_POITEM-INCOTERMS1 BINARY SEARCH.

* IF sy-subrc = 0.

* t_poitem-incoterms1 = t_zmm_mapping_flds-beacon_val.

* ELSE.

* t_poitem-incoterms1 = 'CIF'.

* ENDIF.

*

* READ TABLE t_zmm_mapping_flds WITH KEY

* mapg_field = c_inco_trms " 'INCOTERMS'

* gsdb_val = T_POITEM-INCOTERMS2 BINARY SEARCH.

* IF sy-subrc = 0.

* t_poitem-incoterms2 = t_zmm_mapping_flds-beacon_val.

* ELSE.

* t_poitem-incoterms2 = t_poitem-incoterms1.

* ENDIF.

* MODIFY t_POITEM TRANSPORTING INCOTERMS1 INCOTERMS2.

* ENDLOOP.

* ENDIF.

*

*ENDFORM. "GET_INCOTERMS_LINE_ITEM

  • No labels