Измените длину поля позже

TABLES: VBRK.

DATA: BEGIN OF it_test,
      BUKRS LIKE VBRK-BUKRS,
      FKDAT LIKE VBRK-FKDAT,
END OF it_test.

DATA: wa_test LIKE it_test.


SELECT * FROM VBRK INTO CORRESPONDING FIELD OF wa_test.

IF wa_test-BUKRS = 'xxxx'.
   wa_test-BUKRS = 'XXXXX' "Problem occurs here as the BUKRS allow 4 value
   APPEND wa_test TO it_test.
ENDIF.

Затем я хочу отобразить внутреннюю таблицу для вывода в виде таблицы ALV. Есть ли способ впоследствии изменить длину поля?


person RamonC    schedule 19.02.2016    source источник
comment
Для тех, кто читает это: это отличный пример того, как НЕ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ кодировать на ABAP.   -  person vwegert    schedule 19.02.2016
comment
Особенно почему? Хорошо, выбор глупый. Но кроме того? Я согласен, что я бы не стал этого делать, как это сделал оп, хотя отлаживайте QM, и вы увидите много таких вещей ....   -  person icbytes    schedule 19.02.2016
comment
Можете ли вы привести более конкретный пример?   -  person    schedule 19.02.2016
comment
@icbytes TABLES совершенно не нужен, SELECT * там, где нужны только два поля, ENDSELECT отсутствует / намеренно опущен, неявное объявление типа данных в стиле 1980-х годов.   -  person vwegert    schedule 19.02.2016
comment
Этот код компилируется? SELECT должен быть 'SELECT SINGLE...' или ENDSELECT отсутствует.   -  person Nelson Miranda    schedule 19.02.2016


Ответы (3)


Помимо множества проблем в вашем коде, вы не можете. Если вам нужно что-то подобное, добавьте в структуру дополнительное поле нужного вам размера и скопируйте значения.

person vwegert    schedule 19.02.2016
comment
Это просто пример, моя реальная программа работает без проблем. Да, ваше предложение работает, потому что в первую очередь я думал, что поля ALV должны выводить все поля IT. Спасибо. - person RamonC; 19.02.2016

Если цель состоит в том, чтобы вывести на экран что-то, что отличается (или в другом формате) от того, что хранится внутри (или в базе данных), то использование элемента данных с выходом преобразования может быть выходом.

Для примера посмотрите на ключевые поля таблицы PRPS.

person Thomas Matecki    schedule 20.02.2016

Расширение ответа vwegert:

Команде MOVE-CORRESPONDINGSELECT ... INTO CORRESPONDING FIELDS) не нужен один и тот же тип поля. Контент конвертируется. Таким образом, вы можете определить 5-символьное поле в своей внутренней структуре и скопировать значение BUKRS в это 5-символьное поле:

TABLES: VBRK.

DATA: BEGIN OF it_test,
      BUKRS(5), "longer version of VBRK-BUKRS,
      FKDAT LIKE VBRK-FKDAT,
END OF it_test.
DATA: tt_test TYPE STANDARD TABLE OF it_test.

* I would strongly recommend to set a filter!
SELECT * FROM VBRK INTO CORRESPONDING FIELD OF it_test.

  IF it_test-BUKRS = 'xxxx'.
     it_test-BUKRS = 'XXXXX'.
     APPEND it_test to tt_test.
  ENDIF.
ENDSELECT.

Ловушка: когда вы используете его с ALV, вы потеряете описание поля. (с другой стороны, описание исходного поля больше не будет соответствовать новому полю.)

person knut    schedule 22.02.2016