Текущее время: Ср, июн 25 2025, 23:28

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Динамическая структура и таблица
СообщениеДобавлено: Вт, фев 09 2016, 16:15 
Начинающий
Начинающий

Зарегистрирован:
Пн, янв 18 2016, 16:16
Сообщения: 6
Добрый день всем.
Суть задачи такая-
На сервере аппликаций есть 2 csv файла. Данные, кол-во столбцов и тип данных может меняться. Надо написать программку, которая будет выводить данные в виде таблицы (перекинуть в таблицу, а там я уже сам выведу как надо).
Пробовал пойти через динамические структуры и таблицы, но далеко не ушёл. Насколько я понял, динамическая таблица и динамическая структура завязаны друг на друге и что-то 1 должно на начальном этапе уже быть. Поправьте если не прав. А мне надо сделать так, чтобы структуры формировалась на основе файла.

То-есть, кароче, есть файл (известен только формат), не могу придумать, как данные вывести в таблицу, если структура может быть любой.
Буду благодарен Вашим вариантам.
Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Вт, фев 09 2016, 17:25 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 182
Пол: Мужской
Vlad-T написал(а):
Добрый день всем.
Суть задачи такая-
На сервере аппликаций есть 2 csv файла. Данные, кол-во столбцов и тип данных может меняться. Надо написать программку, которая будет выводить данные в виде таблицы (перекинуть в таблицу, а там я уже сам выведу как надо).
Пробовал пойти через динамические структуры и таблицы, но далеко не ушёл. Насколько я понял, динамическая таблица и динамическая структура завязаны друг на друге и что-то 1 должно на начальном этапе уже быть. Поправьте если не прав. А мне надо сделать так, чтобы структуры формировалась на основе файла.

То-есть, кароче, есть файл (известен только формат), не могу придумать, как данные вывести в таблицу, если структура может быть любой.
Буду благодарен Вашим вариантам.
Спасибо.

То что вы описываете вполне укладывается в ФМ GUI_DOWNLOAD
С типом данных посложнее будет, вы хотите словарные структуры ( se11 ) формировать на основе данных?

_________________
crusty написал(а):
Логистика - понятие растяжимое


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

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Vlad-T написал(а):
На сервере аппликаций

У вас курсы кройки и шитья? "сервер приложений" :twisted:

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Вт, фев 09 2016, 18:32 
Начинающий
Начинающий

Зарегистрирован:
Пн, янв 18 2016, 16:16
Сообщения: 6
Извиняюсь, файл получаем с сервера приложений :D . С этим можно что-то ещё придумать... но разве для GUI_UPLOAD (так понимаю, что именно upload имелось в виду) не требует того, чтобы таблица была уже размечена?
Code:
CALL METHOD cl_gui_frontend_services=>gui_upload
  EXPORTING
    filename            = iv_file_str
    has_field_separator = 'X'
  CHANGING
    data_tab            = gt_userdata.


То есть как раз указывается таблица (data_tab) , в которую мы будем перекидывать данные (gt_userdata).
Значит gt_userdata надо тоже прописать, мол:

Code:
TYPES:
  BEGIN OF ts_userdata,
    name      TYPE string,
    lastname  TYPE string,
  END OF ts_userdata,
  tt_userdata TYPE TABLE OF ts_userdata.

DATA: gt_userdata TYPE tt_userdata.


Это если у нас 2 колонки (имя и фамилия), а мне надо как раз сделать так, что можно любой файл загрузить (хоть с 1 колонкой, хоть с 12). ..


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Вт, фев 09 2016, 19:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Сделайте таблицу с одним полем типа CHAR(1024) и потом сами ее разбирайте построчно с помощью SPLIT

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Вт, фев 09 2016, 21:10 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Vlad-T написал(а):
То-есть, кароче, есть файл (известен только формат), не могу придумать, как данные вывести в таблицу, если структура может быть любой.
Если 1-й строчкой в csv-файл ставить названия элементов данных (ЭД), можно считать 1-ю строчку(open dataset в текстовом режиме, 1 раз read dataset - по идее, считается до EOL), определить список ЭД (раз формат известен), динамически (с помощью RTTC) сформировать на основе ЭД структуру (create data ... handle), а затем и таблицу.
UPD. И, кстати, меня терзают смутные сомнения, что Вы сможете заставить cl_gui_frontend_services=>gui_upload() работать с файлами на аппликейшене.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Ср, фев 10 2016, 05:53 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
LAT написал(а):
UPD. И, кстати, меня терзают смутные сомнения, что Вы сможете заставить cl_gui_frontend_services=>gui_upload() работать с файлами на аппликейшене.

