Skip to Content

I have found many time these queries so decided to write a blog.

loop at table in whch you have PO no.s and you want to update price and do the following.

  if you want to change the deleivery date, account assignment data you can follow the same process and update it.

* Updating net price

      lw_item-po_item      = lw_output-ebelp.

      lw_item-net_price    = lw_output-netpr.

      APPEND lw_item TO lt_item.

      lw_itemx-po_item     = lw_output-ebelp.

      lw_itemx-po_itemx    = ‘X’.

      lw_itemx-net_price   = ‘X’.

      APPEND lw_itemx TO lt_itemx.

* call BAPI to change PO

      CALL FUNCTION ‘BAPI_PO_CHANGE’

        EXPORTING

          purchaseorder = lw_output-ebeln

        TABLES

          return        = lt_return

          poitem        = lt_item

          poitemx       = lt_itemx.

* The program doesn’t update the data. Therefore a commit work must be

* called.

      IF p_test EQ ‘X’.

        CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

      ELSE.

        CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’

          EXPORTING

            wait = ‘X’.

      ENDIF.

    ENDIF.

For changing net price of CONTRACT

           

   CALL FUNCTION ‘BAPI_CONTRACT_GETDETAIL’

        EXPORTING

          purchasingdocument = lw_contract-ebeln

          condition_data     = ‘X’

        TABLES

          item_cond_validity = lt_condition_v

          item_condition      = lt_condition.

  it is always safe to get the old details when updating contract as Price determination is done based on various condition.

no only keep the conditions you want

  DELETE lt_condition WHERE item_no   NE lw_contract-ebelp

                               OR cond_type NE your_value.

* Read the one record left in lt_condition

        CLEAR lw_condition.

        SORT lt_condition BY serial_id DESCENDING.

        CLEAR: lw_condition,lv_serial_id.

        LOOP AT lt_condition INTO lw_condition.

          IF sy-tabix EQ 1.

            lw_condition-cond_value  = lw_contract-nnetpr.

            lw_condition-cond_p_unt  = lw_contract-npeinh.

            MODIFY lt_condition FROM lw_condition

                        TRANSPORTING cond_value

                                     cond_p_unt

                               WHERE item_no EQ lw_condition-item_no.

            lv_serial_id  = lw_condition-serial_id.

          ELSE.

            DELETE lt_condition.

          ENDIF.

        ENDLOOP.

        lw_conditionx-item_no    = lw_contract-ebelp.

        lw_conditionx-serial_id  = lv_serial_id.

        lw_conditionx-cond_value = ‘X’.

        lw_conditionx-cond_p_unt = ‘X’.

        APPEND lw_conditionx TO lt_conditionx.

* If successful

        IF sy-subrc EQ 0.

          DELETE lt_condition_v WHERE serial_id NE lv_serial_id.

        ENDIF.

        LOOP AT lt_condition_v INTO lw_condition_v.   

          lw_condition_v-valid_from = lw_contract-kdatb.

          lw_condition_v-valid_to   = lw_contract-kdate.

          MODIFY lt_condition_v FROM lw_condition_v

                        TRANSPORTING valid_from

                                     valid_to

                               WHERE serial_id = lv_serial_id.

        ENDLOOP.

* Pass BAPI parameters than needs to be change

        lw_cond_validityx-item_no    = lw_contract-ebelp.

        lw_cond_validityx-valid_from = ‘X’.

        lw_cond_validityx-valid_to   = ‘X’.

        APPEND lw_cond_validityx TO lt_cond_validityx.

        CALL FUNCTION ‘BAPI_CONTRACT_CHANGE’

          EXPORTING

            purchasingdocument  = lw_contract-ebeln

          TABLES

            item_cond_validity  = lt_condition_v

            item_cond_validityx = lt_cond_validityx

            item_condition      = lt_condition

            item_conditionx     = lt_conditionx

            return              = lt_return.

      ENDIF.

* Rollback

      IF p_test EQ ‘X’.

        CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

      ELSE.

* Commit

        CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’

          EXPORTING

            wait = ‘X’.

      ENDIF.

    ENDIF. ” No error befor calling BAPI

Thanks,

Rahul

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

  1. Jelena Perfiljeva

    Thanks for sharing. It would be nice though if the code was formatted and visually separated from the text, otherwise it’s difficult to read. Actually you might want to post it as a code snippet rather than a blog.

    There seem to be some extra ENDIFs in the code, would be nice to clean it up before posting.

    Also, unless I’m missing someting, if the program runs in the test mode (p_test), then neither ROLLBACK nor COMMIT is needed. ROLLBACK may be needed if there is an error returned by BAPI. Just my guess though… Please don’t let this to discourage you from sharing.

    Thank you.

    (0) 

Leave a Reply