SAP FICO 创建修改会计科目 GL_ACCT_MASTER_SAVE

本文介绍了一个ABAP程序实例,该程序用于实现SAP系统与OA系统的会计科目同步功能。通过调用SAP的BAPI: GL_ACCT_MASTER_SAVE,程序能够根据OA系统传递的数据创建或更新SAP中的会计科目。文中详细展示了如何构造和处理各种数据结构以完成这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系。 

客户要求,SAP与OA对接,用户通过OA创建和修改会计科目

BAPI:GL_ACCT_MASTER_SAVE

DATA: is_import  TYPE zfis_oa_subject_create_import.
DATA: es_export  TYPE zfis_oa_subject_create_export.

DATA:   ls_account_coa         TYPE glaccount_coa,
        ls_account_coa_keyy    TYPE glaccount_coa_key,
        ls_account_coa_data    TYPE glaccount_coa_data,
        ls_account_coa_info    TYPE glaccount_coa_info,
        lt_account_names       TYPE glaccount_name_table,
        ls_account_names       TYPE glaccount_name,
        ls_account_names_keyy  TYPE glaccount_name_key,
        ls_account_names_data  TYPE glaccount_name_data,
        lt_account_ccodes      TYPE glaccount_ccode_table,
        ls_account_ccodes      TYPE glaccount_ccode,
        ls_account_ccodes_keyy TYPE glaccount_ccode_key,
        ls_account_ccodes_data TYPE glaccount_ccode_data,
        ls_account_ccodes_info TYPE glaccount_ccode_info,
        ls_account_carea       TYPE glaccount_carea,
        ls_account_carea_keyy  TYPE glaccount_carea_key,
        ls_account_carea_data  TYPE glaccount_carea_data,
        ls_account_carea_info  TYPE glaccount_carea_info,
        lt_account_carea       TYPE glaccount_carea_table,
        lt_return              TYPE TABLE OF bapiret2 WITH HEADER LINE,
        ls_return              TYPE bapiret2,
        lv_action              TYPE char1,
        lv_message             TYPE char255,
        ls_fromto              TYPE glaccount_carea_fromto.

  CASE is_import-ifopt. "此处为OA 传来的标识符 C 表示创建 M 表示修改
    WHEN 'C'.
      lv_action = 'I'.
      lv_message = '会计科目创建成功'.
    WHEN 'M'.
      lv_action = 'U'.
      lv_message = '会计科目修改成功'.
    WHEN OTHERS.
  ENDCASE.
  IF is_import-rev01 = 'A'.

*--------------------------------------------------------------------*
    ls_account_coa_keyy-ktopl = is_import-ktopl."帐目表
    ls_account_coa_keyy-saknr = is_import-saknr."总账科目

    ls_account_coa_data-ktoks = is_import-ktoks."总帐科目组
    ls_account_coa_data-glaccount_type = is_import-glaccount_type.    "总账科目类型

    IF is_import-glaccount_type = 'X'.

      ls_account_coa_data-xbilk = 'X'.          "标志: 此科目是资产负债表科目吗?

    ENDIF.

    IF is_import-glaccount_type = 'S'
      OR is_import-glaccount_type = 'N'
      OR is_import-glaccount_type = 'P'.

      ls_account_coa_data-gvtyp = 'X'.       "损益报表科目类型

    ENDIF.

    ls_account_coa_info-erdat = sy-datum.        "记录创建日期
    ls_account_coa_info-ernam = sy-uname.        "创建对象的人员名称
    ls_account_coa_info-sakan = is_import-saknr. "总账科目

    ls_account_coa-action = lv_action.           "数据记录活动:I/插入;U/修改;D/删除
    ls_account_coa-keyy = ls_account_coa_keyy.
    ls_account_coa-data = ls_account_coa_data.
    ls_account_coa-info = ls_account_coa_info.

*--------------------------------------------------------------------*
    ls_account_names_keyy-ktopl = is_import-ktopl.  "帐目表
    ls_account_names_keyy-saknr = is_import-saknr.  "总账科目
    ls_account_names_keyy-spras = sy-langu.         "语言代码

    ls_account_names_data-txt20 = is_import-txt20.   "总帐科目名称
    ls_account_names_data-txt50 = is_import-txt50.   "总账科目长文本

    ls_account_names-action = lv_action.            "数据记录活动:I/插入;U/修改;D/删除
    ls_account_names-keyy = ls_account_names_keyy.
    ls_account_names-data = ls_account_names_data.
    APPEND ls_account_names TO lt_account_names.


  ENDIF.


