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

BAPI_PRICES_CONDITIONS problems

duma_msongelwa
Explorer
0 Likes
5,736

Am creating new prices for conditions 'ZC01' using BAPI_PRICES_CONDITIONS.......I build my data on the ff structures : TI_BAPICONDCT, TI_BAPICONDHD,TI_BAPICONDIT,TI_BAPICONDQS, TI_BAPICONDVS.

The bapi returns message type s,ID CND_EXCHANGE, msg no 003 and message Record KNUMH = 0002252141, VARNUMH = 00000000000000000000000000000000: the data is consistent, UPDKZ = 'I'

How do I populate these fields TI_BAPICONDHD-VARKEY, TI_BAPICONDCT-VARKEY.

Please assist

1 ACCEPTED SOLUTION
Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

METHOD pricing_condition.

  • Data Declaration

DATA: ls_messages TYPE bapiret2,

  • ls_conditions TYPE zem_lc_discsummary,

lv_count TYPE kopos,

ls_bapicondct TYPE bapicondct,

ls_bapicondhd TYPE bapicondhd,

ls_bapicondit TYPE bapicondit,

lt_bapicondct TYPE STANDARD TABLE OF bapicondct,

lt_bapicondhd TYPE STANDARD TABLE OF bapicondhd,

lt_bapicondit TYPE STANDARD TABLE OF bapicondit,

lt_bapicondqs TYPE STANDARD TABLE OF bapicondqs,

lt_bapicondvs TYPE STANDARD TABLE OF bapicondvs,

lt_bapiknumhs TYPE STANDARD TABLE OF bapiknumhs,

lt_mem_initial TYPE STANDARD TABLE OF cnd_mem_initial,

ls_cond_head TYPE konh,

lv_message TYPE string,

ls_cond_item TYPE konp,

  • iv_opr TYPE msgfn,

ls_a956 TYPE a956,

lv_vbeln TYPE vbeln,

lv_from_date TYPE sy-datum.

CLEAR: es_message, et_messages.

lv_count = '00'.

  • Calculate start date

lv_from_date0(4) = sy-datum0(4).

lv_from_date+4(2) = 01.

lv_from_date+6(2) = 01.

    • Set the operation mode

  • IF iv_opr = 'I'.

  • iv_opr = gv_opr_create.

  • ELSEIF iv_opr = 'U'.

  • iv_opr = gv_opr_update.

  • ELSEIF iv_opr = 'D'.

  • iv_opr = gv_opr_delete.

  • ENDIF.

  • Pick the condition records for update/delete

IF iv_opr NE gv_opr_create.

SELECT SINGLE *

FROM konh

INTO ls_cond_head

WHERE knumh = iv_knumh.

IF sy-subrc NE 0.

EXIT.

ENDIF.

SELECT SINGLE *

FROM konp

INTO ls_cond_item

WHERE knumh = iv_knumh

AND kopos = 1.

IF sy-subrc NE 0.

EXIT.

ENDIF.

ENDIF.

  • BAPI Structure for Condition Tables

ls_bapicondct-operation = iv_opr.

ls_bapicondct-cond_usage = gv_condusg_a.

ls_bapicondct-table_no = iv_table.

ls_bapicondct-applicatio = gv_appl.

ls_bapicondct-cond_type = iv_condtype.

ls_bapicondct-varkey = iv_varkey.

IF iv_opr = gv_opr_create. "

ls_bapicondct-valid_from = lv_from_date. " what are these dates?

ls_bapicondct-valid_to = iv_to_date.

ls_bapicondct-cond_no = '$000000001' .

ELSE.

ls_bapicondct-valid_from = ls_cond_head-datab.

ls_bapicondct-valid_to = ls_cond_head-datbi.

ls_bapicondct-cond_no = iv_knumh .

ENDIF.

APPEND ls_bapicondct TO lt_bapicondct.

        • BAPI Structure of KONH

ls_bapicondhd-operation = iv_opr.

ls_bapicondhd-created_by = sy-uname.

ls_bapicondhd-creat_date = sy-datum.

ls_bapicondhd-cond_usage = gv_condusg_a.

ls_bapicondhd-table_no = iv_table.

ls_bapicondhd-applicatio = gv_appl.

ls_bapicondhd-cond_type = iv_condtype.

ls_bapicondhd-varkey = iv_varkey.

IF iv_opr = gv_opr_create.

ls_bapicondhd-cond_no = `$000000001`.

ls_bapicondhd-valid_from = lv_from_date. " what are these dates?

