Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

regarding BAPI_CONTRACT_CREATE

Former Member
0 Likes
1,449

Hi All,

If any body used BAPI_CONTRACT_CREATE for creating contract in MM then

Please provide some sample programs for using this BAPI for the transaction ME31k.

Thanks in advance,

esh

2 REPLIES 2
Read only

Former Member
0 Likes
732

Hi Rajesh,

Please find the sample coding for the BAPI.

<b>BAPI_CONTRACT_CREATE

BAPI_CONTRACT_GETDETAIL

BAPI_SAG_CREATE

BAPI_SAG_GETDETAIL</b>

This program reads the outline agreement via the selection parameter "outline agreement" (technical name PA_DOC) and generates a new agreement as a copy of the existing one in each case using the data read.

If you set the "Test run?" parameter (technical name PA_TEST), the copying is only simulated and no changes are made to the database.

&----


*& Report MMPUR_BAPI_OUT_TEST1

&----


*& Read a contract or scheduling agreement via BAPI and create a new

*& one, again via BAPI.

& -


REPORT mmpur_bapi_meout_test1.

  • define local data

DATA: l_ebeln TYPE bapimeoutheader-number, "#EC NEEDED

ls_ekko TYPE ekko,

----


  • Define BAPI parameters

----


ls_header TYPE bapimeoutheader,

ls_headerx TYPE bapimeoutheaderx,

ls_item TYPE bapimeoutitem,

lt_item TYPE bapimeout_t_item,

ls_itemx TYPE bapimeoutitemx,

lt_itemx TYPE bapimeout_t_itemx,

ls_account TYPE bapimeoutaccount,

lt_account TYPE bapimeout_t_account,

ls_accountx TYPE bapimeoutaccountx,

lt_accountx TYPE bapimeout_t_accountx,

lt_delivery_address TYPE bapimeout_t_addrdel,

----


  • For scheduling agreements only

----


ls_schedule TYPE bapimeoutschedule,

lt_schedule TYPE bapimeout_t_schedule,

ls_schedulex TYPE bapimeoutschedulex,

lt_schedulex TYPE bapimeout_t_schedulex,

ls_shipping TYPE bapimeoutshipp,

lt_shipping TYPE bapimeout_t_shipp,

ls_shippingx TYPE bapimeoutshippx,

lt_shippingx TYPE bapimeout_t_shippx, "#EC NEEDED

ls_sc_component TYPE bapimeoutcomponent,

lt_sc_component TYPE bapimeout_t_component,

ls_sc_componentx TYPE bapimeoutcomponentx,

lt_sc_componentx TYPE bapimeout_t_componentx,

----


  • Master conditions on item level

----


ls_item_cond_validity TYPE bapimeoutvalidity,

ls_item_condition TYPE bapimeoutcondition,

lt_item_cond_validity TYPE bapimeout_t_validity,

lt_item_condition TYPE bapimeout_t_cond,

ls_item_cond_validityx TYPE bapimeoutvalidityx,

ls_item_conditionx TYPE bapimeoutconditionx,

lt_item_cond_validityx TYPE bapimeout_t_validityx,

lt_item_conditionx TYPE bapimeout_t_condx,

lt_item_cond_scale_val TYPE bapimeout_t_scalevalue,

lt_item_cond_scale_quan TYPE bapimeout_t_scalequant,

----


  • Master conditions on header level

----


ls_head_cond_validity TYPE bapimeoutheadvalidity,

ls_head_condition TYPE bapimeoutheadercond,

lt_head_cond_validity TYPE bapimeout_t_headvalid,

lt_head_condition TYPE bapimeout_t_headcond,

ls_head_cond_validityx TYPE bapimeoutheadvalidityx,

ls_head_conditionx TYPE bapimeoutheadercondx,

lt_head_cond_validityx TYPE bapimeout_t_headvalidx,

lt_head_conditionx TYPE bapimeout_t_headcondx,

lt_head_cond_scale_val TYPE bapimeout_t_valuescale,

lt_head_cond_scale_quan TYPE bapimeout_t_quantscale,

----


  • Other data ...

----


ls_export_import TYPE bapimeouteipo,

ls_export_importx TYPE bapimeouteipox,

lt_export_import TYPE bapimeout_t_eipo,

lt_export_importx TYPE bapimeout_t_eipox,

