首页 > 解决方案 > “MOVE”适用于文字,但不适用于内部表

问题描述

我正在处理 SAP 中的自动化报告,我无法输入gt_output3-namevto的值gt_output-namev01

当我只移动一个字符串文字(设置了'1')时它可以工作。

当我移动时它不起作用gt_output3-namev(仍然是空的)。

我该如何解决?谢谢

我尝试调试,我可以看到来自的值gt_output3-namev未写入gt_output-namev01.

SELECT
      knvk~lifnr, knvk~namev, knvk~name1, knvk~titel_ap, knvk~telf1, knvk~abtnr
    FROM knvk
    WHERE  knvk~lifnr = @lv_lifnr AND knvk~abtnr = '0002'
    INTO TABLE @gt_output3.

  IF sy-subrc = '0'.
    MOVE gt_output3-namev TO gt_output-namev01. ---> doesn't work
    MOVE '1' TO gt_output-name101. ---> works
    MOVE '1' TO gt_output-titel_ap01.
    MOVE '1' TO gt_output-telf101.
    MOVE '1' TO gt_output-smtp_addr01.
  ENDIF.

  APPEND gt_output TO gt_final.

标签: abap

解决方案


gt_output3带有标题行的表格

这意味着您有一个同名的表和一个结构。这很方便,但现在已经过时了,因为它导致了许多混乱。

由于 SELECT,它包含作为表gt_output3的值,但在您的情况下,从未将值作为结构赋予。这会导致问题MOVE(注意:移动现在也已过时,请=改用):

MOVE gt_output3-namev TO gt_output-namev01.

gt_output3例如,您可以通过 LOOPing 表来获取 的值:

LOOP AT gt_output3 ASSIGNING FIELD-SYMBOL(<ls_output3>). 
  gt_output-namev01 = <ls_output3>-namev.

注意:gt_output这里被认为是一个结构,而不是一个内部表(从它的命名约定中被错误地猜到了)。可能您也将其定义为带有标题行的内部表,因此最好删除标题行并声明/使用单独的结构化变量(data gs_output like line of gt_output例如gs_output-namev01 ...)。

如果您有 ABAP 740 或更高版本,则可以直接按行号访问行,例如访问第一行:

gt_output-namev01 = gt_output3[ 1 ]-namev.

推荐阅读