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

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


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

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


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

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