2019 Sep 26 1:06 PM
Hi Team,
I am trying to update existing scales using RV_CONDITION_COPY but it is not updating it.
Can you please help me with that, i am able to create it newly.
METHOD upd_cond_record_wo_service.
*- Data
DATA: lt_cr TYPE STANDARD TABLE OF komv,
ls_cr TYPE komv,
lt_komg TYPE STANDARD TABLE OF komg,
ls_komg TYPE komg,
ls_komk TYPE komk,
ls_komp TYPE komp,
lt_copy_staffel TYPE STANDARD TABLE OF condscale,
ls_copy_staffel TYPE condscale,
lt_knumh TYPE STANDARD TABLE OF knumh_comp,
ls_knumh TYPE knumh_comp,
lt_komv_idoc TYPE STANDARD TABLE OF komv_idoc,
ls_komv_idoc TYPE komv_idoc.
SELECT SINGLE * FROM ekko INTO @DATA(ls_ekko) WHERE
ebeln = @iv_ebeln.
IF sy-subrc = 0.
SELECT SINGLE * FROM ekpo INTO @DATA(ls_ekpo) WHERE ebeln = @ls_ekko-ebeln AND
ebelp = @iv_ebelp.
IF sy-subrc = 0.
CALL FUNCTION 'ME_FILL_KOMG_PO'
EXPORTING
i_ekko = ls_ekko
i_ekpo = ls_ekpo
IMPORTING
e_komg = ls_komg.
*- Fill KOMK
MOVE-CORRESPONDING ls_komg TO ls_komk.
ls_komk-mandt = sy-mandt.
*- Fill KOMP
MOVE-CORRESPONDING ls_komg TO ls_komp.
ls_komp-kposn = 1.
*- Fill KOMV_IDOC
ls_komv_idoc-kznep = 'X'.
APPEND ls_komv_idoc TO lt_komv_idoc.
SELECT SINGLE datbi , datab , knumh FROM a016
WHERE kappl = 'M' AND
kschl = 'PB00' AND
evrtn = @iv_ebeln AND
evrtp = @iv_ebelp AND
datbi = @iv_datbi AND
datab = @iv_datab
INTO @DATA(ls_a016).
IF sy-subrc = 0.
****read PB00 record
SELECT SINGLE knumh FROM konp INTO @DATA(lv_knumh) WHERE knumh = @ls_a016-knumh AND
kschl = 'PB00'.
IF sy-subrc <> 0.
CLEAR lv_knumh.
ENDIF.
ENDIF.
****populate the addition records
LOOP AT it_konp ASSIGNING FIELD-SYMBOL(<lfs_konp>).
MOVE-CORRESPONDING <lfs_konp> TO ls_cr.
IF lv_knumh IS NOT INITIAL.
ls_cr-knumh = lv_knumh.
ELSE.
ls_cr-knumh = '$000000001'.
ENDIF.
ls_cr-loevm_ko = <lfs_konp>-loevm_ko.
IF <lfs_konp>-loevm_ko = abap_true.
ls_cr-updkz = abap_true.
ENDIF.
ls_cr-mandt = sy-mandt.
IF <lfs_konp>-konwa IS NOT INITIAL AND <lfs_konp>-konwa <> '%'.
ls_cr-waers = <lfs_konp>-konwa.
ELSEIF <lfs_konp>-konwa = '%'.
ls_cr-kbetr = ls_cr-kbetr * 10.
ENDIF.
*** Bellow are the important fields in KOMV for scales.
READ TABLE it_scales WITH KEY ebeln = iv_ebeln
ebelp = iv_ebelp
kschl = <lfs_konp>-kschl
delt = <lfs_konp>-loevm_ko
TRANSPORTING NO FIELDS.
IF sy-subrc = 0 .
* IF <lfs_konp>-kstbm IS NOT INITIAL.
ls_cr-kopos = 1.
ls_cr-kzbzg = 'C'.
ls_cr-konms = <lfs_konp>-meins.
ls_cr-stfkz = 'A'.
DATA(lv_counter) = 0.
LOOP AT it_scales ASSIGNING FIELD-SYMBOL(<lfs_scales>) WHERE ebeln = iv_ebeln AND
ebelp = iv_ebelp AND
kschl = <lfs_konp>-kschl AND
delt = <lfs_konp>-loevm_ko.
APPEND INITIAL LINE TO lt_copy_staffel ASSIGNING FIELD-SYMBOL(<lfs_scales1>).
IF sy-subrc = 0.
lv_counter = lv_counter + 1.
IF lv_knumh IS NOT INITIAL.
<lfs_scales1>-knumh = lv_knumh.
ELSE.
<lfs_scales1>-knumh = '$000000001'.
ENDIF.
<lfs_scales1>-klfn1 = lv_counter.
<lfs_scales1>-kopos = '01'.
<lfs_scales1>-kstbm = <lfs_scales>-kstbm.
<lfs_scales1>-kbetr = <lfs_scales>-kstbw. " scale price
<lfs_scales1>-kzbzg = 'C'.
* IF lv_knumh IS NOT INITIAL.
* <lfs_scales1>-updkz = 'X'.
* ENDIF.
* <lfs_scales1>-klfka = 'X'.
<lfs_scales1>-rv13akonwa = <lfs_konp>-konwa.
<lfs_scales1>-konpkmein = <lfs_konp>-meins.
<lfs_scales1>-konpkonms = <lfs_konp>-meins.
ENDIF.
ENDLOOP.
CLEAR: lv_counter.
ENDIF.
APPEND ls_cr TO lt_cr.
CLEAR: ls_cr.
ENDLOOP.
****update database
IF lv_knumh IS NOT INITIAL.
CALL FUNCTION 'RV_CONDITION_COPY'
EXPORTING
application = 'M'
condition_table = '016'
condition_type = 'PB00'
date_from = iv_datab
date_to = iv_datbi
enqueue = 'X'
i_komk = ls_komk
i_komp = ls_komp
key_fields = ls_komg
maintain_mode = 'B'
no_authority_check = 'X'
selection_date = iv_datab
* keep_old_records = 'X'
overlap_confirmed = 'X'
no_db_update = iv_testrun
TABLES
copy_records = lt_cr
copy_staffel = lt_copy_staffel
copy_recs_idoc = lt_komv_idoc
EXCEPTIONS
enqueue_on_record = 01
invalid_application = 02
invalid_condition_number = 03
invalid_condition_type = 04
no_authority_ekorg = 05
no_authority_kschl = 06
no_authority_vkorg = 07
no_selection = 08
table_not_valid = 09.
IF sy-subrc <> 0.
APPEND INITIAL LINE TO et_return ASSIGNING FIELD-SYMBOL(<lfs_return>).
<lfs_return>-type = sy-msgty.
<lfs_return>-id = sy-msgid.
<lfs_return>-number = sy-msgno.
<lfs_return>-message = sy-modno.
<lfs_return>-message_v1 = sy-msgv1.
<lfs_return>-message_v2 = sy-msgv2.
<lfs_return>-message_v3 = sy-msgv3.
<lfs_return>-message_v4 = sy-msgv4.
ENDIF.
ELSE.
CALL FUNCTION 'RV_CONDITION_COPY'
EXPORTING
application = 'M'
condition_table = '016'
condition_type = 'PB00'
date_from = iv_datab
date_to = iv_datbi
enqueue = 'X'
i_komk = ls_komk
i_komp = ls_komp
key_fields = ls_komg
maintain_mode = 'A'
no_authority_check = 'X'
overlap_confirmed = 'X'
no_db_update = iv_testrun
TABLES
copy_records = lt_cr
copy_staffel = lt_copy_staffel
copy_recs_idoc = lt_komv_idoc
EXCEPTIONS
enqueue_on_record = 01
invalid_application = 02
invalid_condition_number = 03
invalid_condition_type = 04
no_authority_ekorg = 05
no_authority_kschl = 06
no_authority_vkorg = 07
no_selection = 08
table_not_valid = 09.
IF sy-subrc <> 0.
APPEND INITIAL LINE TO et_return ASSIGNING <lfs_return>.
<lfs_return>-type = sy-msgty.
<lfs_return>-id = sy-msgid.
<lfs_return>-number = sy-msgno.
<lfs_return>-message = sy-modno.
<lfs_return>-message_v1 = sy-msgv1.
<lfs_return>-message_v2 = sy-msgv2.
<lfs_return>-message_v3 = sy-msgv3.
<lfs_return>-message_v4 = sy-msgv4.
ENDIF.
ENDIF.
IF iv_testrun = abap_false.
CALL FUNCTION 'RV_CONDITION_SAVE'.
CALL FUNCTION 'RV_CONDITION_RESET'.
COMMIT WORK AND WAIT.
IF sy-subrc <> 0.
APPEND INITIAL LINE TO et_return ASSIGNING <lfs_return>.
<lfs_return>-type = sy-msgty.
<lfs_return>-id = sy-msgid.
<lfs_return>-number = sy-msgno.
<lfs_return>-message = sy-modno.
<lfs_return>-message_v1 = sy-msgv1.
<lfs_return>-message_v2 = sy-msgv2.
<lfs_return>-message_v3 = sy-msgv3.
<lfs_return>-message_v4 = sy-msgv4.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
2019 Sep 26 2:56 PM
I would suggest not to use the function modules - RV_CONDITION_*, these FMs are Not released. we encountered the same problem but for all A* tables and created a dynamic BDC and report.
2019 Oct 10 2:54 PM
Hi
Maybe if you do a research following note 1149781 - API: system does not support updating scales, you could achieve it. As the note suggests, updating and deleting weren't supported. Check in in your release you have available function group COND_MNT_INTF.
I hope it helps you
Regards
Eduardo
2020 Jan 19 3:43 PM