BAPI_ACC_DOCUMENT_POST扩展字段

1、需求

BAPI_ACC_DOCUMENT_POST函数中没有“凭证行项目付款原因代码”字段的参数,
现需要将此字段传入BAPI中
在这里插入图片描述
2、实现方法

2.1、程序实现

创建结构,包含需要传入的字段
在这里插入图片描述

DATA: ls_extension2 TYPE bapiparex.
DATA: lt_extension2 LIKE TABLE OF ls_extension2.
DATA: ls_extension_field TYPE zds_acc_document_extension2.

CLEAR lt_extension2[].

CLEAR ls_extension_field.
ls_extension_field-posnr = ‘0000000001’. " 凭证行项目
ls_extension_field-rstgr = ‘1ZZ’. " 原因代码

CLEAR ls_extension2.
ls_extension2-structure = ‘ZDS_ACC_DOCUMENT_EXTENSION2’.
ls_extension2-valuepart1 = ls_extension_field.

2.2、增强实现

BADI增强:ACC_DOCUMENT
在这里插入图片描述
在这里插入图片描述
METHOD if_ex_acc_document~change .
DATA: wa_extension TYPE bapiparex,
ext_value(960) TYPE c,
wa_accit TYPE accit,
l_ref TYPE REF TO data.

FIELD-SYMBOLS: <l_struc> TYPE ANY,
<l_field> TYPE ANY.

SORT c_extension2 BY structure.

LOOP AT c_extension2 INTO wa_extension.
AT NEW structure.
CREATE DATA l_ref TYPE (wa_extension-structure).
ASSIGN l_ref->* TO <l_struc>.
ENDAT.
CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2
wa_extension-valuepart3 wa_extension-valuepart4
INTO ext_value.
MOVE ext_value TO <l_struc>.
ASSIGN COMPONENT ‘POSNR’ OF STRUCTURE <l_struc> TO <l_field>.
READ TABLE c_accit WITH KEY posnr = <l_field>
INTO wa_accit.
IF sy-subrc IS INITIAL.
MOVE-CORRESPONDING <l_struc> TO wa_accit.
MODIFY c_accit FROM wa_accit INDEX sy-tabix.
ENDIF.
ENDLOOP.

ENDMETHOD.
在这里插入图片描述

在这里插入图片描述
METHOD if_ex_acc_document~change.


  • Example to move fields from BAPI parameter EXTENSION2 to structure *
  • ACCIT (accounting document line items). *
  • The dictionary structure (content for EXTENSION2-STRUCTURE) must *
  • contain field POSNR, (TYPE POSNR_ACC) to indentify the correct line *
  • item of the internal table ACCIT. *

  • 本地变量
    DATA: wa_extension TYPE bapiparex,
    ext_value(960) TYPE c,
    wa_accit TYPE accit,
    wa_accit_temp TYPE accit,
    l_ref TYPE REF TO data.

    DATA: lt_ddic_field TYPE STANDARD TABLE OF dfies,
    ls_ddic_field TYPE dfies.

  • 指针变量
    FIELD-SYMBOLS: <l_struc> TYPE any,
    <l_field> TYPE any.

    FIELD-SYMBOLS: <fv_value_extend> TYPE any,
    <fv_value_orginal> TYPE any.

  • 逻辑控制
    DATA l_type TYPE c.

    PERFORM frm_get_type IN PROGRAM zzljyfien_0001 IF FOUND
    USING ‘ZZLJYFIEN_0001’
    CHANGING l_type.
    CHECK l_type = ‘S’.

  • 取增强结构字段
    CALL FUNCTION ‘DDIF_FIELDINFO_GET’
    EXPORTING
    tabname = ‘ZSJYFI_0003’
    TABLES
    dfies_tab = lt_ddic_field.

    SORT c_extension2 BY structure.

    LOOP AT c_extension2 INTO wa_extension.
    AT NEW structure.
    CREATE DATA l_ref TYPE (wa_extension-structure).
    ASSIGN l_ref->* TO <l_struc>.
    ENDAT.

    CHECK wa_extension-structure EQ 'ZSJYFI_0003'.
    
  •  CONCATENATE WA_EXTENSION-VALUEPART1 WA_EXTENSION-VALUEPART2
    
  •  WA_EXTENSION-VALUEPART3 WA_EXTENSION-VALUEPART4
    
  •  INTO EXT_VALUE.
    

*beign add by yangq on 2018-10-23
ext_value+0(240) = wa_extension-valuepart1.
ext_value+240(240) = wa_extension-valuepart2.
ext_value+480(240) = wa_extension-valuepart3.
ext_value+720(240) = wa_extension-valuepart4.
*end add by yangq on 2018-10-23

  MOVE ext_value TO <l_struc>.
  ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.
  READ TABLE c_accit WITH KEY posnr = <l_field>
  INTO wa_accit.
  IF sy-subrc IS INITIAL.
    LOOP AT lt_ddic_field INTO ls_ddic_field.
  •    assign component ls_comp-name of structure <l_struc> to <fv_value_extend>.
        ASSIGN COMPONENT ls_ddic_field-fieldname OF STRUCTURE <l_struc> TO <fv_value_extend>.
        IF sy-subrc = 0.
          ASSIGN COMPONENT ls_ddic_field-fieldname OF STRUCTURE wa_accit TO <fv_value_orginal>.
          IF sy-subrc = 0.
            IF <fv_value_extend> IS INITIAL.          " ExtensionIn中的值为初始值时, 不去赋值
              " do nothing...
            ELSE.
              <fv_value_orginal> = <fv_value_extend>. " 只有当 extensionin结构中有值时, 才去赋值
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    
  • 检查并赋值
    CLEAR:wa_accit_temp.
    READ TABLE c_accit INTO wa_accit_temp INDEX sy-tabix.
    IF sy-subrc EQ 0.
    IF wa_accit-bschl IS INITIAL.
    wa_accit-bschl = wa_accit_temp-bschl.
    ENDIF.
    IF wa_accit-umskz IS INITIAL.
    wa_accit-umskz = wa_accit_temp-umskz.
    ENDIF.
    ** being add by yanqq on 2018-10-23

  •      IF wa_accit-zz_item10 IS INITIAL.
    
  •        wa_accit-zz_item10 = wa_accit_temp-zz_item10.
    
  •      ENDIF.
    
  •      IF wa_accit-zz_item13 IS INITIAL.
    
  •        wa_accit-zz_item13 = wa_accit_temp-zz_item13.
    
  •      ENDIF.
    
  •      IF wa_accit-zz_item14 IS INITIAL.
    
  •        wa_accit-zz_item14 = wa_accit_temp-zz_item14.
    
  •      ENDIF.
    
  •      IF wa_accit-zz_item15 IS INITIAL.
    
  •        wa_accit-zz_item15 = wa_accit_temp-zz_item15.
    
  •      ENDIF.
    

** end add by yanqq on 2018-10-23
*
ENDIF.
MODIFY c_accit FROM wa_accit INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDMETHOD.

有时候在扩展里边增加是不可以的,所以要在增强里写代码。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值