*--------------------------------------------------------------------*
  ls_account_ccodes_keyy-bukrs = is_import-bukrs. "公司代码

  IF is_import-rev01 = 'A'.

    ls_account_ccodes_keyy-saknr = is_import-saknr. "总账科目
  ELSE.
    ls_account_ccodes_keyy-saknr = is_import-rev02. "总账科目
  ENDIF.


  ls_account_ccodes_data-waers = is_import-waers. "货币
  ls_account_ccodes_data-xsalh = is_import-xsalh. "是否仅限以本币记的余额
  ls_account_ccodes_data-xmwno = is_import-xmwno. "允许含/不含税过账
  ls_account_ccodes_data-mwskz = is_import-mwskz. "税务类型
  ls_account_ccodes_data-mitkz = is_import-mitkz. "统驭科目的科目类型
  ls_account_ccodes_data-xopvw = is_import-xopvw. "未清项目管理
  ls_account_ccodes_data-zuawa = is_import-zuawa. "排序码
  ls_account_ccodes_data-fstag = is_import-fstag. "字段状态组
  ls_account_ccodes_data-xintb = is_import-xintb. "只能自动过账
  ls_account_ccodes_data-xmitk = is_import-xmitk. "统驭科目是否准备就绪可以输入
  "ls_account_ccodes_data-kokrs = is_import-kokrs. "成本控制范围


  ls_account_ccodes_info-erdat = sy-datum."记录创建日期
  ls_account_ccodes_info-ernam = sy-uname."创建对象的人员名称

  ls_account_ccodes-action = lv_action.   "数据记录活动:I/插入;U/修改;D/删除
  ls_account_ccodes-keyy = ls_account_ccodes_keyy.
  ls_account_ccodes-data = ls_account_ccodes_data.
  ls_account_ccodes-info = ls_account_ccodes_info.
  APPEND ls_account_ccodes TO lt_account_ccodes.
*--------------------------------------------------------------------*
  IF is_import-kokrs IS INITIAL .

    is_import-kokrs = 'RT00'.

  ENDIF.
  ls_account_carea_keyy-kokrs = is_import-kokrs. "控制范围
  ls_account_carea_keyy-saknr = is_import-saknr. "总账科目

  ls_account_carea_data-katyp = is_import-katyp.

  ls_account_carea_info-ersda = sy-datum."创建日期
  ls_account_carea_info-usnam = sy-uname."创建人


  ls_account_carea-action = lv_action."数据记录活动:I/插入;U/修改;D/删除
  ls_account_carea-keyy = ls_account_carea_keyy.
  ls_account_carea-data = ls_account_carea_data.
  ls_account_carea-info = ls_account_carea_info.

  CLEAR ls_fromto.
  "添加开始和截止日期
  ls_fromto-datab = '19000101'.
  ls_fromto-datbi = '99991231'.
  ls_account_carea-fromto = ls_fromto.
  APPEND ls_account_carea TO lt_account_carea.

  CALL FUNCTION 'GL_ACCT_MASTER_SAVE'
    EXPORTING
*     testmode           = ''
*     NO_SAVE_AT_WARNING =
      no_authority_check = ''
      store_data_only    = ''
    TABLES
      account_names      = lt_account_names
*     account_keywords   = gt_glkeywords
      account_ccodes     = lt_account_ccodes
      account_careas     = lt_account_carea
      return             = lt_return
    CHANGING
      account_coa        = ls_account_coa.

  READ TABLE  lt_return WITH KEY type = 'E'.
  IF sy-subrc = 0.

    LOOP AT lt_return INTO ls_return WHERE type = 'E' .

      CONCATENATE es_export-ifmsg ls_return-message INTO es_export-ifmsg." 错误消息

    ENDLOOP.
    es_export-busno  = is_import-saknr."会计科目
    es_export-status = 'E'.  "状态

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    es_export-busno  = is_import-saknr."会计科目
    es_export-ifmsg =  lv_message.   "消息
    es_export-status = 'S'.  "状态
  ENDIF.