lt_item_text TYPE bapimeout_t_itemtext,

lt_header_text TYPE bapimeout_t_text,

ls_partner TYPE bapimeoutpartner, "#EC NEEDED

ls_partnerx TYPE bapimeoutpartnerx,

lt_partner TYPE bapimeout_t_partner,

lt_partnerx TYPE bapimeout_t_partnerx,

lt_release_docu TYPE bapimeout_t_release,

lt_extensionout TYPE bapiparex_t,

lt_return TYPE bapiret2_t,

lt_return_all TYPE bapiret2_t.

----


  • at selection screen

----


PARAMETERS: pa_doc TYPE ebeln,

pa_test AS CHECKBOX.

----


START-OF-SELECTION.

----


CALL FUNCTION 'ME_EKKO_SINGLE_READ'

EXPORTING

pi_ebeln = pa_doc

IMPORTING

po_ekko = ls_ekko

EXCEPTIONS

no_records_found = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

----


  • Read contract or scheduling agreement

----


IF ls_ekko-bstyp = cl_mmpur_constants=>mmpur_sag.

----


  • read schedule agreement

----


CALL FUNCTION 'BAPI_SAG_GETDETAIL'

EXPORTING

purchasingdocument = ls_ekko-ebeln

item_data = cl_mmpur_constants=> yes

account_data = cl_mmpur_constants=> yes

schedule_data = cl_mmpur_constants=> yes

shipping_data = cl_mmpur_constants=>yes

sc_component_data = cl_mmpur_constants=> yes

export_data = cl_mmpur_constants=> yes

condition_data = cl_mmpur_constants=>yes

text_data = cl_mmpur_constants=> yes

partner_data = cl_mmpur_constants=>yes

IMPORTING

header = ls_header

TABLES

item = lt_item

account = lt_account

schedule = lt_schedule

delivery_address = lt_delivery_address

sc_component = lt_sc_component

item_cond_validity = lt_item_cond_validity

item_condition = lt_item_condition

item_cond_scale_value = lt_item_cond_scale_val

item_cond_scale_quan = lt_item_cond_scale_quan

export_import = lt_export_import

item_text = lt_item_text

header_text = lt_header_text

head_cond_validity = lt_head_cond_validity

head_condition = lt_head_condition

head_cond_scale_val = lt_head_cond_scale_val

head_cond_scale_quan = lt_head_cond_scale_quan

partner = lt_partner

extensionout = lt_extensionout

return = lt_return.

ELSE.

----


  • read purchasing contract

----


CALL FUNCTION 'BAPI_CONTRACT_GETDETAIL'

EXPORTING

purchasingdocument = ls_ekko-ebeln

item_data = cl_mmpur_constants=> yes

account_data = cl_mmpur_constants=> yes

condition_data = cl_mmpur_constants=>yes

text_data = cl_mmpur_constants=> yes

partner_data = cl_mmpur_constants=> yes

release_data = cl_mmpur_constants=>yes

IMPORTING

header = ls_header

TABLES

item = lt_item

account = lt_account

delivery_address = lt_delivery_address

item_cond_validity = lt_item_cond_validity

item_condition = lt_item_condition

item_cond_scale_value = lt_item_cond_scale_val

item_cond_scale_quan = lt_item_cond_scale_quan

item_text = lt_item_text

header_text = lt_header_text

head_cond_validity = lt_head_cond_validity

head_condition = lt_head_condition

head_cond_scale_val = lt_head_cond_scale_val

head_cond_scale_quan = lt_head_cond_scale_quan

partner = lt_partner

release_docu = lt_release_docu

extensionout = lt_extensionout

return = lt_return.

ENDIF.

APPEND LINES OF lt_return TO lt_return_all.

IF ls_header IS NOT INITIAL.

----


  • Fill all the x-tables and delete the document numbers

----


  • Header

----


PERFORM fill_x_structure CHANGING ls_headerx.

CLEAR ls_header-number.

----


  • Items

----


REFRESH lt_itemx.

PERFORM fill_x_structure CHANGING ls_itemx.

LOOP AT lt_item INTO ls_item.

ls_itemx-item_no = ls_item-item_no.

APPEND ls_itemx TO lt_itemx.

ENDLOOP.

----


  • Item condition records

----


REFRESH lt_item_conditionx.

PERFORM fill_x_structure CHANGING ls_item_conditionx.

