Showing posts with label Internal Table. Show all posts
Showing posts with label Internal Table. Show all posts

Jul 14, 2026

Upload Internal Table to Application Server (AL11) in CSV format Using Class CL_RSDA_CSV_CONVERTER, Method STRUCTURE_TO_CSV

Here is another way to upload internal table to Application Server into CSV format.  
And upload using statement OPEN DATASET.

  DATA: lt_csv_format TYPE truxs_t_text_data, " Standard table type for text
        lv_filepath   TYPE string,
        lv_csv_line   TYPE string.    

  " .... Assuming GT_CSV already populated.

  " Convert internal table to CSV structure
  DATA: lv_c4096 TYPE c LENGTH 4096.
  DATA(lo_csv) = cl_rsda_csv_converter=>create( ).

  " Covert line by line item
  LOOP AT gt_csv ASSIGNING FIELD-SYMBOL(<ls_csv>).
    CLEAR lv_c4096.
    lo_csv->structure_to_csv( EXPORTING i_s_data = <ls_csv>
                              IMPORTING e_data   = lv_c4096 ).
    APPEND INITIAL LINE TO lt_csv_format ASSIGNING FIELD-SYMBOL(<ls_csv_format>).
    IF sy-subrc EQ 0.
      <ls_csv_format> = lv_c4096.
    ENDIF.
  ENDLOOP.

  IF sy-subrc = 0.

    " Write to Application Server
    OPEN DATASET lv_filepath FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

    IF sy-subrc = 0.
      LOOP AT lt_csv_format INTO lv_csv_line.
        TRANSFER lv_csv_line TO lv_filepath.
      ENDLOOP.
      CLOSE DATASET lv_filepath.
    ENDIF.

  ENDIF.

Mar 18, 2026

How to Send Internal Tables to Spool

Codes:

*&---------------------------------------------------------------------*
*& Report ZDIR_ITAB_TO_SPOOL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zdir_itab_to_spool.

DATABEGIN OF it_t001 OCCURS 0,
        bukrs TYPE t001-bukrs,
        butxt TYPE t001-butxt,
        ort01 TYPE t001-ort01,
        land1 TYPE t001-land1,
      END OF it_t001.

DATAit_data TYPE TABLE OF lvc_s_1022,
      wa_data LIKE LINE OF it_data.

DATA:spoolid TYPE rspoid.
DATA:file_length TYPE  int4.


START-OF-SELECTION.

  SELECT FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_t001.

  LOOP AT it_t001.
    CONCATENATE it_t001-bukrs
                it_t001-butxt
                it_t001-ort01
                it_t001-land1
              INTO wa_data SEPARATED BY space.
    APPEND wa_data TO it_data.
    CLEAR  wa_data.
  ENDLOOP.

  DESCRIBE TABLE it_data.
  file_length sy-tfill * 1022.

  CALL FUNCTION 'SLVC_TABLE_PS_TO_SPOOL'
    EXPORTING
      i_file_length file_length
    IMPORTING
      e_spoolid     spoolid
    TABLES
      it_textdata   it_data.

  IF sy-subrc EQ 0.
    WRITE spoolid.
  ENDIF.


Testing Result:










Jun 22, 2024

How to Generate a Dynamic Internal Table and Display it in ALV (Program Sample)

Generate a Dynamic Internal Table and Display it in ALV (Program Sample)

Requirements:

Create an ALV list to display the number of allocated seats for airlines daily. 
The daily columns should be dynamic according to the number of days in a month.

ABAP Codes:

*&---------------------------------------------------------------------*
*& Report ZDI_DINTAB2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zdi_dintab2.

*&---------------------------------------------------------------------*
*& Data Declaration
*&---------------------------------------------------------------------*
TABLESsflights002.

DATAt_sflight TYPE TABLE OF sflight.
DATAv_last_day(2).

* Dynamic Table Declarations
DATA t_table TYPE REF TO data,
       w_line  TYPE REF TO data,
       w_line1 TYPE REF TO data,
       w_fcat  TYPE lvc_s_fcat,
       t_fcat  TYPE lvc_t_fcat.

* Field Symbols Declarations
FIELD-SYMBOLS<dyn_table> TYPE STANDARD TABLE,
               <dyn_line>  TYPE any,
               <dyn_line1> TYPE any,
               <fs1>       TYPE any.


