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

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


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

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


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

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