LOOP AT lt_item_condition INTO ls_item_condition.

ls_item_conditionx-item_no = ls_item_condition-item_no.

ls_item_conditionx-serial_id = ls_item_condition-serial_id.

ls_item_conditionx-cond_count = ls_item_condition-cond_count.

APPEND ls_item_conditionx TO lt_item_conditionx.

ENDLOOP.

REFRESH lt_item_cond_validityx.

PERFORM fill_x_structure CHANGING ls_item_cond_validityx.

LOOP AT lt_item_cond_validity INTO ls_item_cond_validity.

ls_item_cond_validityx-item_no = ls_item_cond_validity-item_no.

ls_item_cond_validityx-serial_id = ls_item_cond_validity-serial_id.

APPEND ls_item_cond_validityx TO lt_item_cond_validityx.

ENDLOOP.

----


  • Header condition records

----


REFRESH lt_head_conditionx.

PERFORM fill_x_structure CHANGING ls_head_conditionx.

LOOP AT lt_head_condition INTO ls_head_condition.

ls_head_conditionx-serial_id = ls_head_condition-serial_id.

ls_head_conditionx-cond_count = ls_head_condition-cond_count.

APPEND ls_head_conditionx TO lt_head_conditionx.

ENDLOOP.

REFRESH lt_head_cond_validityx.

PERFORM fill_x_structure CHANGING ls_head_cond_validityx.

LOOP AT lt_head_cond_validity INTO ls_head_cond_validity.

ls_head_cond_validityx-serial_id = ls_head_cond_validity-serial_id.

APPEND ls_head_cond_validityx TO lt_head_cond_validityx.

ENDLOOP.

----


  • Accounting

----


REFRESH lt_accountx.

PERFORM fill_x_structure CHANGING ls_accountx.

LOOP AT lt_account INTO ls_account.

ls_accountx-item_no = ls_account-item_no.

ls_accountx-serial_no = ls_account-serial_no.

APPEND ls_accountx TO lt_accountx.

ENDLOOP.

----


  • Schedule lines

----


REFRESH lt_schedulex.

PERFORM fill_x_structure CHANGING ls_schedulex.

LOOP AT lt_schedule INTO ls_schedule.

ls_schedulex-item_no = ls_schedule-item_no.

ls_schedulex-sched_line = ls_schedule-sched_line.

APPEND ls_schedulex TO lt_schedulex.

ENDLOOP.

----


  • Subcontracting

----


REFRESH lt_sc_componentx.

PERFORM fill_x_structure CHANGING ls_sc_componentx.

LOOP AT lt_sc_component INTO ls_sc_component.

ls_sc_componentx-item_no = ls_sc_component-item_no.

ls_sc_componentx-sched_line = ls_sc_component-sched_line.

ls_sc_componentx-res_item_key = ls_sc_component-res_item.

ls_sc_component-change_id = 'R'. "replace existing BOM

ls_sc_componentx-change_id = cl_mmpur_constants=>yes.

APPEND ls_sc_componentx TO lt_sc_componentx.

ENDLOOP.

----


  • Partner

----


REFRESH lt_partnerx.

PERFORM fill_x_structure CHANGING ls_partnerx.

LOOP AT lt_partner INTO ls_partner.

APPEND ls_partnerx TO lt_partnerx.

ENDLOOP.

----


  • Export/Import

----


REFRESH lt_export_importx.

PERFORM fill_x_structure CHANGING ls_export_importx.

LOOP AT lt_export_import INTO ls_export_import.

ls_export_importx-item_no = ls_export_import-item_no.

APPEND ls_export_importx TO lt_export_importx.

ENDLOOP.

----


  • Shipping

----


REFRESH lt_shippingx.

PERFORM fill_x_structure CHANGING ls_shippingx.

LOOP AT lt_shipping INTO ls_shipping.

ls_shippingx-item_no = ls_shipping-item_no.

APPEND ls_shippingx TO lt_shippingx.

ENDLOOP.

----


  • Create a new outline agreement.

----


IF ls_ekko-bstyp = cl_mmpur_constants=>mmpur_sag.

----


  • Create schedule agreement

----


CALL FUNCTION 'BAPI_SAG_CREATE'

EXPORTING

header = ls_header

headerx = ls_headerx

testrun = pa_test

IMPORTING

