VF04添加自定义字段

22 篇文章 0 订阅
VF04添加自定义字段
一、业务场景和目的
  1. VF04 公司间的单据没有价格和单位,所以通过二代增强加了两个字段,效果如图所示:

    在这里插入图片描述

    在这里插入图片描述

二、增强过程
  1. SE11 给结构 VKDFIF 加上所要的字段,直接加或者使用接口append都可以。
    在这里插入图片描述

    在这里插入图片描述

  2. 通过查询得到SMOD: V60P0001 点击组件 EXIT_SAPLV60P_008 里面的 ZXV6PU08 。

    在这里插入图片描述

  3. 写入代码:

    *&---------------------------------------------------------------------*
    *&  包含  ZXV6PU08
    *&---------------------------------------------------------------------*
    
    DATA(LT_VKDFIF)  =  C_VKDFIF[] .
    
    " 交货类型是 ZN* 的取 EKPO 汇总金额
    SELECT
       A~VBELN ,
       B~VGBEL ,
       B~VGPOS ,
       B~LFIMG
    FROM  @LT_VKDFIF  AS  A
     INNER  JOIN  LIPS  AS  B  ON  A~VBELN  =  B~VBELN
    WHERE  LFIMG  <>  0
    INTO  TABLE  @DATA(LT_LIPS1).
    SORT  LT_LIPS1  BY  VBELN .
    
    IF  LT_LIPS1[]  IS  NOT  INITIAL .
       SELECT
         EKKO~EBELN ,
         EBELP ,
         NETWR ,
         MENGE ,
         WAERS
       FROM  EKKO
       INNER  JOIN  EKPO  ON  EKKO~EBELN  =  EKPO~EBELN
       FOR  ALL  ENTRIES  IN  @LT_LIPS1
       WHERE  EKKO~EBELN  =  @LT_LIPS1-VGBEL
       INTO  TABLE  @DATA(LT_EKPO).
       SORT  LT_EKPO  BY  EBELN  EBELP .
    ENDIF .
    
    " 交货类型不是 ZN* 的取 VBAP 汇总金额
    SELECT
       A~VBELN ,
       B~POSNR ,
       B~VGBEL ,
       B~VGPOS ,
       B~LFIMG ,
       C~NETWR ,
       C~KZWI5 ,
       C~KWMENG ,
       D~WAERK
    FROM  @LT_VKDFIF  AS  A
     INNER  JOIN  LIPS  AS  B  ON  A~VBELN  =  B~VBELN
     INNER  JOIN  VBAP  AS  C  ON  B~VGBEL  =  C~VBELN  AND  B~VGPOS  =  C~POSNR
     INNER  JOIN  VBAK  AS  D  ON  C~VBELN  =  D~VBELN
    WHERE  LFIMG  <>  0
    INTO  TABLE  @DATA(LT_VBAP).
    SORT  LT_VBAP  BY  VBELN .
    
    
    LOOP  AT  C_VKDFIF  ASSIGNING  FIELD-SYMBOL(<VKDIF>).
       IF  <VKDIF> - FKTYP  =  'A' . " 订单相关
         <VKDIF> - ZNETWR  =  <VKDIF> - NETWR .
         <VKDIF> - ZWAERK  =  <VKDIF> - WAERK .
    
       ELSEIF  <VKDIF> - FKTYP  =  'I'  OR  <VKDIF> - FKTYP  =  'L' . " 交货相关,公司间开票
         IF  CL_ABAP_MATCHER => MATCHES( PATTERN  =  '^ZN.*$'  TEXT  =  <VKDIF>-VBART ) = ABAP_TRUE .
           " 采购
           LOOP  AT  LT_LIPS1  ASSIGNING  FIELD-SYMBOL(<FS_LIPS1>)  WHERE  VBELN  =  <VKDIF> - VBELN .
             READ  TABLE  LT_EKPO  ASSIGNING  FIELD-SYMBOL(<FS_EKPO>)
             WITH  KEY  EBELN  =  <FS_LIPS1> - VGBEL
             EBELP  =  <FS_LIPS1> - VGPOS
             BINARY  SEARCH .
             IF  SY - SUBRC  =  0  AND  <FS_EKPO> - MENGE  <>  0 .
               <VKDIF> - ZNETWR  =  <VKDIF> - ZNETWR  +  <FS_EKPO> - NETWR  /  <FS_EKPO> - MENGE  *  <FS_LIPS1> - LFIMG .
               <VKDIF> - ZWAERK  =  <FS_EKPO> - WAERS .
             ENDIF .
           ENDLOOP .
         ELSE .
           " 销售
           " 系统票类型为: ZIV/ZIG/ZIV9/ZIG9 :
           IF  <VKDIF> - FKART  =  'ZIV'
           OR  <VKDIF> - FKART  =  'ZIG'
           OR  <VKDIF> - FKART  =  'ZIV9'
           OR  <VKDIF> - FKART  =  'ZIG9' .
             LOOP  AT  LT_VBAP  ASSIGNING  FIELD-SYMBOL(<FS_VBAP>)  WHERE  VBELN  =  <VKDIF> - VBELN .
               IF  SY - SUBRC  =  0  AND  <FS_VBAP> - KWMENG  <>  0 .
                 <VKDIF> - ZNETWR  =  <VKDIF> - ZNETWR  +  <FS_VBAP> - KZWI5  /  <FS_VBAP> - KWMENG  *  <FS_VBAP> - LFIMG .
               ENDIF .
             ENDLOOP .
             IF  SY - SUBRC  =  0 .
               " 最后把货币加上
               <VKDIF> - ZWAERK  =  <FS_VBAP> - WAERK .
             ENDIF .
           ELSE .
             LOOP  AT  LT_VBAP  ASSIGNING  <FS_VBAP>  WHERE  VBELN  =  <VKDIF> - VBELN .
               IF  SY - SUBRC  =  0  AND  <FS_VBAP> - KWMENG  <>  0 .
                 <VKDIF> - ZNETWR  =  <VKDIF> - ZNETWR  +  <FS_VBAP> - NETWR  /  <FS_VBAP> - KWMENG  *  <FS_VBAP> - LFIMG .
               ENDIF .
             ENDLOOP .
             IF  SY - SUBRC  =  0 .
               " 最后把货币加上
               <VKDIF> - ZWAERK  =  <FS_VBAP> - WAERK .
             ENDIF .
           ENDIF .
         ENDIF .
    
         " 系统票类型  : ZG2/ZIG/ZIG1/  ZIV9/ZIVS/ZRE/ZS1 :金额 *-1 按交货单号汇总
         IF  <VKDIF> - FKART  =  'ZG2'
         OR  <VKDIF> - FKART  =  'ZIG'
         OR  <VKDIF> - FKART  =  'ZIG1'
         OR  <VKDIF> - FKART  =  'ZIV9'
         OR  <VKDIF> - FKART  =  'ZIVS'
         OR  <VKDIF> - FKART  =  'ZRE'
         OR  <VKDIF> - FKART  =  'ZS1' .
           <VKDIF> - ZNETWR  =  - 1  *  <VKDIF> - ZNETWR .
         ENDIF .
       ENDIF .
    ENDLOOP .
    
  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值