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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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