BAPI_INCOMINGINVOICE_CREATE进项税发票创建,RBKP自定义字段写入

遇到一个通过BAPI_INCOMINGINVOICE_CREATE写入进项发票抬头自定义字段的需求.

研究了一下源代码和表RBKP的结构,发现SAP提供了一种新的自定义字段写入逻辑.现做一下记录.

 

 函数是在form invoice_ext_fields_convert中进行的值转换.

   lr_header_bapi_ext TYPE REF TO mmiv_si_s_bapi_header_ext,
    lr_gl_acc_items    TYPE REF TO mmiv_si_t_bapi_glaccitm_ext,
    lr_gl_acc_item     TYPE REF TO mmiv_si_s_bapi_glaccitm_ext,
    lr_po_ref_items    TYPE REF TO mmiv_si_t_bapi_supipr_ext,
    lr_po_ref_item     TYPE REF TO mmiv_si_s_bapi_supipr_ext,

抬头对应的增强结构是 mmiv_si_s_bapi_header_ext.

该结构data字段的类型是MMIV_SI_S_HEADER_INCL_EEW_PS,是被包含在进项发票抬头表RBKP中的.

在进行数据转换时用到了XML转换.

用到了辅助类:CL_CFD_BAPI_MAPPING

 

查看源代码发现,如果要想向抬头赋值,extensionin-structure应该是如下格式:MMIV_SI_S_BAPI_HEADER_EXT_+[0,1,2,3,4,5,6,7,8,9]{1,2},

(+[0,1,2,3,4,5,6,7,8,9]{1,2},是指正则表达式,意思是至少存在一个MMIV_SI_S_BAPI_HEADER_EXT_及连接着的0-99的数字.

且在extension中只能有一个符合条件的记录.结构名称只要符合要求即可,不需要真地建这么一个结构.

下边将具体的步骤:

  1. 增强结构MMIV_SI_S_HEADER_INCL_EEW_PS,起到增强rbkp的目的,为了使用bapi,务必通过此方式增强rbkp表.
  2. 补充extension.
  3. 代码如下:
     
    复制代码
      DATA:lt_extensionin     TYPE TABLE OF bapiparex .
      DATA(lo_bapi_mapping) = cl_cfd_bapi_mapping=>get_instance( ).
      DATA lr_source TYPE REF TO mmiv_si_s_bapi_header_ext."必须用这个类型
      CREATE DATA lr_source.
      lr_source->*-data-xref1_hd  =  p_head-srcsys.
      lr_source->*-data-xref2_hd  =  p_head-srcdocno.
    
      TRY.
    
          CALL METHOD lo_bapi_mapping->map_to_bapiparex_single
            EXPORTING
              ir_source_structure = lr_source
            CHANGING
              ct_bapiparex        = lt_extensionin[].
        CATCH cx_cfd_bapi_mapping .
      ENDTRY.
    复制代码

    然后在调用bapi的时候将lt_extensionin[]赋值给extensionin.

 

posted @   女鬼的朋友  阅读(1993)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示