SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

loop statement



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
nordlender
Участник
Участник



Joined: 28 Jul 2009
Posts: 24

PostPosted: Thu Jul 07, 2011 1:15 pm    Post subject: loop statement Reply with quote

Привет всем,

имеется структура (st_test1) в которой посреди есть компонент value_test. Этот компонент записан как tabletyp и показывает на вторую структуру (st_test2) .
мне надо высчитать эти данные и передать дальше. я зделал 2 цикла: первый проверяет первую структуру и дойдя до поля value_tesт должен включиться второй цикл. Но не знаю как правельно это сделать . Пытался с if statement , но не получается....
надеюсь на вашу помощ.



Code:
  LOOP  AT st_test1  ASSIGNING <st_test1t>.
    APPEND  <st_test1t> TO result.

    IF<st_test1t>-column =  'value_test'.

      LOOP AT st_test2  ASSIGNING   <st_test2> .
        APPEND <st_test2> TOresult..
      ENDLOOP.
    ENDIF.
  ENDLOOP.
Back to top
View user's profile Send private message
Fami4
Специалист
Специалист


Age: 42
Joined: 04 Aug 2009
Posts: 62
Location: UA

PostPosted: Thu Jul 07, 2011 3:39 pm    Post subject: Reply with quote

может так:

Code:

LOOP  AT st_test1  ASSIGNING <st_test1t> where value_test is not initial.

...
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Jul 07, 2011 4:23 pm    Post subject: Reply with quote

Code:
LOOP AT gt_test1 into st_test1.
  LOOP AT st_test1-value_test INTO st_test2 WHERE ...

Почитайте справку по табличным типам данных.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
nordlender
Участник
Участник



Joined: 28 Jul 2009
Posts: 24

PostPosted: Thu Jul 07, 2011 6:04 pm    Post subject: Reply with quote

спасибо за советы.
вот так я решил эту проблемку:

Code:
LOOP  AT st_test1  ASSIGNING <st_test1t>..
    IF<st_test1t>-column =  'value_test'.
 LOOP AT st_test2  ASSIGNING   <st_test2> .
        APPEND <st_test2> TOresult..
      ENDLOOP.
    ELSE .
     APPEND  <st_test1t> TO result.
    ENDIF.
  ENDLOOP.
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Jul 07, 2011 8:54 pm    Post subject: Reply with quote

Тогда получится, что в таблицу result будут добавляться записи:
а)все записи из таблицы st_test1, у которых в поле column не содержится значение 'value_test'
б)все записи таблицы st_test2 столько раз, сколько в таблице st_test1 записей со значением поля column 'value_test'

Нужно было именно это? Confused

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
nordlender
Участник
Участник



Joined: 28 Jul 2009
Posts: 24

PostPosted: Fri Jul 08, 2011 3:10 pm    Post subject: Reply with quote

а) - так
б) - немного не так , наверное я немног не верно обьяснился.
В таблице st_test1 - всего лиш одна запись со сначением поля column 'value_test' . В таблице st_test2 например 5 записисей. Все эти 5 записей и встают на место 'value_test'.
Code:
 
Таблица st_test1   Таблица st_test2   Таблица result

id   column         id   column         id   column
1     t1            1   t111            1   t1   
2     t2            2   t222            2   t2
3     t3                                3   t3
4   'value_test                         4   t111
                                        5   t222

думаю так понятнее будет.
Back to top
View user's profile Send private message
bimit
Специалист
Специалист



Joined: 11 Jul 2011
Posts: 56

PostPosted: Mon Jul 11, 2011 10:06 am    Post subject: Reply with quote

nordlender wrote:
а) - так
б) - немного не так , наверное я немног не верно обьяснился.
В таблице st_test1 - всего лиш одна запись со сначением поля column 'value_test' . В таблице st_test2 например 5 записисей. Все эти 5 записей и встают на место 'value_test'.
Code:
 
Таблица st_test1   Таблица st_test2   Таблица result

id   column         id   column         id   column
1     t1            1   t111            1   t1   
2     t2            2   t222            2   t2
3     t3                                3   t3
4   'value_test                         4   t111
                                        5   t222

думаю так понятнее будет.


Зачем тогда цикл в цикле ?? если одна запись, то проще использовать READ TABLE
Back to top
View user's profile Send private message
nordlender
Участник
Участник



Joined: 28 Jul 2009
Posts: 24

PostPosted: Mon Jul 11, 2011 10:16 am    Post subject: Reply with quote

наверно проще... я всех токностей абапа не знаю , я тольку его осваиваю потихоньку. мне почему-то сразу эта идея пришла, вот я её и реализовал... На будущее запомню. Спасибо за совет.
Back to top
View user's profile Send private message
bimit
Специалист
Специалист



Joined: 11 Jul 2011
Posts: 56

PostPosted: Mon Jul 11, 2011 11:03 am    Post subject: Reply with quote

nordlender wrote:
наверно проще... я всех токностей абапа не знаю , я тольку его осваиваю потихоньку. мне почему-то сразу эта идея пришла, вот я её и реализовал... На будущее запомню. Спасибо за совет.


Проще вообще работать тогда с рабочей областью WA или FIELD-SYMBOLS по коду непонятно как заполняется таблица st_test1 создавать таблицу ради одной записи как то не айс
Back to top
View user's profile Send private message
nordlender
Участник
Участник



Joined: 28 Jul 2009
Posts: 24

PostPosted: Mon Jul 11, 2011 7:49 pm    Post subject: Reply with quote

ну я вообще-то и работаю с FIELD-SYMBOLS, а в начале моего сообщения я написал , что st_test1 - это структура, которая мне передаётся. Используется оне не только в моём случаи и поэтому создовалась не только из-за одной записи.
наверное мы немного друг друга не поняли.
Back to top
View user's profile Send private message
bimit
Специалист
Специалист



Joined: 11 Jul 2011
Posts: 56

PostPosted: Tue Jul 12, 2011 8:17 am    Post subject: Reply with quote

nordlender wrote:
ну я вообще-то и работаю с FIELD-SYMBOLS, а в начале моего сообщения я написал , что st_test1 - это структура, которая мне передаётся. Используется оне не только в моём случаи и поэтому создовалась не только из-за одной записи.
наверное мы немного друг друга не поняли.


Так и есть, разобрался что ты хотел. Несовсем корректно написано просто было.

Я как понял у тебя есть 2 внутренние таблицы st_test1 и st_test2 и ты из них добавляешь записи в третью таблицу result, записи из st_test2 добавляются по полю st_test1-column = 'value_test'.

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

Code:
LOOP  AT st_test1  ASSIGNING <st_test1t>.
     IF <st_test1t>-column =  'value_test'.
         APPEND LINES OF st_test2[] TO result[].
     ELSE.
      APPEND  <st_test1t> TO result.
     ENDIF.
ENDLOOP.
Back to top
View user's profile Send private message
nordlender
Участник
Участник



Joined: 28 Jul 2009
Posts: 24

PostPosted: Tue Jul 12, 2011 10:58 am    Post subject: Reply with quote

спасибо, попробую

у меня тут новая проблемка появилась..
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.