field-symbols 小应用

   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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值