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

1. 问题

  • 使用BAPI POSTING_INTERFACE_CLEARING 进行清账的时候,由于标准程序使用BDC清账,而且不同科目ZFBDT字段状态不一致会导致清账失败
  • 字段隐藏时,不能赋值BDC字段ZFBDT,否则抛出异常
    ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)_第1张图片

2. 解决方案(ABAP中判断科目字段状态,动态赋值)

  • FM:FI_FIELD_SELECTION_DETERMINE 可读取对应会计科目字段的状态
    ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)_第2张图片

    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.
    
  • FI_FIELD_SELECTION_DETERMINE函数 返回 E_FAUS1 参数存放字段状态;每一个字符代表一个字段状态

    • “+” 代表必输 Request entry
    • “-” 代表隐藏 Suppress entry
    • “.” 代表可选 Option entry
      ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)_第3张图片
  • 字段状态维护通过OBC4->表T004F OB41->表TBSL;共同作用
    ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)_第4张图片

  • 由于 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 代码中读取会计科目的字段状态(隐藏、可选、必输)_第5张图片
        ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)_第6张图片
        ABAP 代码中读取会计科目的字段状态(隐藏、可选、必输)_第7张图片

你可能感兴趣的:(ABAP开发,ABAP,实用程序记录,FICO)