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

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


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

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


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

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