Creating SAP Pricing Conditions Using BAPI

13
Creating SAP Pricing conditions using BAPI_PRICES_CONDITIONS Category: SD Published on Thursday, 17 September 2009 18:16 Written by Kevin Wilson Hits: 11194 This code snippet inserts a condition record for Pricing condition type Z123 with key sales order and line number. CONSTANTS: lc_kschl_z123 TYPE kscha VALUE 'Z123'. DATA: lv_datum TYPE sydatum, lv_count TYPE kopos, lv_unit TYPE kpein, is_bapicondct TYPE bapicondct, is_bapicondhd TYPE bapicondhd, is_bapicondit TYPE bapicondit, it_bapicondct TYPE STANDARD TABLE OF bapicondct, it_bapicondhd TYPE STANDARD TABLE OF bapicondhd, it_bapicondit TYPE STANDARD TABLE OF bapicondit, it_bapicondqs TYPE STANDARD TABLE OF bapicondqs, it_bapicondvs TYPE STANDARD TABLE OF bapicondvs, it_bapiret2 TYPE STANDARD TABLE OF bapiret2, is_bapiret2 TYPE bapiret2, it_bapiknumhs TYPE STANDARD TABLE OF bapiknumhs, it_mem_initial TYPE STANDARD TABLE OF cnd_mem_initial. lv_datum = sy-datum. lv_count = 1. LOOP AT gt_vbap INTO wa_vbap.

description

Creating SAP Pricing Conditions Using BAPI

Transcript of Creating SAP Pricing Conditions Using BAPI

Page 1: Creating SAP Pricing Conditions Using BAPI

Creating SAP Pricing conditions using BAPI_PRICES_CONDITIONS

Category: SD

Published on Thursday, 17 September 2009 18:16

Written by Kevin Wilson

Hits: 11194

This code snippet inserts a condition record for Pricing condition type Z123 with key sales order and line

number.

 

CONSTANTS: lc_kschl_z123 TYPE kscha VALUE 'Z123'.

DATA: lv_datum       TYPE sydatum,

lv_count       TYPE kopos,

lv_unit        TYPE kpein,

is_bapicondct  TYPE bapicondct,

is_bapicondhd  TYPE bapicondhd,

is_bapicondit  TYPE bapicondit,

it_bapicondct  TYPE STANDARD TABLE OF bapicondct,

it_bapicondhd  TYPE STANDARD TABLE OF bapicondhd,

it_bapicondit  TYPE STANDARD TABLE OF bapicondit,

it_bapicondqs  TYPE STANDARD TABLE OF bapicondqs,

it_bapicondvs  TYPE STANDARD TABLE OF bapicondvs,

it_bapiret2    TYPE STANDARD TABLE OF bapiret2,

is_bapiret2    TYPE bapiret2,

it_bapiknumhs  TYPE STANDARD TABLE OF bapiknumhs,

it_mem_initial TYPE STANDARD TABLE OF cnd_mem_initial.

lv_datum = sy-datum.

lv_count = 1.

LOOP AT gt_vbap INTO wa_vbap.

Page 2: Creating SAP Pricing Conditions Using BAPI

* BAPI Structure for Condition Tables

is_bapicondct-operation  = '009'.

is_bapicondct-table_no   = '700'.

is_bapicondct-applicatio = 'V'.

is_bapicondct-cond_usage = 'A'.

is_bapicondct-cond_type  = lc_kschl_z123.

"Set the varkey from A700 table key fields

CONCATENATE wa_vbap-vbeln wa_vbap-posnr

INTO is_bapicondct-varkey.

is_bapicondct-valid_to   = '12/31/2009'.

is_bapicondct-valid_from = lv_datum.

is_bapicondct-cond_no    = '$000000001'.

**** BAPI Structure of KONH with English Field Names

is_bapicondhd-operation  = '009'.

is_bapicondhd-cond_no    = '$000000001'.

is_bapicondhd-created_by = sy-uname.

is_bapicondhd-creat_date = sy-datum.

