Текущее время: Вс, авг 03 2025, 15:45

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Внутренняя таблица элементами в виде Field-symbols
СообщениеДобавлено: Вт, июл 03 2007, 09:52 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 12 2006, 23:53
Сообщения: 40
Откуда: Moscow
Может, кто-нибудь уже такое пробовал?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутренняя таблица элементами в виде Field-symbols
СообщениеДобавлено: Вт, июл 03 2007, 10:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Long написал(а):
Может, кто-нибудь уже такое пробовал?

А в чём проблема? Неоднократно и многочисленно в том-же стандарте. Правда не Field-symbols, а используется ссылка (ref to data)

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 10:22 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 12 2006, 23:53
Сообщения: 40
Откуда: Moscow
Проблемы нет, вопрос интересен с точки зрения дополнительных возможностей. Вы не могли бы привести примеры использования?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 10:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
Long написал(а):
Проблемы нет, вопрос интересен с точки зрения дополнительных возможностей. Вы не могли бы привести примеры использования?

Лови, мой юнный друг :D
Code:
*&---------------------------------------------------------------------*
*& Report  Z_DYNAMIC                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*& AUTOR: ROKO                                                         *
*& POSTED: 3/07/2007                                                   *
*& WELCOM TO 37 MICRORAION                                             *
*&---------------------------------------------------------------------*

REPORT z_dynamic.

TYPE-POOLS : abap.

FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>,
               <dyn_field>.

DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data,
      xfc TYPE lvc_s_fcat,
      ifc TYPE lvc_t_fcat.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_table(30) TYPE c DEFAULT 'T001'.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

  PERFORM get_structure.
  PERFORM create_dynamic_itab.
  PERFORM get_data.
  PERFORM write_out.
*&---------------------------------------------------------------------*
*&      Form  get_structure
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_structure.

  DATA : idetails TYPE abap_compdescr_tab,
         xdetails TYPE abap_compdescr.

  DATA : ref_table_des TYPE REF TO cl_abap_structdescr.

* Get the structure of the table.
  ref_table_des ?=
      cl_abap_typedescr=>describe_by_name( p_table ).
  idetails[] = ref_table_des->components[].

  LOOP AT idetails INTO xdetails.
    CLEAR xfc.
    xfc-fieldname = xdetails-name .
    xfc-datatype = xdetails-type_kind.
    xfc-inttype = xdetails-type_kind.
    xfc-intlen = xdetails-length.
    xfc-decimals = xdetails-decimals.
    APPEND xfc TO ifc.
  ENDLOOP.

ENDFORM.                    "get_structure
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_dynamic_itab.

* Create dynamic internal table and assign to FS
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ifc
    IMPORTING
      ep_table        = dy_table.

  ASSIGN dy_table->* TO <dyn_table>.

* Create dynamic work area and assign to FS
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.

ENDFORM.                    "create_dynamic_itab
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data.

* Select Data from table.
  SELECT * INTO TABLE <dyn_table>
             FROM (p_table).

ENDFORM.                    "get_data
*&---------------------------------------------------------------------*
*&      Form  write_out
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM write_out.
*Write out data from table.
  LOOP AT <dyn_table> INTO <dyn_wa>.
    DO.
      ASSIGN COMPONENT  sy-index
         OF STRUCTURE <dyn_wa> TO <dyn_field>.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      IF sy-index = 1.
        WRITE:/ <dyn_field>.
      ELSE.
        WRITE: <dyn_field>.
      ENDIF.
    ENDDO.
  ENDLOOP.
ENDFORM.                    "write_out

Успехов тебе в трудах наших неправидных :D :D :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 10:36 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
ROKO написал:
Лови, мой юнный друг :D


ROKO, юнный и AUTOR написано с ошибкой. И помоему, автор поста спрашивал, как в таблице хранить указатели ;-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 10:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
vga написал(а):
ROKO, юнный и AUTOR написано с ошибкой.

А вы следите за чистотой русского языка на портале? :D
vga написал(а):
И помоему, автор поста спрашивал, как в таблице хранить указатели ;-)

А по моему, автор хотел спросить где применяются динамически созданные внутренние таблицы. :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 10:57 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
ROKO написал:
Лови, мой юнный друг :D
Уважаемый, постить полные тексты своих программ не обязательно и даже вредно. Во-первых, дай человеку головой подумать, а не копипастить. Во-вторых, так до уровня индусов на SDN скатимся - у кого длиннее тот и круче. Лично меня такие перспективы не радуют, ИМХО...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 10:58 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 12 2006, 23:53
Сообщения: 40
Откуда: Moscow
ROKO написал:
vga написал(а):
А по моему, автор хотел спросить где применяются динамически созданные внутренние таблицы. :D

Будет правильнее, если я скажу, что меня интересуют таблицы с указателями. Но все равно спасибо за Ваш пример


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 11:01 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Long написал(а):
Проблемы нет, вопрос интересен с точки зрения дополнительных возможностей. Вы не могли бы привести примеры использования?

