Текущее время: Вт, июл 22 2025, 22:08

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 15:29 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, янв 30 2009, 16:19
Сообщения: 335
Пол: Мужской
Добрый вечер, господа!
Прошу о помощи. Изучаю понемногу АБАП. Есть необходимость заполнить внутр.таблицу, отфильтровывая данные, используя другую внутр.таблицу. Для примера, использую незабвенные таблицы SFLIGHT и SBOOK.
Code:
REPORT  ZSTUDY
DATA: begin of BOOK occurs 0,
      carrid like sbook-carrid,
      connid like sbook-connid,
      end of book.
DATA: begin of FLIGHT occurs 0,
      carrid like sflight-carrid,
      connid like sflight-connid,
      end of FLIGHT.

SELECT carrid connid FROM SBOOK into corresponding fields of table BOOK
    WHERE SBOOK~CARRID eq 'AA' and
                SBOOK~CONNID eq '17'.

IF not BOOK IS INITIAL.
  SELECT carrid connid into corresponding fields of table FLIGHT
  FROM SFLIGHT
  FOR ALL ENTRIES IN BOOK
  WHERE SFLIGHT~CARRID eq BOOK-CARRID.
ENDIF.
            WRITE: / FLIGHT-carrid.

Но на экран ничего не выводится. Что в коде не так?
Спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 15:33 
Специалист
Специалист

Зарегистрирован:
Пт, авг 24 2012, 11:48
Сообщения: 200
Сделайте цикл по табл. FLIGHT, внутри которого вставьте WRITE: / FLIGHT-carrid.

LOOP AT FLIGHT.
...
ENDLOOP.

И в отладчике посмотрите заполнился ли FLIGHT.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы  Тема решена
СообщениеДобавлено: Ср, окт 10 2012, 15:35 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, сен 19 2011, 13:29
Сообщения: 492
Пол: Мужской
Code:
IF not BOOK[] IS INITIAL.
...
ENDIF.
LOOP AT FLIGHT.
  WRITE: / FLIGHT-carrid.
ENDLOOP.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 15:40 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
+1 к предыдущему комментарию
IMHO лучше не использовать occurs и with header line, чтобы избежать этого гемора с book и book[]


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 15:54 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, янв 30 2009, 16:19
Сообщения: 335
Пол: Мужской
Спасибо, кое-что на экран вышло. Но теперь новая напасть: вывелось всего 3 записи.
Хотя в SBOOK записей, соответствующих критериям фильтрования, больше 5000 (write: / book-carrid показывает это), а в SFLIGHT - 27.
Причем, если написать
LOOP AT FLIGHT.
WRITE: / FLIGHT-carrid, flight-connid.
ENDLOOP.
то на экран выводится следующее
AA 0017
AA 0026
AA 0064


Последний раз редактировалось axion Ср, окт 10 2012, 15:57, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 15:55 
Специалист
Специалист

Зарегистрирован:
Пт, авг 24 2012, 11:48
Сообщения: 200
или лучше приучить себя всегда писать []. Код нагляднее будет даже без header lineов


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 16:00 
Специалист
Специалист

Зарегистрирован:
Пт, авг 24 2012, 11:48
Сообщения: 200
а вы по двум поля перемежайте таблицы
CORRID, CONNID


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 16:05 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, янв 30 2009, 16:19
Сообщения: 335
Пол: Мужской
Да, точно.
Shvetz, MantiCore1977, Korvax, спасибо!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 16:08 
Специалист
Специалист

Зарегистрирован:
Пт, авг 24 2012, 11:48
Сообщения: 200
И кстати когда у вас результат будет верный не забудьте об оптимизации

Сначала выбирается таблица с меньшим кол-вом записей, а потом перемежается с большей. То есть сначала селект из SBOOK надо делать, а потом по SFLIGHT. Зависит от того, конечно, что нужно выбрать. Чтобы самому не париться можно использовать INNER JOIN

А так в вашем случае можно и сразу одним селектом тащить из SFLIGHT по CONNID CARRID, чтобы данные выбрать для WRITE.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Заполнение внутр.таблицы с применением фильтра по полям из другой внутр.таблицы
СообщениеДобавлено: Ср, окт 10 2012, 16:12 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, янв 30 2009, 16:19
Сообщения: 335
Пол: Мужской
Да, безусловно. Это я на простом примере учусь.
Более сложный случай как раз ждет с таблицами MSEG и MKPF: в первой таблице есть виды движения(поле BWART), а во второй - их нет.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB