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

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


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

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


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

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