Никаких дополнительных возможностей.
Code:
TYPES
    : BEGIN OF lt_t1
      , f1 TYPE REF TO prelp-pernr
      , f2 TYPE i
    , END   OF lt_t1
    .
DATA: ls_s1 TYPE lt_t1
    , lt_t1 LIKE STANDARD TABLE OF ls_s1
    , lv_v1 TYPE prelp-pernr VALUE 1
    , lv_v2 LIKE lv_v1       VALUE 2
    , lv_v3 LIKE lv_v2       VALUE 3
    .

FIELD-SYMBOLS: <fs> TYPE ANY.
CLEAR ls_s1.
ls_s1-f2 = 1.
GET REFERENCE OF lv_v1 INTO ls_s1-f1.
INSERT ls_s1 INTO TABLE lt_t1.

CLEAR ls_s1.
ls_s1-f2 = 2.
GET REFERENCE OF lv_v2 INTO ls_s1-f1.
INSERT ls_s1 INTO TABLE lt_t1.

CLEAR ls_s1.
ls_s1-f2 = 3.
GET REFERENCE OF lv_v3 INTO ls_s1-f1.
INSERT ls_s1 INTO TABLE lt_t1.

LOOP AT lt_t1 INTO ls_s1 .
  ASSIGN ls_s1-f1->* TO <fs>.
  WRITE: / <fs>.
  <fs> = 666.
  WRITE: / lv_v1, lv_v2, lv_v3 .
ENDLOOP.

_________________
"После" - не значит "вследствие"


Последний раз редактировалось sy-uname Вт, июл 03 2007, 11:06, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 11:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
John Doe написал:
Уважаемый, постить полные тексты своих программ не обязательно и даже вредно. Во-первых, дай человеку головой подумать, а не копипастить.

Несогласен, с вами, надо же с чего-то начинать учиться :D. Иногда даже SAP HELP не помощник. Во всяком случае для меня :oops:
John Doe написал:
Во-вторых, так до уровня индусов на SDN скатимся - у кого длиннее тот и круче. Лично меня такие перспективы не радуют, ИМХО...

Наверное вы правы, буду в следующий раз более предусмотрительным.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 12:32 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Long написал(а):
Проблемы нет, вопрос интересен с точки зрения дополнительных возможностей. Вы не могли бы привести примеры использования?


О дополнительных возможностях, тут может быть, и не приходится говорить, скорее об удобстве.

В классах это хранеие инстанций, привязка объектов.
В "обычной жизни"... Можно использовать таблицу ссылок во вложенных внутренних таблицах, скажем, для хранения или правки исходников и значений в той же внутренней таблице, дыба не морочится при исправлении в двух местах ... ну и т.д. :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 12:55 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Кстати, провел небольшой эксперимент, заключив код, приведенный sy-uname в подпрограмму. Хотелось проверить, будет ли ABAP автоматом освобождать память, присвоенную указателю.
Так вот, абап показал себя достойным приемником языка C, автоматом память он не освобождает.
Поэтому в более сложных вариантах программы нужно сделать loop по таблице и овободить память, присвоенную указателю (field-symbols).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 13:10 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 12 2006, 23:53
Сообщения: 40
Откуда: Moscow
Lars написал:

О дополнительных возможностях, тут может быть, и не приходится говорить, скорее об удобстве.

В классах это хранеие инстанций, привязка объектов.
В "обычной жизни"... Можно использовать таблицу ссылок во вложенных внутренних таблицах, скажем, для хранения или правки исходников и значений в той же внутренней таблице, дыба не морочится при исправлении в двух местах ... ну и т.д. :)

В моем случае, хотелось просто попробовать сделать матрицу - таблицу таблиц.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 13:13 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
vga написал(а):
Кстати, провел небольшой эксперимент, заключив код, приведенный sy-uname в подпрограмму. Хотелось проверить, будет ли ABAP автоматом освобождать память, присвоенную указателю.
Так вот, абап показал себя достойным приемником языка C, автоматом память он не освобождает.
Поэтому в более сложных вариантах программы нужно сделать loop по таблице и овободить память, присвоенную указателю (field-symbols).


Ну он вроде как при выходе из программы целиком чистит память от мусора, а не при выходе из подпрограммы.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 03 2007, 13:17 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 12 2006, 23:53
Сообщения: 40
Откуда: Moscow
vga написал(а):
Кстати, провел небольшой эксперимент, заключив код, приведенный sy-uname в подпрограмму. Хотелось проверить, будет ли ABAP автоматом освобождать память, присвоенную указателю.
Так вот, абап показал себя достойным приемником языка C, автоматом память он не освобождает.
Поэтому в более сложных вариантах программы нужно сделать loop по таблице и овободить память, присвоенную указателю (field-symbols).

Если не секрет, позвольте узнать, как Вы посмотрели область памяти?


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

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


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

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


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

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