Ошибка в выборе без заголовка - PullRequest
2 голосов
/ 11 августа 2011

Я хочу сделать выбор от 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.

Как я могу сделать это правильно? Извините за мой английский, но я так устал ...

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Как говорилось в предыдущем ответе, ET_DATA является ссылкой на тип таблицы и не имеет рабочей области.

Так что, если вы действительно хотите добавить список EPREIH в ET_DATA-PRICE, вы должны указать рабочую область, которая назначена вашему символу поля.

Примерно так:

 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.

дополнительный совет: попробуйте использовать симпатичный принтер с "прописными буквами" и избегайте "выбирать *", если вы не используете все поля из этих таблиц.

0 голосов
/ 11 августа 2011

Во-первых, причина, по которой вы получаете синтаксическую ошибку, заключается в том, что вам необходимо обновить ET_DATA рабочей областью (структура, объявленная в виде строки того же типа, что и таблица).

В конечном итоге ваш код будет выполнять замену записей в ET_DATA при втором выборе, на каждой итерации цикла, так что это ничего не даст.

Скорее всего, вы можете выбрать все в одном SELECT, используя JOIN:

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, чтобы они соответствовали полям в вашей таблице (и вы могли бы пропустить КОРРЕСПОНДИНГ).

И вам, вероятно, следует ограничить выбор в EPREI предложением WHERE.

0 голосов
/ 11 августа 2011

Я не совсем уверен, что вы пытаетесь, но похоже, что вы хотите обновить поле "цены" таблицы ET_DATA.

Если у вас есть 1 запись в EPREIH для каждой записи в EPREI,Ваш выбор должен выглядеть следующим образом:

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).Это не сработает.

...