is_bapicondhd-cond_usage = 'A'.

is_bapicondhd-table_no   = '700'.

is_bapicondhd-applicatio = 'V'.

is_bapicondhd-cond_type  = lc_kschl_z123.

is_bapicondhd-varkey     = is_bapicondct-varkey.

is_bapicondhd-valid_to   = '12/31/2009'.

is_bapicondhd-valid_from = lv_datum.

*** BAPI Structure of KONP with English Field Names

CLEAR is_bapicondit.

is_bapicondit-operation  = '009'.

is_bapicondit-cond_no    = '$000000001'.

is_bapicondit-cond_count = lv_count.

is_bapicondit-applicatio = 'V'.

is_bapicondit-cond_type  = lc_kschl_z123.

is_bapicondit-scaletype  = 'A'.

is_bapicondit-scalebasin = 'B'.

ADD 1 TO is_bapicondit-scale_qty.

Page 3: Creating SAP Pricing Conditions Using BAPI

is_bapicondit-calctypcon = 'B'.

lv_unit = wa_vbap-kwmeng.

is_bapicondit-cond_p_unt = lv_unit.

is_bapicondit-cond_value = wa_vbap-value.

is_bapicondit-condcurr   = wa_vbap-waerk.

APPEND: is_bapicondct TO it_bapicondct,

is_bapicondhd TO it_bapicondhd,

is_bapicondit TO it_bapicondit.

ENDLOOP.

*** BAPI for pricing Condition Records

CALL FUNCTION 'BAPI_PRICES_CONDITIONS'

TABLES

ti_bapicondct  = it_bapicondct

ti_bapicondhd  = it_bapicondhd

ti_bapicondit  = it_bapicondit

ti_bapicondqs  = it_bapicondqs

ti_bapicondvs  = it_bapicondvs

to_bapiret2    = it_bapiret2

to_bapiknumhs  = it_bapiknumhs

to_mem_initial = it_mem_initial

EXCEPTIONS

update_error   = 1

OTHERS         = 2.

IF sy-subrc EQ 0.

WRITE: /1 'Return Messages for Condition create'(t03).

LOOP AT it_bapiret2 INTO is_bapiret2.

WRITE: /1 is_bapiret2-message.

ENDLOOP.

ULINE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait   = 'X'

Page 4: Creating SAP Pricing Conditions Using BAPI

IMPORTING

return = is_bapiret2.

ENDIF.

Correct AnswerRe: Bapi to create pricing condition\VK11

Niranjan Krishnamurthi Jul 9, 2012 9:02 AM (in response to Gil Hadida)Hi, Please try this. DATA: BEGIN OF ls_komk OCCURS 10.        INCLUDE STRUCTURE komk.DATA: END OF ls_komk.DATA:ls_komg TYPE komg.DATA: BEGIN OF ls_komv OCCURS 10.        INCLUDE STRUCTURE komv.DATA: END OF ls_komv.DATA: BEGIN OF lt_komv OCCURS 0.        INCLUDE STRUCTURE komv.DATA: END OF lt_komv.DATA:komk TYPE komk ,komp TYPE komp .

ls_komg-matnr = <material>.    ls_komg-vkorg = <sales org>.ls_komg-vtweg = <dist chn>.

CLEAR: lt_komv,ls_komv.ls_komv-kappl = 'V'.        " Application V = Salesls_komv-kschl = <>.    " Condition typels_komv-knumh = <condition record number>.ls_komv-krech = <>.         " calculation type;ls_komv-kbetr = <>.   ls_komv-kmein = <>.   ls_komv-kpein = <>.ls_komv-waers = <>.ls_komv-updkz = 'I'.APPEND ls_komv TO lt_komv.CLEAR lt_komv.DATA wa_pispr TYPE pispr.wa_pispr-matnr = <>.wa_pispr-vkorg = <>.wa_pispr-vtweg = <>. CALL FUNCTION 'SPR_KOMK_KOMP_FILL'  EXPORTING    pi_i_spr  = wa_pispr  IMPORTING    pe_i_komk = komk    pe_i_komp = komp.

