Application Development 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: 

RV_CONDITION_COPY for updating scales

Janagar
Explorer
0 Kudos
1,078

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.

3 REPLIES 3

srikanthnalluri
Active Participant
0 Kudos
323

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.

eduardo_hinojosa
Active Contributor
0 Kudos
323

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

Janagar
Explorer
0 Kudos
323

i did an implicit enhancement to made it work...

Thanks..