ls_bapicondhd-valid_to = iv_to_date.

ELSE.

ls_bapicondhd-cond_no = iv_knumh.

ls_bapicondhd-valid_from = ls_cond_head-datab.

ls_bapicondhd-valid_to = ls_cond_head-datbi.

ENDIF.

APPEND ls_bapicondhd TO lt_bapicondhd.

      • BAPI Structure of KONP TABLE

  • LOOP AT it_conditions INTO ls_conditions. " YOU MIGHT REQUIRED TO READ THIS TABLE BY COND NO

lv_count = lv_count + 1.

ls_bapicondit-operation = iv_opr.

IF iv_opr = gv_opr_create.

ls_bapicondit-cond_no = `$000000001`.

ls_bapicondit-cond_count = lv_count.

ELSE.

ls_bapicondit-cond_no = iv_knumh.

ls_bapicondit-cond_count = ls_cond_item-zaehk_ind.

ENDIF.

ls_bapicondit-applicatio = gv_appl.

ls_bapicondit-cond_type = iv_condtype.

ls_bapicondit-scaletype = gv_scale_type.

ls_bapicondit-calctypcon = gv_calc_type.

ls_bapicondit-conditidx = '1'.

ls_bapicondit-cond_value = iv_discval.

ls_bapicondit-condcurr = '%'. "ls_vbap-waerk.

APPEND ls_bapicondit TO lt_bapicondit.

  • ENDLOOP.

      • BAPI for pricing Condition Records

CALL FUNCTION `BAPI_PRICES_CONDITIONS`

TABLES

ti_bapicondct = lt_bapicondct

ti_bapicondhd = lt_bapicondhd

ti_bapicondit = lt_bapicondit

ti_bapicondqs = lt_bapicondqs

ti_bapicondvs = lt_bapicondvs

to_bapiret2 = et_messages

to_bapiknumhs = lt_bapiknumhs

to_mem_initial = lt_mem_initial

EXCEPTIONS

update_error = 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 INTO lv_message.

es_message-type = zcl_wda_em_lc_discounts=>gv_msgtyp_e.

es_message-message = lv_message.

ev_failed = abap_true.

CLEAR: lv_message.

ELSE.

CALL FUNCTION `BAPI_TRANSACTION_COMMIT`.

ENDIF.

IF ev_failed = abap_true.

EXIT.

ENDIF.

  • Get the condition record number

READ TABLE et_messages INTO ls_messages

WITH KEY id = 'CND_EXCHANGE'

number ='003'.

IF sy-subrc EQ 0.

ev_knumh = ls_messages-message_v1.

ENDIF.

  • check the deletion flag in KONP record.

IF iv_opr = gv_opr_delete.

CLEAR: ls_cond_item.

SELECT SINGLE *

FROM konp

INTO ls_cond_item

WHERE knumh EQ iv_knumh

AND kopos EQ 1.

DELETE konp FROM ls_cond_item.

DELETE konh FROM ls_cond_head.

IF sy-subrc EQ 0 AND ls_cond_item-loevm_ko EQ 'X'.

  • lv_vbeln = ls_cond_head-vakey+0(10).

  • lv_posnr = ls_cond_head-vakey+10(6).

lv_vbeln = ls_cond_head-vakey.

SELECT SINGLE *

FROM a956

INTO ls_a956

WHERE kappl EQ ls_cond_head-kappl

AND kschl EQ ls_cond_head-kschl

AND zz_sow_number EQ lv_vbeln

AND kfrst EQ space

AND datbi EQ ls_cond_head-datbi

AND knumh EQ iv_knumh.

IF sy-subrc EQ 0.

DELETE a956 FROM ls_a956.

ENDIF.

ENDIF.

ENDIF.

CLEAR: ls_bapicondct, lt_bapicondct[], ls_bapicondhd, lt_bapicondhd[],lv_count,lv_vbeln,

ls_bapicondit, lt_bapicondit[], ls_cond_head,ls_cond_item, ls_a956.

ENDMETHOD.

15 REPLIES 15
Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,733

METHOD pricing_condition.

  • Data Declaration

DATA: ls_messages TYPE bapiret2,

  • ls_conditions TYPE zem_lc_discsummary,

lv_count TYPE kopos,

ls_bapicondct TYPE bapicondct,

ls_bapicondhd TYPE bapicondhd,

ls_bapicondit TYPE bapicondit,

lt_bapicondct TYPE STANDARD TABLE OF bapicondct,

