【SAP Abap】记录一次增强开发之销售交货开票VF04增强

1、增强需求

(1)销售订单交货后,在用 VF04 进行单个或合并开票时,携带客户简称(KNA1-SORTL)及交货增强信息中的报关发票号(ZTLIKP-ZBLNO)到财务凭证的项目文本字段(MSEG-SGTXT)中。
(2)携带销售凭证上的客户参考(VBKD-BSTKD)到财务凭证的增强字段合同号(MSEG-ZZFI001)中。

2、增强查找

2.1、查找增强点

执行TCODE:SE38,执行自定义程序:Z_FIND_ENHANCEMENT
在这里插入图片描述
在这里插入图片描述
通过单击,进入SMOD查看具体增强说明。

2.2、查看增强

通过 SMOD 查看增强组件:
(1)SDVFX004,用户出口:总分类帐行(传输到财务会计)
在这里插入图片描述
双击查看具体函数结构
在这里插入图片描述
输入参数及结构:
在这里插入图片描述
输出参数:
在这里插入图片描述
实测,对凭证行项目起作用,每个凭证有多少(H贷方)行项目就会被调用多少次。

(2)SDVFX008,用户退出:转移结构SD-FI的处理
在这里插入图片描述
在这里插入图片描述
入参结构:
在这里插入图片描述
表参数:
在这里插入图片描述
实测,对凭证行项目起作用,合并开票时,有多少个交货单就会被调用多少次。

3、增强实现

3.1、创建增强项目

执行TCODE:CMOD,创建项目: ZEH001
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2、添加增强

在这里插入图片描述
说明:一个增强只能出现在一个增强项目中,不能重复。

此时,增强组件尚未实施,显示未激活红灯图标
在这里插入图片描述
双击功能出口,函数名,进入函数体
在这里插入图片描述
双击INCLUDE,提示该程序系统已预留,不能创建该程序。

3.3、实现增强

点击 显示对象列表 按钮,展开左侧包含目录,找到 ZXVVFU04
在这里插入图片描述
在对应INCLUDE程序名上,右击,创建
在这里插入图片描述
创建对象
在这里插入图片描述
保存激活,返回,显示已实施绿勾。
在这里插入图片描述
同理,实施第二个功能出口函数。
具体增强代码如下:

*&---------------------------------------------------------------------*
*& 包含               ZXVVFU04
*&---------------------------------------------------------------------*
BREAK XLEVON.

***** 以下代码仅对凭证 H贷方行项目起作用 *****
* 说明:此处的代码逻辑,也可以放到 ZXVVFU08 里实现,对应 XACCIT[] 中 KUNNR 为空的行
* 1、获取凭证抬头:客户简称 报关发票号
SELECT SINGLE SORTL
  INTO @DATA(LV_SORTL)
  FROM KNA1
  WHERE KUNNR = @VBRK-KUNRG.

SELECT SINGLE ZBLNO
  INTO @DATA(LV_ZBLNO)
  FROM ZTLIKP
  WHERE VBELN =  @XVBRP-VGBEL.

CONCATENATE LV_SORTL LV_ZBLNO INTO DATA(LV_TEXT) SEPARATED BY SPACE.
XACCIT-SGTXT = LV_TEXT.

" 2、获取销售订单上的合同号
SELECT SINGLE BSTKD
INTO @DATA(LV_BSTKD)
FROM VBKD
WHERE VBELN = @XVBRP-AUBEL AND POSNR = ''.
XACCIT-ZZFI001 = LV_BSTKD.
***** 以上代码仅对凭证 H贷方行项目起作用 *****
*&---------------------------------------------------------------------*
*& 包含               ZXVVFU08
*&---------------------------------------------------------------------*
BREAK XLEVON.

