ABAP-修改客户阶梯价

举报
Mr_blank 发表于 2025/09/19 15:40:07 2025/09/19
【摘要】 告别忙碌低效!本文提供示例,帮助您用更少时间完成更多高质量工作,重获工作与生活平衡。
*&---------------------------------------------------------------------*
*&      Form  frm_modify_price
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_modify_price
  USING
    VALUE(uv_kappl)     TYPE kappl
    VALUE(uv_kschl)     TYPE kschl
    VALUE(uv_reswk)     TYPE reswk
    VALUE(uv_werks)     TYPE werks_d
    VALUE(uv_matnr)     TYPE matnr
    VALUE(uv_kfrst)     TYPE kfrst
    VALUE(uv_datbi)     TYPE kodatbi
    VALUE(uv_datab)     TYPE kodatab
    VALUE(uv_peinh)     TYPE peinh
    VALUE(uv_meins)     TYPE meins
    VALUE(uv_kbetr)     TYPE kbetr
    ut_a901             TYPE STANDARD TABLE
  CHANGING
    cv_flg           TYPE bapi_mtype
    cv_mesg          TYPE bapi_msg.

  DATA:
    lt_bapicondct  TYPE STANDARD TABLE OF bapicondct,  "
    lt_bapicondhd  TYPE STANDARD TABLE OF bapicondhd,  "
    lt_bapicondit  TYPE STANDARD TABLE OF bapicondit,
    lt_bapicondqs  TYPE STANDARD TABLE OF bapicondqs,
    lt_bapicondvs  TYPE STANDARD TABLE OF bapicondvs,
    lt_bapiret2    TYPE STANDARD TABLE OF bapiret2,
    lt_bapiknumhs  TYPE STANDARD TABLE OF bapiknumhs,
    lt_mem_initial TYPE STANDARD TABLE OF cnd_mem_initial.

  DATA:
    lt_a901        TYPE STANDARD TABLE OF a901,
    lv_varkey(100) TYPE c.

  lt_a901 = ut_a901.
  SELECT *
    FROM konp
     FOR ALL ENTRIES IN @lt_a901
   WHERE knumh = @lt_a901-knumh
     AND kopos = 1
    INTO TABLE @DATA(lt_konp).
  SORT lt_konp BY knumh.

  lv_varkey = |{ uv_reswk }{ uv_werks }{ uv_matnr }|.

  LOOP AT lt_a901 ASSIGNING FIELD-SYMBOL(<fs_a901>).
    IF uv_datab <= <fs_a901>-datab.

      APPEND VALUE #(
                      table_no   = '901'     "条件表A901
                      applicatio = 'M'
                      cond_usage = 'A'       "条件表用途 ‘  A定价
                      cond_type  = uv_kschl  "定价条件
                      operation  = '004'     "修改
                      varkey     = lv_varkey
                      valid_from = uv_datab
                      valid_to   = uv_datbi
                      cond_no    = <fs_a901>-knumh
                    ) TO lt_bapicondct.

      APPEND VALUE #(
                      operation  = '004'     "修改
                      cond_no    = <fs_a901>-knumh
                      created_by = sy-uname
                      creat_date = sy-datum
                      cond_usage = 'A'
                      table_no   = '901'
                      applicatio = 'M'
                      cond_type  = uv_kschl
                      varkey     = lv_varkey
                      valid_from = uv_datab
                      valid_to   = uv_datbi
                    ) TO lt_bapicondhd.

      APPEND VALUE #(
                      operation  = '004'     "修改
                      cond_no    = <fs_a901>-knumh
                      cond_count = '01'      "条件序列号
                      applicatio = 'M'
                      cond_type  =  uv_kschl "条件类型
                      scaletype  = 'A'       "STFKZ
                      scalebasin = ''        "KZBZG 'C'. 存在数量等级
                      scale_qty  = '1'       "KSTBM
                      cond_p_unt = uv_peinh  "KPEIN
                      cond_unit  = uv_meins  "KMEIN
                      calctypcon = 'C'       "KRECH
                      cond_value = uv_kbetr
                      condcurr   = 'CNY'
                      exclusion  = 'X'
                    ) TO lt_bapicondit.

    ELSEIF uv_datab > <fs_a901>-datab AND uv_datab <= <fs_a901>-datbi.
      READ TABLE lt_konp INTO DATA(ls_konp) BINARY SEARCH
           WITH KEY knumh = <fs_a901>-knumh.
