‎2007 Sep 04 11:07 AM
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
‎2007 Sep 04 1:13 PM
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
‎2007 Sep 04 3:53 PM