ABAP-生成会计凭证
sap初级开发,接到一个生成会计凭证的接口任务,激动又惶恐,好在是查资料,问同事,开发完成了,一直也没测试联通。
这周开始联调才发现,之前写的代码跟没有写一个样子。就是抄人家的,至于为什么,一窍不通,遇到了一堆的问题,也是这些问题对生成凭证接口有些了解。还是那句话,不能再用之前跟踪代码查找问题的一套去学习abap了,根本没有那么多的时间和精力从头跟到尾。
首先遇到第一个问题是:此接口数据方式是总、借、贷还是什么,费尽周折顾问才给我说明白是两个行项目都是应收账款的,通过正负借贷平衡,这真的是个大坑
第二个问题:因为顾问对业务不是很熟悉,我也不懂业务所以在对于总账科目问题上纠结很长时间,最终是通过转账码自动匹配科目
第三个问题:在测试过程中总是报错:客户XXX在公司(371)下没有定义,也查看客商数据,也在通过前台创建客商,都没有问题。最终发现是字符串格式不对,前缀补0解决问题。
第四个问题:在凭证生成中要保证的一个原则就是借贷(应收应付)平衡。(个人理解,可能不对哈)
贴代码
FUNCTION zfm_fi_inbound_fi019 .
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IS_RECORDS) TYPE ZDT_TRANSFER_RECEIVABLE_VOUCH2
*" OPTIONAL
*" REFERENCE(IV_FLAG) TYPE CHAR1 OPTIONAL
*"----------------------------------------------------------------------
DATA(ls_output) = VALUE zdt_accounting_document_creat1( ).
DATA: lv_itemno TYPE posnr_acc,
lv_waers TYPE bkpf-waers.
DATA: ls_header TYPE bapiache09,
* ls_records TYPE zdt_transfer_receivable_v_tab1.
lt_exten2 TYPE bapiparex_t,
lt_acc_gl TYPE bapiacgl09_tab,
lt_criter TYPE bapiackec9_tab,
lt_acc_ar TYPE bapiacar09_tab,
lt_acc_ap TYPE bapiacap09_tab,
lt_acc_cr TYPE bapiaccr09_tab,
ls_records TYPE zdt_transfer_receivable_vouch2,
lv_obj_key TYPE bapiache09-obj_key,
lt_return TYPE bapiret2_tab,
lt_msg TYPE bapiret2_tab,
lv_msg TYPE string.
DATA: lt_fi019 TYPE STANDARD TABLE OF ztfi019,
ls_zbapi_acc_post TYPE zsfi_bapi_acc_post.
DATA: l_kunnr TYPE kunnr.
* READ TABLE is_records-records INTO ls_records INDEX 1.
* 财务凭证的表头信息
ls_header-comp_code = '371'. "公司代码
ls_header-fisc_year = is_records-budat(4). "会计年度
ls_header-doc_type = 'DA'. "凭证类型
ls_header-doc_date = is_records-budat. "凭证中的凭证日期
ls_header-pstng_date = is_records-budat. "凭证中的过帐日期
ls_header-header_txt = '转款'. "凭证抬头文本
* ls_header-ref_doc_no = is_records-xblnr1."参考凭证号
ls_header-username = sy-uname. "用户名
lv_waers = 'CNY'. "货币码
* 财务凭证的行项目信息
LOOP AT is_records-item INTO DATA(ls_is_records).
lv_itemno = lv_itemno + 1.
* Extension
APPEND INITIAL LINE TO lt_exten2 ASSIGNING FIELD-SYMBOL(<lfs_ext>).
<lfs_ext>-structure = 'BSCHL'.
<lfs_ext>-valuepart1 = lv_itemno.
* 当 001行的金额>0, 则为01
IF ls_is_records-dmbtr > 0.
<lfs_ext>-valuepart2 = '01'. "记帐代码
ls_zbapi_acc_post-bschl = '01'. " 记帐代码
* 否则为11
ELSE.
<lfs_ext>-valuepart2 = '11'. "记帐代码
ls_zbapi_acc_post-bschl = '11'. " 记帐代码
ENDIF.
"格式化客商编码
CLEAR l_kunnr.
l_kunnr = ls_is_records-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "前缀补零
EXPORTING
input = l_kunnr
IMPORTING
output = l_kunnr.
IF ls_is_records-buzei = '1'. "应收
* 应收账款
APPEND INITIAL LINE TO lt_acc_ar ASSIGNING FIELD-SYMBOL(<lfs_ar>).
<lfs_ar>-itemno_acc = lv_itemno. "会计凭证行项目编号
<lfs_ar>-customer = l_kunnr.
<lfs_ar>-comp_code = '371'.
<lfs_ar>-alloc_nmbr = 'JDZK'.
* <lfs_ar>-gl_account = '1122010000'. "总账科目ls_is_records-kunnr
* <lfs_ar>-pmnttrms = ls_item-dzterm. "付款条件代码
* <lfs_ar>-pymt_meth = ls_item-schzw_bseg. "付款方式
* <lfs_ar>-profit_ctr = |{ ls_item-prctr ALPHA = IN WIDTH = '10' }|.
<lfs_ar>-item_text = ls_is_records-sgtxt. "行项目摘要
ELSEIF ls_is_records-buzei = '2'. "应收
APPEND INITIAL LINE TO lt_acc_ar ASSIGNING FIELD-SYMBOL(<lfs_ar2>).
<lfs_ar2>-itemno_acc = lv_itemno. "会计凭证行项目编号
<lfs_ar2>-customer = l_kunnr.
<lfs_ar2>-comp_code = '371'.
<lfs_ar2>-alloc_nmbr = 'JDZK'.
<lfs_ar2>-item_text = ls_is_records-sgtxt. "行项目摘要
ENDIF.
APPEND INITIAL LINE TO lt_acc_cr ASSIGNING FIELD-SYMBOL(<lfs_cr>).
<lfs_cr>-itemno_acc = lv_itemno.
<lfs_cr>-curr_type = '00'.
<lfs_cr>-amt_doccur = ls_is_records-dmbtr.
<lfs_cr>-currency = 'CNY'. "货币码
APPEND INITIAL LINE TO lt_acc_cr ASSIGNING <lfs_cr>.
<lfs_cr>-itemno_acc = lv_itemno.
<lfs_cr>-curr_type = '10'.
<lfs_cr>-amt_doccur = ls_is_records-dmbtr.
<lfs_cr>-currency = 'CNY'. "货币码
" 增强字段
ls_zbapi_acc_post-posnr = ls_is_records-buzei. " 行项目编号
* ls_zbapi_acc_post-bschl = <fs_item>-bschl. " 记帐代码 转 53 57行
* ls_zbapi_acc_post-rstgr = <fs_item>-rstgr. " 付款原因代码
APPEND INITIAL LINE TO lt_exten2 ASSIGNING FIELD-SYMBOL(<fs_extension>).
<fs_extension>-structure = 'ZSFI_BAPI_ACC_POST'.
<fs_extension>+30(960) = ls_zbapi_acc_post.
* 记录日志
APPEND INITIAL LINE TO lt_fi019 ASSIGNING FIELD-SYMBOL(<lfs_fi019>).
* <lfs_fi015>-xblnr1 = is_records-xblnr1. "凭证号
<lfs_fi019>-denumber = is_records-number. "
<lfs_fi019>-bukrs = is_records-bukrs . "
<lfs_fi019>-budat = is_records-budat.
<lfs_fi019>-wears = is_records-wears.
<lfs_fi019>-buzei = ls_is_records-buzei.
<lfs_fi019>-kunnr = ls_is_records-kunnr.
<lfs_fi019>-dmbtr = ls_is_records-dmbtr.
<lfs_fi019>-sgtxt = ls_is_records-sgtxt.
<lfs_fi019>-sydate = sy-datum.
ENDLOOP.
CLEAR:ls_output,
lv_msg.
IF iv_flag = 'A'.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = ls_header
TABLES
accountgl = lt_acc_gl
accountreceivable = lt_acc_ar
accountpayable = lt_acc_ap
currencyamount = lt_acc_cr
criteria = lt_criter
return = lt_return
extension2 = lt_exten2.
IF lt_msg[] IS NOT INITIAL.
APPEND LINES OF lt_msg TO lt_return[].
CLEAR: lt_msg[].
ENDIF.
LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<lfs_return>)
WHERE type = 'A'
OR type = 'E'.
IF lv_msg IS INITIAL.
lv_msg = <lfs_return>-message.
ELSE.
CONCATENATE lv_msg <lfs_return>-message
INTO lv_msg SEPARATED BY ';'.
ENDIF.
ENDLOOP.
* IF lv_msg IS NOT INITIAL.
* ls_output-bapi_mtype = '-1'. "消息类型: -1 错误
* ls_output-bapi_msg = lv_msg. "消息文本
* ls_output-symsgid = 'ZFI01'. "消息类
* ls_output-symsgno = '000'. "消息编号
** ls_output-docnr1 = is_records-xblnr1. "凭证号
* APPEND ls_output TO et_output.
* ENDIF.
ENDIF.
IF iv_flag = 'B'.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_header
IMPORTING
obj_key = lv_obj_key
TABLES
accountgl = lt_acc_gl
accountreceivable = lt_acc_ar
* accountpayable = lt_acc_ap
currencyamount = lt_acc_cr
criteria = lt_criter
return = lt_return
extension2 = lt_exten2.
LOOP AT lt_return ASSIGNING <lfs_return>
WHERE type = 'A'
OR type = 'E'.
IF lv_msg IS INITIAL.
lv_msg = <lfs_return>-message.
ELSE.
CONCATENATE lv_msg <lfs_return>-message
INTO lv_msg SEPARATED BY ';'.
ENDIF.
ENDLOOP.
IF lv_msg IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-bapi_mtype = '-1'. "消息类型: -1 错误
ls_output-bapi_msg = lv_msg. "消息文本
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_output-bapi_mtype = '1'."消息类型: 1 成功
ls_output-bapi_msg = TEXT-001.. "创建财务凭证成功!
ls_output-docnr2 = lv_obj_key. "SAP系统会计凭证号
ENDIF.
* ls_output-symsgid = 'ZFI01'. "消息类
* ls_output-symsgno = '000'. "消息编号
** ls_output-docnr1 = is_records-xblnr1. "凭证号
* APPEND ls_output TO et_output.
MODIFY ztfi019 FROM TABLE lt_fi019.
ENDIF.
ENDFUNCTION.
ABAP-生成会计凭证相关推荐
- java sap总账凭证接口_SAP系统接口自动生成会计凭证且无需记账码的方法与流程...
本发明涉及sap系统接口自动生成会计凭证且无需记账码的方法,属于企业信息化管理技术领域. 背景技术: 在企业信息化管理领域,sap系统接口有着非常重要的意义,它担当着sap系统与其他信息系统的桥梁功能 ...
- VF01自动生成会计凭证
VF01开票后不需要经过VF02直接生成会计凭证. 如果选中"记账冻结"那么需要VF02批准才能生成会计凭证.反之,则直接生成会计凭证. 在凭证处理中,可人工转帐已冻结的开票凭证到 ...
- VF01开票自动生成会计凭证
VF01开票后不需要经过VF02直接生成会计凭证 如果选中"记账冻结"那么需要VF02批准才能生成会计凭证.反之,则直接生成会计凭证 VF01开票时提示没有billing产生,查询 ...
- SAP-FI模块 处理自动生成会计凭证增强
FICO-模块 一. 相关问题概览 1. 固定资产业务过渡科目摘要增强功能-F-02 2. 固定资产业务过渡科目摘要增强功能-MIGO 3. 主营业务收入等科目自动反记账功能 二. 问题图片描述 1. ...
- SAP中外向交货单出具发票无法生成会计凭证
一.系统环境 SAP R/3 4.6C 二.问题描述 我在对一张外向交货单出具发票,但是无法生成对应的会计凭证. 三.解决方法 a.检查外向交货单上的实际交货日期和发票日期是否相同,如果不相同会不产生 ...
- 用ABAP 生成二维码 QR Code
除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成 ...
- ABAP 生成ZIP压缩文件的代码
DATA : IZIP TYPE REF TO CL_ABAP_ZIP , CONT TYPE XSTRING , XZIP_FILE TY ...
- abap 生成流水号每天从1开始_条码软件如何制作循环流水号
很多时候,为了省时省力,条形码标签一般都会设置流水号打印,而很多产品在出厂时,每一批都是统一,或者比如学生考试所使用的考场号其中包含的座位号,都是需要有循环效果的,下面我们可以详细看一下中琅条码软件制 ...
- Jerry的ABAP原创技术文章合集
我之前发过三篇和ABAP相关的文章: 1. Jerry的ABAP, Java和JavaScript乱炖 这篇文章包含我多年来在SAP成都研究院使用ABAP, Java和JavaScript工作过程中的 ...
- sap 分摊分配不产生会计凭证的原因_SAP软件的物料分类账功能
物料账介绍 物料分类账(Material Ledger)是SAP财务模块的重要功能之一,用于对标准价计价的物料进行差异处理.激活ML后,系统会在"工厂+物料"层(或更细的层次)为每 ...
最新文章
- 2022-2028年中国PET薄膜行业市场深度分析及未来趋势预测报告
- python语言创意绘画-齐齐哈尔富裕高校邦数据科学通识课【Python基础语法】答案...
- SAP Commerce Cloud 的代码仓库
- root cause of exception single deletion failure
- CodeVS 1300 文字排版 线性DP
- xxljob默认登录_xxl-job安装部署整理
- 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结
- (转)postgresql+postgis空间数据库使用总结
- Java String、StringBuffer、StringBuilder区别
- mysql etc my.cnf_mysql配置文件/etc/my.cnf
- live2d_Live2d( 动画制作软件 )中文版分享
- mapxtreme2008 7.0错误
- CPU卡一卡通解决方案
- Ubuntu系统如何搜索要安装的软件包
- django+python搭建消息推送系统
- Android 调用微信添加关注
- TensorFlow神经网络学习笔记
- 我用GAN实现了魔法照片!效果太逼真!
- Linux 进程通信之:管道 (Pipe)
- arm解锁 j-flash_J-Link固件烧录以及使用J-Flash向arm硬件板下载固件程序(示例代码)...
热门文章
- 单片机/开发板连接配置的三种方式
- miui删除内置不卡米教程_MIUI11卸载系统自带软件,无需ROOT也可以
- HTML页面制作中出现的问题,网页制作过程中的普遍问题分析
- 神经计算棒python_将Pytorch模型部署到Movidius神经计算棒
- go 1.16版本,go get用法介绍
- 学习HTML+CSS有感
- ecahrts给地图添加贴图纹理
- 开发APP软件需要多少钱?
- 计算机专业的在职研究生怎么样,计算机专业在职研究生难度大吗?
- 介绍一款rar文件密码破解利器——RAR Password Unlocker