Thursday, January 25, 2018

Changing Validity Period / Net Price of Contract through BAPI_CONTRACT_CHANGE

DATA:  it_header TYPE STANDARD TABLE OF bapimeoutheader,
       wa_header TYPE bapimeoutheader.

DATA:  it_item           TYPE STANDARD TABLE OF bapimeoutitem,
       wa_item           TYPE bapimeoutitem,
       wa_itemx          TYPE bapimeoutitemx.

DATA:  it_itemx  TYPE STANDARD TABLE OF bapimeoutitemx.

DATA:  wa_headerx TYPE bapimeoutheaderx.
DATA:  it_headerx TYPE STANDARD TABLE OF bapimeoutheaderx.


DATA:  it_return  TYPE STANDARD TABLE OF bapiret2,
       it_return1 TYPE STANDARD TABLE OF bapiret2,
       wa_return  TYPE bapiret2.


  data lt_item_out         type bapimeoutitem   occurs 0 with header line.
  data lt_itemx_out        type bapimeoutitemx  occurs 0 with header line.
  data l_t685a             type t685a.
  data  lt_account          type mepoaccounting  occurs 0 with header line.
  data lt_accountx         type mepoaccountingx occurs 0 with header line.
  data lt_account_out      type bapimeoutaccount occurs 0 with header line.
  data lt_accountx_out     type bapimeoutaccountx occurs 0 with header line.
  data l_conditionx          type bapimeoutconditionx.
  data l_item_condition      type bapimeoutcondition.
  data l_validity            type bapimeoutvalidity.
  data l_validityx           type bapimeoutvalidityx.
  data lt_delivery_address   type standard table of bapimeoutaddrdelivery with header line.
* fill condiiton data
  data lt_item_condition     type standard table of bapimeoutcondition.
  data tl_item_condition     type standard table of bapimeoutcondition.
  data lt_item_conditionx    type standard table of bapimeoutconditionx.
  data lt_tem_cond_validity  type standard table of bapimeoutvalidity.
  data lt_tem_cond_validityx type standard table of bapimeoutvalidityx.
  data tl_item_conditionx    type standard table of bapimeoutconditionx.
  data tl_tem_cond_validity  type standard table of bapimeoutvalidity.
  data tl_tem_cond_validityx type standard table of bapimeoutvalidityx.
* adjust price conditions
  field-symbols <t_condition>  type bapimeoutcondition.
  field-symbols <t_conditionx> type bapimeoutconditionx.
  field-symbols <t_item_out>   type bapimeoutitem .
  field-symbols <t_validity>   type bapimeoutvalidity.
  field-symbols <t_text>       type bapiekpotx .
  field-symbols <t_account>    type mepoaccounting.
  field-symbols <t_accountx>   type mepoaccountingx.


    IF p_create EQ 'X'. " Creating Contract 
      CALL FUNCTION 'BAPI_CONTRACT_CREATE'
        EXPORTING
          header  = wa_header
          headerx = wa_headerx
        TABLES
          return  = it_return
          item    = it_item
          itemx   = it_itemx.


      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = wa_return.
      PERFORM display_messages.
    ENDIF.

    IF p_change EQ 'X'. " Updating Contract

    tl_item_condition[]     = lt_item_condition[].
    tl_item_conditionx[]    = lt_item_conditionx[].
    tl_tem_cond_validity[]  = lt_tem_cond_validity[].
    tl_tem_cond_validityx[] = lt_tem_cond_validityx[].


    call function 'BAPI_CONTRACT_GETDETAIL'
      exporting
        purchasingdocument = wa_header-number
        condition_data     = 'X'
      tables
        item_condition     = lt_item_condition
        item_cond_validity = lt_tem_cond_validity.

* adjust price conditions
    loop at lt_item_condition assigning <t_condition> where calctypcon = 'C'.
* check condition type
      if l_t685a-kschl ne <t_condition>-cond_type.
        call function 'SD_COND_T685_SELECT'
          exporting
            cts_error = space
            cts_kappl = 'M'
            cts_kschl = <t_condition>-cond_type
            cts_kvewe = 'A'
          importing
            cts_t685a = l_t685a.
      endif.
* price only
      check l_t685a-koaid = 'B'.
      read table lt_item_out assigning <t_item_out> with key item_no = <t_condition>-item_no binary search.
      if sy-subrc is initial.
        move <t_item_out>-net_price to <t_condition>-cond_value.
      endif.
      append <t_condition> to tl_item_condition.
* fill change data
      l_conditionx-item_no = <t_condition>-item_no.
      l_conditionx-serial_id = <t_condition>-serial_id.
      l_conditionx-cond_count = <t_condition>-cond_count.
      l_conditionx-cond_value = 'X'.
      l_conditionx-currency = 'X'.
      append l_conditionx to tl_item_conditionx.
      read table lt_tem_cond_validity assigning <t_validity> with key item_no = <t_condition>-item_no
                                                            serial_id = <t_condition>-serial_id.
      if sy-subrc is initial.

          <t_validity>-valid_from = lv_sdate. "validity From Date  You have to declare some where
          <t_validity>-valid_to = lv_date.      "validity To Date       You have to declare some where
   append <t_validity>  to tl_tem_cond_validity.
      endif.
    endloop.

    call function 'BAPI_CONTRACT_CHANGE'
      exporting
        purchasingdocument  = wa_header-number
        header              = wa_header
        headerx             = wa_headerx
*        vendor_address      = l_vendor_ad
*        testrun             = i_testrun
*      importing
*        exp_header          = ls_header_out
      tables
        return              = it_return
        item                = it_item
        itemx               = it_itemx
        account             = lt_account_out
        accountx            = lt_accountx_out
*        delivery_address    = lt_delivery_address
        item_cond_validity  = tl_tem_cond_validity
        item_condition      = tl_item_condition
        item_conditionx     = tl_item_conditionx
        item_cond_validityx = tl_tem_cond_validityx.

  endif.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = wa_return.

      PERFORM display_messages.


No comments:

Post a Comment