我希望从EPREI
到ET_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.
如何正确选择?对不起我的英语,但我太累了......
答案 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的选择。