CALL FUNCTION 'RV_CONDITION_COPY'  EXPORTING    application              = 'V'

Page 5: Creating SAP Pricing Conditions Using BAPI

    condition_table          = '   '      " 3 character cond. table    condition_type           = '      '   " cond. type    date_from                = '20120101' " valid on    date_to                  = '99991231' " valid to    enqueue                  = 'X'        " lock entry    i_komk                   = komk    i_komp                   = komp    key_fields               = ls_komg    " key fields    maintain_mode            = 'B'        " A= create " B= change, " C= display " D= create    no_authority_check       = 'X'    selection_date           = '20120101' " valid on    keep_old_records         = ' '    overlap_confirmed        = 'X'    no_db_update             = space  IMPORTING    e_komk                   = komk    e_komp                   = komp    new_record               = lv_new_record  TABLES    copy_records             = lt_komv  EXCEPTIONS    enqueue_on_record        = 1    invalid_application      = 2    invalid_condition_number = 3    invalid_condition_type   = 4    no_selection             = 5    table_not_valid          = 6    no_authority_ekorg       = 7    no_authority_kschl       = 8.IF sy-subrc = 0.  CALL FUNCTION 'RV_CONDITION_SAVE'.  COMMIT WORK.  CALL FUNCTION 'RV_CONDITION_RESET'."necessary to write data  COMMIT WORK.   WRITE:/ 'Success'.ELSE.  WRITE: / 'Error'.ENDIF.  Cheers~Niranjan

Re: Sample code for   BAPI_PRICES_CONDITIONS

Ferry Lianto Apr 13, 2006 9:01 PM (in response to Martín Becker)Hi Martin, Please check this sample code from other thread. wtable1-table_no = '306'.wtable1-applicatio = 'V'.wtable1-cond_type = 'ZPR0'.

Page 6: Creating SAP Pricing Conditions Using BAPI

wtable1-operation = '009'.wtable1-varkey = '13001001USD 000000000050068946'.wtable1-valid_to = '99991231'.wtable1-valid_from = '20051101'.wtable1-cond_no = 'wtable1-table_no = '306'.wtable1-applicatio = 'V'.wtable1-cond_type = 'ZPR0'.wtable1-operation = '009'.wtable1-varkey = '13001001USD 000000000050068946'.wtable1-valid_to = '99991231'.wtable1-valid_from = '20051101'.wtable1-cond_no = '$000000001'.

APPEND wtable1 TO table1.

wtable2-operation = '009'.wtable2-cond_no = '$000000001'.wtable2-created_by = sy-uname.wtable2-creat_date = '20051022'.wtable2-cond_usage = 'A'.wtable2-table_no = '110'.wtable2-applicatio = 'V'.wtable2-cond_type = 'ZPR0'.wtable2-varkey = '13001001USD 000000000050068946'.wtable2-valid_from = '20051101'.wtable2-valid_to = '99991231'.

APPEND wtable2 TO table2.

wtable3-operation = '009'.wtable3-cond_no = '$000000001'.wtable3-cond_count = '01'.wtable3-applicatio = 'V'.wtable3-cond_type = 'ZPR0'.wtable3-scaletype = 'A'.wtable3-scalebasin = 'C'.wtable3-scale_qty = '1'.wtable3-cond_p_unt = '1'.wtable3-cond_unit = 'EA'.wtable3-calctypcon = 'C'.wtable3-cond_value = '454'.wtable3-condcurr = 'USD'.

APPEND wtable3 TO table3.

CALL FUNCTION 'BAPI_PRICES_CONDITIONS'* EXPORTING* PI_initialmode = 'X'* PI_BLOCKNUMBER =TABLESti_bapicondct = table1ti_bapicondhd = table2ti_bapicondit = table3ti_bapicondqs = table4ti_bapicondvs = table5to_bapiret2 = table6to_bapiknumhs = table7to_mem_initial = table8

