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 表。他们之后有什么办法可以更改字段长度吗?
除了代码中的多个问题之外,您不能。如果您需要类似的东西,请以所需的任何大小向结构添加一个附加字段,然后将值复制过来。
如果目标是将与内部(或数据库中)存储的内容不同(或格式不同)的内容输出到屏幕上,那么使用带有转换出口的数据元素可能是要走的路。
例如,请查看表 PRPS 的关键字段。
扩展 vwegert 的答案:
MOVE-CORRESPONDING
命令(和SELECT ... INTO CORRESPONDING FIELDS
)不需要相同的字段类型。内容已转换。因此,您可以在内部结构中定义一个 5 个字符的字段,并将BUKRS
-value 复制到此 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一起使用时,您将丢失字段描述。(另一方面,原始字段的字段描述将不再适合新字段。