*&---------------------------------------------------------------------*
*& Seletion Screens
*&---------------------------------------------------------------------*
PARAMETERS:    p_carrid TYPE sflight-carrid DEFAULT 'AZ'.
PARAMETERS:    p_spmon  TYPE s002-spmon DEFAULT '202403'"sy-datum(6).
SELECT-OPTIONS s_connid FOR  sflight-connid.
SELECT-OPTIONS s_fldate FOR  sflight-fldate NO-DISPLAY.

*&---------------------------------------------------------------------*
*& PAI
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  PERFORM pai.

*&---------------------------------------------------------------------*
*& Start of Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM get_data.
  PERFORM create_dyn_tab.

*&---------------------------------------------------------------------*
*& End of Selection
*&---------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM dispaly_alv.


*&---------------------------------------------------------------------*
*& Form pai
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM pai .

  DATA lv_pos    TYPE i,
         lv_day(2TYPE n,
         lv_fname  TYPE string.

  IF sy-ucomm 'ONLI'.

    APPEND INITIAL LINE TO s_fldate ASSIGNING FIELD-SYMBOL(<ls_fldate>).
    <ls_fldate>-sign   'I'.
    <ls_fldate>-option 'BT'.
    <ls_fldate>-low    p_spmon && '01'.

    CALL FUNCTION 'RE_LAST_DAY_OF_MONTH'
      EXPORTING
        i_datum <ls_fldate>-low
      IMPORTING
        e_tt    v_last_day.

    <ls_fldate>-high   p_spmon && v_last_day.

    "Build the columns: CARRID, CONNID, DAY01, DAY02, DAY03, etc
    CLEAR w_fcat.
    ADD TO lv_pos.
    w_fcat-fieldname 'CARRID'.
    w_fcat-outputlen 7.
    w_fcat-tabname   'IT_SEATS'.
    w_fcat-coltext   'Airline'(001).
    w_fcat-col_pos   lv_pos.
    w_fcat-key       'X'.
    w_fcat-key_sel   'X'.
    APPEND w_fcat TO t_fcat.

    CLEAR w_fcat.
    ADD TO lv_pos.
    w_fcat-fieldname 'CONNID'.
    w_fcat-outputlen 4.
    w_fcat-tabname   'IT_SEATS'.
    w_fcat-coltext   'Connect'(002).
    w_fcat-col_pos   lv_pos.
    w_fcat-key       'X'.
    w_fcat-key_sel   'X'.
    APPEND w_fcat TO t_fcat.

    DO v_last_day TIMES.
      CLEAR w_fcat.
      ADD TOlv_poslv_day.
      lv_fname |DAY| && lv_day.
      READ TABLE t_fcat INTO w_fcat WITH KEY fieldname lv_fname.
      IF sy-subrc NE 0.
        w_fcat-fieldname lv_fname.
        w_fcat-tabname   'IT_SEATS'.
        w_fcat-coltext   lv_day.
        w_fcat-col_pos   lv_pos.
        w_fcat-outputlen 8.
        APPEND w_fcat TO t_fcat.
      ENDIF.
    ENDDO.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_data .

  DATAlw_new TYPE sflight.

  SELECT FROM sflight
    INTO TABLE t_sflight
    WHERE carrid EQ p_carrid
      AND connid IN s_connid
      AND fldate IN s_fldate.
  IF sy-subrc IS NOT INITIAL.
    MESSAGE e398(00WITH 'Data not found'(e01'' '' ''.

  ELSE.
    "Add more data
    READ TABLE t_sflight INTO DATA(lw_sflINDEX 1.
    lw_new lw_sfl.

    lw_new-connid '0017'.
    lw_new-fldate p_spmon && |01|lw_new-seatsocc 180.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |03|lw_new-seatsocc 355.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |08|lw_new-seatsocc 222.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |12|lw_new-seatsocc 213.
    APPEND lw_new TO t_sflight.

    lw_new-connid '0064'.
    lw_new-fldate p_spmon && |02|lw_new-seatsocc 301.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |08|lw_new-seatsocc 335.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |19|lw_new-seatsocc 89.
    APPEND lw_new TO t_sflight.

    lw_new-connid '0055'.
    lw_new-fldate p_spmon && |20|lw_new-seatsocc 189.
    APPEND lw_new TO t_sflight.

    lw_new-connid '0108'.
    lw_new-fldate p_spmon && |04|lw_new-seatsocc 370.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |31|lw_new-seatsocc 323.
    APPEND lw_new TO t_sflight.

    lw_new-connid '0300'.
    lw_new-fldate p_spmon && |15|lw_new-seatsocc 300.
    APPEND lw_new TO t_sflight.
    lw_new-fldate p_spmon && |16|lw_new-seatsocc 299.
    APPEND lw_new TO t_sflight.

    SORT t_sflight.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form create_dyn_tab
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM create_dyn_tab .

  DATA lv_fldate TYPE sy-datum.

  "Create a dynamic internal table with this structure.
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      i_style_table             'X'
      it_fieldcatalog           t_fcat
    IMPORTING
      ep_table                  t_table
    EXCEPTIONS
      generate_subpool_dir_full 1
      OTHERS                    2.

  IF sy-subrc EQ 0.

    "Assign the new table to field symbol
    ASSIGN t_table->TO <dyn_table>.
    "Create dynamic work area for the dynamic table
    CREATE DATA w_line  LIKE LINE OF <dyn_table>ASSIGN w_line->*  TO <dyn_line>.
    CREATE DATA w_line1 LIKE LINE OF <dyn_table>ASSIGN w_line1->TO <dyn_line1>.

    "Populate the dynamic table
    LOOP AT t_sflight INTO DATA(lw_sflight).
      "Avoid duplicate entries for key field PART.
      READ TABLE <dyn_table> INTO <dyn_line1>
        WITH KEY ('CARRID'lw_sflight-carrid
                 ('CONNID'lw_sflight-connid.
      IF sy-subrc 0.
        CONTINUE.
      ENDIF.

      "Airline Code
      ASSIGN COMPONENT 'CARRID' OF STRUCTURE <dyn_line> TO <fs1>.
      CHECK <fs1> IS ASSIGNED.
      <fs1> lw_sflight-carrid.
      UNASSIGN <fs1>.

      "Flight Connection
      ASSIGN COMPONENT 'CONNID' OF STRUCTURE <dyn_line> TO <fs1>.
      CHECK <fs1> IS ASSIGNED.
      <fs1> lw_sflight-connid.
      UNASSIGN <fs1>.

      LOOP AT t_fcat INTO w_fcat.
        IF w_fcat-fieldname 'CARRID' OR
           w_fcat-fieldname 'CONNID'.
          CONTINUE.
        ENDIF.

        TRY.
            lv_fldate p_spmon && w_fcat-coltext.
            DATA(lw_sflight1t_sflight[ carrid lw_sflight-carrid
                                           connid lw_sflight-connid
                                           fldate lv_fldate ].
            ASSIGN COMPONENT w_fcat-fieldname OF STRUCTURE <dyn_line> TO <fs1>.
            IF <fs1> IS ASSIGNED.
              <fs1> lw_sflight1-seatsocc.
              UNASSIGN <fs1>.
            ENDIF.
          CATCH cx_sy_itab_line_not_found.
            "next data
        ENDTRY.

        CLEAR lw_sflight1.
      ENDLOOP.

      APPEND <dyn_line> TO <dyn_table>.
      CLEAR<dyn_line>.
      CLEARlw_sflightlw_sflight1.
    ENDLOOP.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form dispaly_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM dispaly_alv .

  DATA lw_alv_fieldcat TYPE slis_fieldcat_alv,
         lt_alv_fieldcat TYPE slis_t_fieldcat_alv,
         lw_layout       TYPE slis_layout_alv,
         lv_pos          TYPE i.

  lw_layout-colwidth_optimize =
  lw_layout-zebra             abap_true.

  LOOP AT t_fcat INTO w_fcat.
    lv_pos lv_pos + 1.
    lw_alv_fieldcat-fieldname     w_fcat-fieldname.
    lw_alv_fieldcat-tabname       w_fcat-tabname.
    lw_alv_fieldcat-seltext_l     w_fcat-coltext.
    lw_alv_fieldcat-outputlen     w_fcat-outputlen.
    lw_alv_fieldcat-col_pos       lv_pos.
    lw_alv_fieldcat-do_sum        w_fcat-do_sum.
    lw_alv_fieldcat-emphasize     w_fcat-emphasize.
    lw_alv_fieldcat-key           w_fcat-key.
    lw_alv_fieldcat-no_out        w_fcat-no_out.
    APPEND lw_alv_fieldcat TO lt_alv_fieldcat.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program sy-repid
      it_fieldcat        lt_alv_fieldcat
      is_layout          lw_layout
      i_default          'X'
      i_save             'A'
    TABLES
      t_outtab           <dyn_table>.

ENDFORM.


Testing Result:

Period 03.2024 (March) 
Expectation: Daily Columns = 31 


Period 02.2024 (February) 
Expectation: Daily Columns = 29