Текущее время: Пт, май 16 2025, 06:06

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Как узнать название поля системной таблицы.
СообщениеДобавлено: Чт, окт 27 2005, 13:37 
Гость
Привет.
Задача.
выбрать все записи из допустим VBAK
вывести их на экран в простейшем списке вида.
ИМЯ_ПОЛЯ_1 |... | ИМЯ_ПОЛЯ_N
------------------------------------
значение 1 |... | значение_N

Проблема.
Имена полей должны быть именами из словаря для выводимой таблицы.
mandt , vbeln и тд. т.е. технические имена полей.
вопрос.
как заполнить структуру названиями полей нужной таблицы?
т..е скинуть названия полей словарной таблицы в структуру или переменную


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:07 
Гость
Code:

REPORT  zfieldname_and_list
       .
PARAMETERS    : tab_name TYPE dd02l-tabname  DEFAULT 'SPFLI'
              .
DATA          : ref_d TYPE REF TO data
              .
FIELD-SYMBOLS : <ft> TYPE INDEX TABLE
              .

START-OF-SELECTION.
  CREATE DATA ref_d TYPE STANDARD TABLE OF (tab_name).
  ASSIGN ref_d->* TO <ft>.
  SELECT * FROM (tab_name) INTO TABLE <ft> UP TO 100 ROWS.
  PERFORM output_in_list.
  SKIP. ULINE.
  WRITE: / 'BOT TAK!'.

TOP-OF-PAGE.
  PERFORM write_title.

*&--------------------------------------------------------------------*
*&      Form  write_title
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM write_title.
  FIELD-SYMBOLS : <fd> TYPE ANY
                , <ff> TYPE ANY
                .
  DATA : ref_descr TYPE REF TO cl_abap_typedescr
       , ref_eldsc TYPE REF TO cl_abap_elemdescr
       , name      TYPE string
       .
  READ TABLE <ft> ASSIGNING <fd> INDEX 1.
  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE <fd> TO <ff>.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
    ref_descr = cl_abap_typedescr=>describe_by_data( <ff> ).
    ref_eldsc ?= ref_descr.
    name = ref_eldsc->get_relative_name( ).
    WRITE: name.
  ENDDO.
  WRITE: '**************'.
ENDFORM. " write_title.


*&--------------------------------------------------------------------*
*&      Form  output_in_list
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM output_in_list.
  FIELD-SYMBOLS : <fd> TYPE ANY
                , <ff> TYPE ANY
                .
  LOOP AT <ft> ASSIGNING <fd>.
    NEW-LINE.
    DO.
      ASSIGN COMPONENT sy-index OF STRUCTURE <fd> TO <ff>.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
      WRITE: <ff>.
    ENDDO.
  ENDLOOP.
ENDFORM. "output_in_list.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:21 
Гость
спасибо но к сожалению надо для 4.0.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:27 
Гость
Предлагаемая ниже программа, в ТОМ ЧИСЛЕ отвечает и на поставленный вопрос,
кроме того - дополнительно к предудыщей демонстирует возможность выгрузки содержимого любой таблички
в Excel ЧЕРЕЗ БУФЕР.


Code:
REPORT  ZEXCEL_BUFFER                       .

INCLUDE OLE2INCL.

DATA: H_EXCEL TYPE OLE2_OBJECT,
      H_MAPL TYPE OLE2_OBJECT,
      H_SHEET TYPE OLE2_OBJECT,
      H_RANGE TYPE OLE2_OBJECT,
      SELECTION TYPE OLE2_OBJECT,
      VR TYPE REF TO DATA,
      BEGIN OF NTAB OCCURS 0,
         POSITION LIKE DD03L-POSITION,
         FIELDNAME LIKE DD03L-FIELDNAME,
      END OF NTAB,
      LD_SEPARATOR  TYPE C,
      STRK TYPE STRING,
      DD02 LIKE DD02L,
      BEGIN OF ST OCCURS 0,
         ST(1024),
      END OF ST,
      LD_RC TYPE I,
      NI TYPE I.

