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

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


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

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


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

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