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
*&---------------------------------------------------------------------*
TABLES: sflight, s002.
DATA: t_sflight TYPE TABLE OF sflight.
DATA: v_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(2) TYPE 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 1 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 1 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 1 TO: lv_pos, lv_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 .
  DATA: lw_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(00) WITH 'Data not found'(e01) '' '' ''.
  ELSE.
    "Add more data
    READ TABLE t_sflight INTO DATA(lw_sfl) INDEX 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_sflight1) = t_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>.
      CLEAR: lw_sflight, lw_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