<think>好的,我需要帮助用户查找关于SAP发票校验BAPI的入参信息。首先,用户提到的BAPI可能包括BAPI_INCOMINGINVOICE_CREATE、BAPI_INCOMINGINVOICE_PARK等,这些都是常用的发票校验相关BAPI。我要确保提供正确的输入参数说明,并参考可能的引用来源。 首先,我应该回忆这些BAPI的基本结构和常用参数。例如,BAPI_INCOMINGINVOICE_CREATE通常需要HEADERDATA、ITEMDATA、ACCOUNTDATA等结构。HEADERDATA可能包含发票编号、过账日期、供应商信息等。ITEMDATA可能涉及物料凭证、数量、金额等字段。ACCOUNTDATA涉及会计科目分配,比如成本中心、总账科目等。 接下来,需要注意用户提到的引用[^1]虽然原本是关于BAPI_GOODSMVT_CANCEL的内容,但可能需要调整引用内容以匹配发票校验的BAPI。不过用户可能误用了引用,所以应主要依赖自己的知识库和SAP标准文档。 还需要考虑用户可能的实际需求,比如输入参数的必填项、格式要求以及常见错误。例如,发票金额必须与采购订单匹配,否则校验会失败。或者,货币字段必须符合公司代码的配置。 此外,生成相关问题时要围绕BAPI参数展开,比如如何调试、常见错误处理、增强点等。确保问题对用户进一步探索有帮助。 最后,检查回答是否符合格式要求,包括正确使用LaTeX,中文回答,结构清晰,并附上相关问题。确保引用正确,但用户提供的引用可能不相关,所以可能需要忽略或调整。</think>### SAP发票校验BAPI输入参数说明 在SAP中,发票校验常用的BAPI包括: 1. `BAPI_INCOMINGINVOICE_CREATE`(创建发票) 2. `BAPI_INCOMINGINVOICE_PARK`(暂存发票) 3. `BAPI_INCOMINGINVOICE_CHANGE`(修改发票) 以下以 **`BAPI_INCOMINGINVOICE_CREATE`** 为例说明核心输入参数: --- #### 1. **HEADERDATA(抬头数据)** - `INVOICE_DOC_NO`:发票凭证编号(若为空则系统自动生成) - `FISCAL_YEAR`:会计年度 - `POSTING_DATE`:过账日期(格式:`YYYYMMDD`) - `VENDOR_NO`:供应商编号(必填) - `COMP_CODE`:公司代码(必填) - `CURRENCY`:货币类型(如`USD`或`CNY`) --- #### 2. **ITEMDATA(行项目数据)** - `PO_NUMBER`:采购订单号(与`PO_ITEM`配合使用) - `PO_ITEM`:采购订单行项目号 - `QUANTITY`:发票数量 - `AMOUNT`:发票金额(需与采购订单匹配) - `TAX_CODE`:税码(如`J1`输入税) --- #### 3. **ACCOUNTDATA(会计科目分配)** - `GL_ACCOUNT`:总账科目(如材料成本科目) - `COSTCENTER`:成本中心(若需要费用化) - `PROFIT_CTR`:利润中心 --- #### 4. **其他关键参数** - `IMPORT_PARAMETERS`:控制参数(如`CHECK_ONLY`仅检查不保存) - `RETURN`:返回消息表(需检查是否有错误) --- ### 示例代码 ```abap DATA: ls_header TYPE bapi_incinv_create_header, lt_items TYPE TABLE OF bapi_incinv_create_item, lt_return TYPE TABLE OF bapiret2. ls_header-posting_date = sy-datum. ls_header-vendor = '0000123456'. ls_header-comp_code = '1000'. ls_header-currency = 'CNY'. APPEND VALUE #( po_number = '4500001234' po_item = '00010' quantity = 100 amount = '5000.00' tax_code = 'J1' ) TO lt_items. CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE' EXPORTING headerdata = ls_header TABLES itemdata = lt_items return = lt_return. IF line_exists( lt_return[ type = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ENDIF. ``` --- ### 注意事项 1. **金额与数量校验**:发票金额需与采购订单或收货单匹配,否则系统会报错[^1]。 2. **税码必填**:若无免税条件,需指定有效税码。 3. **消息处理**:必须检查`RETURN`表,避免未处理错误导致数据不一致。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值