销售发票输出配置及示例代码

作者:ABAP三叔 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, CO, FI, SD, 开发, 财务, 销售分销
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

前言

在销售开票时,生成的会计凭证有时候不能满足财务部门的需求(如多级公司交易,缺少中间凭证),这就需要在销售开票的时候能够自动生成额外的凭证,SAP提供了标准的处理方法:消息-

输出控制,可以调用自开发的程序,来生成会计凭证。

配置

1.配置路径:SPRO-销售与分销-基本功能-输出确定-输出确定-使用条件技术的输出确认-维护开票单据的输出确定-维护输出类型

销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

2.添加输出类型

销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

3.维护输出确定过程

选择V10000开票输出

销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

添加新步骤

销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

4.分配输出确定过程

为需要输出的发票类型分配输出类型

销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

5.维护输出记录

VV31、VV32、VV33

销售发票输出配置及示例代码 - 封面图
销售发票输出配置及示例代码 - 封面图

代码示例

以下仅为示例,过程是正确的,凭证分录及取值需根据实际需求更改

REPORT zfif001. INCLUDE rle_delnote_data_declare .
FORM frm_entry USING ent_retco ent_screen. DATA: lv_vbeln TYPE vbeln_vf. lv_vbeln = nast-objky+0(10).

PERFORM frm_process USING lv_vbeln CHANGING ent_retco.

ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_PROCESS*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------**& --> P1 TEXT*& <-- P2 TEXT*&---------------------------------------------------------------------*FORM frm_process USING uv_vbeln TYPE vbeln_vf CHANGING retco TYPE sy-subrc. DATA: lt_vbrp TYPE STANDARD TABLE OF vbrp, ls_vbrp TYPE vbrp, ls_vbrk TYPE vbrk, lt_prcd TYPE STANDARD TABLE OF prcd_elements, lt_prcd1 TYPE STANDARD TABLE OF prcd_elements, lv_error TYPE char01.
SELECT * INTO TABLE lt_vbrp FROM vbrp WHERE vbeln = uv_vbeln. SELECT SINGLE * INTO ls_vbrk FROM vbrk WHERE vbeln = uv_vbeln. SELECT * INTO TABLE lt_prcd FROM prcd_elements WHERE knumv = ls_vbrk-knumv AND kschl = 'Z010' AND kwert <> 0 and kinak = ''. SORT lt_prcd BY knumv kposn. IF sy-subrc <> 0. PERFORM frm_save_log USING '00' '001' 'E' '无返利收入' '' '' ''. retco = 1. RETURN. ENDIF. SELECT * INTO TABLE lt_prcd1 FROM prcd_elements WHERE knumv = ls_vbrk-knumv AND kschl IN ( 'Z008','Z009' ) AND kwert <> 0 and kinak = ''. SORT lt_prcd1 BY knumv kposn. "检查权限 AUTHORITY-CHECK OBJECT 'G_REPO_LOC' ID 'BUKRS' FIELD ls_vbrk-bukrs. IF sy-subrc NE 0.* MESSAGE E172(00) WITH LS_VBRK-BUKRS. DATA(lv_msgv1) = CONV syst_msgv( ls_vbrk-bukrs ). PERFORM frm_save_log USING '00' '172' 'E' lv_msgv1 '' '' ''. retco = 1. RETURN. ENDIF.

"模拟过账 PERFORM frm_post TABLES lt_vbrp lt_prcd lt_prcd1 USING ls_vbrk '' CHANGING lv_error.

IF lv_error IS INITIAL. "直接过账 PERFORM frm_post TABLES lt_vbrp lt_prcd lt_prcd1 USING ls_vbrk 'X' CHANGING lv_error. ENDIF. IF lv_error IS INITIAL. CLEAR retco. ELSE. retco = 1. ENDIF.ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_SAVE_LOG*&---------------------------------------------------------------------**& NAST_PROTOCOL_UPDATE*&---------------------------------------------------------------------*FORM frm_save_log USING uv_msgid TYPE syst_msgid uv_msgno TYPE syst_msgno uv_msgty TYPE syst_msgty uv_msgv1 TYPE syst_msgv uv_msgv2 TYPE syst_msgv uv_msgv3 TYPE syst_msgv uv_msgv4 TYPE syst_msgv. CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING msg_arbgb = uv_msgid msg_nr = uv_msgno msg_ty = uv_msgty msg_v1 = uv_msgv1 msg_v2 = uv_msgv2 msg_v3 = uv_msgv3 msg_v4 = uv_msgv4* EXCEPTIONS* MESSAGE_TYPE_NOT_VALID = 1* NO_SY_MESSAGE = 2* OTHERS = 3 . IF sy-subrc <> 0.*IMPLEMENT SUITABLE ERROR HANDLING HERE ENDIF.* COMMIT WORK AND WAIT.* ENDIF. ENDFORM.*&---------------------------------------------------------------------**& FORM FRM_POST*&---------------------------------------------------------------------**& TEXT*&---------------------------------------------------------------------**& --> LT_VBRP*& --> LS_VBRK*& --> P_*& <-- LV_ERROR*&---------------------------------------------------------------------*FORM frm_post TABLES ut_vbrp STRUCTURE vbrp ut_prcd STRUCTURE prcd_elements ut_prcd1 STRUCTURE prcd_elements USING us_vbrk TYPE vbrk uv_post TYPE char01 CHANGING cv_error TYPE char01. DATA: ls_documentheader TYPE bapiache09, lt_accountgl TYPE TABLE OF bapiacgl09, lt_accountpayable TYPE TABLE OF bapiacap09, lt_accountreceivable TYPE TABLE OF bapiacar09, lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE, lt_currencyamount TYPE TABLE OF bapiaccr09, lt_criteria TYPE TABLE OF bapiackec9, lt_extension2 TYPE TABLE OF bapiparex.

CLEAR: ls_documentheader, lt_accountgl, lt_accountpayable, lt_return, lt_currencyamount, lt_criteria, lt_extension2. DATA: lv_belnr TYPE bseg-belnr.

PERFORM frm_fill_ab TABLES lt_accountgl lt_accountpayable lt_currencyamount lt_extension2 lt_criteria ut_vbrp ut_prcd USING us_vbrk CHANGING ls_documentheader.

IF uv_post = ''. "模拟检查 CLEAR lt_return[]. CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK' EXPORTING documentheader = ls_documentheader TABLES accountgl = lt_accountgl accountpayable = lt_accountpayable currencyamount = lt_currencyamount extension2 = lt_extension2 criteria = lt_criteria return = lt_return. ELSE. "凭证过账 CLEAR

...

ABAP三叔

关于作者:ABAP三叔

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「销售发票输出配置及示例代码.md」整理生成,仅用于内部技术分享与学习交流。