【问题标题】:Passing field-symbols into FORM将字段符号传递给 FORM
【发布时间】:2012-08-24 13:44:13
【问题描述】:

我需要在多个代码位置将数据字段(另一个字段符号的组件)分配给字段符号。为了可重用性,我决定将此代码封装在过程中,但我不明白如何将字段符号传递到此过程中。

LOOP bseg ASSIGNING <bseg>
...
PERFORM assigning USING <bseg>
                  CHANGING <wrbtr>.
...
ENDLOOP.

FORM assigning USING <bseg> TYPE bseg
               CHANGING <wrbtr> TYPE bseg-wrbtr
IF ...
  some logic here
  ASSIGN <bseg>-wrbtr TO <wrbtr>.
ELSE
  ASSIGN <bseg>-skfbt TO <wrbtr>.
ENDIF.

ENDFORM.

此代码不起作用。

我应该怎么做才能更改字段符号引用?

【问题讨论】:

    标签: loops reference field abap assign


    【解决方案1】:

    这是不可能的,至少不是您尝试这样做的方式。字段符号不能作为它们真正的指针传递。如果你需要这样的东西,你必须使用真实的参考。

    对其余代码一无所知 - 看起来有点奇怪。为什么要直接更改 BSEG 字段中的数据?我只能假设您“滥用”字段在整个代码中传输一些自定义值,这通常是一个坏主意。如果你需要这样做,我宁愿这样做:

    LOOP bseg ASSIGNING <bseg>.
       IF foo.
        l_my_wrbtr = <bseg>-wrbtr.
      ELSE.
        l_my_wrbtr = <bseg>-skfbt.
      ENDIF.
    
      " ... pro'lly thousands of lines I don't even want to see...
    
      IF foo.
        <bseg>-wrbtr = l_my_wrbtr.
      ELSE.
        <bseg>-skfbt = l_my_wrbtr.
      ENDIF.
    ENDLOOP.    
    

    【讨论】:

    • 因为不需要更改BSEG表,而是根据某些条件使用一个或另一个BSEG字段输出(制作报告)。对于我们填充输出数据内部表的内容。我无法更改填充表格的代码 - 只能在其中包含我的修改。填充是使用两个循环组织的。出于这个原因,我想在那里插入检查程序。
    • 我明白,但这是不可能的。据我所知,FIELD-SYMBOLS 是一种巧妙的本地符号表操作技巧,因此在技术上不可能传递它们。如果你需要做这样的事情,你必须使用真实的参考(TYPE REF TO)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2018-05-20
    • 2016-01-13
    相关资源
    最近更新 更多