Текущее время: Вт, июл 22 2025, 22:01

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: •Internal table•
СообщениеДобавлено: Пн, май 23 2005, 10:29 
Гость
Подскажите, как можно в программе узнать количество столбцев во внутренней таблице?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 11:42 
Гость
НЕуниверсальное решение, но всё же.

DATA: BEGIN OF ZAP OCCURS 0,
ST1,
ST2,
ST3,
ST4,
ST5,
END OF ZAP.

DATA: I(3), FN(10).


FIELD-SYMBOLS: <F>.

I = 1.
DO.
CONDENSE: I.
CONCATENATE 'ZAP-ST' I INTO FN.
CONDENSE: FN.
ASSIGN (FN) TO <F>.
IF SY-SUBRC NE 0.
I = I - 1.
EXIT.
ELSE.
UNASSIGN <F>.
ADD 1 TO I.
ENDIF.
ENDDO.

WRITE:/ 'Количество столбцов :', I.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 11:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Почему же не универсальное? Надо просто использовать ASSIGN немного по-другому:

DATA: BEGIN OF itab OCCURS 1,
field01,
field02,
field03,
END OF itab.

DATA: wa LIKE LINE OF itab,
i TYPE i.

FIELD-SYMBOLS: <fs>.

DO.
ASSIGN COMPONENT sy-index OF STRUCTURE wa TO <fs>.
IF sy-subrc <> 0.
i = sy-index.
EXIT.
ENDIF.
ENDDO.
UNASSIGN <fs>.
i = i - 1.

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 12:26 
Гость
То, что доктор прописал.
Спасибо огромное.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 12:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Так можно с обращением напрямую к таблице и без циклов:
Code:
TYPE-POOLS: SYDES.
data: TD TYPE SYDES_DESC.
data: lines type i.

describe field itab[] into TD.
delete td-types where back <> 2.
describe table td-types lines lines.


Если для структуры, то delete td-types where back <> 1.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 12:41 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Есть стандартные классы для получения RTTI, например:
Code:
DATA: ref TYPE REF TO data.
DATA descr TYPE REF TO cl_abap_tabledescr.
FIELD-SYMBOLS: <key_comp_wa> TYPE abap_keydescr.

GET REFERENCE OF my_table INTO ref.
descr ?= cl_abap_typedescr=>describe_by_data_ref( ref ).

После этого в descr - полное описание таблицы.
Смотри документацию по cl_abap_typedescr - там хорошо все описано и показано.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 12:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Нам с BH должно стать стыдно - слишком простое решение предложили... :lol:

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 12:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Ну если уж RTTI ,то можно и:
Code:
DATA descr TYPE REF TO cl_abap_tabledescr.
descr ?= cl_abap_typedescr=>describe_by_data( itab[] ).

Нафига с ссылками возиться..


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 12:56 
Гость
nicky555 написал:
Нам с BH должно стать стыдно - слишком простое решение предложили... :lol:

:oops: :oops: :oops:


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 13:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Кстати, для того, чтобы найти полное число компонент, придётся использовать CL_ABAP_STRUCTDESCR


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, июл 10 2005, 14:22 
Гость
Bully написал(а):
Есть стандартные классы для получения RTTI, например:
Code:
DATA: ref TYPE REF TO data.
DATA descr TYPE REF TO cl_abap_tabledescr.
FIELD-SYMBOLS: <key_comp_wa> TYPE abap_keydescr.

GET REFERENCE OF my_table INTO ref.
descr ?= cl_abap_typedescr=>describe_by_data_ref( ref ).

После этого в descr - полное описание таблицы.
Смотри документацию по cl_abap_typedescr - там хорошо все описано и показано.


Смотрел я, смотрел на класс cl_abap_tabledescr, но так и не додумался как из него достать такую характеристику таблицы как количество строк. :oops:
Может кто подскажет?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 11 2005, 06:39 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
ну так с количеством строк совсем просто:

describe table tab lines i. (в i - количество строк таблицы tab)


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

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Не катит - примитивно и просто :lol:
Предлагаю так:
Code:
DATA: j TYPE i.
CLEAR j.
SYSTEM-CALL ITAB_INFO TABLE itab OPCODE 'IT_FILL' VALUE j.
WRITE: / 'Число строк: ', j.

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


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

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Что-то Вы страшное предлагаете.
Цитата:
SYSTEM-CALL


Note
*---------------------------------------------------------*
This statement is only for

!!! Internal use in SAP Basis development !!!

Even within SAP Basis, it may only be used in programs within the ABAP+GUI development group.

Its use is subject to various restrictions, not all of which may be listed in the documentation. This documentation is intended for internal SAP use within the Basis development group ABAP+GUI.

Changes and further development, which may be incompatible, may occur at any time, without warning or notice!
*---------------------------------------------------------*


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

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
OlegDm написал(а):
ну так с количеством строк совсем просто:

describe table tab lines i. (в i - количество строк таблицы tab)


Хм. сложновато это как то. Можно и проще

i = lines( tab ). "v 4.7 как минимум


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

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


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

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


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

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