zoukankan      html  css  js  c++  java
  • ABAP VA01增强,调整组件数量

    业务背景介绍:

      VA01创建时,输入成品物料,会自动展开其销售BOM(CS03中BOM用途为5),当下面存在BOM组件有组件报废率时,在销售订单中的数量,需要加上可能报废的数量。

    比如组件报废率为5(这里都是百分比的stpox-ausch),则该 销售订单行数量 =  销售订单行数量 + 销售订单行数量 * 0.05。

    经过测试,最终写了个隐式增强,打开SE38 -> FV45SFST_STRUKTUR_ANLEGEN_POSI,

    这里用的是浮点数算法,另外新建了个接口(接口使用固定点算法)用来计算上面的销售订单行数量。

    接口参考:

     代码参考:

      IF vbak-kunnr EQ '0005000000' .
        DATA:wa_topmat TYPE cstmat.
        DATA: lt_stpox  LIKE TABLE OF stpox.
    *    GET PARAMETER ID 'BOMPOSNR2' FIELD lv_bomposnr. "该物料在BOM的项目号
        READ TABLE xvbap INTO DATA(ls_xvbap) WITH KEY posnr = vbap-uepos."获取上层物料号
        IF sy-subrc EQ 0 AND ls_xvbap-pstyv EQ 'ZTAQ'.
          READ TABLE xvbep INTO DATA(ls_xvbep) WITH KEY posnr = vbap-uepos."获取上层物料号的数量
          CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' "展开BOM,获取组件报废率
            EXPORTING
              aufsw                 = 'X'
              capid                 = 'PP01' "checkb  "BOM应用
              datuv                 = sy-datum   "有效起始日
              mtnrv                 = ls_xvbap-matnr    "展开物料号
              postp                 = ' '    "项目类别(物料单)
              stlan                 = '5'    "BOM用途(销售BOM)
              stlal                 = '01' "可选的BOM
              werks                 = ls_xvbap-werks    "工厂
              emeng                 = ls_xvbep-wmeng    "数量  gsmng计划订单总数量   bdmng需求量
              mehrs                 = 'X'
            IMPORTING
              topmat                = wa_topmat
    *         DSTST                 =
            TABLES
              stb                   = lt_stpox
    *         MATCAT                =
            EXCEPTIONS
              alt_not_found         = 1
              call_invalid          = 2
              material_not_found    = 3
              missing_authorization = 4
              no_bom_found          = 5
              no_plant_data         = 6
              no_suitable_bom_found = 7
              conversion_error      = 8
              OTHERS                = 9.
    
          READ TABLE lt_stpox INTO DATA(ls_stpox) WITH KEY posnr = xstb-posnr
                                                           idnrk = vbap-matnr.
          IF sy-subrc EQ 0.
            IF ls_stpox-ausch NE 0.
    *          vbap-kwmeng = ls_stpox-mngko * ls_stpox-ausch.
    *          vbap-kwmeng = vbap-kwmeng / '100'.
    *          DATA: lv_formula TYPE string.
    *          lv_formula = |{ ls_stpox-mngko } * { ls_stpox-ausch } / 100|.
    *          CALL FUNCTION 'EVAL_FORMULA'
    *            EXPORTING
    *              formula          = lv_formula
    *            IMPORTING
    *              value            = vbap-kwmeng
    *            EXCEPTIONS
    *              division_by_zero = 1
    *              OTHERS           = 11.
    *          vbap-kwmeng = ls_stpox-mngko * vbap-kwmeng.
              CALL FUNCTION 'Z_RFC_SD_VA01'
                EXPORTING
                  p_mngko  = ls_stpox-mngko
                  p_ausch  = ls_stpox-ausch
                IMPORTING
                  p_kwmeng = xstb-MNGLG.
              xstb-MNGKO = xstb-MNGLG.
            ENDIF.
          ENDIF.
          CLEAR ls_xvbep.
    
        ENDIF.
      ENDIF.
    View Code

    背后延申:

      经过这里

     ,进入该form,最终会进入到出口MV45AFZZ(se38可进),我在

    userexit_move_field_to_vbap中试着改过vbap-kwmeng,结果更改后的数量不能再次在va01中手动调整,而且保存之后,数量也会变回未更改的状态,最终选择了上面的隐式增强。隐式增强也是执行到这里时,按F7会跳到一个function,再按F5会跳回到隐式增强处。

  • 相关阅读:
    PHP -----上传文件
    PHP----预定义数组
    PHP-------- 会话控制
    PHP------XML
    PHP----练习-----三级联动
    PHP-------ajax返回值 返回JSON 数据
    PHP----练习----光标离开文本框时变色
    使用ansible安装配置zabbix客户端
    svn+apache安装配置
    rsync+lsyncd实现实时同步
  • 原文地址:https://www.cnblogs.com/chaguoguo/p/15078161.html
Copyright © 2011-2022 走看看