SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Динамические структуры



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Ketsalkoatl
Участник
Участник


Age: 38
Joined: 17 Jan 2011
Posts: 3
Location: 176

PostPosted: Mon Jan 17, 2011 1:36 pm    Post subject: Динамические структуры Reply with quote

Добрый день,
прошу помощи с небольшой проблемой кода, над которым бьюсь уже не один день...
Осваивать АБАП начал не давно, поэтому не отрицаю что возможна проблема в обычном упущении элементарных вещей...

Суть вопроса - есть код, который частично был взят как пример с этого форума:

Code:

name_dt           TYPE                    dd02l-tabname,
...
dt_field_catalog  TYPE                    lvc_t_fcat,
...
lt_dtable         TYPE REF TO             data,
datavalue         TYPE REF TO             data.
...
FIELD-SYMBOLS:  <fs_dtable>       TYPE                    STANDARD TABLE,
                          <fs_drows>        TYPE                    ANY.


Code:

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = name_dt
    CHANGING
      ct_fieldcat      = dt_field_catalog.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = dt_field_catalog
    IMPORTING
      ep_table        = lt_dtable.

  ASSIGN lt_dtable->* TO <fs_dtable>.
  CHECK <fs_dtable> IS ASSIGNED.
  SELECT *
    INTO TABLE <fs_dtable>
    FROM (name_dt).

  IF <fs_dtable> IS INITIAL.
    MESSAGE s398 WITH text-003 name_dt.
    STOP.
  ENDIF.

  CREATE DATA datavalue TYPE (name_dt).
  ASSIGN datavalue->* TO <fs_drows>.
  CHECK <fs_drows> IS ASSIGNED.
 
  LOOP AT <fs_dtable> ASSIGNING <fs_drows>.
  ENDLOOP.


Когда name_dt - таблицы куба, <fs_dtable> в последнем цикле LOOP, сохраняется значение Structure: flat & not charlike. Если же name_dt - обычная таблица, напримет Т100, то <fs_dtable> заполняется компонентами построчно. Все это наблюдаю через отладчик.
Подскажите, пожалуйста, что я упускаю?
Back to top
View user's profile Send private message
broker_chelny
Участник
Участник



Joined: 23 Jan 2010
Posts: 26
Location: Naberezhnye Chelny

PostPosted: Mon Jan 17, 2011 4:29 pm    Post subject: Reply with quote

А что не получается?
И что не так со структурой, про которую вы написали?
Back to top
View user's profile Send private message
Ketsalkoatl
Участник
Участник


Age: 38
Joined: 17 Jan 2011
Posts: 3
Location: 176

PostPosted: Mon Jan 17, 2011 4:40 pm    Post subject: Reply with quote

Для таблиц куба(/BIC/E*, /BIC/D*), в последнем цикле LOOP - AT, для этого FIEID-SIMBOL, значение остается Structure: flat & not charlike. Так как мне нужно работать лишь с некоторыми компонентами этой структуры, при коде:
Code:

ASSIGN COMPONENT 1 OF STRUCTURE <fs_drows> TO <fs_field>.

я падаю с ошибкой:
"The current statement is only defined for character-type data objects."

Хотя для таблиц типа DD02L, T100, созданных вручную таблиц, присвоение нужного компонента проходит успешно.[/quote]
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Jan 17, 2011 6:44 pm    Post subject: Reply with quote

А создание указателя на данные напрямую не работает?
Code:
DATA: dref TYPE REF TO DATA.
FIELD-SYMBOLS: <fs> TYPE ANY.

" Create object of type SBOOK and attach the field symbol
CREATE DATA dref TYPE sbook.
ASSIGN dref->* TO <fs>.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Ketsalkoatl
Участник
Участник


Age: 38
Joined: 17 Jan 2011
Posts: 3
Location: 176

PostPosted: Mon Jan 17, 2011 7:11 pm    Post subject: Reply with quote

Удав wrote:
А создание указателя на данные напрямую не работает?
Code:
DATA: dref TYPE REF TO DATA.
FIELD-SYMBOLS: <fs> TYPE ANY.

" Create object of type SBOOK and attach the field symbol
CREATE DATA dref TYPE sbook.
ASSIGN dref->* TO <fs>.



ПомоглоSmile
Большое спасибо, буду искать причину того, что мой вариант кода забраковывался. В первом сообщении и способ присвоения, и типы переменных точно такие же, как и в вашем примере...

Но в догонку еще один вопрос - как в этом случае значение этой структуры переложить в текстовую переменную?
Способ, типа
Code:

CONCATENATE row_var <fs> INTO row_var.

не работает.
Back to top
View user's profile Send private message
broker_chelny
Участник
Участник



Joined: 23 Jan 2010
Posts: 26
Location: Naberezhnye Chelny

PostPosted: Tue Jan 18, 2011 11:02 am    Post subject: Reply with quote

В справке написано: Depending on the type of processing, the data objects dobj1 dobj2 ... or the row type in the internal table itab and the separator sep must be byte or character type.
Так преобразуйте ссылку в символьный тип или типизируйте изначально.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.