Abap 使用读取表从itab获取一个字段

Abap 使用读取表从itab获取一个字段,abap,Abap,我试图从interal表中获取一个字段,如下所示: READ TABLE tbl_peps TRANSPORTING ususap INTO lv_responsable WITH KEY usr03 = wa_tbl_prps-usr03. 这个句子是错的,它给了我一个错误 tbl_PEP和lv_Responsible是不兼容的 有没有办法通过“运输场”实现这一目标 根据on读取表格,如果使用传输选项,接收数据的工作区必须与读取表格的线型兼容。您声明的变量lv_responsible似乎与

我试图从interal表中获取一个字段,如下所示:

READ TABLE tbl_peps TRANSPORTING ususap INTO lv_responsable WITH KEY usr03 = wa_tbl_prps-usr03.
这个句子是错的,它给了我一个错误

tbl_PEP和lv_Responsible是不兼容的

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

根据on
读取表格
,如果使用传输选项,接收数据的工作区必须与读取表格的线型兼容。您声明的变量
lv_responsible
似乎与
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_Responsible必须定义如下

DATA: lv_responsable LIKE LINE OF tbl_peps.
只有这样,您才能将字段
lv_responsable-ususasap
中的值分配给该字段类型的另一个变量。

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

try.
    lv_responsable = tbl_peps[ usr03 = wa_tbl_prps-usr03 ]-ususap.
catch CX_SY_ITAB_LINE_NOT_FOUND.
endtry.
有关新表表达式的更多信息,请参见。

解决潜在问题 您希望只传输一个字段的原因是为了节省内存和加快处理速度。有一种更好的方法,使用字段符号:

READ TABLE tbl_peps 
  ASSIGNING FIELD-SYMBOL(<fs_responsable>) 
  WITH KEY usr03 = wa_tbl_prps-usr03.
读取表tbl\u peps
分配字段-SYMBOL()
按键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.
FIELD-SYMBOLS:类似于tbl\U PEP的行。
阅读表tbl\U peps
分配
按键usr03=wa_tbl_prps-usr03。

恐怕你是对的。。我认为有一种方法不使用工作区。我想避免使用工作区,因为只需要一个字段。@Dirk Trilsbeek在READ TABLE语句中使用TRANSPORTING关键字有明显的好处。不管有没有它,这份声明都会起作用。i、 e:将表tbl_peps读入wa_peps,键usr03=wa_tbl_prps-usr03。将wa_peps-ususap移动到lv_Responsible。@Erik通过传输,您可以选择只将字段的子集传输到目标结构中。例如,如果只希望获取单个字段并将值移动到已填充的工作区域中,则保持WA中其他字段的值不变。由于READ TABLE在内部表上工作,并且在内存中,所以我不认为有任何严重的性能优势。当然取决于数据量。非常好contribution@funkeeiads如果你认为这是一个优秀的贡献,你可以从另一个问题中取消选中已接受的分数,并把它放在这里。