ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)

1. 问题

  • 使用BAPI POSTING_INTERFACE_CLEARING 进行清账的时候,由于标准程序使用BDC清账,而且不同科目ZFBDT字段状态不一致会导致清账失败
  • 字段隐藏时,不能赋值BDC字段ZFBDT,否则抛出异常
    ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
    文章图片
2. 解决方案(ABAP中判断科目字段状态,动态赋值)
  • FM:FI_FIELD_SELECTION_DETERMINE 可读取对应会计科目字段的状态
    ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
    文章图片

    DATA: ls_return TYPE bapireturn, l_faus1 TYPE tbsl-faus1, l_faus2 TYPE tbsl-faus2."G/L Account exists? CALL FUNCTION 'BAPI_GL_ACC_EXISTENCECHECK' EXPORTING companycode = -bukrs glacct= -hkont IMPORTING return= ls_return.IF ls_return-type NE 'E'. "Determine G/L Account Field status CALL FUNCTION 'FI_FIELD_SELECTION_DETERMINE' EXPORTING i_bschl= -bschl i_bukrs= -bukrs i_saknr= -hkont IMPORTING e_faus1= l_faus1 e_faus2= l_faus2 EXCEPTIONS customizing = 1 OTHERS= 2.CASE l_faus1+4(1). WHEN '+'. "ZFBDT is Request entry WHEN '-'. "ZFBDT is Suppress entry WHEN '.'. "ZFBDT is Option entry ENDCASE.ENDIF.

  • 【ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)】FI_FIELD_SELECTION_DETERMINE函数 返回 E_FAUS1 参数存放字段状态;每一个字符代表一个字段状态
    • “+” 代表必输 Request entry
    • “-” 代表隐藏 Suppress entry
    • “.” 代表可选 Option entry
      ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
      文章图片
  • 字段状态维护通过OBC4->表T004F OB41->表TBSL;共同作用
    ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
    文章图片

  • 由于 FI_FIELD_SELECTION_DETERMINE 函数读取出来的是状态标识;可在表 TMODU TMODP 中查到对应关系
    • 会计科目字段排序:FAUNA = “SKB1-FAUS1” "KOART = “S”
    • 查到的TMODU-MODIF的值表示当前字段(TMODU-FELDN)在 E_FAUS1的位置引用;例如:
      • E_FAUS1+0(1) =“.” 表示字段ZUONR的字段状态为可选
      • E_FAUS1+4(1) =“-” 表示字段ZFBDT的字段状态为隐藏
        ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
        文章图片

        ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
        文章图片

        ABAP开发|ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)
        文章图片

    推荐阅读