*     修改
      APPEND VALUE #(
                      table_no   = '901'     "条件表A901
                      applicatio = 'M'
                      cond_usage = 'A'       "条件表用途 ‘  A定价
                      cond_type  = uv_kschl  "定价条件
                      operation  = '004'     "修改
                      varkey     = lv_varkey
                      valid_from = <fs_a901>-datab
                      valid_to   = uv_datab - 1
                      cond_no    = <fs_a901>-knumh
                    ) TO lt_bapicondct.

      APPEND VALUE #(
                      operation  = '004'     "修改
                      cond_no    = <fs_a901>-knumh
                      created_by = sy-uname
                      creat_date = sy-datum
                      cond_usage = 'A'
                      table_no   = '901'
                      applicatio = 'M'
                      cond_type  = uv_kschl
                      varkey     = lv_varkey
                      valid_from = <fs_a901>-datab
                      valid_to   = uv_datab - 1
                    ) TO lt_bapicondhd.

      APPEND VALUE #(
                      operation  = '004'     "修改
                      cond_no    = <fs_a901>-knumh
                      cond_count = '01'      "条件序列号
                      applicatio = 'M'
                      cond_type  =  uv_kschl "条件类型
                      scaletype  = 'A'       "STFKZ
                      scalebasin = ''        "KZBZG 'C'. 存在数量等级
                      scale_qty  = '1'       "KSTBM
                      cond_p_unt = ls_konp-kpein  "KPEIN
                      cond_unit  = ls_konp-kmein  "KMEIN
                      calctypcon = 'C'       "KRECH
                      cond_value = ls_konp-kbetr
                      condcurr   = 'CNY'
                      exclusion  = 'X'
                    ) TO lt_bapicondit.

*     新建
      APPEND VALUE #(
                      table_no   = '901'     "条件表A901
                      applicatio = 'M'
                      cond_usage = 'A'       "条件表用途 ‘  A定价
                      cond_type  = uv_kschl  "定价条件
                      operation  = '009'
                      varkey     = lv_varkey
                      valid_from = uv_datab
                      valid_to   = uv_datbi
                      cond_no    = '$000000001'
                    ) TO lt_bapicondct.

      APPEND VALUE #(
                      operation  = '009'
                      cond_no    = '$000000001'
                      created_by = sy-uname
                      creat_date = sy-datum
                      cond_usage = 'A'
                      table_no   = '901'
                      applicatio = 'M'
                      cond_type  = uv_kschl
                      varkey     = lv_varkey
                      valid_from = uv_datab
                      valid_to   = uv_datbi
                    ) TO lt_bapicondhd.

      APPEND VALUE #(
                      operation  = '009'
                      cond_no    = '$000000001'
                      cond_count = '01'      "条件序列号
                      applicatio = 'M'
                      cond_type  =  uv_kschl "条件类型
                      scaletype  = 'A'       "STFKZ
                      scalebasin = ''        "KZBZG 'C'. 存在数量等级
                      scale_qty  = '1'       "KSTBM
                      cond_p_unt = uv_peinh  "KPEIN
                      cond_unit  = uv_meins  "KMEIN
                      calctypcon = 'C'       "KRECH
                      cond_value = uv_kbetr
                      condcurr   = 'CNY'
                      exclusion  = 'X'
                    ) TO lt_bapicondit.

    ENDIF.

    CLEAR: ls_konp.
  ENDLOOP.

  CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
*   EXPORTING
*     PI_INITIALMODE             = ' '
*     PI_BLOCKNUMBER             =
*     PI_PHYSICAL_DELETION       =
    TABLES
      ti_bapicondct  = lt_bapicondct
      ti_bapicondhd  = lt_bapicondhd
      ti_bapicondit  = lt_bapicondit
      ti_bapicondqs  = lt_bapicondqs
      ti_bapicondvs  = lt_bapicondvs
      to_bapiret2    = lt_bapiret2
      to_bapiknumhs  = lt_bapiknumhs
      to_mem_initial = lt_mem_initial
    EXCEPTIONS
      update_error   = 1
      OTHERS         = 2.
  IF sy-subrc <> 0.
    cv_flg = 'E'.

    MESSAGE ID sy-msgid
          TYPE 'E'
        NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          INTO cv_mesg.
    RETURN.
  ENDIF.

  LOOP AT lt_bapiret2 ASSIGNING FIELD-SYMBOL(<fs_return>)
    WHERE type CA 'AEX'.
    cv_mesg = <fs_return>-message && '!' && cv_mesg .
  ENDLOOP.
  IF sy-subrc = 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    cv_flg = 'E'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    cv_flg = 'S'.
    cv_mesg = '价格条件处理成功!'.

  ENDIF.

ENDFORM.
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。