需求
为凭证抬头参考码1赋值
在用标准BAPI:BAPI_ACC_DOCUMENT_POST 创建凭证时无法通过拓展字段为抬头的参考码1赋值
现更换为BDC实现(凭证创建成功后使用BDC方式 调用FB02进行维护)
实现代码
DATA:BDCDATA1 LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* 新增参考码1处理
IF STRLEN( S_HEADER-XREF1_HD ) GE 4.
IF S_HEADER-XREF1_HD+2(2) EQ 'WB'. "只有第3、4位为WB才维护
DATA LT_MSG1 TYPE STANDARD TABLE OF BDCMSGCOLL.
* GS_EXTENSION_HEADER-XREF1_HD = S_HEADER-XREF1_HD.
REFRESH BDCDATA1.
PERFORM BDC_DYNPR USING 'SAPMF05L' '0100'.
PERFORM BDC_FIELD USING 'RF05L-BELNR' OBJ_KEY(10).
PERFORM BDC_FIELD USING 'RF05L-BUKRS' S_HEADER-BUKRS.
PERFORM BDC_FIELD USING 'RF05L-GJAHR' S_HEADER-BUDAT+0(4).
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_DYNPR USING 'SAPMF05L' '0700'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=VK'.
PERFORM BDC_DYNPR USING 'SAPMF05L' '1710'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'BKPF-XREF1_HD'.
PERFORM BDC_FIELD USING 'BKPF-XREF1_HD' S_HEADER-XREF1_HD.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTR'.
PERFORM BDC_DYNPR USING 'SAPMF05L' '0700'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=AE'.
CLEAR:LT_MSG1.
CALL TRANSACTION 'FB02' USING BDCDATA1 MODE 'N'
UPDATE 'S'
MESSAGES INTO LT_MSG1.
** 凭证过账接口返回参数:RESULT请新增会计期间,该字段原来是返回凭证编号+公司代码+会计年度,现在还需要返回会计期间。
* RESULT = OBJ_KEY(10) && S_HEADER-BUKRS && S_HEADER-BUDAT(4) && S_HEADER-BUDAT+4(2).
ENDIF.
ENDIF.
FORM BDC_DYNPR USING PROGRAM DYNPRO.
CLEAR BDCDATA1.
BDCDATA1-PROGRAM = PROGRAM.
BDCDATA1-DYNPRO = DYNPRO.
BDCDATA1-DYNBEGIN = 'X'.
APPEND BDCDATA1.
ENDFORM. "bdc_dynpr
FORM BDC_FIELD USING FNAM FVAL.
* IF fval IS NOT INITIAL.
CLEAR BDCDATA1.
BDCDATA1-FNAM = FNAM.
BDCDATA1-FVAL = FVAL.
APPEND BDCDATA1.
* ENDIF.
* CLEAR fval.
ENDFORM. "bdc_field
总结
以上