Текущее время: Вт, май 13 2025, 11:27

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Рекомендация
СообщениеДобавлено: Пт, окт 15 2004, 17:05 
Гость
Пожалуйста порекомендуйте, как лучше сделать нижеследующий код, для огромнейшего количества, которые будут идти вместо ................., иначе говоря, как лучше оптимизировать?
loop at dtab.
select * from pa0002 where pernr = dtab-pernr.

dtab-midnm like pa0002-midnm,
. . . . . . . . . . . . . . . . . . . . .

dtab-nachn like pa0002-nachn,

modify DTAB index sy-tabix.
endselect.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 15 2004, 17:09 
Гость
извините Господа, вместо like должно быть =


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 15 2004, 17:15 
Гость
MOVE-CORRESPONDING


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Re: Рекомендация
СообщениеДобавлено: Пт, окт 15 2004, 17:26 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, окт 13 2004, 14:03
Сообщения: 209
Откуда: Москва
Пол: Мужской
abuser написал(а):
Пожалуйста порекомендуйте, как лучше сделать нижеследующий код, для огромнейшего количества, которые будут идти вместо ................., иначе говоря, как лучше оптимизировать?
loop at dtab.
select * from pa0002 where pernr = dtab-pernr.

dtab-midnm like pa0002-midnm,
. . . . . . . . . . . . . . . . . . . . .

dtab-nachn like pa0002-nachn,

modify DTAB index sy-tabix.
endselect.


Если мне не изменяет память, то РА0002 это персональные данные, то бишь ФИО и т.д. Следовательно у человека эта запись может быть только одна. Поэтому лучше написать:
loop at dbtab.
select single * from pa0002 where pernr = dbtab-pernr.
if sy-subrc = 0.
move-corresponding pa0002 to dbtab.
modify dbtab.
endif.
endloop.

А ещё лучше инфо-типы читать с помощью ФМ "HR_READ_INFOTYPE".
Например:

CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
PERNR = PERNR_P
INFTY = '0002'
BEGDA = DATE_P
ENDDA = DATE_P
TABLES
INFTY_TAB = p0002
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC = 0.
read table p0002 index 1.
ELSE.
clear p0002.
ENDIF.

"ПЛЮС" данной фишки заключается в том, что проверяются все возможные полномочия пользователя, соответственно у вас не будет болеть голова об этом :wink:

Удачи !


Последний раз редактировалось ROMP Пт, окт 15 2004, 17:29, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 15 2004, 17:26 
Гость
dtab отлична от pa0002 по структуре


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 15 2004, 17:28 
Гость
dtab включает еще множество полей из других таблиц


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 15 2004, 17:32 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, окт 13 2004, 14:03
Сообщения: 209
Откуда: Москва
Пол: Мужской
abuser написал(а):
dtab включает еще множество полей из других таблиц


Так ведь move-corresponding "распихает" значения из таблицы по полям вн. таблицы, имеющим такое же название...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 15 2004, 17:34 
Гость
ах да точно запамятовал, спасибо


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Re: Рекомендация
СообщениеДобавлено: Сб, окт 16 2004, 09:32 
Гость
ROMP написал:
abuser написал(а):
Если мне не изменяет память, то РА0002 это персональные данные, то бишь ФИО и т.д. Следовательно у человека эта запись может быть только одна.


нет, не одна. одна - только текущая.
поэтому
select * from pa0002 where pernr = dtab-pernr
and begda <= sy-datum
and endda >= sy-datum.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Re: Рекомендация
СообщениеДобавлено: Пн, окт 18 2004, 03:08 
Гость
ROMP написал:
Поэтому лучше написать:
loop at dbtab.
select single * from pa0002 where pernr = dbtab-pernr.
if sy-subrc = 0.
move-corresponding pa0002 to dbtab.
modify dbtab.
endif.
endloop.


А если уж речь идет об оптимизации, то и вовсе надо бы select вынести из loop-а ...

select * into table it_pa0002 from pa0002 for all entries in dbtab where pernr = dbtab-pernr.

loop at dbtab.
read table it_pa0002 with key pernr = dbtab-pernr.
if sy-subrc = 0.
move-corresponding it_pa0002 to dbtab.
modify dbtab.
endif.
endloop.


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

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


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

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


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

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