***** 以下代码更新S借方行项目 *****
* 说明:去掉 where KUNNR IS NOT INITIAL 则对凭证借贷方行项目都执行,此处结合 ZXVVFU04 进行
LOOP AT XACCIT[] ASSIGNING FIELD-SYMBOL(<FS_XACCIT>) where KUNNR IS NOT INITIAL.  " 对应凭证 S借方
  READ TABLE CVBRP INTO DATA(LS_CVBRP) WITH KEY VBELN = DOC_NUMBER.
  IF SY-SUBRC = 0.
    " 1、获取凭证抬头:客户简称 报关发票号
    SELECT SINGLE SORTL
      INTO @DATA(LV_SORTL)
      FROM KNA1
      WHERE KUNNR = @CVBRK-KUNRG.

    SELECT SINGLE ZBLNO
      INTO @DATA(LV_ZBLNO)
      FROM ZTLIKP
      WHERE VBELN = @LS_CVBRP-VGBEL.
    CONCATENATE LV_SORTL LV_ZBLNO INTO DATA(LV_TEXT) SEPARATED BY SPACE.
    <FS_XACCIT>-SGTXT = LV_TEXT.

    " 2、获取销售订单上的合同号
    SELECT SINGLE BSTKD
    INTO @DATA(LV_BSTKD)
    FROM VBKD
    WHERE VBELN = @LS_CVBRP-AUBEL AND POSNR = ''.
    <FS_XACCIT>-ZZFI001 = LV_BSTKD.
  ENDIF.
ENDLOOP.
***** 以上代码更新S借方行项目 *****

3.4、激活项目

在这里插入图片描述
在这里插入图片描述
此时,增强组件已实施,显示已激活绿灯图标。

4、注意事项

原来X得实施的代码,存在bug,因为当合并多单开票时,该出口会被调用多次,XACCIT是每一单对应的凭证信息,但其中的CVBRP为对应合并的多单开票信息。故不能以CVBRP为循环依据。

*&---------------------------------------------------------------------*
*& 包含               ZXVVFU08
*&---------------------------------------------------------------------*
DATA: LV_TEXT TYPE STRING.

SELECT SINGLE SORTL
  INTO @DATA(LV_SORTL)
  FROM KNA1
  WHERE KUNNR = @CVBRK-KUNRG.	" 合并开票时,会取到最后一单的

SELECT SINGLE ZBLNO
  INTO @DATA(LV_ZBLNO)
  FROM ZTLIKP
  WHERE VBELN = @CVBRP-VGBEL.	" 合并开票时,会取到最后一单的

CLEAR LV_TEXT.
CONCATENATE LV_SORTL LV_ZBLNO INTO LV_TEXT SEPARATED BY SPACE.
"项目文本
LOOP AT XACCIT[] INTO DATA(LS_ACCIT).
  LS_ACCIT-SGTXT = LV_TEXT.
  MODIFY XACCIT[] FROM LS_ACCIT TRANSPORTING SGTXT.
ENDLOOP.

LOOP AT CVBRP[] INTO LY_VBRP.		" 合并开票时,每单凭证都会循环多次,且会取到最后一单的对应数据
  "合同号替代
  SELECT SINGLE
    BSTKD
  INTO @DATA(LV_BSTKD)
  FROM VBKD
  WHERE VBELN = @LY_VBRP-AUBEL
    AND POSNR = ''.
  IF LV_BSTKD IS NOT INITIAL.
    LOOP AT XACCIT INTO LS_ACCIT WHERE KUNNR IS NOT INITIAL .
      LS_ACCIT-ZZFI001 = LV_BSTKD.
      MODIFY XACCIT FROM LS_ACCIT.
      CLEAR LS_ACCIT.
    ENDLOOP.
  ENDIF.
ENDLOOP.
SAP ABAP开发是一种用于开发企业管理系统的编程语言。它是一种后端开发语言,主要用于处理企业资源计划(ERP)系统中的数据和业务逻辑。ABAP语言具有丰富的功能和强大的数据处理能力,可以用于开发各种功能模块,如ALV报表、SMARTFORM智能表单、BDC、屏幕开发流程和wda技术等。通过学习ABAP语言,你可以掌握开发流程,并能够将其应用于实际工作中。\[1\] 作者THUNDER王是一位热爱财税和SAP ABAP编程的博主,他在江西师范大学会计学专业就读,并担任汉硕云(广东)科技有限公司的ABAP开发顾问。他对SAP企业管理系统、SAP ABAP开发数据库有深入的研究。\[2\] 在ABAP开发中,数据类型和数据字典是非常重要的概念。数据类型定义了变量的类型和长度,而数据字典则用于管理和维护数据库中的数据对象,如表和视图。通过学习ABAP基础语法和数据类型与数据字典的相关知识,你可以更好地理解和应用ABAP开发中的数据处理。\[3\] #### 引用[.reference_title] - *1* *2* *3* [SAP ABAP基础通关百宝书【从入门到精通】目录](https://blog.csdn.net/weixin_59480481/article/details/127914444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值