lt_bapicondhd TYPE STANDARD TABLE OF bapicondhd,

lt_bapicondit TYPE STANDARD TABLE OF bapicondit,

lt_bapicondqs TYPE STANDARD TABLE OF bapicondqs,

lt_bapicondvs TYPE STANDARD TABLE OF bapicondvs,

lt_bapiknumhs TYPE STANDARD TABLE OF bapiknumhs,

lt_mem_initial TYPE STANDARD TABLE OF cnd_mem_initial,

ls_cond_head TYPE konh,

lv_message TYPE string,

ls_cond_item TYPE konp,

  • iv_opr TYPE msgfn,

ls_a956 TYPE a956,

lv_vbeln TYPE vbeln,

lv_from_date TYPE sy-datum.

CLEAR: es_message, et_messages.

lv_count = '00'.

  • Calculate start date

lv_from_date0(4) = sy-datum0(4).

lv_from_date+4(2) = 01.

lv_from_date+6(2) = 01.

    • Set the operation mode

  • IF iv_opr = 'I'.

  • iv_opr = gv_opr_create.

  • ELSEIF iv_opr = 'U'.

  • iv_opr = gv_opr_update.

  • ELSEIF iv_opr = 'D'.

  • iv_opr = gv_opr_delete.

  • ENDIF.

  • Pick the condition records for update/delete

IF iv_opr NE gv_opr_create.

SELECT SINGLE *

FROM konh

INTO ls_cond_head

WHERE knumh = iv_knumh.

IF sy-subrc NE 0.

EXIT.

ENDIF.

SELECT SINGLE *

FROM konp

INTO ls_cond_item

WHERE knumh = iv_knumh

AND kopos = 1.

IF sy-subrc NE 0.

EXIT.

ENDIF.

ENDIF.

  • BAPI Structure for Condition Tables

ls_bapicondct-operation = iv_opr.

ls_bapicondct-cond_usage = gv_condusg_a.

ls_bapicondct-table_no = iv_table.

ls_bapicondct-applicatio = gv_appl.

ls_bapicondct-cond_type = iv_condtype.

ls_bapicondct-varkey = iv_varkey.

IF iv_opr = gv_opr_create. "

ls_bapicondct-valid_from = lv_from_date. " what are these dates?

ls_bapicondct-valid_to = iv_to_date.

ls_bapicondct-cond_no = '$000000001' .

ELSE.

ls_bapicondct-valid_from = ls_cond_head-datab.

ls_bapicondct-valid_to = ls_cond_head-datbi.

ls_bapicondct-cond_no = iv_knumh .

ENDIF.

APPEND ls_bapicondct TO lt_bapicondct.

        • BAPI Structure of KONH

ls_bapicondhd-operation = iv_opr.

ls_bapicondhd-created_by = sy-uname.

ls_bapicondhd-creat_date = sy-datum.

ls_bapicondhd-cond_usage = gv_condusg_a.

ls_bapicondhd-table_no = iv_table.

ls_bapicondhd-applicatio = gv_appl.

ls_bapicondhd-cond_type = iv_condtype.

ls_bapicondhd-varkey = iv_varkey.

IF iv_opr = gv_opr_create.

ls_bapicondhd-cond_no = `$000000001`.

ls_bapicondhd-valid_from = lv_from_date. " what are these dates?

ls_bapicondhd-valid_to = iv_to_date.

ELSE.

ls_bapicondhd-cond_no = iv_knumh.

ls_bapicondhd-valid_from = ls_cond_head-datab.

ls_bapicondhd-valid_to = ls_cond_head-datbi.

ENDIF.

APPEND ls_bapicondhd TO lt_bapicondhd.

      • BAPI Structure of KONP TABLE

  • LOOP AT it_conditions INTO ls_conditions. " YOU MIGHT REQUIRED TO READ THIS TABLE BY COND NO

lv_count = lv_count + 1.

ls_bapicondit-operation = iv_opr.

IF iv_opr = gv_opr_create.

ls_bapicondit-cond_no = `$000000001`.

ls_bapicondit-cond_count = lv_count.

ELSE.

ls_bapicondit-cond_no = iv_knumh.

ls_bapicondit-cond_count = ls_cond_item-zaehk_ind.

ENDIF.

ls_bapicondit-applicatio = gv_appl.

ls_bapicondit-cond_type = iv_condtype.

ls_bapicondit-scaletype = gv_scale_type.

ls_bapicondit-calctypcon = gv_calc_type.

