field-symbols <fs> .
的应用一
类似于指针
这个需求是 这样
根据存储需要,数据在数据库的格式是
一月 二月。。。。。。十二月
这样,想取到某月数,
算法如下:
field-symbols <fs> .
text1 = 'izknc1-UM01S'."内表中一月的名称
text1+9(2) = p_monat."屏幕上取到的月
assign (text1) to <fs>.
<fs> = month_cust-dmbtr.
collect izknc1 .
取数时候
assign (text1) to <fs>.
itab1-umsas = itab1-umsas + <fs>.
也就是说,赋值或者取值时候都可以用指针做容器来完成
这个用到时候记得有这个方法再去研究就可以了
像 数列转置等都可以用这种方法完成
详细程序背景: 本来的程序是这样完成的
loop at month_cust .
loop at izknc1 where kunnr = month_cust-kunnr
and bukrs = month_cust-bukrs
and gjahr = month_cust-gjahr
and hkont = month_cust-hkont .
case month_cust-monat .
when '01'.
if month_cust-shkzg = 'S' .
izknc1-um01s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um01h = month_cust-dmbtr .
endif .
modify izknc1 .
when '01'.
if month_cust-shkzg = 'S' .
izknc1-um01s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um01h = month_cust-dmbtr .
endif .
modify izknc1 .
when '02'.
if month_cust-shkzg = 'S' .
izknc1-um02s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um02h = month_cust-dmbtr .
endif .
modify izknc1 .
when '03'.
if month_cust-shkzg = 'S' .
izknc1-um03s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um03h = month_cust-dmbtr .
endif .
modify izknc1 .
when '04'.
if month_cust-shkzg = 'S' .
izknc1-um04s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um04h = month_cust-dmbtr .
endif .
modify izknc1 .
when '05'.
if month_cust-shkzg = 'S' .
izknc1-um05s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um05h = month_cust-dmbtr .
endif .
modify izknc1 .
when '06'.
if month_cust-shkzg = 'S' .
izknc1-um06s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um06h = month_cust-dmbtr .
endif .
modify izknc1 .
when '07'.
if month_cust-shkzg = 'S' .
izknc1-um07s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um07h = month_cust-dmbtr .
endif .
modify izknc1 .
when '08'.
if month_cust-shkzg = 'S' .
izknc1-um08s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um08h = month_cust-dmbtr .
endif .
modify izknc1 .
when '09'.
if month_cust-shkzg = 'S' .
izknc1-um09s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um09h = month_cust-dmbtr .
endif .
modify izknc1 .
when '10'.
if month_cust-shkzg = 'S' .
izknc1-um10s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um10h = month_cust-dmbtr .
endif .
modify izknc1 .
when '11'.
if month_cust-shkzg = 'S' .
izknc1-um11s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um11h = month_cust-dmbtr .
endif .
modify izknc1 .
when '12'.
if month_cust-shkzg = 'S' .
izknc1-um12s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um12h = month_cust-dmbtr .
endif .
modify izknc1 .
when '13'.
if month_cust-shkzg = 'S' .
izknc1-um13s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um13h = month_cust-dmbtr .
endif .
modify izknc1 .
when '14'.
if month_cust-shkzg = 'S' .
izknc1-um14s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um14h = month_cust-dmbtr .
endif .
modify izknc1 .
when '15'.
if month_cust-shkzg = 'S' .
izknc1-um15s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um15h = month_cust-dmbtr .
endif .
modify izknc1 .
when '16'.
if month_cust-shkzg = 'S' .
izknc1-um16s = month_cust-dmbtr .
elseif month_cust-shkzg = 'H' .
izknc1-um16h = month_cust-dmbtr .
endif .
modify izknc1 .
endcase .
改进后变成简单 form
form convert.
data:text1(20),text2(20),text3(40),text4(40).
text1 = 'izknc1-UM01S'.
text2 = 'izknc1-UM01H'.
field-symbols <fs> .
loop at month_cust .
move-corresponding month_cust to izknc1 .
text1+9(2) = month_cust-monat.
text2+9(2) = month_cust-monat.
assign (text1) to <fs>.
<fs> = month_cust-dmbtr.
assign (text2) to <fs>.
<fs> = month_cust-wrbtr.
collect izknc1 .
clear izknc1 .
endloop .
endform. "convert