通过读取表TRANSPORTING从itab获取一个字段

时间:2015-01-08 16:56:01

标签: abap

我试图从内部表中获取一个字段:

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

这句话错了,它给了我一个错误

  

tbl_peps和lv_responsable是不兼容的

有没有办法通过“运输领域”实现这一目标?

4 个答案:

答案 0 :(得分:12)

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

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

可以找到新表格表达式的更多信息here

答案 1 :(得分:4)

根据READ TABLE上的ABAP Documentation,如果使用transport-option,则接收数据的工作区必须与您读取的表的行类型兼容。您声明的变量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.

答案 2 :(得分:2)

解决根本问题

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

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.

答案 3 :(得分:0)

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

DATA: lv_responsable LIKE LINE OF tbl_peps.

只有这样才能将字段lv_responsable-ususap中的值分配给字段类型的另一个变量。