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-生成会计凭证相关推荐

  1. java sap总账凭证接口_SAP系统接口自动生成会计凭证且无需记账码的方法与流程...

    本发明涉及sap系统接口自动生成会计凭证且无需记账码的方法,属于企业信息化管理技术领域. 背景技术: 在企业信息化管理领域,sap系统接口有着非常重要的意义,它担当着sap系统与其他信息系统的桥梁功能 ...

  2. VF01自动生成会计凭证

    VF01开票后不需要经过VF02直接生成会计凭证. 如果选中"记账冻结"那么需要VF02批准才能生成会计凭证.反之,则直接生成会计凭证. 在凭证处理中,可人工转帐已冻结的开票凭证到 ...

  3. VF01开票自动生成会计凭证

    VF01开票后不需要经过VF02直接生成会计凭证 如果选中"记账冻结"那么需要VF02批准才能生成会计凭证.反之,则直接生成会计凭证 VF01开票时提示没有billing产生,查询 ...

  4. SAP-FI模块 处理自动生成会计凭证增强

    FICO-模块 一. 相关问题概览 1. 固定资产业务过渡科目摘要增强功能-F-02 2. 固定资产业务过渡科目摘要增强功能-MIGO 3. 主营业务收入等科目自动反记账功能 二. 问题图片描述 1. ...

  5. SAP中外向交货单出具发票无法生成会计凭证

    一.系统环境 SAP R/3 4.6C 二.问题描述 我在对一张外向交货单出具发票,但是无法生成对应的会计凭证. 三.解决方法 a.检查外向交货单上的实际交货日期和发票日期是否相同,如果不相同会不产生 ...

  6. 用ABAP 生成二维码 QR Code

    除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成 ...

  7. ABAP 生成ZIP压缩文件的代码

    DATA : IZIP        TYPE  REF  TO CL_ABAP_ZIP ,       CONT        TYPE XSTRING ,       XZIP_FILE   TY ...

  8. abap 生成流水号每天从1开始_条码软件如何制作循环流水号

    很多时候,为了省时省力,条形码标签一般都会设置流水号打印,而很多产品在出厂时,每一批都是统一,或者比如学生考试所使用的考场号其中包含的座位号,都是需要有循环效果的,下面我们可以详细看一下中琅条码软件制 ...

  9. Jerry的ABAP原创技术文章合集

    我之前发过三篇和ABAP相关的文章: 1. Jerry的ABAP, Java和JavaScript乱炖 这篇文章包含我多年来在SAP成都研究院使用ABAP, Java和JavaScript工作过程中的 ...

  10. sap 分摊分配不产生会计凭证的原因_SAP软件的物料分类账功能

    物料账介绍 物料分类账(Material Ledger)是SAP财务模块的重要功能之一,用于对标准价计价的物料进行差异处理.激活ML后,系统会在"工厂+物料"层(或更细的层次)为每 ...

最新文章

  1. 2022-2028年中国PET薄膜行业市场深度分析及未来趋势预测报告
  2. python语言创意绘画-齐齐哈尔富裕高校邦数据科学通识课【Python基础语法】答案...
  3. SAP Commerce Cloud 的代码仓库
  4. root cause of exception single deletion failure
  5. CodeVS 1300 文字排版 线性DP
  6. xxljob默认登录_xxl-job安装部署整理
  7. 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结
  8. (转)postgresql+postgis空间数据库使用总结
  9. Java String、StringBuffer、StringBuilder区别
  10. mysql etc my.cnf_mysql配置文件/etc/my.cnf
  11. live2d_Live2d( 动画制作软件 )中文版分享
  12. mapxtreme2008 7.0错误
  13. CPU卡一卡通解决方案
  14. Ubuntu系统如何搜索要安装的软件包
  15. django+python搭建消息推送系统
  16. Android 调用微信添加关注
  17. TensorFlow神经网络学习笔记
  18. 我用GAN实现了魔法照片!效果太逼真!
  19. Linux 进程通信之:管道 (Pipe)
  20. arm解锁 j-flash_J-Link固件烧录以及使用J-Flash向arm硬件板下载固件程序(示例代码)...

热门文章

  1. 单片机/开发板连接配置的三种方式
  2. miui删除内置不卡米教程_MIUI11卸载系统自带软件,无需ROOT也可以
  3. HTML页面制作中出现的问题,网页制作过程中的普遍问题分析
  4. 神经计算棒python_将Pytorch模型部署到Movidius神经计算棒
  5. go 1.16版本,go get用法介绍
  6. 学习HTML+CSS有感
  7. ecahrts给地图添加贴图纹理
  8. 开发APP软件需要多少钱?
  9. 计算机专业的在职研究生怎么样,计算机专业在职研究生难度大吗?
  10. 介绍一款rar文件密码破解利器——RAR Password Unlocker