PARAMETERS: TABNAM(16) OBLIGATORY,   "Имя таблицы
            NYA(10) DEFAULT 'A1' OBLIGATORY.  "Начальная ячейка в Excel

CONSTANTS: GC_HEX_TAB  TYPE X  VALUE 09.

FIELD-SYMBOLS: <FIELD>,
               <FS>,
               <PS>,
               <P> TYPE STANDARD TABLE.

ASSIGN LD_SEPARATOR TO <FIELD> TYPE 'X'.
<FIELD> = GC_HEX_TAB.

CLEAR: DD02.

SELECT SINGLE * FROM DD02L INTO DD02 WHERE TABNAME = TABNAM.
CHECK NOT DD02-TABNAME IS INITIAL.

CREATE DATA VR TYPE STANDARD TABLE OF (TABNAM).
ASSIGN VR->* TO <P>.
CHECK SY-SUBRC = 0.
SELECT * FROM (TABNAM) APPENDING TABLE <P>.
CHECK SY-SUBRC = 0.
CLEAR: ST, NTAB. REFRESH: ST, NTAB.

SELECT FIELDNAME POSITION INTO CORRESPONDING FIELDS OF TABLE NTAB
       FROM DD03L WHERE TABNAME = TABNAM
             AND AS4LOCAL = 'A' .

SORT NTAB BY POSITION.

LOOP AT NTAB.
  IF SY-TABIX NE 1.
    CONCATENATE ST-ST NTAB-FIELDNAME INTO ST-ST
            SEPARATED BY LD_SEPARATOR.
  ELSE.
    ST-ST = NTAB-FIELDNAME.
  ENDIF.
ENDLOOP.

APPEND ST.
CLEAR ST.

LOOP AT <P> ASSIGNING <PS>.
  CLEAR: ST-ST.
  NI = 1.
  DO.
    ASSIGN COMPONENT NI OF
           STRUCTURE <PS> TO <FS>.

    IF SY-SUBRC <> 0. EXIT. ENDIF.
    STRK = <FS>.
    CONDENSE: STRK.
    IF NI <> 1.
      CONCATENATE ST-ST STRK INTO ST-ST
        SEPARATED BY LD_SEPARATOR.
    ELSE.
      ST-ST = STRK.
    ENDIF.
    ADD 1 TO NI.
  ENDDO.


  APPEND ST.
ENDLOOP.


CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
  IMPORTING
    DATA       = ST[]
  CHANGING
    RC         = LD_RC
  EXCEPTIONS
    CNTL_ERROR = 1
    OTHERS     = 4.



CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF H_EXCEL  'Visible' = 0.
CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
CALL METHOD OF H_MAPL 'Add'.
CALL METHOD OF H_EXCEL 'ACTIVESHEET' = H_SHEET.
CALL METHOD OF H_SHEET 'RANGE' = H_RANGE EXPORTING #1 = 'A1'.
CALL METHOD OF H_RANGE 'SELECT' = SELECTION.
CALL METHOD OF H_SHEET 'PASTE'.
CALL METHOD OF H_SHEET 'RANGE' = H_RANGE EXPORTING #1 = 'A1'.
CALL METHOD OF H_RANGE 'SELECT' = SELECTION.
SET PROPERTY OF H_EXCEL  'Visible' = 1.
FREE OBJECT H_EXCEL.
FREE OBJECT H_MAPL.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:28 
Гость
она кстати, для 4.0 - тоже не подойдет :(
но подойдет возможность выборки имен полей из DD03L


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:41 
Гость
dd03l - сила.
пробовал через Describe, но она не релизнутая и может работать неадекватно , что и делает :\ наверное глючит с типами.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:46 
Гость
d8d1d4 написал(а):
dd03l - сила.
пробовал через Describe, но она не релизнутая и может работать неадекватно , что и делает :\ наверное глючит с типами.


а причем тут desribe ? :oops:


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 14:54 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Для словарных структур/таблиц должен подойти ФМ DDIF_TABL_GET. По идее, должен быть в 4.0.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 15:08 
Гость
спасибо. :!:


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


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

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


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

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