如何获取ZTERM详细描述并解决FI_F4_ZTERM返回值不符合需求问题
解决方案
方案1:直接读取标准文本表T052U(最优方案)
付款条款的描述文本实际存储在多语言文本表T052U中,和FI_F4_ZTERM弹出框的文本来源完全一致,你之前读取V_T052失效大概率是没有带入语言、账户类型等匹配条件。实现代码如下:
LOOP AT T_ZBEDS ASSIGNING FIELD-SYMBOL(<line>). " 按当前登录语言、账户类型、付款条款编号读取对应描述 SELECT SINGLE TEXT1 INTO @<line>-Z_TEXTLONG FROM T052U WHERE SPRAS = @SY-LANGU AND KOART = 'K' " 对应你传入的供应商账户类型 AND ZTERM = @<line>-zterm AND ZTAGG = 0. " 普通一次性付款条款默认值,分期场景可按需调整 IF SY-SUBRC <> 0. CLEAR <line>-Z_TEXTLONG. ENDIF. ENDLOOP.
该方案性能远高于函数调用,逻辑更简洁,没有额外的系统开销。
方案2:调整FI_F4_ZTERM的调用方式
你之前的调用逻辑错误点在于:E_ZTERM参数仅返回用户在弹出框选中的付款条款编码,而非描述文本,描述文本存储在该函数的表参数T_ZTERM中,调整后的实现如下:
DATA: LT_ZTERM TYPE STANDARD TABLE OF IFI_F4_ZTERM, LS_ZTERM TYPE IFI_F4_ZTERM. LOOP AT T_ZBEDS ASSIGNING FIELD-SYMBOL(<line>). CLEAR: LT_ZTERM, LS_ZTERM. CALL FUNCTION 'FI_F4_ZTERM' EXPORTING I_KOART = 'K' I_ZTERM = <line>-zterm I_XSHOW = '' I_ZTYPE = '' I_NO_POPUP = 'X' TABLES T_ZTERM = LT_ZTERM " 用表参数接收所有符合条件的条款数据 EXCEPTIONS NOTHING_FOUND = 1 OTHERS = 2. IF SY-SUBRC = 0 AND LINE_EXISTS( LT_ZTERM[ 1 ] ). <line>-Z_TEXTLONG = LT_ZTERM[ 1 ]-TEXT1. ELSE. CLEAR <line>-Z_TEXTLONG. ENDIF. ENDLOOP.
内容的提问来源于stack exchange,提问作者Just some Guy
相关产品推荐
相关产品推荐

