Conteúdo

Alterando as Conditions usando BAPI_SALESORDER_CHANGE

Muitas pessoas tem dificuldades na hora de alterar o valor da condition ao executar a BAPI_SALESORDER_CHANGE.

A solução é muito simples! Basta preencher os campos COND_ST_NO e COND_COUNT.

Importante: Isto só deve ser feito quando for uma alteração no valor da condition!!! Se for inclusão ou deleção não precisa. Bastando informar apenas o item, tipo, valor e D (Deleção) ou I (inclusão).
* Primeiro você precisa ir na VBAK e retornar o valor do campo KNUMV
  SELECT SINGLE knumv
    FROM vbak
    INTO v_knumv
   WHERE vbeln EQ v_vbeln.

  IF sy-subrc IS INITIAL.

* Depois é só retornar o valor dos campos STUNR e ZAEHK
    SELECT SINGLE stunr zaehk
      FROM konv
      INTO (v_cond_st_no,v_cond_count)
     WHERE knumv EQ v_knumv 
       AND kposn EQ w_conditions-itm_number
       AND kschl EQ w_conditions-cond_type.

    IF sy-subrc IS INITIAL.

* Valores
      w_conditions_in-itm_number = '00010'.
      w_conditions_in-cond_st_no = v_cond_st_no.
      w_conditions_in-cond_count = v_cond_count.
      w_conditions_in-cond_type  = 'ZZZZ'.
      w_conditions_in-cond_value = '1000'.
      APPEND w_conditions_in TO t_conditions_in.
      CLEAR  w_conditions_in.

* Campos a serem alterados
      w_conditions_inx-updateflag = 'U'.
      w_conditions_inx-itm_number = w_conditions_in-itm_number.
      w_conditions_inx-cond_st_no = w_conditions_in-cond_st_no.
      w_conditions_inx-cond_count = w_conditions_in-cond_count.
      w_conditions_inx-cond_type  = w_conditions_in-cond_type.
      w_conditions_inx-cond_value = 'X'.
      APPEND w_conditions_inx TO t_conditions_inx.
      CLEAR  w_conditions_inx.

    ENDIF.

  ENDIF.