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

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


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

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


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

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