Page 7: Creating SAP Pricing Conditions Using BAPI

EXCEPTIONSupdate_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.

READ TABLE table6 WITH KEY type = 'E' TRANSPORTING NO FIELDS.

IF sy-subrc = 0.

loop at table6 into ret.

write: / ret-type, ret-message, ret-id, RET-LOG_NO, RET-LOG_MSG_NO,RET-MESSAGE_V1, RET-MESSAGE_V2, RET-MESSAGE_V3, RET-MESSAGE_V4,RET-PARAMETER,RET-ROW,RET-FIELD.

endloop.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'*EXPORTING* WAIT =IMPORTINGreturn = ret.ENDIF.'.

APPEND wtable1 TO table1.

wtable2-operation = '009'.wtable2-cond_no = 'wtable1-table_no = '306'.wtable1-applicatio = 'V'.wtable1-cond_type = 'ZPR0'.wtable1-operation = '009'.wtable1-varkey = '13001001USD 000000000050068946'.wtable1-valid_to = '99991231'.wtable1-valid_from = '20051101'.wtable1-cond_no = '$000000001'.

APPEND wtable1 TO table1.

wtable2-operation = '009'.wtable2-cond_no = '$000000001'.wtable2-created_by = sy-uname.wtable2-creat_date = '20051022'.wtable2-cond_usage = 'A'.wtable2-table_no = '110'.wtable2-applicatio = 'V'.wtable2-cond_type = 'ZPR0'.wtable2-varkey = '13001001USD 000000000050068946'.wtable2-valid_from = '20051101'.wtable2-valid_to = '99991231'.

APPEND wtable2 TO table2.

Page 8: Creating SAP Pricing Conditions Using BAPI

wtable3-operation = '009'.wtable3-cond_no = '$000000001'.wtable3-cond_count = '01'.wtable3-applicatio = 'V'.wtable3-cond_type = 'ZPR0'.wtable3-scaletype = 'A'.wtable3-scalebasin = 'C'.wtable3-scale_qty = '1'.wtable3-cond_p_unt = '1'.wtable3-cond_unit = 'EA'.wtable3-calctypcon = 'C'.wtable3-cond_value = '454'.wtable3-condcurr = 'USD'.

APPEND wtable3 TO table3.

CALL FUNCTION 'BAPI_PRICES_CONDITIONS'* EXPORTING* PI_initialmode = 'X'* PI_BLOCKNUMBER =TABLESti_bapicondct = table1ti_bapicondhd = table2ti_bapicondit = table3ti_bapicondqs = table4ti_bapicondvs = table5to_bapiret2 = table6to_bapiknumhs = table7to_mem_initial = table8EXCEPTIONSupdate_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.

READ TABLE table6 WITH KEY type = 'E' TRANSPORTING NO FIELDS.

IF sy-subrc = 0.

loop at table6 into ret.

write: / ret-type, ret-message, ret-id, RET-LOG_NO, RET-LOG_MSG_NO,RET-MESSAGE_V1, RET-MESSAGE_V2, RET-MESSAGE_V3, RET-MESSAGE_V4,RET-PARAMETER,RET-ROW,RET-FIELD.

endloop.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'*EXPORTING* WAIT =IMPORTINGreturn = ret.ENDIF.'.wtable2-created_by = sy-uname.wtable2-creat_date = '20051022'.

Page 9: Creating SAP Pricing Conditions Using BAPI

wtable2-cond_usage = 'A'.wtable2-table_no = '110'.wtable2-applicatio = 'V'.wtable2-cond_type = 'ZPR0'.wtable2-varkey = '13001001USD 000000000050068946'.wtable2-valid_from = '20051101'.wtable2-valid_to = '99991231'.

APPEND wtable2 TO table2.

wtable3-operation = '009'.wtable3-cond_no = 'wtable1-table_no = '306'.wtable1-applicatio = 'V'.wtable1-cond_type = 'ZPR0'.wtable1-operation = '009'.wtable1-varkey = '13001001USD 000000000050068946'.wtable1-valid_to = '99991231'.wtable1-valid_from = '20051101'.wtable1-cond_no = '$000000001'.

