«MOVE» работает для литерала, но не для внутренней таблицы - PullRequest
0 голосов
/ 26 марта 2019

Я работаю над отчетами по автоматизации в 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.

1 Ответ

3 голосов
/ 26 марта 2019

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_output и gs_output-namev01 ...).

Если у вас ABAP 740 или новее, вы можете получить доступ к строкам напрямую по номеру строки, например, для доступа к первой строке:

gt_output-namev01 = gt_output3[ 1 ]-namev.
...