Текущее время: Вс, июл 27 2025, 19:13

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: field-symbols
СообщениеДобавлено: Вт, дек 12 2006, 11:15 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 12 2006, 11:07
Сообщения: 62
Добрый день.

вопрос в следующем, как в программе динамически тип field-symbols определять?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 11:34 
Гость
CREATE DATA


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 11:38 
Гость
Code:
DATA: RDAT TYPE REF TO DATA.
FIELD-SYMBOLS: <P>.

CREATE DATA RDAT TYPE ('BKPF').
ASSIGN RDAT->* TO <P>.



Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 11:51 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 12 2006, 11:07
Сообщения: 62
нет, к сожалению, эта конструкция не помогает, так как мне потом необходимо прямое обращение к полям FIELD-SYMBOLS.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 12:00 
Гость
Если Вы хотите все определять динамически,
ИМХО только такой принципиальный вариант:

Code:
DATA: RDAT TYPE REF TO DATA,
      NPOLE(20).
FIELD-SYMBOLS: <P>,
               <BUKRS>,
               <BUTXT>.

CREATE DATA RDAT TYPE ('T001').
ASSIGN RDAT->* TO <P>.

IF SY-SUBRC = 0.
  SELECT  * FROM T001 INTO <P>.
    NPOLE = '<P>-BUKRS'.
    ASSIGN (NPOLE) TO <BUKRS>.
    NPOLE = '<P>-BUTXT'.
    ASSIGN (NPOLE) TO <BUTXT>.
    WRITE:/  <BUKRS>,
             <BUTXT>.
  ENDSELECT.
ENDIF.
.

но может есть другие...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 12:15 
Гость
вот даже более наглядный пример:

Code:



CONSTANTS:
* Имя таблицы
           T(10) VALUE  'T001',
* Список полей
           P1(10) VALUE 'BUKRS',
           P2(10) VALUE 'BUTXT'.


DATA: RDAT TYPE REF TO DATA,
      NPOLE(20).
FIELD-SYMBOLS: <P>,
               <POLE1>,
               <POLE2>.

CREATE DATA RDAT TYPE (T).
ASSIGN RDAT->* TO <P>.

IF SY-SUBRC = 0.
  SELECT  * FROM (T) INTO <P>.
    CONCATENATE '<P>-' P1 INTO NPOLE .
    ASSIGN (NPOLE) TO <POLE1>.
    CONCATENATE '<P>-' P2 INTO NPOLE .
    ASSIGN (NPOLE) TO <POLE2>.
    WRITE:/  <POLE1>,
             <POLE2>.
  ENDSELECT.
ENDIF.


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

Зарегистрирован:
Вт, дек 12 2006, 11:07
Сообщения: 62
сформулирую вопрос по другому: в подпрограмму передаются 2 структуры f_connect и f_device. У них есть одинаковые поля, которые необходимо присвоить l_data_generalx. Мне необходимо, чтобы тип field-symbols задавался динамически. Т.е., например, если f_connect непусто, то нужно к <fs> "приасайнить" f_connect. А если f_device непусто, то нужно к <fs> "приасайнить" f_device.

FORM change_bapi_for_isu USING f_connect TYPE t_connect
f_device TYPE t_device.

DATA: l_data_generalx LIKE bapi_itobx.

if not f_connect is initial.
field-symbols: <fs> type t_connect.
assign f_connect to <fs>.
elseif not f_device is initial.
*???????????????????
else.
exit.
endif.

l_data_general-descript = <fs>-pltxt.
l_data_general-maintplant = <fs>-swerk.

.................................

ENDFORM.

как бы это реализовать, посимпатичней?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 12:41 
Гость
Code:

FORM CHANGE_BAPI_FOR_ISU USING
           F_CONNECT TYPE T_CONNECT
           F_DEVICE TYPE T_DEVICE.

  DATA: L_DATA_GENERAL LIKE BAPI_ITOB.

  FIELD-SYMBOLS: <FS>, <FP>.

  IF NOT F_CONNECT IS INITIAL.
    ASSIGN F_CONNECT TO <FS>.
  ELSEIF NOT F_DEVICE IS INITIAL.
    ASSIGN F_DEVICE TO <FS>.
  ELSE.
    EXIT.
  ENDIF.

  ASSIGN COMPONENT 'PLTXT' OF STRUCTURE <FS> TO <FP>.
  IF SY-SUBRC = 0.
    L_DATA_GENERAL-DESCRIPT = <FP>.
  ENDIF.
  ASSIGN COMPONENT 'SWERK' OF STRUCTURE <FS> TO <FP>.
  IF SY-SUBRC = 0.
    L_DATA_GENERAL-MAINTPLANT = <FP>.
  ENDIF.
  .................................
ENDFORM.                    "


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

Зарегистрирован:
Вт, дек 12 2006, 11:07
Сообщения: 62
ну, в принципе вариант рабочий (я тоже об этом подумывал) но громоздко получается (полей много). Мне интересно есть что-то более изящное, никто не знает? может не через филд символы? например, нельзя ли как-то именно эту часть программы (декларация и присвоение филд символа), а не всю подпрограмму, динамически формировать через внутреннюю таблицу и что-нибудь типа GENERATE SUBROUTINE?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 13:09 
Гость
zxcvbn написал(а):
ну, в принципе вариант рабочий (я тоже об этом подумывал)


Спасибо, шеф! 8)

GENERATE SUBROUTINE - ИМХО лучше не использовать


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 13:19 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 13 2006, 11:49
Сообщения: 23
помогут макросы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 13:22 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 13 2006, 11:49
Сообщения: 23
vaseky написал(а):
помогут макросы

DATA: l_data_generalx LIKE bapi_itobx.
define mac_set_val.
l_data_general-descript = &1-pltxt.
l_data_general-maintplant = &1-swerk.
end-of-definiton.

if not f_connect is initial.
mac_set_val f_connect.
elseif not f_device is initial.
mac_set_val f_device.
else.
exit.
endif.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 13:34 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 12 2006, 11:07
Сообщения: 62
Да, макросы в данном случае - красивый и не громоздкий вариант. :)
К сожалению, проблема динамической типизации филд символов с дальнейшим использованием его полей так и осталась открытой.

но все равно, всем большое СПАСИБО!!! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 13:35 
Гость
vaseky написал(а):
помогут макросы


да, этот вариант даже красивее


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 12 2006, 14:35 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 13 2006, 11:49
Сообщения: 23
zxcvbn написал(а):
К сожалению, проблема динамической типизации филд символов с дальнейшим использованием его полей так и осталась открытой.

почему открытой?
знаешь имя структуры и имя поля - дак и все делай ASSIGN, а если тебе надо в одну строку кода сделать, вынеси ASSIGN в FORM и все будет ОК:)
PERFORM set_val USING: ....1
....2.

или создай структуру с общими полями для f_connect и f_device и MOVE-CORRESPONDING хоть из филд символа, хоть сразу...


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

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


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

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


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

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