使用 read table TRANSPORTING 从 itab 获取一个字段

get one field from itab with read table TRANSPORTING

我试图从内部 table 中获取一个字段,如下所示:

READ TABLE tbl_peps TRANSPORTING ususap INTO lv_responsable WITH KEY usr03 = wa_tbl_prps-usr03.

这句话错了,给我报错

tbl_peps and lv_responsable are incompatibles

.

有没有办法使用 "transporting fields" 来实现?

根据 READ TABLE 上的 ABAP Documentation,如果您使用传输选项,接收数据的工作区必须与您读取的 table 的行类型兼容.您声明的变量 lv_responsable 似乎与 tbl_peps 不兼容,因此在检查您的代码时出现错误。

这应该有效:

DATA:
  wa_peps like line of tbl_peps.

READ TABLE tbl_peps TRANSPORTING ususap INTO wa_peps WITH KEY usr03 = wa_tbl_prps-usr03.  
MOVE wa_peps-ususap TO lv_responsable.

没有办法。 Lv_responsable 必须定义如下。

DATA: lv_responsable LIKE LINE OF tbl_peps.

才能将字段lv_responsable-ususap中的值赋值给该字段类型的另一个变量

使用新语法(至少 ABAP 7.40)您不再需要工作区。您的示例的编码为:

try.
    lv_responsable = tbl_peps[ usr03 = wa_tbl_prps-usr03 ]-ususap.
catch CX_SY_ITAB_LINE_NOT_FOUND.
endtry.

有关新 table 表达式的更多信息,请参见 here

解决根本问题

您只想传输一个字段的原因是为了节省内存和加快处理速度。有更好的方法,使用字段符号:

READ TABLE tbl_peps 
  ASSIGNING FIELD-SYMBOL(<fs_responsable>) 
  WITH KEY usr03 = wa_tbl_prps-usr03.

内联定义仅适用于 ABAP 740 及更高版本,但您可以在早期版本中执行此操作:

FIELD-SYMBOLS: <fs_responsable> LIKE LINE OF tbl_peps.
READ TABLE tbl_peps 
  ASSIGNING <fs_responsable> 
  WITH KEY usr03 = wa_tbl_prps-usr03.