Текущее время: Чт, июн 26 2025, 08:21

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Цикл по столбцам
СообщениеДобавлено: Чт, июн 30 2005, 09:09 
Специалист
Специалист

Зарегистрирован:
Пт, апр 08 2005, 10:27
Сообщения: 125
Пол: Мужской
Подскажите, можно ли в абапе организовать цикл по столбцам внутренней таблицы, мне необходимо считать названия полей?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 09:33 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
Думаю, что DESCRIBE FIELD f INTO td поможет.

Hint.
Code:
***
TYPE-POOLS: SYDES.
DATA TD TYPE SYDES_DESC.
DESCRIBE FIELD f INTO td.


Правда, RTFM говорит, что в будущем может все поменятся (без предупреждений).

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 09:39 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
Дополнение:

Для организации цикла по столбцам можно использовать:

DESCRIBE FIELD <f> TYPE <t> COMPONENTS <n>.
ASSIGN COMPONENT <comp> OF STRUCTURE <s> TO <FS>.

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

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 11:15 
Специалист
Специалист

Зарегистрирован:
Пт, апр 08 2005, 10:27
Сообщения: 125
Пол: Мужской
Вот именно, только данные, а как узнать имя столбца....вопрос пока открыт. Интересно, неужели ни у кого не возникало подобной проблемы?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 11:55 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Если Вы работаете в системе 4.6 и выше, то вам помогут классы cl_abap_tabledescr и cl_abap_structdescr:
Code:
METHOD get_output_components .
  DATA:
    lcl_table_descr TYPE REF TO cl_abap_tabledescr,
    lcl_struc_descr TYPE REF TO cl_abap_structdescr
  .
  FIELD-SYMBOLS:
    <lt_output> TYPE STANDARD TABLE
  .
  ASSIGN me->output_tab->* TO <lt_output>.
  lcl_table_descr ?= cl_abap_typedescr=>describe_by_data( <lt_output> ).
  lcl_struc_descr ?= lcl_table_descr->get_table_line_type( ).
  it_components = lcl_struc_descr->components.
ENDMETHOD.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 14:18 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
ну а если 4.0 то можно попробовать как и предлагал Виктро(Минск)
через DESCRIBE FIELD f INTO td

например:
для таблицы
Code:
DATA :  BEGIN OF GT_TEST OCCURS 0,
          BANFN LIKE EBAN-BANFN,
          BNFPO LIKE EBAN-BNFPO,
          SUM   TYPE P DECIMALS 2,
          LOOOOOOOONG_FIELD_NAME(10),
        END OF GS_TEST.

после
Code:
...
TYPE-POOLS: SYDES.
DATA TD TYPE SYDES_DESC.
DESCRIBE FIELD GT_TEST INTO TD.
...

в таблице TD-TYPES будет(оставлены основные столбцы):
Code:
# Idx_Name   Idx_Help_Id  Length  Output_Length   Decimals  Type

1        0 |           0 |    33 |    33         |       0 |u   
2        5 |           2 |    10 |    10         |       0 |C   
3        6 |           4 |     5 |     5         |       0 |N   
4        7 |           0 |     8 |    17         |       2 |P   
5        8 |           0 |    10 |    10         |       0 |C   

а в таблице TD-NAMES
Code:
#   Continue Name                   
                               
1           |ZYS_S006               
2           |EBAN-BANFN             
3           |==ALPHA               
4           |EBAN-BNFPO             
5           |BANFN                 
6           |BNFPO                 
7           |SUM                   
8  *        |LOOOOOOOONG_FIE       
9           |LD_NAME               


удаляем первую запись из TD-TYPES(поле type=u)
дальше просматривая TD-TYPES находим то что нам надо

поле Idx_Name указывает на номер записи в NAMES т.е имя столбца;
поле Idx_Help_Id тоже номер записи в NAMES указывает на ссылку в DDIC

в табл. NAMES поле CONTINUE равное '*' указывает что следом идет продолжение названия столбца

вроде все :wink:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 14:50 
Специалист
Специалист

Зарегистрирован:
Пт, апр 08 2005, 10:27
Сообщения: 125
Пол: Мужской
Благодарен всем за поступающие предложения.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Я делал так
СообщениеДобавлено: Чт, июн 30 2005, 16:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Я делал так:

Code:
FORM GetStruc
  using Struc
        FieldNames type tt_Struc.

  TYPE-POOLS SYDES.

  DATA: TD TYPE SYDES_DESC,
        W_TYPES TYPE SYDES_TYPEINFO,
        W_NAMES TYPE SYDES_NAMEINFO,
        w_FieldNames like line of FieldNames.

  DESCRIBE FIELD Struc INTO TD.
  Clear: w_FieldNames.

  LOOP AT TD-TYPES INTO W_TYPES WHERE BACK <> 0.
    w_FieldNames-type = W_TYPES-type.
    Loop at TD-Names into w_Names from W_TYPES-IDX_NAME.
      Concatenate w_FieldNames-Field_Name W_NAMES-NAME
        into w_FieldNames-Field_Name.

      If W_NAMES-Continue <> '*'.
        w_FieldNames-Find_Text = w_FieldNames-Field_Name.
        w_FieldNames-Field_Header = w_FieldNames-Field_Name.
        Append w_FieldNames to FieldNames.
        Clear: w_FieldNames.
        Exit.
      EndIf.
    EndLoop.
  ENDLOOP.

ENDFORM.                    " GetStruc


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 30 2005, 16:20 
Специалист
Специалист

Зарегистрирован:
Пт, апр 08 2005, 10:27
Сообщения: 125
Пол: Мужской
To Parazit -> прикольно, я тоже начал такую же форму писать, а тут уже готовое решение есть! :lol: какой только тип у tt_Struc?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Да можно упростить
СообщениеДобавлено: Чт, июн 30 2005, 16:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Bit написал:
To Parazit -> прикольно, я тоже начал такую же форму писать, а тут уже готовое решение есть! :lol: какой только тип у tt_Struc?

Да можно упростить до типа CHAR(30), если нужны только имена. Это взято из исходника отсюда.


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

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
На мой взгляд, есть способ проще - объявить внутреннюю таблицу со ссылкой на структуру словаря данных. Тогда, используя что-нибудь вроде DDIF_NAMETAB_GET, получим список имен полей. Ну а дальше, как и предложено, через ASSIGN... :roll:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


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

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
nicky555 написал:
На мой взгляд, есть способ проще - объявить внутреннюю таблицу со ссылкой на структуру словаря данных. Тогда, используя что-нибудь вроде DDIF_NAMETAB_GET, получим список имен полей. Ну а дальше, как и предложено, через ASSIGN... :roll:


Кстати можно и без словаря обойтись:

ФМ GET_COMPONENT_LIST вернет список полей структуры, вн.таблицы


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 01 2005, 08:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
OlegDm написал(а):
ФМ GET_COMPONENT_LIST вернет список полей структуры, вн.таблицы


Тоже неплохо - респект :wink:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 01 2005, 08:34 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:44
Сообщения: 305
Откуда: Жайрем -> Астана
OlegDm написал(а):
Кстати можно и без словаря обойтись:

ФМ GET_COMPONENT_LIST вернет список полей структуры, вн.таблицы


и правда самый простой способ, респект :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 01 2005, 10:58 
Специалист
Специалист

Зарегистрирован:
Пн, дек 06 2004, 11:36
Сообщения: 151
Не спортивно :D


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

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


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

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


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

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