APPEND wtable1 TO table1.

wtable2-operation = '009'.wtable2-cond_no = '$000000001'.wtable2-created_by = sy-uname.wtable2-creat_date = '20051022'.wtable2-cond_usage = 'A'.wtable2-table_no = '110'.wtable2-applicatio = 'V'.wtable2-cond_type = 'ZPR0'.wtable2-varkey = '13001001USD 000000000050068946'.wtable2-valid_from = '20051101'.wtable2-valid_to = '99991231'.

APPEND wtable2 TO table2.

wtable3-operation = '009'.wtable3-cond_no = '$000000001'.wtable3-cond_count = '01'.wtable3-applicatio = 'V'.wtable3-cond_type = 'ZPR0'.wtable3-scaletype = 'A'.wtable3-scalebasin = 'C'.wtable3-scale_qty = '1'.wtable3-cond_p_unt = '1'.wtable3-cond_unit = 'EA'.wtable3-calctypcon = 'C'.wtable3-cond_value = '454'.wtable3-condcurr = 'USD'.

APPEND wtable3 TO table3.

CALL FUNCTION 'BAPI_PRICES_CONDITIONS'* EXPORTING* PI_initialmode = 'X'

Page 10: Creating SAP Pricing Conditions Using BAPI

* PI_BLOCKNUMBER =TABLESti_bapicondct = table1ti_bapicondhd = table2ti_bapicondit = table3ti_bapicondqs = table4ti_bapicondvs = table5to_bapiret2 = table6to_bapiknumhs = table7to_mem_initial = table8EXCEPTIONSupdate_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.

READ TABLE table6 WITH KEY type = 'E' TRANSPORTING NO FIELDS.

IF sy-subrc = 0.

loop at table6 into ret.

write: / ret-type, ret-message, ret-id, RET-LOG_NO, RET-LOG_MSG_NO,RET-MESSAGE_V1, RET-MESSAGE_V2, RET-MESSAGE_V3, RET-MESSAGE_V4,RET-PARAMETER,RET-ROW,RET-FIELD.

endloop.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'*EXPORTING* WAIT =IMPORTINGreturn = ret.ENDIF.'.wtable3-cond_count = '01'.wtable3-applicatio = 'V'.wtable3-cond_type = 'ZPR0'.wtable3-scaletype = 'A'.wtable3-scalebasin = 'C'.wtable3-scale_qty = '1'.wtable3-cond_p_unt = '1'.wtable3-cond_unit = 'EA'.wtable3-calctypcon = 'C'.wtable3-cond_value = '454'.wtable3-condcurr = 'USD'.

APPEND wtable3 TO table3.

CALL FUNCTION 'BAPI_PRICES_CONDITIONS'* EXPORTING* PI_initialmode = 'X'* PI_BLOCKNUMBER =TABLESti_bapicondct = table1ti_bapicondhd = table2ti_bapicondit = table3

Page 11: Creating SAP Pricing Conditions Using BAPI

ti_bapicondqs = table4ti_bapicondvs = table5to_bapiret2 = table6to_bapiknumhs = table7to_mem_initial = table8EXCEPTIONSupdate_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.

READ TABLE table6 WITH KEY type = 'E' TRANSPORTING NO FIELDS.

IF sy-subrc = 0.

loop at table6 into ret.

write: / ret-type, ret-message, ret-id, RET-LOG_NO, RET-LOG_MSG_NO,RET-MESSAGE_V1, RET-MESSAGE_V2, RET-MESSAGE_V3, RET-MESSAGE_V4,RET-PARAMETER,RET-ROW,RET-FIELD.

endloop.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'*EXPORTING* WAIT =IMPORTINGreturn = ret.ENDIF. Also there are other options:- from LSMW the report RV14BTCI- batch input to transaction XK15- using FM modules RV_CONDITION* (e.g. _copy and _save)