Да, работать НЕ будет. Будет работать только там, где стоит SAP GUI. В фоновом режиме, например, будет падать в дамп.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Ср, фев 10 2016, 09:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Есть такой ФМ 'TEXT_CONVERT_CSV_TO_SAP'

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Вт, фев 16 2016, 18:11 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 182
Пол: Мужской
Vlad-T написал(а):
но разве для GUI_UPLOAD (так понимаю, что именно upload имелось в виду) не требует того, чтобы таблица была уже размечена?

То есть как раз указывается таблица (data_tab) , в которую мы будем перекидывать данные (gt_userdata).


Code:
data: lt_data type rsdu_t_abapsource.


LAT написал(а):
UPD. И, кстати, меня терзают смутные сомнения, что Вы сможете заставить cl_gui_frontend_services=>gui_upload() работать с файлами на аппликейшене.


И правда. Можно конечно выгружать с апликейшена на гуи,а оттуда забирать но это гланды через одно место.
А можно по человечески -
Code:
OPEN DATASET lv_file FOR INPUT IN BINARY MODE.
READ DATASET lv_file INTO lv_content MAXIMUM LENGTH P_MAXLEN.

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Ср, мар 02 2016, 17:09 
Ассистент
Ассистент

Зарегистрирован:
Пн, дек 02 2013, 09:42
Сообщения: 33
Vlad-T написал(а):
Пробовал пойти через динамические структуры и таблицы, но далеко не ушёл. Насколько я понял, динамическая таблица и динамическая структура завязаны друг на друге и что-то 1 должно на начальном этапе уже быть.

вот так можно определить что-то одно(или сразу оба) на начальном этапе:
t_comp - список полей.
Code:
         struct = cl_abap_structdescr=>create( p_components = t_comp ).
         table  = cl_abap_tabledescr=>create( lo_struct ).
         create data d_table type handle table


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Чт, мар 03 2016, 05:01 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Мне нравится создание таблицы на основе филдкаталога:
Code:
    cl_alv_table_create=>create_dynamic_table(
      exporting
        i_style_table             = abap_true
        it_fieldcatalog           = mt_fieldcatalog
*        i_length_in_byte          =
      importing
         ep_table                  = mp_data
         e_style_fname             = mv_style_fname
      exceptions
        generate_subpool_dir_full = 1
        others                    = 2
           ).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Вт, мар 08 2016, 00:12 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
AFH написал(а):
Мне нравится создание таблицы на основе филдкаталога

А откуда "филдкаталог" у автора возьмется? :?

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Ср, апр 20 2016, 10:49 
Начинающий
Начинающий

Зарегистрирован:
Пн, дек 10 2012, 15:48
Сообщения: 4
накидал программку, которая читает произвольный CSV файл, создает филдкаталог и формирует таблицу. Ограничение: длина полей файла не более 50 символов (подразумевается, что в первой строке файла лежат заголовки).

Code:
REPORT  zbc_csv_upload.

PARAMETERS:
  p_fname        TYPE rlgrap-filename OBLIGATORY.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  PERFORM file_open_dialog CHANGING p_fname.

END-OF-SELECTION.
  PERFORM read_file.

*&---------------------------------------------------------------------*
*&      Form  FILE_OPEN_DIALOG
*&---------------------------------------------------------------------*
FORM file_open_dialog CHANGING p_filename TYPE rlgrap-filename.
  CLASS cl_gui_frontend_services DEFINITION LOAD.
  DATA: l_user_action   TYPE i,
        l_filename      TYPE string,
        l_gui_title     TYPE string,
        l_file_filter   TYPE string,
        l_file_table    TYPE filetable,
        l_rc            TYPE sysubrc.

  l_gui_title = 'Загрузить'(001).
  l_file_filter = 'CSV Files (*.csv)|*.csv'.
  l_filename = p_filename.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title     = l_gui_title
      default_filename = l_filename
      file_filter      = l_file_filter
    CHANGING
      file_table       = l_file_table
      rc               = l_rc
      user_action      = l_user_action
    EXCEPTIONS
      OTHERS           = 1.

  IF l_user_action = cl_gui_frontend_services=>action_cancel.
    MESSAGE s008(i18n).
    EXIT.
  ENDIF.

  IF sy-subrc <> 0 OR l_rc <> 1.
    MESSAGE i015(i18n).
    EXIT.
  ENDIF.

  READ TABLE l_file_table INTO l_filename INDEX 1.
  p_filename = l_filename.
