选择无标题时出错

时间:2011-08-11 11:02:30

标签: abap

我希望从EPREIET_DATA ET_DATA选择价格,价格是我希望从EPREIH填充的结构......

*"----------------------------------------------------------------------
*"*"Lokálne rozhranie:
*"  IMPORTING
*"     REFERENCE(I_PREIS) TYPE  ZRT_IWP_CPREISTYP OPTIONAL
*"  EXPORTING
*"     REFERENCE(ET_DATA) TYPE  ZTT_IWPIFC_PRICE
*"  EXCEPTIONS
*"      NO_DATA_SELECTED
*"----------------------------------------------------------------------

 field-symbols: <lfs_ET_DATA> like line of ET_DATA.
 refresh ET_DATA.

 SELECT *
  FROM EPREI
  into CORRESPONDING FIELDS OF TABLE ET_DATA.

 loop at ET_DATA assigning <lfs_ET_DATA>.
   select *
 from EPREIH 
   into CORRESPONDING FIELDS OF TABLE ET_DATA-prices
   where PREIS = <lfs_ET_DATA>-PREIS
   and PREISTYP <= <lfs_ET_DATA>-PREISTYP.
 endloop.

显示错误:

"ET_DATA" is table without hedaer line and therefore have not component call prices.

如何正确选择?对不起我的英语,但我太累了......

3 个答案:

答案 0 :(得分:2)

如上一个答案所述,ET_DATA是对表类型的引用,没有工作区。

因此,如果您真的想在ET_DATA-PRICE中添加EPREIH列表,则必须指向分配给您的字段符号的工作区。

这样的事情:

 field-symbols: <lfs_ET_DATA> like line of ET_DATA.
 refresh ET_DATA.

 SELECT *
  FROM EPREI
  into CORRESPONDING FIELDS OF TABLE ET_DATA.

 loop at ET_DATA assigning <lfs_ET_DATA>.
   select *
 from EPREIH 
   into CORRESPONDING FIELDS OF TABLE <lfs_ET_DATA>-prices
   where PREIS = <lfs_ET_DATA>-PREIS
   and PREISTYP <= <lfs_ET_DATA>-PREISTYP.
 endloop.

额外提示:尝试使用带有“关键字大写”的漂亮打印机,如果不使用这些表中的所有字段,请避免使用“select *”。

答案 1 :(得分:0)

我不完全确定你在尝试什么,但看起来你想要更新表ET_DATA的字段“价格”。

如果EPREI中的每条记录在EPREIH中有1条记录,则您的选择应如下所示:

loop at ET_DATA assigning <lfs_ET_DATA>.
   select single prices
   from EPREIH 
   into <lfs_ET_DATA>-prices
   where 
     PREIS = <lfs_ET_DATA>-PREIS
     and PREISTYP <= <lfs_ET_DATA>-PREISTYP.
 endloop.

您正在使用字段(ET_DATA-prices)作为表格(INTO CORRESPONDING FIELDS OF)。那不行。

答案 2 :(得分:0)

首先,您获得语法错误的原因是您需要使用工作区更新ET_DATA(结构声明为与表相同类型的行)。

你的代码最终会做的是在循环的每次迭代中替换第二个选择中ET_DATA中的记录,这样就什么也不做。

您最喜欢使用JOIN选择一个SELECT中的所有内容:

SELECT E1~FIELD1 E2~FIELD2 (etc.)
FROM EPREI as E1
  JOIN EPREIH as E2
   ON E2~PREIS = E1~PREIS AND
      E2~PREISTYP = E2-PREISTYP
into CORRESPONDING FIELDS OF TABLE ET_DATA.

您只需要更改上面SELECT子句中的字段规范以匹配表中的字段(并且可以省略CORRESPONDING)。

你应该用WHERE子句来限制对EPREI的选择。