RV_CONDITION_COPY VK11创建、更新销售价格条件

创建和更新

MODE A创建时:如果输入的日期和已有的条件日期重叠了,会修改已有条件的有效截止日期。所以创建的时候可以写截止到9999

如果没有维护物料的 销售组织会弹出个 stop的 message,可以在掉函数之前手动检查下

 

function zfm_vk11.

*"----------------------------------------------------------------------

*"*"本地接口:

*"  IMPORTING

*"     VALUE(APP_DATE) TYPE  ZE_APP_DATE OPTIONAL

*"     VALUE(APP_TIME) TYPE  ZE_APP_TIME OPTIONAL

*"     VALUE(APP_NAME) TYPE  ZE_APP_NAME OPTIONAL

*"     VALUE(APP_RESULT) TYPE  ZE_APP_RESULT OPTIONAL

*"     VALUE(APP_TEXT) TYPE  ZE_APP_TEXT OPTIONAL

*"     VALUE(APP_QTNUM) TYPE  ZE_APP_QTNUM

*"  EXPORTING

*"     VALUE(RTYPE) TYPE  BAPI_MTYPE

*"     VALUE(RTMSG) TYPE  BAPI_MSG

*"----------------------------------------------------------------------

 

  data:

    ls_ztsd_oa_qth type ztsd_oa_qth,

    lt_ztsd_oa_qtt like table of ztsd_oa_qtt with header line.

 

*bapi

  data:

    lv_mode.

  data: ls_komv like komv.

  data: lt_komv type standard table of komv.

  data: ls_komg like komg.

  data: ls_komp like komp.

 

  select *

    into table lt_ztsd_oa_qtt

    from ztsd_oa_qtt

    where app_qtnum = app_qtnum.

  if sy-subrc ne 0..

    rtype = 'E'.

    rtmsg = 'oa审批单号找不到'.

    return.

  endif.

 

  read table lt_ztsd_oa_qtt index 1.

  select single *

    into ls_ztsd_oa_qth

    from ztsd_oa_qth

    where zqtnum = lt_ztsd_oa_qtt-zqtnum.

 

 

*创建价格

  loop at lt_ztsd_oa_qtt into lt_ztsd_oa_qtt.

*判断物料有没有扩充销售组织

      select single *

        into @data(ls_mvke)

        from mvke

        where matnr = @lt_ztsd_oa_qtt-matnr and vkorg = @ls_tvkwz-vkorg.

      if sy-subrc ne 0.

        rtype = 'E'.

        rtmsg = '物料' && lt_ztsd_oa_qtt-matnr && '没有维护销售组织'  && ls_tvkwz-vkorg.

        return.

      endif.

 

    select single *

      into @data(ls_a305)

      from a305

    where kappl = 'V'  and kschl = 'ZPR1'

                       and vkorg = '5000'

                       and vtweg = @ls_ztsd_oa_qth-vtweg

                       and kunnr = @lt_ztsd_oa_qtt-kunnr

                       and matnr = @lt_ztsd_oa_qtt-matnr

                       and datbi = @ls_ztsd_oa_qth-datbi

                       and datab = @ls_ztsd_oa_qth-datab.

    if sy-subrc = 0.

      lv_mode = 'B'.

    else.

      lv_mode = 'A'.

    endif.

 

    clear:ls_komv,lt_komv,lt_komv[].

    ls_komv-kappl = 'V'.                               "应用 看表

    ls_komv-kschl = 'ZPR1'.                            "类型 看表

    ls_komv-waers = ls_ztsd_oa_qth-konwa.                       "货币

    ls_komv-kmein = lt_ztsd_oa_qtt-meins.                              "单位

    ls_komv-kpein = lt_ztsd_oa_qtt-kpein.                                 "定价单位

    ls_komv-kbetr = lt_ztsd_oa_qtt-price1. "售价

    append ls_komv to lt_komv.

 

    clear ls_komg.

    ls_komg-vkorg = '5000'.                "销售组织

    ls_komg-vtweg = ls_ztsd_oa_qth-vtweg.                     "分销渠道

    ls_komg-kunnr = lt_ztsd_oa_qtt-kunnr.                     "客户

    ls_komg-matnr = lt_ztsd_oa_qtt-matnr.              "产品

 

    call function 'RV_CONDITION_COPY'

      exporting

        application                 = 'V' "(V 销售)

        condition_table             = '305'

        condition_type              = 'ZPR1'

        i_komp                      = ls_komp

        key_fields                  = ls_komg

        date_from                   = ls_ztsd_oa_qth-datab

        date_to                     = ls_ztsd_oa_qth-datbi

        enqueue                     = 'X'                             " lock entry 锁定VK11/VK12

        overlap_confirmed           = 'X'                             " 直接覆盖,跨以前的期间不会弹出界面

        maintain_mode               = lv_mode                            " A= create, B= change, C= display, D= create

      tables

        copy_records                = lt_komv

      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.

      call function 'RV_CONDITION_SAVE'.

      call function 'RV_CONDITION_RESET'.

      commit work and wait.

      rtype = 'S'.

      rtmsg = '成功'.

 