ENDFORM.                    "file_open_dialog
*&---------------------------------------------------------------------*
*&      Form  READ_FILE
*&---------------------------------------------------------------------*
FORM read_file .
  DATA:
    lt_excel_file      TYPE TABLE OF alsmex_tabline,
    ls_excel_file      TYPE alsmex_tabline,
    ref_data           TYPE REF TO data,
    ref_table          TYPE REF TO data.

  FIELD-SYMBOLS:
     <fs_table>  TYPE table,
     <fs>        TYPE any,
     <fs_field>  TYPE any.

* Считать данные из EXCEL-файла
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_fname
      i_begin_col             = 1
      i_begin_row             = 1
      i_end_col               = 200
      i_end_row               = 65536
    TABLES
      intern                  = lt_excel_file
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  IF sy-subrc NE 0 OR lt_excel_file[] IS INITIAL.
    MESSAGE i038(pc) DISPLAY LIKE 'E' .
    RETURN.
  ENDIF.

* Собираем филдкаталог
  DATA:
   lt_fcat      TYPE lvc_t_fcat,
   ls_fcat      TYPE lvc_s_fcat.

  LOOP AT lt_excel_file INTO ls_excel_file WHERE row = 1.
    CLEAR ls_fcat.
    ls_fcat-col_pos = ls_excel_file-col.
    ls_fcat-fieldname = ls_excel_file-col.
    ls_fcat-coltext = ls_fcat-scrtext_s = ls_fcat-scrtext_l = ls_fcat-scrtext_m
    =  ls_excel_file-value.
    ls_fcat-datatype = 'CHAR'.
    ls_fcat-intlen =  50.
    APPEND ls_fcat TO lt_fcat.
  ENDLOOP.

  DELETE lt_excel_file  WHERE row = 1.


  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = lt_fcat
    IMPORTING
      ep_table        = ref_table
    EXCEPTIONS
      OTHERS          = 1.

  ASSIGN ref_table->* TO <fs_table>.
  CREATE DATA ref_data LIKE LINE OF <fs_table>.
  CHECK sy-subrc = 0.
  ASSIGN ref_data->* TO <fs>.


  LOOP AT lt_excel_file INTO ls_excel_file.
    AT NEW row.
      CLEAR <fs>.
    ENDAT.
    ASSIGN COMPONENT ls_excel_file-col OF STRUCTURE <fs> TO <fs_field>.
    IF sy-subrc = 0.
      <fs_field> = ls_excel_file-value.
    ELSE.
      MESSAGE 'Ошибка чтения' TYPE 'I' DISPLAY LIKE 'E' .
      RETURN.
    ENDIF.
    AT END OF row.
      APPEND <fs> TO <fs_table>.
    ENDAT.
  ENDLOOP.


ENDFORM.                    " READ_FILE


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая структура и таблица
СообщениеДобавлено: Пт, апр 22 2016, 14:42 
Ассистент
Ассистент

Зарегистрирован:
Чт, май 17 2007, 16:31
Сообщения: 40
Откуда: Санкт-Петербург
CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE в результате вызывает generate subroutine pool .
А в нем есть ограничение на 36 вызовов ”In an internal mode, a maximum of 36 temporary subroutine pools may be created.”
Поэтому лучше использовать RTTS для создания таблицы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Динамическая структура и таблица
СообщениеДобавлено: Сб, июн 11 2016, 15:39 
Начинающий
Начинающий

Зарегистрирован:
Пн, мар 07 2016, 11:43
Сообщения: 1
есть более подробная таблица калорийности и гликемический индекс продуктов... подскажите куда лучше добавить


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

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


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

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


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

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