VK11条件价格创建/更改/删除

在项目上要求对条件价格进行批导,在网上查阅相关资料,并记录。

使用BAPI_PRICES_CONDITONS对条件价格进行创建,并不会去检查主键,会有各种各样的Bug产生;
在网上找了另外一个Bapi:RV_CONDITION_COPY,使用后发现可以自动对区间进行拆分,不会产生主键重复的Bug,以下是源代码

FUNCTION zfmsd012.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IS_INPUT) TYPE  ZSSD027
*"  EXPORTING
*"     REFERENCE(ES_OUTPUT) TYPE  ZSSD025_RET
*"----------------------------------------------------------------------

  DATA:
    ls_key_fields   TYPE komg,
    lt_copy_records TYPE TABLE OF komv,
    ls_copy_records TYPE komv,
    lt_knumh_comp   TYPE TABLE OF knumh_comp,
    ls_knumh_comp   TYPE knumh_comp.

*  SELECT SINGLE matnr,meins
*    FROM mara
*    INTO @DATA(ls_mara)
*    WHERE matnr = @is_input-matnr.

  CLEAR: ls_key_fields.
  ls_key_fields-vkorg = is_input-vkorg.  " 销售组织
  ls_key_fields-vtweg = is_input-vtweg.  " 分销渠道
  ls_key_fields-kunnr = is_input-kunnr.  " 客户
  ls_key_fields-matnr = is_input-matnr.  " 物料号

  CLEAR ls_copy_records.
  " condtion fields
  ls_copy_records-kopos = '01'.           " 条件的序列号
  ls_copy_records-kschl = is_input-kschl. " 条件类型
  ls_copy_records-kappl = 'V'.            " 应用程序
  ls_copy_records-waers = is_input-konwa. " 货币码
  ls_copy_records-kmein = is_input-meins. " 单位
  ls_copy_records-kbetr = is_input-netpr. " 金额
  ls_copy_records-kpein = '10000'.        " 条件定价单位
  ls_copy_records-stfkz = 'A'.            " 等级类型
  ls_copy_records-krech = 'C'.            " 条件的计算类型
  APPEND ls_copy_records TO lt_copy_records.

  CALL FUNCTION 'RV_CONDITION_RESET'.
  CALL FUNCTION 'RV_CONDITION_COPY'
    EXPORTING
      application                 = 'V'
      condition_table             = '005'
      condition_type              = is_input-kschl
      date_from                   = is_input-datab
      date_to                     = is_input-datbi
      key_fields                  = ls_key_fields
      maintain_mode               = 'A'              "A:创建  B:更新
      overlap_confirmed           = 'X'
      used_by_idoc                = 'X'
      keep_old_records            = 'X'
*      IMPORTING
*     e_komk                      = ls_komk
*     e_komp                      = ls_komp
*     new_record                  = lv_record
    TABLES
      copy_records                = lt_copy_records
*     copy_staffel                = lt_copy_staffel
    EXCEPTIONS
      enqueue_on_record           = 1
      invalid_application         = 2
      invalid_condition_number    = 3
      invalid_condition_type      = 4
      no_authority_ekorg          = 5
      no_authority_kschl          = 6
      no_authority_vkorg          = 7
      no_selection                = 8
      table_not_valid             = 9
      no_material_for_settlement  = 10
      no_unit_for_period_cond     = 11
      no_unit_reference_magnitude = 12
      invalid_condition_table     = 13
      OTHERS                      = 14.

  IF sy-subrc = 0.
    " Commit and Get Condition NO.
    CALL FUNCTION 'RV_CONDITION_SAVE'
      TABLES
        knumh_map = lt_knumh_comp.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    CALL FUNCTION 'RV_CONDITION_RESET'.

    READ TABLE lt_knumh_comp INTO ls_knumh_comp INDEX 1.
    IF sy-subrc = 0 AND ls_knumh_comp-knumh_new IS NOT INITIAL.
      es_output-msg = ls_knumh_comp-knumh_new.
      es_output-type    = 'S'.
    ELSE.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
              INTO es_output-msg.
      es_output-type    = 'E'.
    ENDIF.
  ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
            INTO es_output-msg.
    es_output-type    = 'E'.
  ENDIF.

ENDFUNCTION.
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值