Finalmente lo logre - Mi primer reporte, como le cambio el encabezado

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • javico40
    Member
    • nov
    • 37

    #1

    Finalmente lo logre - Mi primer reporte, como le cambio el encabezado

    Muchas gracias finalmente lo logre, ya esa el reporte, lo unico que me falta es cambiarle el encabezado pero ya con esto resuelvo cualquier reporte. si saben como cambiarle el encabezado a las columnas me avisan, alli les comparto el reporte:

    Código:
    *&---------------------------------------------------------------------*
    *& REPORT ZMM_MATERIAL_MOVEMENT_REPORT
    *& Developed by: Javier Portilla
    *& Date: 2011-11-10
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    
    REPORT  ZMM_MATERIAL_MOVEMENT_REPORT.
    
    
    TABLES: mseg, mkpf, lfa1, marav.
    
    CLASS lcl_handle_events DEFINITION DEFERRED.
    
    DATA: gr_table  TYPE REF TO cl_salv_table,
          gt_outtab TYPE STANDARD TABLE OF ZMM_MATERIALMOVEMENT,
          gt_mattab TYPE STANDARD TABLE OF ZMM_MATERIAL_DATA,
          gr_events TYPE REF TO lcl_handle_events,
          g_okcode  TYPE syucomm.
    
    FIELD-SYMBOLS <out> TYPE ZMM_MATERIALMOVEMENT.
    
    *----------------------------------------------------------------------*
    CLASS lcl_handle_events DEFINITION.
      PUBLIC SECTION.
        METHODS:
          on_user_command FOR EVENT added_function OF cl_salv_events
                          IMPORTING e_salv_function.
    ENDCLASS.                    "lcl_handle_events DEFINITION
    
    *---------------------------------------------------------------------*
    CLASS lcl_handle_events IMPLEMENTATION.
      METHOD on_user_command.
        PERFORM print_form USING e_salv_function text-i08.
      ENDMETHOD.                    "on_user_command
    ENDCLASS.                    "lcl_handle_events IMPLEMENTATION
    
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS: Material FOR mseg-matnr,
                    Type FOR marav-mtart,
                    Posting FOR mkpf-budat.
    SELECTION-SCREEN END OF BLOCK b1.
    
    START-OF-SELECTION.
      PERFORM fetch_data.
    
    END-OF-SELECTION.
    PERFORM display_full_screen.
    
    *----------------------------------------------------------------------*
    FORM fetch_data.
    
      DATA: pre_outtab LIKE gt_outtab,
            pre_mattab_initial LIKE gt_mattab,
            pre_mattab_issue LIKE gt_mattab,
            pre_mattab_recieve LIKE gt_mattab,
            wa_outtab LIKE LINE OF gt_outtab,
            wa_current LIKE LINE OF gt_outtab.
    
    *copied from another report
    TYPES: BEGIN OF t_materials_description,
      matnr TYPE mseg-matnr,
      maktx TYPE makt-maktx,
      budat TYPE mkpf-budat,
    END OF  t_materials_description,
    
    BEGIN OF t_initial,
    matnr TYPE mseg-matnr,
    bwart TYPE mseg-bwart,
    menge TYPE mseg-menge,
    dmbtr TYPE mseg-dmbtr,
    END OF t_initial,
    
    BEGIN OF t_issue,
    matnr TYPE mseg-matnr,
    bwart TYPE mseg-bwart,
    menge TYPE mseg-menge,
    dmbtr TYPE mseg-dmbtr,
    END OF t_issue,
    
    BEGIN OF t_receip,
    matnr TYPE mseg-matnr,
    bwart TYPE mseg-bwart,
    menge TYPE mseg-menge,
    dmbtr TYPE mseg-dmbtr,
    END OF t_receip.
    
    DATA: wa_matdescription TYPE t_materials_description,
          it_matdescription TYPE TABLE OF t_materials_description,
          it_matdescription_aux TYPE TABLE OF t_materials_description,
          movement TYPE mseg-bwart,
          materialCode TYPE makt-matnr,
          materialCodeTemp TYPE makt-matnr,
          materialCodeAct TYPE makt-matnr,
          act_quantity TYPE mseg-menge,
          old_quantity TYPE mseg-menge,
          GIN type mseg-menge, "goods initial
          GI type mseg-menge, "goods issued
          GR type mseg-menge, "goods received
          AI type mseg-menge, "goods initial
          AIN type mseg-menge, "goods issued
          AR type mseg-menge, "goods received
          totalInitial type i,
          totalAmountInitial type i,
          totalIssued type i,
          totalAmountIssued type i,
          totalRecieved type i,
          totalAmountRecieved type i,
          wa_matinitial TYPE t_initial,
          wa_matinitial_aux TYPE t_initial,
          it_matinitial TYPE TABLE OF t_initial,
          it_matinitial_aux TYPE TABLE OF t_initial,
          wa_matissue TYPE t_issue,
          wa_matissue_aux TYPE t_issue,
          it_matissue TYPE TABLE OF t_issue,
          it_matissue_aux TYPE TABLE OF t_issue,
          wa_matreceip TYPE t_receip,
          wa_matreceip_aux TYPE t_receip,
          it_matreceip TYPE TABLE OF t_receip,
          it_matreceip_aux TYPE TABLE OF t_receip,
          cantidad TYPE sy-dbcnt.
    
    
      SELECT mseg~matnr
             makt~maktx
             mkpf~budat
       FROM mseg
       INNER JOIN marav
       ON mseg~matnr EQ marav~matnr
       INNER JOIN makt
       ON mseg~matnr EQ makt~matnr
       AND makt~spras EQ 'ES'
       INNER JOIN mkpf
       ON mseg~mblnr  EQ mkpf~mblnr
       AND mseg~mjahr EQ mkpf~mjahr
       INTO TABLE it_matdescription.
    *   WHERE makt~matnr IN Material " Sel. Screen
    *   AND marav~mtart IN Type " Sel. Screen
    *   AND mkpf~budat EQ Posting.  " Sel. Screen
    
      IF sy-subrc EQ 0.
    
       cantidad = sy-dbcnt.
    
       it_matdescription_aux[] = it_matdescription[].
    
       DELETE ADJACENT DUPLICATES FROM it_matdescription_aux COMPARING matnr.
    
       SORT it_matdescription_aux BY matnr.
    
       SELECT mseg~matnr
              mseg~bwart
              mseg~menge
              mseg~dmbtr
       FROM MSEG INTO TABLE it_matinitial
       WHERE  mseg~bwart IN ('561', '562')
       .
    
       IF sy-subrc EQ 0.
         cantidad = sy-dbcnt.
       ENDIF.
    
       SORT it_matdescription_aux BY matnr.
    
       SELECT  mseg~matnr
               mseg~bwart
               mseg~menge
               mseg~dmbtr
       FROM MSEG INTO TABLE it_matissue
       WHERE  mseg~bwart IN ('201', '202', '261', '262', '281', '282').
    
       IF sy-subrc EQ 0.
         cantidad = sy-dbcnt.
        ENDIF.
    
       SORT it_matissue BY matnr.
    
       SELECT  mseg~matnr
               mseg~bwart
               mseg~menge
               mseg~dmbtr
       FROM MSEG INTO TABLE it_matreceip
       WHERE  mseg~bwart IN ('101', '102', '501', '502').
    
       IF sy-subrc EQ 0.
         cantidad = sy-dbcnt.
       ENDIF.
    
       SORT it_matdescription_aux BY matnr.
       SORT it_matinitial BY matnr.
       SORT it_matissue BY matnr.
       SORT it_matreceip BY matnr.
    
       totalInitial = 0.
       totalAmountInitial = 0.
       totalIssued = 0.
       totalAmountIssued = 0.
       totalRecieved = 0.
       totalAmountRecieved = 0.
    
       LOOP AT it_matinitial INTO  wa_matinitial.
         IF materialCodeAct EQ ''.
           materialCodeAct = wa_matinitial-matnr.
           if wa_matinitial-bwart = '561'.
             GIN = totalInitial + wa_matinitial-menge.
             totalInitial = GIN.
             AIN = totalAmountInitial + wa_matinitial-dmbtr.
             totalAmountInitial = AIN.
           elseif wa_matinitial-bwart = '562'.
             GIN = totalInitial - wa_matinitial-menge.
             totalInitial = GIN.
             AIN = totalAmountInitial - wa_matinitial-dmbtr.
             totalAmountInitial = AIN.
           endif.
         ELSEIF materialCodeAct EQ wa_matinitial-matnr.
           if wa_matinitial-bwart = '561'.
             GIN = totalInitial + wa_matinitial-menge.
             totalInitial = GIN.
             AIN = totalAmountInitial + wa_matinitial-dmbtr.
             totalAmountInitial = AIN.
           elseif wa_matinitial-bwart = '562'.
             GIN = totalInitial - wa_matinitial-menge.
             totalInitial = GIN.
             AIN = totalAmountInitial - wa_matinitial-dmbtr.
             totalAmountInitial = AIN.
           endif.
         ELSEIF  materialCodeAct NE wa_matinitial-matnr.
           wa_matinitial_aux-matnr = materialCodeAct.
           wa_matinitial_aux-menge = totalInitial.
           wa_matinitial_aux-dmbtr = totalAmountInitial.
           INSERT wa_matinitial_aux INTO TABLE it_matinitial_aux.
           GIN = 0.
           totalInitial = 0.
           materialCodeAct = wa_matinitial-matnr.
           if wa_matinitial-bwart = '561'.
             GIN = totalInitial + wa_matinitial-menge.
             totalInitial = GIN.
              AIN = totalAmountInitial + wa_matinitial-dmbtr.
              totalAmountInitial = AIN.
           elseif wa_matinitial-bwart = '562'.
             GIN = totalInitial - wa_matinitial-menge.
             totalInitial = GIN.
             AIN = totalAmountInitial - wa_matinitial-dmbtr.
             totalAmountInitial = AIN.
           endif.
         ENDIF.
       ENDLOOP.
    
    
    * -- MAT ISSUE
      materialCodeAct =  ''.
    
       LOOP AT it_matissue INTO  wa_matissue.
         IF materialCodeAct EQ ''.
           materialCodeAct = wa_matissue-matnr.
           if wa_matissue-bwart = '201' OR wa_matissue-bwart = '261' OR wa_matissue-bwart = '281'.
           GI = totalIssued + wa_matissue-menge.
           totalIssued = GI.
           AIN = totalAmountIssued + wa_matissue-dmbtr.
           totalAmountIssued = AIN.
           elseif wa_matissue-bwart = '202' OR wa_matissue-bwart = '262' OR wa_matissue-bwart = '282'.
           GI = totalIssued - wa_matissue-menge.
           totalIssued = GI.
           AIN = totalAmountIssued - wa_matissue-dmbtr.
           totalAmountIssued = AIN.
         endif.
         ELSEIF materialCodeAct EQ wa_matissue-matnr.
           if wa_matissue-bwart = '201' OR wa_matissue-bwart = '261' OR wa_matissue-bwart = '281'.
           GI = totalIssued + wa_matissue-menge.
           totalIssued = GI.
           AIN = totalAmountIssued + wa_matissue-dmbtr.
           totalAmountIssued = AIN.
           elseif wa_matissue-bwart = '202' OR wa_matissue-bwart = '262' OR wa_matissue-bwart = '282'.
           GI = totalIssued - wa_matissue-menge.
           totalIssued = GI.
           AIN = totalAmountIssued - wa_matissue-dmbtr.
           totalAmountIssued = AIN.
           endif.
         ELSEIF  materialCodeAct NE wa_matissue-matnr.
           wa_matissue_aux-matnr = materialCodeAct.
           wa_matissue_aux-menge = totalIssued.
           wa_matissue_aux-dmbtr = totalAmountIssued.
           INSERT wa_matissue_aux INTO TABLE it_matissue_aux.
           GI = 0.
           totalIssued = 0.
           materialCodeAct = wa_matissue-matnr.
           if wa_matissue-bwart = '201' OR wa_matissue-bwart = '261' OR wa_matissue-bwart = '281'.
           GI = totalIssued + wa_matissue-menge.
           totalIssued = GI.
           elseif wa_matissue-bwart = '202' OR wa_matissue-bwart = '262' OR wa_matissue-bwart = '282'.
           GI = totalIssued - wa_matissue-menge.
           totalIssued = GI.
           endif.
         ENDIF.
       ENDLOOP.
    
    * -- MAT RECIEVED
      materialCodeAct =  ''.
    
       LOOP AT it_matreceip INTO  wa_matreceip.
         IF materialCodeAct EQ ''.
           materialCodeAct = wa_matreceip-matnr.
           if wa_matreceip-bwart = '101' OR wa_matreceip-bwart = '501'.
            GR = totalRecieved + wa_matreceip-menge.
            totalRecieved = GR.
            AIN = totalAmountRecieved + wa_matreceip-dmbtr.
            totalAmountRecieved = AIN.
          elseif wa_matreceip-bwart = '102' OR wa_matreceip-bwart = '502'.
            GR = totalRecieved - wa_matreceip-menge.
            totalRecieved = GR.
            AIN = totalAmountRecieved - wa_matreceip-dmbtr.
            totalAmountRecieved = AIN.
          endif.
         ELSEIF materialCodeAct EQ wa_matreceip-matnr.
           if wa_matreceip-bwart = '101' OR wa_matreceip-bwart = '501'.
            GR = totalRecieved + wa_matreceip-menge.
            totalRecieved = GR.
            AIN = totalAmountRecieved + wa_matreceip-dmbtr.
            totalAmountRecieved = AIN.
          elseif wa_matreceip-bwart = '102' OR wa_matreceip-bwart = '502'.
            GR = totalRecieved - wa_matreceip-menge.
            totalRecieved = GR.
            AIN = totalAmountRecieved - wa_matreceip-dmbtr.
            totalAmountRecieved = AIN.
          endif.
         ELSEIF  materialCodeAct NE wa_matreceip-matnr.
           wa_matreceip_aux-matnr = materialCodeAct.
           wa_matreceip_aux-menge = totalRecieved.
           wa_matreceip_aux-dmbtr = totalAmountRecieved.
           INSERT wa_matreceip_aux INTO TABLE it_matreceip_aux.
           GR = 0.
           totalRecieved = 0.
           materialCodeAct = wa_matreceip-matnr.
           if wa_matreceip-bwart = '101' OR wa_matreceip-bwart = '501'.
            GR = totalRecieved + wa_matreceip-menge.
            totalRecieved = GR.
          elseif wa_matreceip-bwart = '102' OR wa_matreceip-bwart = '502'.
            GR = totalRecieved - wa_matreceip-menge.
            totalRecieved = GR.
          endif.
         ENDIF.
       ENDLOOP.
    
    
       LOOP AT it_matdescription_aux INTO wa_matdescription.
    
       materialCode = wa_matdescription-matnr.
    
       READ TABLE it_matinitial_aux INTO wa_matinitial
       WITH KEY matnr = wa_matdescription-matnr
       BINARY SEARCH.
    
       IF sy-subrc EQ 0.
         cantidad = sy-dbcnt.
       ENDIF.
    
       READ TABLE it_matissue_aux INTO wa_matissue
       WITH KEY matnr = wa_matdescription-matnr
       BINARY SEARCH.
    
       IF sy-subrc EQ 0.
        cantidad = sy-dbcnt.
       ENDIF.
    
       READ TABLE it_matreceip_aux INTO wa_matreceip
       WITH KEY matnr = wa_matdescription-matnr
       BINARY SEARCH.
    
       IF sy-subrc EQ 0.
          cantidad = sy-dbcnt.
       ENDIF.
    
        wa_outtab-matnr =  wa_matdescription-matnr.
        wa_outtab-maktx =  wa_matdescription-maktx.
        wa_outtab-menge =  wa_matinitial-menge.
        wa_outtab-dmbtr =  wa_matinitial-dmbtr.
        wa_outtab-menge2 = wa_matissue-menge.
        wa_outtab-dmbtr2 = wa_matissue-dmbtr.
        wa_outtab-menge3 = wa_matreceip-menge.
        wa_outtab-dmbtr3 = wa_matreceip-dmbtr.
        wa_outtab-budat =  wa_matdescription-budat.
    
        INSERT wa_outtab INTO TABLE pre_outtab.
    
        CLEAR wa_matdescription.
        CLEAR wa_matinitial.
        CLEAR wa_matissue.
    
         ENDLOOP.
      ENDIF.
    
      IF sy-subrc EQ 0.
        LOOP AT pre_outtab ASSIGNING <out>.
          <out>-perio = <out>-budat+4(2).
          <out>-budat = space.
        ENDLOOP.
        UNASSIGN <out>.
    
        SORT pre_outtab BY matnr maktx dmbtr budat.
    
        LOOP AT pre_outtab ASSIGNING <out>.
          COLLECT <out> INTO gt_outtab.
        ENDLOOP.
        UNASSIGN <out>.
      ENDIF.
    ENDFORM.                    "fetch_data
    
    *----------------------------------------------------------------------*
    FORM display_full_screen.
    
      DATA: lr_content TYPE REF TO cl_salv_form_element.
    
      TRY.
          cl_salv_table=>factory(
          IMPORTING
            r_salv_table = gr_table
          CHANGING
            t_table = gt_outtab ).
        CATCH cx_salv_msg.
      ENDTRY.
    
      PERFORM create_alv_form_content_tol CHANGING lr_content.
      gr_table->set_top_of_list( lr_content ).
    
      DATA lr_functions TYPE REF TO cl_salv_functions_list.
    
      lr_functions = gr_table->get_functions( ).
      lr_functions->set_default('X').
    
      DATA lr_columns TYPE REF TO cl_salv_columns.
    
      lr_columns = gr_table->get_columns( ).
      lr_columns->set_optimize('X').
    
      PERFORM set_columns_technical USING lr_columns.
    
      DATA lr_sorts TYPE REF TO cl_salv_sorts.
    
      PERFORM set_columns_sorted USING lr_sorts.
    
      DATA lr_events TYPE REF TO cl_salv_events_table.
    
      lr_events = gr_table->get_event( ).
    
      CREATE OBJECT gr_events.
    
      SET HANDLER gr_events->on_user_command FOR lr_events.
    
      gr_table->display( ).
    
    ENDFORM.                    "display_full_screen
    
    *----------------------------------------------------------------------*
    FORM set_columns_technical USING ir_columns TYPE REF TO cl_salv_columns.
    
      DATA: lr_column TYPE REF TO cl_salv_column.
    
      TRY.
          lr_column = ir_columns->get_column( 'BUDAT' ).
          lr_column->set_technical( if_salv_c_bool_sap=>true ).
        CATCH cx_salv_not_found.
      ENDTRY.
    *--------------------------------------------------------------------*
      TRY.
          lr_column = ir_columns->get_column( 'PERIO' ).
          lr_column->set_long_text( 'Period' ).
          lr_column->set_medium_text( 'Period' ).
          lr_column->set_short_text( 'Period' ).
        CATCH cx_salv_not_found.
      ENDTRY.
    ENDFORM.                    " SET_COLUMNS_TECHNICAL
    
    *----------------------------------------------------------------------*
    FORM set_columns_sorted USING ir_sorts TYPE REF TO cl_salv_sorts.
    
      ir_sorts = gr_table->get_sorts( ).
    
      TRY .
          ir_sorts->add_sort(
            columnname = 'MATNR'
          ).
        CATCH cx_salv_not_found .
        CATCH cx_salv_existing .
        CATCH cx_salv_data_error .
      ENDTRY.
    
      TRY .
          ir_sorts->add_sort(
            columnname = 'MAKTX'
          ).
        CATCH cx_salv_not_found .
        CATCH cx_salv_existing .
        CATCH cx_salv_data_error .
      ENDTRY.
    
    
      TRY .
          ir_sorts->add_sort(
            columnname = 'MENGE'
          ).
        CATCH cx_salv_not_found .
        CATCH cx_salv_existing .
        CATCH cx_salv_data_error .
      ENDTRY.
    
      TRY .
          ir_sorts->add_sort(
            columnname = 'DMBTR'
          ).
        CATCH cx_salv_not_found .
        CATCH cx_salv_existing .
        CATCH cx_salv_data_error .
      ENDTRY.
    
      TRY .
          ir_sorts->add_sort(
            columnname = 'BUDAT'
          ).
        CATCH cx_salv_not_found .
        CATCH cx_salv_existing .
        CATCH cx_salv_data_error .
      ENDTRY.
    
    ENDFORM.                    " SET_COLUMNS_TECHNICAL
    
    *----------------------------------------------------------------------*
    FORM create_alv_form_content_tol
                       CHANGING cr_content TYPE REF TO cl_salv_form_element.
    
      DATA: lr_top_element TYPE REF TO cl_salv_form_layout_grid,
            lr_end_element TYPE REF TO cl_salv_form_layout_flow,
            lr_grid TYPE REF TO cl_salv_form_layout_grid,
            lr_header TYPE REF TO cl_salv_form_header_info,
            lr_action TYPE REF TO cl_salv_form_action_info,
            lr_textview1 TYPE REF TO cl_salv_form_text,
            lr_textview2 TYPE REF TO cl_salv_form_text,
            lr_textview3 TYPE REF TO cl_salv_form_text,
            lr_textview4 TYPE REF TO cl_salv_form_text,
            lr_icon TYPE REF TO cl_salv_form_icon,
            lr_layout_grid1 TYPE REF TO cl_salv_form_layout_data_grid,
            lr_layout_grid2 TYPE REF TO cl_salv_form_layout_data_grid,
            lr_layout_grid3 TYPE REF TO cl_salv_form_layout_data_grid,
            lr_layout_grid4 TYPE REF TO cl_salv_form_layout_data_grid.
    
      CREATE OBJECT lr_top_element
        EXPORTING
          columns = 1.
    
      lr_header = lr_top_element->create_header_information(
        row = 1
        column = 1
        text     = 'Material Movement Report'                        "#EC NOTEXT
        tooltip  = 'Material Movement Report' ).                     "#EC NOTEXT
    
      lr_action = lr_top_element->create_action_information(
        row = 2
        column = 1
        text     = 'Movements: 561, 562, 281, 282, 201, 202, 261, 262, 101, 102. 501, 502'    "#EC NOTEXT
        tooltip  = 'Movements: 561, 562, 281, 282, 201, 202, 261, 262, 101, 102. 501, 502' ). "#EC NOTEXT
    *
    *  lr_grid = lr_top_element->create_grid( row = 3 column = 1 ).
    *
    **  lr_grid->set_column_count( 2 ).
    *
    *  lr_textview1 = lr_grid->create_text(
    *      row     = 1
    *      column  = 1
    *      text    = 'C11'                                       "#EC NOTEXT
    *      tooltip = 'Tooltip' ).                                "#EC NOTEXT
    *
    *  lr_textview2 = lr_grid->create_text(
    *      row     = 1
    *      column  = 2
    *      text    = 'C12'                                       "#EC NOTEXT
    *      tooltip = 'Tooltip' ).                                "#EC NOTEXT
    *
    *  lr_textview3 = lr_grid->create_text(
    *      row     = 2
    *      column  = 1
    *      text    = 'C21'                                       "#EC NOTEXT
    *      tooltip = 'Tooltip' ).                                "#EC NOTEXT
    *
    *  lr_textview4 = lr_grid->create_text(
    *      row     = 2
    *      column  = 2
    *      text    = 'C22'                                       "#EC NOTEXT
    *      tooltip = 'Tooltip' ).                                "#EC NOTEXT
    *
    *  lr_layout_grid1 ?= lr_textview1->get_layout_data( ).
    *  lr_layout_grid2 ?= lr_textview2->get_layout_data( ).
    *  lr_layout_grid3 ?= lr_textview3->get_layout_data( ).
    *  lr_layout_grid4 ?= lr_textview4->get_layout_data( ).
    *
    *  lr_layout_grid1->set_h_align( if_salv_form_c_h_align=>left ).
    *
    *  lr_layout_grid2->set_h_align( if_salv_form_c_h_align=>left ).
    *  lr_layout_grid3->set_h_align( if_salv_form_c_h_align=>left ).
    *
    *  lr_layout_grid4->set_h_align( if_salv_form_c_h_align=>center ).
    *
    *  CREATE OBJECT lr_icon
    *    EXPORTING
    *      icon    = '@0A@'                                      "#EC NOTEXT
    *      tooltip = 'Air'.                                      "#EC NOTEXT
    *
    *  CALL METHOD lr_grid->set_element
    *    EXPORTING
    *      row       = 3
    *      column    = 1
    *      r_element = lr_icon.
    
      gr_table->set_top_of_list( lr_top_element ).
    
    *  DATA: lr_eol TYPE REF TO cl_salv_form_header_info.
    *  CREATE OBJECT lr_eol
    *    EXPORTING
    *      text = 'This is my Footer'.                           "#EC NOTEXT
    *
    *  gr_table->set_end_of_list( lr_eol ).
    
      cr_content = lr_top_element.
    
    ENDFORM.                    " create_alv_form_content_tol
    
    *----------------------------------------------------------------------*
    FORM print_form  USING i_function TYPE salv_de_function
                           i_text     TYPE string.
    
      DATA: i_formname TYPE tdsfname VALUE 'ZMM_DELVBYVENDOR_SF',
            i_fm_name  TYPE rs38l_fnam.
    
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname = i_formname
        IMPORTING
          fm_name  = i_fm_name.
      IF sy-subrc <> 0.
        WRITE: / 'SSF_FUNCTION_MODULE_NAME error'.
      ENDIF.
    
      CALL FUNCTION i_fm_name
        TABLES
          it_main = gt_outtab.
      IF sy-subrc <> 0.
        WRITE: / 'CALLING FUNCTION MODULE NAME error'.
      ENDIF.
    ENDFORM.                    " PRINT_FORM
Trabajando...