Você está na página 1de 3

DATA: l_bapi_poitemx TYPE bapimepoitemx, l_bapi_poitem TYPE bapimepoitem, ls_item LIKE LINE OF bapi_poitem, l_tabix TYPE sy-index, lt_ekpo

TYPE TABLE OF ekpo, lt_komv TYPE TABLE OF komv, l_komv TYPE komv, ls_pocond TYPE bbps_if_bapimepocond, ls_pocondx TYPE bapimepocondx, lt_poitem LIKE bapi_poitem, lt_poitemx LIKE bapi_poitemx, lt_poschedule LIKE bapi_poschedule, lt_poschedulex LIKE bapi_poschedulex, lt_poaccount LIKE bapi_poaccount, lt_poaccountx LIKE bapi_poaccountx, lt_pocond LIKE bapi_pocond , lt_pocondx LIKE bapi_pocondx, lt_polimits LIKE bapi_polimits, lt_pocontractlimits LIKE bapi_pocontractlimits, lt_poservices LIKE bapi_poservices, lt_posrvaccessvalues LIKE bapi_posrvaccessvalues, lo_structdescr TYPE REF TO cl_abap_structdescr, lt_return TYPE STANDARD TABLE OF bapiret2. FIELD-SYMBOLS: <comp> LIKE LINE OF lo_structdescr->components, <any> TYPE ANY. REFRESH lt_poitem. lt_poitem[] = bapi_poitem[]. MODIFY lt_poitem FROM l_bapi_poitem TRANSPORTING po_price WHERE po_price NE space. lt_poitemx[] = bapi_poitemx[]. lt_poschedule[] = bapi_poschedule[]. lt_poschedulex[] = bapi_poschedulex[]. lt_poaccount[] = bapi_poaccount[]. lt_poaccountx[] = bapi_poaccountx[]. lt_polimits[] = bapi_polimits[]. lt_pocontractlimits[] = bapi_pocontractlimits[]. lt_poservices[] = bapi_poservices[]. lt_posrvaccessvalues[] = bapi_posrvaccessvalues[]. *Create or change? CALL FUNCTION 'ME_PURCHASE_DOCUMENT_DATA_READ' EXPORTING i_ebeln = bbp_poheader-po_number i_tcode = 'ME22' i_trtyp = 'V' i_no_messaging = 'X' i_no_message_req = 'X' i_no_authority_check = 'X' EXCEPTIONS error_message = 1 no_eblnr = 2 eblnr_not_found = 3

no_tcode tcode_not_allowed no_trtyp OTHERS IF sy-subrc NE 0.

= = = =

4 5 6 7.

CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING poheader = bapi_poheader poheaderx = bapi_poheaderx testrun = 'X' TABLES return = lt_return poitem = lt_poitem poitemx = lt_poitemx poschedule = lt_poschedule poschedulex = lt_poschedulex poaccount = lt_poaccount poaccountx = lt_poaccountx pocond = lt_pocond pocondx = lt_pocondx polimits = lt_polimits pocontractlimits = lt_pocontractlimits poservices = lt_poservices posrvaccessvalues = lt_posrvaccessvalues. *Fill condition table lo_structdescr ?= cl_abap_structdescr=>describe_by_data( ls_pocondx ). LOOP AT lo_structdescr->components ASSIGNING <comp>. ASSIGN COMPONENT <comp>-name OF STRUCTURE ls_pocondx TO <any>. IF sy-subrc IS INITIAL. <any> = 'X'. ENDIF. ENDLOOP. DELETE lt_pocond WHERE cond_type NE 'GRWR'. LOOP AT lt_pocond INTO ls_pocond. ls_pocond-change_id = 'I'. ls_pocondx-condition_no = ls_pocond-condition_no. ls_pocondx-itm_number = ls_pocond-itm_number. ls_pocondx-cond_st_no = ls_pocond-cond_st_no. APPEND ls_pocond TO bapi_pocond. APPEND ls_pocondx TO bapi_pocondx. ENDLOOP. ELSE. * PO exists. BAPI_PO_CHANGE will be called. CALL FUNCTION 'ME_EKPO_READ_WITH_EBELN' EXPORTING pi_ebeln = bbp_poheader-po_number TABLES pto_ekpo = lt_ekpo EXCEPTIONS err_no_records_found = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

* ENDIF.

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

CALL FUNCTION 'BAPI_PO_CHANGE' EXPORTING purchaseorder = bapi_poheader-po_number poheader = bapi_poheader poheaderx = bapi_poheaderx testrun = 'X' TABLES return = lt_return poitem = lt_poitem poitemx = lt_poitemx poschedule = lt_poschedule poschedulex = lt_poschedulex poaccount = lt_poaccount poaccountx = lt_poaccountx pocond = lt_pocond pocondx = lt_pocondx polimits = lt_polimits pocontractlimits = lt_pocontractlimits poservices = lt_poservices posrvaccessvalues = lt_posrvaccessvalues. . *Fill condition table lo_structdescr ?= cl_abap_structdescr=>describe_by_data( ls_pocondx ). LOOP AT lo_structdescr->components ASSIGNING <comp>. ASSIGN COMPONENT <comp>-name OF STRUCTURE ls_pocondx TO <any>. IF sy-subrc IS INITIAL. <any> = 'X'. ENDIF. ENDLOOP. DELETE lt_pocond WHERE cond_type NE 'GRWR'. LOOP AT lt_pocond INTO ls_pocond. SORT lt_ekpo BY ebeln ebelp. READ TABLE lt_ekpo WITH KEY ebeln = bbp_poheader-po_number ebelp = ls_pocond-itm_number BINARY SEARCH TRANSPORTING NO FIELDS. IF NOT sy-subrc = 0. ls_pocond-change_id = 'I'. ls_pocondx-change_id = 'X'. ENDIF. ls_pocondx-condition_no = ls_pocond-condition_no. ls_pocondx-itm_number = ls_pocond-itm_number. ls_pocondx-cond_st_no = ls_pocond-cond_st_no. APPEND ls_pocond TO bapi_pocond. APPEND ls_pocondx TO bapi_pocondx. ENDLOOP. ENDIF.

Você também pode gostar