1. 程式人生 > >BAPI_ACC_DOCUMENT_POST擴充套件欄位

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.

有時候在擴充套件裡邊增加是不可以的,所以要在增強裡寫程式碼。