ls_bapicondit-conditidx = '1'.

ls_bapicondit-cond_value = iv_discval.

ls_bapicondit-condcurr = '%'. "ls_vbap-waerk.

APPEND ls_bapicondit TO lt_bapicondit.

  • ENDLOOP.

      • BAPI for pricing Condition Records

CALL FUNCTION `BAPI_PRICES_CONDITIONS`

TABLES

ti_bapicondct = lt_bapicondct

ti_bapicondhd = lt_bapicondhd

ti_bapicondit = lt_bapicondit

ti_bapicondqs = lt_bapicondqs

ti_bapicondvs = lt_bapicondvs

to_bapiret2 = et_messages

to_bapiknumhs = lt_bapiknumhs

to_mem_initial = lt_mem_initial

EXCEPTIONS

update_error = 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 INTO lv_message.

es_message-type = zcl_wda_em_lc_discounts=>gv_msgtyp_e.

es_message-message = lv_message.

ev_failed = abap_true.

CLEAR: lv_message.

ELSE.

CALL FUNCTION `BAPI_TRANSACTION_COMMIT`.

ENDIF.

IF ev_failed = abap_true.

EXIT.

ENDIF.

  • Get the condition record number

READ TABLE et_messages INTO ls_messages

WITH KEY id = 'CND_EXCHANGE'

number ='003'.

IF sy-subrc EQ 0.

ev_knumh = ls_messages-message_v1.

ENDIF.

  • check the deletion flag in KONP record.

IF iv_opr = gv_opr_delete.

CLEAR: ls_cond_item.

SELECT SINGLE *

FROM konp

INTO ls_cond_item

WHERE knumh EQ iv_knumh

AND kopos EQ 1.

DELETE konp FROM ls_cond_item.

DELETE konh FROM ls_cond_head.

IF sy-subrc EQ 0 AND ls_cond_item-loevm_ko EQ 'X'.

  • lv_vbeln = ls_cond_head-vakey+0(10).

  • lv_posnr = ls_cond_head-vakey+10(6).

lv_vbeln = ls_cond_head-vakey.

SELECT SINGLE *

FROM a956

INTO ls_a956

WHERE kappl EQ ls_cond_head-kappl

AND kschl EQ ls_cond_head-kschl

AND zz_sow_number EQ lv_vbeln

AND kfrst EQ space

AND datbi EQ ls_cond_head-datbi

AND knumh EQ iv_knumh.

IF sy-subrc EQ 0.

DELETE a956 FROM ls_a956.

ENDIF.

ENDIF.

ENDIF.

CLEAR: ls_bapicondct, lt_bapicondct[], ls_bapicondhd, lt_bapicondhd[],lv_count,lv_vbeln,

ls_bapicondit, lt_bapicondit[], ls_cond_head,ls_cond_item, ls_a956.

ENDMETHOD.

Read only

0 Likes
3,732

I have done all of this but my question is how do I populate varkey.. This is how I am doing it at this point and I think its wrong.

Which fields constitutes VARKEY.

concatenate SY-MANDT 'V' item904-KSCHL item904-vkorg item904-vtweg item904-kunnr item904-matnr item904-databi into v_varkey.

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

check the table KONH,KONV,KONA, KONP tables. you can easily pass the parameters that are required.

  • BAPI Structure for Condition Tables

ls_bapicondct-operation = iv_opr. " 004, 009, ... ARE THE ENTRIES

ls_bapicondct-cond_usage = gv_condusg_a. " use A

ls_bapicondct-table_no = iv_table. " this is the conditon table

ls_bapicondct-applicatio = gv_appl. " ue "A"

ls_bapicondct-cond_type = iv_condtype. " your condition type

ls_bapicondct-varkey = iv_varkey. " your variable key

IF iv_opr = gv_opr_create. "

ls_bapicondct-valid_from = lv_from_date. " dates

ls_bapicondct-valid_to = iv_to_date.

ls_bapicondct-cond_no = '$000000001' .

ELSE.

ls_bapicondct-valid_from = ls_cond_head-datab.

ls_bapicondct-valid_to = ls_cond_head-datbi.

ls_bapicondct-cond_no = iv_knumh .

ENDIF.

APPEND ls_bapicondct TO lt_bapicondct.

        • BAPI Structure of KONH

ls_bapicondhd-operation = iv_opr.

ls_bapicondhd-created_by = sy-uname.

ls_bapicondhd-creat_date = sy-datum.