*更新日志

      loop at lt_ztsd_oa_qtt.

        lt_ztsd_oa_qtt-app_date = app_date.

        lt_ztsd_oa_qtt-app_time = app_time.

        lt_ztsd_oa_qtt-app_name = app_name.

        lt_ztsd_oa_qtt-app_result = app_result.

        lt_ztsd_oa_qtt-app_text = app_text.

        lt_ztsd_oa_qtt-app_qtnum = app_qtnum.

        modify lt_ztsd_oa_qtt.

 

        update ztsd_qup set kbstat = 'Z3'

        where zqtnum = lt_ztsd_oa_qtt-zqtnum and zqtitem = lt_ztsd_oa_qtt-zqtitem.

      endloop.

      modify ztsd_oa_qtt from table lt_ztsd_oa_qtt.

 

      commit work and wait.

 

    else.

      rtype = 'E'.

      message id sy-msgid

        type sy-msgty

        number sy-msgno

        with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 into rtmsg.

    endif.

  endloop.

 

 

 

 

endfunction.

 

 

 

删除用bdc

*bdc

  data:

    lv_msg(255),

    lv_rtype,

    lv_rtmsg(255).

 

  free:gt_bdcdata,gt_messtab.

 

*输入条件

  perform bdc_dynnr using 'SAPMV13A' '0100'.

  perform bdc_field using 'RV13A-KSCHL' 'ZPR1'.

  perform bdc_field using 'BDC_OKCODE' '/00'.

 

*查询

  perform bdc_dynnr using 'RV13A305' '1000'.

  perform bdc_field using 'F001' '5000'.

  perform bdc_field using 'F002' gs_quk-vtweg.

  perform bdc_field using 'F003' gt_qup-kunnr.

  perform bdc_field using 'F004-LOW' gt_qup-matnr.

  perform bdc_field using 'SEL_DATE' gs_quk-datab.

  perform bdc_field using 'BDC_OKCODE' '=ONLI'.

 

*选中删除

  perform bdc_dynnr using 'SAPMV13A' '1305'.

  perform bdc_field using 'RV130-SELKZ(01)' 'X'.

  perform bdc_field using 'BDC_OKCODE' '=ENTF'.

 

*保存

  perform bdc_dynnr using 'SAPMV13A' '1305'.

  perform bdc_field using 'BDC_OKCODE' '=SICH'.

 

  call transaction 'VK12' using gt_bdcdata

        messages into gt_messtab

        mode 'N'.

  loop at gt_messtab.

    if gt_messtab-msgtyp = 'S' .

      lv_rtype = 'S'.

    endif.

    if gt_messtab-msgtyp = 'E' .

      lv_rtype = 'E'.

    endif.

    call function 'MESSAGE_TEXT_BUILD'

      exporting

        msgid               = gt_messtab-msgid

        msgnr               = gt_messtab-msgnr

        msgv1               = gt_messtab-msgv1

        msgv2               = gt_messtab-msgv2

        msgv3               = gt_messtab-msgv3

        msgv4               = gt_messtab-msgv4

      importing

        message_text_output = lv_msg.

    concatenate lv_rtmsg lv_msg into lv_rtmsg.

    message lv_rtmsg type lv_rtype.

  endloop.

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值