"MOVE"适用于文本,但不适用于内部表



我正在SAP中处理自动化报告,但我无法输入gt_output3-namev的值来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.

gt_output3是一个带有标题行的表格

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

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

MOVE gt_output3-namev TO gt_output-namev01.

您可以通过循环访问表来获取gt_output3的值,例如:

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

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

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

gt_output-namev01 = gt_output3[ 1 ]-namev.

相关内容

  • 没有找到相关文章

最新更新