Текущее время: Сб, июл 19 2025, 22:03

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Возможно ли динамическое опбращение к полям таблицы?
СообщениеДобавлено: Пн, мар 06 2006, 09:19 
Специалист
Специалист

Зарегистрирован:
Пн, сен 20 2004, 10:38
Сообщения: 152
Ситуация такая: надо последовательно обработать все поля таблицы TABL. Причем для каждого поля код один и тотже но достаточно громоздкий. Есть ли какая нибудь возможность в конструкции
TABL-FIELD = X (где FIELD - имя поля, а X - присваемое значение), FIELD менять динамически, используя данные из таблицы TABLFIELD куда предварительно записать как данные имена всех полей таблицы TABL, воспользовавшись функцией GET_COMPONENT_LIST.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли динамическое опбращение к полям таблицы?
СообщениеДобавлено: Пн, мар 06 2006, 09:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
Esoteric написал(а):
Ситуация такая: надо последовательно обработать все поля таблицы TABL. Причем для каждого поля код один и тотже но достаточно громоздкий. Есть ли какая нибудь возможность в конструкции
TABL-FIELD = X (где FIELD - имя поля, а X - присваемое значение), FIELD менять динамически, используя данные из таблицы TABLFIELD куда предварительно записать как данные имена всех полей таблицы TABL, воспользовавшись функцией GET_COMPONENT_LIST.


F1 на команде assign


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 11:00 
Гость
Code:
REPORT Z1 .

DATA: BEGIN OF ZAP,
       VAL1(15),
       VAL2(15),
       VAL3(15),
       VAL4(15),
       VAL5(15),
       VAL6(15),
       VAL7(15),
      END OF ZAP,
      VAL(20),
      STEP TYPE I,
COMP LIKE  RSTRUCINFO OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS: <F>.

CALL 'AB_STRUC_INFO'
  ID 'PROGRAM'   FIELD SY-REPID
  ID 'STRUCNAME' FIELD 'ZAP'
  ID 'STRUCINFO' FIELD COMP-*SYS*.

STEP = 1.

LOOP AT COMP.
  CONCATENATE 'ZAP-' COMP-COMPNAME INTO VAL.
  ASSIGN (VAL) TO <F>.
  CHECK SY-SUBRC = 0.
  PERFORM OBRAB USING <F>.
  WRITE:/ VAL, <F>.
  ADD 1 TO STEP.
ENDLOOP.

FORM OBRAB USING TVAL TYPE CHAR15.
  CASE STEP.
    WHEN 1.  TVAL = 'Понедельник'.
    WHEN 2.  TVAL = 'Вторник'.
    WHEN 3.  TVAL = 'Среда'.
    WHEN 4.  TVAL = 'Четверг'.
    WHEN 5.  TVAL = 'Пятница'.
    WHEN 6.  TVAL = 'Суббота'.
    WHEN 7. TVAL =  'Воскресенье'.
  ENDCASE.

ENDFORM.                 



Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 11:32 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
РМщик написал(а):
CALL 'AB_STRUC_INFO'
ID 'PROGRAM' FIELD SY-REPID
ID 'STRUCNAME' FIELD 'ZAP'
ID 'STRUCINFO' FIELD COMP-*SYS*.

А может сразу на ассемблере? :D

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 11:33 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
Может не в тему маленько а что это за прикол с COMP-*SYS*. ? ;)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 11:45 
Гость
ну лень мне было писать call function GET_COMPONENT_LIST.....

тем более, что внутрии ее такой коротенький код :)

ПРИДИРЫ! :lol: :lol: :lol:


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 12:10 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Программы с прямым вызовом с- функций ядра могут не пережить upgrade, сап рекомендует использовать в данном случае Runtime Type Identification (см класс CL_ABAP_TYPEDESCR).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 12:21 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
ну или же использовать DO..VARYING... :roll:
например:
Code:
DATA: BEGIN OF ZAP,
       VAL1(15),
       VAL2(15),
       VAL3(15),
       VAL4(15),
       VAL5(15),
       VAL6(15),
       VAL7(15),
      END OF ZAP,
      val(15).

do 7 times varying val from zap-val1 next zap-val2.
  val = sy-index.
enddo.
write : / zap.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 12:26 
Гость
не факт, что поля будут иметь сходные названия :)

а вообще - смысл примера показать assign. а не способ получения списка полей! 8)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 12:40 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
РМщик написал(а):
не факт, что поля будут иметь сходные названия :)

если не ошибаюсь, для DO..VARYING не важны имена полей в структуре, а важен лишь их тип, т.е расстояние между ними в памяти...
ну а если речь только про assign, то <я не знать русский языка> :wink:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 12:45 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Ну а если про GET_COMPONENT_LIST , то он работает только для глобальных данных программы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 06 2006, 19:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Для получения компонентов можно использовать класс cl_abap_typedescr, например
cl_abap_typedescr=>describe_by_data

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 07 2006, 09:00 
Гость
смотри assign component


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: похожий вопрос
СообщениеДобавлено: Ср, окт 25 2006, 11:49 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, окт 23 2006, 16:59
Сообщения: 24
Откуда: Запорожье
Как мне сделать динамическое присвоение поля таблицы?

select kstar sum( kstarwtg ) into (my-mystar, my-wtg) from............

kstarwtg будет браться с экрана.

С использованием assign не получается, потому что в нём:
ASSIGN TABLE FIELD (NAME) TO <F>.
надо указывать поле таблицы (в данном примере NAME), а оно то у меня и будет изменяться.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: похожий вопрос
СообщениеДобавлено: Ср, окт 25 2006, 12:03 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
Zidan написал(а):
Как мне сделать динамическое присвоение поля таблицы?

select kstar sum( kstarwtg ) into (my-mystar, my-wtg) from............

kstarwtg будет браться с экрана.

С использованием assign не получается, потому что в нём:
ASSIGN TABLE FIELD (NAME) TO <F>.
надо указывать поле таблицы (в данном примере NAME), а оно то у меня и будет изменяться.


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

select (fields) from... надо только fields заполнить


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

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


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

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


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

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