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

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


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

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


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

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