ls_bapicondhd-cond_usage = gv_condusg_a.

ls_bapicondhd-table_no = iv_table.

ls_bapicondhd-applicatio = gv_appl.

ls_bapicondhd-cond_type = iv_condtype.

ls_bapicondhd-varkey = iv_varkey.

IF iv_opr = gv_opr_create.

ls_bapicondhd-cond_no = `$000000001`.

ls_bapicondhd-valid_from = lv_from_date. " what are these dates?

ls_bapicondhd-valid_to = iv_to_date.

ELSE.

ls_bapicondhd-cond_no = iv_knumh.

ls_bapicondhd-valid_from = ls_cond_head-datab.

ls_bapicondhd-valid_to = ls_cond_head-datbi.

ENDIF.

APPEND ls_bapicondhd TO lt_bapicondhd.

      • BAPI Structure of KONP TABLE

  • LOOP AT it_conditions INTO ls_conditions. " YOU MIGHT REQUIRED TO READ THIS TABLE BY COND NO

lv_count = lv_count + 1.

ls_bapicondit-operation = iv_opr.

IF iv_opr = gv_opr_create.

ls_bapicondit-cond_no = `$000000001`.

ls_bapicondit-cond_count = lv_count.

ELSE.

ls_bapicondit-cond_no = iv_knumh.

ls_bapicondit-cond_count = ls_cond_item-zaehk_ind.

ENDIF.

ls_bapicondit-applicatio = gv_appl.

ls_bapicondit-cond_type = iv_condtype.

ls_bapicondit-scaletype = gv_scale_type.

ls_bapicondit-calctypcon = gv_calc_type.

ls_bapicondit-conditidx = '1'.

ls_bapicondit-cond_value = iv_discval.

ls_bapicondit-condcurr = '%'. "ls_vbap-waerk.

APPEND ls_bapicondit TO lt_bapicondit.

  • ENDLOOP.

      • BAPI for pricing Condition Records

CALL FUNCTION `BAPI_PRICES_CONDITIONS`

TABLES

ti_bapicondct = lt_bapicondct

ti_bapicondhd = lt_bapicondhd

ti_bapicondit = lt_bapicondit

ti_bapicondqs = lt_bapicondqs

ti_bapicondvs = lt_bapicondvs

to_bapiret2 = et_messages

to_bapiknumhs = lt_bapiknumhs

to_mem_initial = lt_mem_initial

EXCEPTIONS

update_error = 1

OTHERS = 2.

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

Create a PRICING CONDITION @ VK11 transaction...

you can check the CONDITION TABLE 904 after creating the condition record for the VARKEY.

VARKEY is completely based on the configuration.

so before you create a condition record programatically, you need to know what should be the VARKEY.

Read only

0 Likes
3,732

Am still having the same error. I passed the varkey according to the key fields of Table A904. Which is the table I am creating a condition for. I don't want to do a BDC.

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

is this is the message you have received?

The bapi returns message type s,ID CND_EXCHANGE, msg no 003 and message Record KNUMH = 0002252141, VARNUMH = 00000000000000000000000000000000: the data is consistent, UPDKZ = 'I'

then you have successfully created the condition record number.

check my code, you cna actually get the condition record number to exporting parameter

Edited by: ssm on Aug 1, 2011 5:21 PM

Read only

0 Likes
3,732

It does create the record number but when I go to VK13 the condition and the new date with the new prices is not created. It appears on table KONP though.

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

if it is in the KONP, then you can see it in VK13. try with different options

Edited by: ssm on Aug 1, 2011 6:30 PM

Read only

0 Likes
3,732

Example of the different options? On VK13 i choose ZCO1 and the table value for A904.....Which options are you talking about?

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

@ vk11 , you must have the input fields.. try with different dates or different values...

or ask the functional guy to show atleast a record in vk13 tcode

Read only

0 Likes
3,732

I did a BDC and it works like a charm

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

Ofcourse, BDC looks good initially...

i had bad experiences with that, so i always opt standard BAPI or FM's.

if you have to create some other condition type, then you need to do the BDC again as the condition type screen completely depends on the configuration. your code is not reusable, i still suggest to make use of this FM, that will be helpful and can reuse.

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

i think he also has similar issue like yours

Read only

0 Likes
3,732

Let me create a FM that calls the BAPI and see what happenes. Thanx very much

Read only

Shahid
Product and Topic Expert
Product and Topic Expert
0 Likes
3,732

or you can use the BAPI in some class... it worked for me