Skip to content

FIELD SYMBOLS 语句的运用

一、 FIELDSYMBOLS语句运用实例:费用表结构

  在SAPCO模块中每月费用一般是字段名+月(MON01)的结构。若需要追加一年(十二个月)的费用金额的逻辑时,要重复12次使用“WTG001+WTG002~+WTG012”语句计算总数。这种情况可以使用 FIELDSYMBOLS 来减少代码量。下面语句是在实际业务中可以直接运用的有效代码。费用管理表结构请参见[图10-51。

abap
FIELD-SYMBOLS <fs>.

DATA:fname(10).
    sum LIKE COSP-WTG001
DO 12 TIMES.
    CC=SY-INDEX.
    CONCATENATE 'COSP-WGTO' CC INTO fname.
    ASSIGN (fname) TO <fs>
    sum=sum +<fs>.
    CLEAR : fname, <fs>.
ENDDO.

alt text   上面语句中为了合计十二个月的金额使用了FIELD SYMBOLS。执行 DO 循环语句,则在 CONCATENATE'COSP-WGT0'CCINTO fame.中 fname 的字段值会变为 COSP-WTG001。然后执行程序后 ASSIGN (FNAME) TO<fs>语句被解释成 ASSIGN COSP-WTG001 TO<fs>语句,且FIELDSYMBOLS<fs>可以访问存储在变量COSP-WTG001的内存地址中的值。

二、 FIELD SYMBOLS语句运用实例:循环内表处理

  内表执行LOOP 循环时使用 FIELD SYMBOLS 也非常方便。比较一下航空公司名字修改内表时使用 FIELD SYMBOLS 的实例与复制结构体实现MODIFY功能的实例。
[例 10-10]

abap
REPORT z10_10.
DATA: BEGIN OF gs_line,
        carrid TYPE sflight-carrid,
        connid TYPE sflight-connid,
        carrname TYPE scarr-carrname,
    END OF gs_line.

DATA gt_itab LIKE TABLE OF gs_line.
FIELD-SYMBOLS <fs> like gs_line.

SELECT carrid connid
INTO CORRESPONDING FIELDS OF TABLE gt_itab
FROM sflight.

LOOP AT gt_itab ASSIGNING <fs>
    SELECT SINGLE carrname INTO <fs>-carrname
    FROM scarr WHERE carrid = <fs>-carrid.
ENDLOOP.

[例 10-10]

abap
REPORT z10_11.

DATA: BEGIN OF gs_line,
    carrid TYPE sflight-carrid,
    connid TYPE sflight-connid,
    carrname TYPE scarr-carrname,
END OF gs_line.

DATA gt_itab LIKE TABLE OF gs_line.

SELECT carrid connid
INTO CORRESPONDING FIELDS OF TABLE gt_itab
FROM sflight.

LOOP AT gt_itab INTO gs_line.
    SELECT SINGLE carrname INTO gs_line-carrname
    FROM scarr WHERE carrid = gs_line-carrid.
    
    MODIFY gt_itab FROM gs_line.
ENDLOOP.

  [例 10-10]是利用 FIELD SYMBOLS 修改内表的代码。若使用FIELD SYMBOLS,则不必使用[例 10-11]中的 MODIFY语句修改内表。前面已经提到,FIELDSYMBOLS会直接修改存储在内存中的值。利用LOOP语句给FIELDSYMBOLS赋值时要使用ASSIGNING语句。如[图10-6]中说明,使用FIELDSYMBOLS可以省略内表值复制到结构体再执行MODIFY的过程,从而提高性能。 alt text