purchasingdocument = l_ebeln

TABLES

return = lt_return

item = lt_item

itemx = lt_itemx

account = lt_account

accountx = lt_accountx

schedule = lt_schedule

schedulex = lt_schedulex

sc_component = lt_sc_component

sc_componentx = lt_sc_componentx

delivery_address = lt_delivery_address

item_cond_validity = lt_item_cond_validity

item_cond_validityx = lt_item_cond_validityx

item_condition = lt_item_condition

item_conditionx = lt_item_conditionx

item_cond_scale_value = lt_item_cond_scale_val

item_cond_scale_quan = lt_item_cond_scale_quan

export_import = lt_export_import

export_importx = lt_export_importx

item_text = lt_item_text

header_text = lt_header_text

head_cond_validity = lt_head_cond_validity

head_cond_validityx = lt_head_cond_validityx

head_condition = lt_head_condition

head_conditionx = lt_head_conditionx

head_cond_scale_val = lt_head_cond_scale_val

head_cond_scale_quan = lt_head_cond_scale_quan

partner = lt_partner

partnerx = lt_partnerx.

ELSE.

----


  • Create contract

----


CALL FUNCTION 'BAPI_CONTRACT_CREATE'

EXPORTING

header = ls_header

headerx = ls_headerx

testrun = pa_test

IMPORTING

purchasingdocument = l_ebeln

TABLES

return = lt_return

item = lt_item

itemx = lt_itemx

account = lt_account

accountx = lt_accountx

delivery_address = lt_delivery_address

item_cond_validity = lt_item_cond_validity

item_cond_validityx = lt_item_cond_validityx

item_condition = lt_item_condition

item_conditionx = lt_item_conditionx

item_cond_scale_value = lt_item_cond_scale_val

item_cond_scale_quan = lt_item_cond_scale_quan

item_text = lt_item_text

header_text = lt_header_text

head_cond_validity = lt_head_cond_validity

head_cond_validityx = lt_head_cond_validityx

head_condition = lt_head_condition

head_conditionx = lt_head_conditionx

head_cond_scale_val = lt_head_cond_scale_val

head_cond_scale_quan = lt_head_cond_scale_quan

partner = lt_partner

partnerx = lt_partnerx.

ENDIF.

----


  • store messages

----


APPEND LINES OF lt_return TO lt_return_all.

----


  • Commit Work if requested.

----


IF pa_test = cl_mmpur_constants=>no.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

ENDIF.

ENDIF. "of IF ls_header IS NOT INITIAL

----


  • Display error protocol

----


IF NOT lt_return_all IS INITIAL.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_structure_name = 'BAPIRET2'

TABLES

t_outtab = lt_return_all

EXCEPTIONS

OTHERS = 0.

ENDIF.

&----


*& Form fill_x_structure

& -


  • create x-bar per requested parameter

  • all fields will be marked with an 'X' -> change relevant

----


FORM fill_x_structure CHANGING cs_x_structure TYPE any.

DATA: lr_struct TYPE REF TO cl_abap_structdescr,

lr_field TYPE REF TO cl_abap_elemdescr.

FIELD-SYMBOLS: <comp> LIKE LINE OF cl_abap_structdescr=> components,

<x> TYPE ANY.

lr_struct ?= cl_abap_typedescr=>describe_by_data( cs_x_structure ).

CHECK lr_struct IS BOUND.

LOOP AT lr_struct->components ASSIGNING <comp>.

UNASSIGN <x>.

  • take only x fields into consideration, if unicode is active C1 takes 2 bytes

CHECK <comp>-type_kind EQ lr_struct->typekind_char.

ASSIGN COMPONENT <comp>-name OF STRUCTURE cs_x_structure TO <x>.

CHECK <x> IS ASSIGNED.

  • get element description

lr_field ?= cl_abap_typedescr=>describe_by_data( <x> ).

CHECK lr_field->absolute_name EQ '\TYPE=BAPIUPDATE'.

<x> = cl_mmpur_constants=>yes.

ENDLOOP.

ENDFORM. " fill_x_structure

<b>Reward Points if Useful</b>

Regards

Gokul

Read only

Former Member
0 Likes
732

Hi,

Have a look at OSS Note 434281 and 809444.

Hope these notes give some inputs.

<b>Here is the example program</b>

Regards

Sudheer