Tabla Interna Dinamica

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • antonio_maltos
    Junior Member
    • ene
    • 3

    #1

    Tabla Interna Dinamica

    Hola a todos,

    alguien podria ayudarme a crear una tabla dinamica? la cuestion es la siguiente.

    He encontrado algunos posts referente a esto, pero solo me permiten crear la tabla interna a partir de alguna existente, pero el problema es que necesito crear una tabla con estructuras que no existen!!! por ejemplo.

    para un reporte si seleccionan agrupamiento por meses en mi tabla interna debo tener los campos "enero", "febrero", "marzo", etc.... para reflejarlos en un alv, pero si me piden agupamiento por dias, debo tener en lugar de esos campos en mi tabla interna los de los dias "lunes", "martes", "miercoles", etc... ahora si me piden semanas debo tener "semana1", "semana2", "semana3" y si me piden años debo tener "2008", "2009", "2010", etc...

    Alguien podria ayudarme en este aspecto??

    Gracias de antemano.
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola .. yo hice algo parecido, colocando como parametro de entrada las columnas que quiero que tenga el reporte ...

    Código:
    [COLOR="Blue"]*&---------------------------------------------------------------------*
    *& Report  ZPRUEBA_2
    *&
    *&---------------------------------------------------------------------*
    *&  Autor       : David Carballido
    *&  Descripción : Crear una tabla interna dinámica
    *&  Programa    : ZPRUEBA_2
    *&  Proyecto    : Proyecto 'H'
    *&---------------------------------------------------------------------*[/COLOR]
    
    REPORT  ZPRUEBA_2.
    
    TYPE-POOLS: abap, col.
    [COLOR="blue"]* Tablas dinámicas[/COLOR]
    FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
                   <dyn_wa>,
                   <fs>.
    
    [COLOR="blue"]* Variables Globales[/COLOR]
    DATA: gt_dyn          TYPE REF TO data,
          gw_dyn          TYPE REF TO DATA,
          r_table         TYPE REF TO cl_salv_table,
          r_header        TYPE REF TO cl_salv_form_element,
          r_footer        TYPE REF TO cl_salv_form_element,
          r_columns_table TYPE REF TO cl_salv_columns_table,
          r_column_table  TYPE REF TO cl_salv_column_table,
          r_datadescr     TYPE REF TO cl_abap_datadescr,
          r_structdescr   TYPE REF TO cl_abap_structdescr,
          gw_component    TYPE abap_componentdescr,
          gt_component    TYPE abap_component_tab.
    
    PARAMETERS: p_col(2) TYPE c OBLIGATORY.
    
    [COLOR="blue"]*  S T A R T  -  O F  -  S E L E C T I O N[/COLOR]
    START-OF-SELECTION.
      PERFORM build_dynamic_table.
      PERFORM get_data.
    
    [COLOR="blue"]*  E N D  -  O F  -  S E L E C T I O N[/COLOR]
    END-OF-SELECTION.
      PERFORM display_report.
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form build_dynamic_table
    *&---------------------------------------------------------------------*[/COLOR]
    FORM build_dynamic_table.
    
      DATA: l_idx(2) TYPE c,
            l_desc   TYPE char50,
            l_hslxx(5) TYPE c,
            lt_color TYPE lvc_t_scol.
    
    [COLOR="blue"]* Columna 1[/COLOR]
      r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_desc ).
      gw_component-name = 'COLUMN'.
      gw_component-type = r_datadescr.
      APPEND gw_component TO gt_component.
    [COLOR="blue"]* Column 2 - Tipos de colores para cada linea[/COLOR]
      r_datadescr ?= cl_abap_datadescr=>describe_by_data( lt_color ).
      gw_component-name = 'COLOR'.
      gw_component-type = r_datadescr.
      APPEND gw_component TO gt_component.
    
      DO p_col TIMES.
        l_idx = sy-index.
        CONDENSE l_idx NO-GAPS.
        r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_hslxx ).
        CONCATENATE 'COL' l_idx INTO gw_component-name.
        gw_component-type = r_datadescr.
        APPEND gw_component TO gt_component.
      ENDDO.
    
      TRY.
        r_structdescr = cl_abap_structdescr=>create( p_components = gt_component ).
        CATCH cx_sy_struct_creation .
        WRITE: / 'CX_SY_STRUCT_CREATION'.
      ENDTRY.
    [COLOR="blue"]* Fill the table with data from GT_DATA[/COLOR]
      CREATE DATA gw_dyn TYPE HANDLE r_structdescr.
      ASSIGN gw_dyn->* TO <dyn_wa>.
      CREATE DATA gt_dyn LIKE STANDARD TABLE OF <dyn_wa>.
      ASSIGN gt_dyn->* TO <dyn_table>.
    
    ENDFORM.                 " build_dynamic_table
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form get_data
    *&---------------------------------------------------------------------*[/COLOR]
    FORM get_data.
    [COLOR="blue"]* Seleccionar sentencia para tener data[/COLOR]
    ENDFORM.                    "get_data
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form display_report
    *&---------------------------------------------------------------------*[/COLOR]
    FORM display_report .
    
      PERFORM display_header.   " Display ALV Header
      PERFORM display_footer.   " DIsplay ALV Footer
      PERFORM fill_data.        " Fill data
      PERFORM set_color.        " Set color
      PERFORM display_list.     " Display the ALV
    
    ENDFORM.                  " display_report
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form display_header
    *&---------------------------------------------------------------------*[/COLOR]
    FORM display_header .
    
      DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
            l_text  TYPE string.
    
      SELECT SINGLE name_textc
        INTO l_text
          FROM user_addr
            WHERE bname = sy-uname.
    
      CONCATENATE 'Usuario :'
                  l_text INTO l_text SEPARATED BY space.
    
      CREATE OBJECT lr_grid.
      lr_grid->create_text( row    = 1
                            column = 1
                            text   = l_text ).
      lr_grid->create_text( row    = 2
                            column = 1
                            text   = sy-host ).
      r_header = lr_grid.
    
    ENDFORM.                    " display_header
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form display_footer
    *&---------------------------------------------------------------------*[/COLOR]
    FORM display_footer .
    
      DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid.
    
      CREATE OBJECT lr_grid.
      lr_grid->create_text( row    = 1
                            column = 1
                            text   = sy-datum ).
      lr_grid->create_text( row    = 2
                            column = 1
                            text   = sy-uzeit ).
      r_footer = lr_grid.
    
    ENDFORM.                    " display_footer
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form set_color
    *&---------------------------------------------------------------------*[/COLOR]
    FORM set_color.
    
      DATA: lt_color TYPE lvc_t_scol,
            ls_color LIKE LINE OF lt_color,
            l_idx(2) TYPE c.
    
      FIELD-SYMBOLS: <fs_color>.
    
      LOOP AT <dyn_table> INTO <dyn_wa>.
        l_idx = sy-tabix.
        CONDENSE l_idx NO-GAPS.
        ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <fs_color>.
        ls_color-color-col = '6'.
        APPEND ls_color TO lt_color.
        <fs_color> = lt_color.
        MODIFY <dyn_table> FROM <dyn_wa> INDEX l_idx.
        UNASSIGN: <fs_color>.
      ENDLOOP.
    
    ENDFORM.                    " set_color
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form display_list
    *&---------------------------------------------------------------------*[/COLOR]
    FORM display_list.
    
      DATA: r_display TYPE REF TO cl_salv_display_settings.
    [COLOR="blue"]* Preparar tabla interna para mostrar[/COLOR]
      cl_salv_table=>factory( EXPORTING list_display = 'X'
                              IMPORTING r_salv_table = r_table
                              CHANGING  t_table      = <dyn_table> ).
    [COLOR="blue"]* Mandar titulo del reporte[/COLOR]
      r_table->set_top_of_list( r_header ).
    [COLOR="blue"]* Mandar pie de pagina[/COLOR]
      r_table->set_end_of_list( r_footer ).
      r_display = r_table->get_display_settings( ).
    [COLOR="blue"]* Asignando nombre a las columnas[/COLOR]
      PERFORM set_column_attr.
    [COLOR="blue"]* Mostrar el reporte[/COLOR]
      r_table->display( ).
    
    ENDFORM.                    " display_list
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form set_column_attr
    *&---------------------------------------------------------------------*[/COLOR]
    FORM set_column_attr.
    
      DATA: l_idx(2)  TYPE c,
            l_text(4) TYPE c,
            colname   TYPE lvc_fname,
            outps     TYPE scrtext_s,
            outpm     TYPE scrtext_m,
            outpl     TYPE scrtext_l.
    
      r_columns_table = r_table->get_columns( ).
    [COLOR="blue"]* Color de columna[/COLOR]
      r_columns_table->set_color_column( 'COLOR' ).
      DO p_col TIMES.
        l_idx = sy-index.
        CONDENSE l_idx NO-GAPS.
        CONCATENATE 'COL' l_idx INTO colname.
        outps = colname.
        outpm = colname.
        outpl = colname.
        r_column_table ?= r_columns_table->get_column( colname ).
        r_column_table->set_optimized( value  = abap_true ).
        r_column_table->set_alignment( value  = 1 ).
        r_column_table->set_zero( value  = space ).
        r_column_table->set_short_text( outps ).
        r_column_table->set_medium_text( outpm ).
        r_column_table->set_long_text( outpl ).
      ENDDO.
    
    ENDFORM.                    " set_column_attr
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form fill_data
    *&---------------------------------------------------------------------*[/COLOR]
    FORM fill_data.
    
      DATA: l_idx(2),
            l_col  TYPE string.
    
      DO p_col TIMES.
        l_idx = sy-index.
        CONDENSE l_idx NO-GAPS.
        CONCATENATE 'COL' l_idx INTO l_col.
        ASSIGN COMPONENT l_col OF STRUCTURE <dyn_wa> TO <fs>.
        <fs> = 0.
        UNASSIGN <fs>.
      ENDDO.
    
      DO p_col TIMES.
        l_idx = sy-index.
        CONDENSE l_idx NO-GAPS.
        ASSIGN COMPONENT 'COLUMN' OF STRUCTURE <dyn_wa> TO <fs>.
        CONCATENATE 'Row' l_idx INTO <fs> SEPARATED BY space.
        UNASSIGN <fs>.
        APPEND <dyn_wa> TO <dyn_table>.
      ENDDO.
    
    ENDFORM.                   " fill_data
    David Carballido Córdova

    Comentario

    • ag2020
      Junior Member
      • mar
      • 5

      #3
      ************************************************** **********************
      ** NOMBRE : Z51FI_7701_TABLAS **
      ** AUTOR : ALEX (BSA) **
      ** FECHA : 16-10-08 **
      ************************************************** **********************

      REPORT (sy-repid) LINE-SIZE 260
      LINE-COUNT 65
      MESSAGE-ID 00 NO STANDARD PAGE HEADING.

      CONSTANTS:
      c_select(3) VALUE 'C11'.
      DATA: cl_gui_frontend TYPE REF TO cl_gui_frontend_services.

      TYPES: BEGIN OF xml_line_type,
      line TYPE char256,
      END OF xml_line_type,
      xml_line_tab_type TYPE TABLE OF xml_line_type.
      DATA: data_itab TYPE xml_line_tab_type.


      DATA: alv_def LIKE disvariant-variant.

      * Includes
      INCLUDE rm07alvi.


      DATA: BEGIN OF tt_list OCCURS 0,
      box(1),
      icono LIKE icon-id,
      apunt(4),
      kostl TYPE csks-kostl,
      gsber TYPE csks-gsber,
      gtext TYPE v_tgsb-gtext,
      kalsm TYPE kalsm_d,
      mwskz TYPE mwskz,
      text1 TYPE text1_007s,
      saknr TYPE skb1-saknr,
      bukrs TYPE skb1-bukrs,
      lifnr TYPE lfa1-lifnr,
      kunnr TYPE kna1-kunnr,
      stcdt(20), "Número de identificación fiscal
      stcd1(20), "Número identificación fiscal 3
      stcd2(20), "Número identificación fiscal 4
      stceg(20), "Número de identificación fiscal comunitario
      color TYPE char3,
      color_cell TYPE lvc_t_scol,
      END OF tt_list.


      DATA: t_list LIKE tt_list OCCURS 0 WITH HEADER LINE.
      CONSTANTS:
      c_click LIKE sy-ucomm VALUE '&IC1', " Codigo del doble click
      c_struct(50) TYPE c VALUE space,
      c_pf_status_set TYPE slis_formname VALUE 'ALV_SET_STATUS',
      c_user_command TYPE slis_formname VALUE 'USER_COMMAND',
      c_layout TYPE slis_formname VALUE 'LAYOUT',
      c_a(1) TYPE c VALUE 'A',
      c_xselp(5) TYPE c VALUE 'XSELP',
      c_marked TYPE c VALUE 'X',
      c_tipo_grande TYPE c VALUE 'H',
      c_tipo_mediano TYPE c VALUE 'S',
      c_tipo_pequeno TYPE c VALUE 'A',
      c_tipo_alv TYPE c VALUE '1',
      c_tipo_list TYPE c VALUE '2',
      c_manual(6) TYPE c VALUE 'Manual',
      c_views(5) TYPE c VALUE 'YCB81'.

      * Data for ALV
      DATA: t_fc TYPE slis_t_fieldcat_alv,
      t_events TYPE slis_t_event,
      t_sort TYPE slis_t_sortinfo_alv.
      DATA: it_layout TYPE slis_layout_alv.

      TYPES: BEGIN OF lin_documento,
      bukrs LIKE fkkvkp-opbuk,
      gpart LIKE dfkkop-gpart,
      vkont LIKE dfkkop-vkont,
      opbel LIKE dfkkop-opbel,
      blart LIKE dfkkop-blart,
      budat LIKE dfkkop-budat,
      betrh LIKE dfkkop-betrh,
      waers LIKE dfkkop-waers,
      texto(50) TYPE c,
      status TYPE c,
      END OF lin_documento.


      SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
      SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-004.
      PARAMETERS: p_bukrs LIKE bseg-bukrs DEFAULT 'BSA' OBLIGATORY.
      SELECT-OPTIONS: s_datum FOR sy-datum DEFAULT sy-datum.

      SELECTION-SCREEN END OF BLOCK b2.
      SELECTION-SCREEN END OF BLOCK a1.

      SELECTION-SCREEN BEGIN OF BLOCK p WITH FRAME TITLE text-005.
      SELECTION-SCREEN BEGIN OF LINE.
      PARAMETERS: p1 RADIOBUTTON GROUP g1.
      SELECTION-SCREEN COMMENT 5(12) text-0l1 FOR FIELD p1.
      PARAMETERS2 RADIOBUTTON GROUP g1.
      SELECTION-SCREEN COMMENT 20(15) text-0l2 FOR FIELD p2.
      PARAMETERS3 RADIOBUTTON GROUP g1.
      SELECTION-SCREEN COMMENT 40(15) text-0l3 FOR FIELD p3.
      PARAMETERS4 RADIOBUTTON GROUP g1.
      SELECTION-SCREEN COMMENT 58(15) text-0l4 FOR FIELD p4.
      PARAMETERS5 RADIOBUTTON GROUP g1.
      SELECTION-SCREEN COMMENT 78(15) text-0l5 FOR FIELD p5.
      SELECTION-SCREEN END OF LINE.

      SELECTION-SCREEN BEGIN OF LINE.
      PARAMETERS6 RADIOBUTTON GROUP g1.
      SELECTION-SCREEN COMMENT 5(15) text-0l6 FOR FIELD p5.
      SELECTION-SCREEN END OF LINE.

      SELECTION-SCREEN END OF BLOCK p.

      * Own selection screen: Only display variant
      SELECTION-SCREEN BEGIN OF BLOCK display WITH FRAME TITLE text-000.
      * Sacar Reservas especiales si se marca
      SELECTION-SCREEN END OF BLOCK display.

      * Structures for anciental export techniques


      ************************************************** **********************
      * Initialization. Get ALV default variant
      INITIALIZATION.
      PERFORM alv_init.

      AT SELECTION-SCREEN.
      PERFORM alv_check.

      START-OF-SELECTION.
      ************************************************** **********************
      * Data selection
      PERFORM f_load_t_list TABLES t_list.

      END-OF-SELECTION.
      ************************************************** **********************
      * Evaluation of the result.
      DESCRIBE TABLE t_list.

      MESSAGE s001(00)
      WITH sy-tfill 'Registro(s) leido(s)'(s01).
      PERFORM data_process.
      PERFORM alv_build.
      PERFORM list_display.



      ************************************************** **********************
      * Processing of the data.
      * Colorization, calculating differences, moving accountings...
      ************************************************** **********************
      FORM data_process.
      DESCRIBE TABLE t_list.
      IF sy-tfill EQ 1.
      SET USER-COMMAND 'BOX1'.
      ENDIF.
      LOOP AT t_list.
      IF t_list-color EQ 'C61'.
      ELSE.
      t_list-color = 'C30'.
      ENDIF.
      PERFORM actualizar_color USING '1'.
      MODIFY t_list.
      ENDLOOP.
      ENDFORM. "data_process

      ************************************************** **********************
      * Display the list
      ************************************************** **********************
      FORM list_display.

      alv_detail_func = 'REUSE_ALV_GRID_DISPLAY'.
      * PERFORM p_sort_table TABLES t_sort .

      PERFORM layout_1.

      CALL FUNCTION alv_detail_func
      EXPORTING
      i_interface_check = ' '
      i_callback_program = alv_repid
      i_callback_pf_status_set = 'STATUS_SET'
      i_callback_user_command = 'USER_COMMAND'
      is_layout = alv_layout
      it_fieldcat = t_fc
      * it_sort = t_sort
      i_default = 'X'
      i_save = 'A'
      is_variant = alv_variant
      it_events = t_events[]
      is_print = alv_print
      TABLES
      t_outtab = t_list.

      ENDFORM. "list_display
      *---------------------------------------------------------------------*
      * FORM build_eventtab *
      *---------------------------------------------------------------------*
      FORM build_eventtab USING po_events TYPE slis_t_event.
      CONSTANTS: c_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
      c_top_of_list TYPE slis_formname VALUE 'TOP_OF_LIST',
      c_end_of_list TYPE slis_formname VALUE 'END_OF_LIST',
      c_status_set TYPE slis_formname VALUE 'STATUS_SET'.


      DATA: ls_event TYPE slis_alv_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
      EXPORTING
      i_list_type = 0
      IMPORTING
      et_events = po_events.
      READ TABLE po_events WITH KEY name = slis_ev_top_of_list
      INTO ls_event.
      IF sy-subrc = 0.
      MOVE c_top_of_list TO ls_event-form.
      MODIFY po_events FROM ls_event INDEX sy-tabix.
      ENDIF.
      READ TABLE po_events WITH KEY name = slis_ev_top_of_page
      INTO ls_event.
      IF sy-subrc = 0.
      MOVE c_top_of_page TO ls_event-form.
      MODIFY po_events FROM ls_event INDEX sy-tabix.
      ENDIF.
      READ TABLE po_events WITH KEY name = slis_ev_end_of_list
      INTO ls_event.
      IF sy-subrc = 0.
      MOVE c_end_of_list TO ls_event-form.
      MODIFY po_events FROM ls_event INDEX sy-tabix.
      ENDIF.

      READ TABLE po_events WITH KEY name = slis_ev_pf_status_set
      INTO ls_event.
      IF sy-subrc = 0.
      MOVE c_status_set TO ls_event-form.
      MODIFY po_events FROM ls_event INDEX sy-tabix.
      ENDIF.

      ENDFORM. "build_eventtab
      *---------------------------------------------------------------------*
      * FORM alv_catalogo *
      *---------------------------------------------------------------------*
      FORM alv_catalogo USING p_estructura.
      DATA: it_fieldcat_hd LIKE LINE OF t_fc.
      REFRESH t_fc.

      DATA l_estructura LIKE dd02l-tabname.
      DATA l_estructura_int TYPE slis_tabname.
      l_estructura_int = l_estructura = p_estructura.


      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
      EXPORTING
      i_structure_name = l_estructura
      i_client_never_display = 'X'
      i_bypassing_buffer = 'X'
      CHANGING
      ct_fieldcat = t_fc[].

      * Si no encontró campos seguramente sea una tabla interna
      IF t_fc[] IS INITIAL.
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
      EXPORTING
      i_program_name = alv_repid
      i_internal_tabname = l_estructura_int
      i_client_never_display = 'X'
      i_bypassing_buffer = 'X'
      i_inclname = alv_repid
      CHANGING
      ct_fieldcat = t_fc[].

      ENDIF.
      LOOP AT t_fc INTO it_fieldcat_hd
      WHERE seltext_l IS INITIAL
      AND seltext_m IS INITIAL
      AND seltext_s IS INITIAL.


      SELECT SINGLE ddtext
      INTO it_fieldcat_hd-seltext_l
      FROM dd03t
      WHERE tabname = l_estructura
      AND ddlanguage = sy-langu
      AND fieldname = it_fieldcat_hd-fieldname.
      CHECK sy-subrc EQ 0.
      it_fieldcat_hd-seltext_m = it_fieldcat_hd-seltext_l.
      it_fieldcat_hd-seltext_s = it_fieldcat_hd-seltext_l.

      MODIFY t_fc FROM it_fieldcat_hd.
      ENDLOOP.
      ENDFORM. "alv_catalogo
      *---------------------------------------------------------------------*
      * Form TOP_OF_LIST
      *---------------------------------------------------------------------*
      FORM top_of_list.
      FORMAT RESET.
      NEW-LINE.

      * WRITE: 'Status:', (10) space.
      * WRITE: '@01@' AS ICON NO-GAP, 'Contab.', (3) space .
      * WRITE: '@8A@' AS ICON NO-GAP, 'Cont.parcial.', (3) space .
      * WRITE: '@5C@' AS ICON NO-GAP, 'No corresponde', (3) space .
      * WRITE: '@5B@' AS ICON NO-GAP, 'Pendiente'.

      ENDFORM. "top_of_list
      *---------------------------------------------------------------------*
      * Form TOP_OF_PAGE
      *---------------------------------------------------------------------*
      FORM top_of_page.
      DATA: butxt TYPE t001-butxt.
      CHECK NOT 1 EQ 2.
      WRITE:/.
      * write: ' Cta.mayor'.
      * new-line.
      SELECT SINGLE butxt INTO butxt FROM t001 WHERE bukrs EQ p_bukrs.
      WRITE: ' Sociedad', p_bukrs, butxt.
      NEW-LINE.
      ENDFORM. "top_of_page
      *--------------------------------------------------------------------*
      * Form end_of_list
      *--------------------------------------------------------------------*
      FORM end_of_list.
      NEW-LINE.
      * PERFORM selecciones.
      NEW-LINE.
      ENDFORM. "end_of_list
      *---------------------------------------------------------------------*
      * FORM status_set *
      *---------------------------------------------------------------------*
      FORM status_set USING rt_extab TYPE slis_t_extab.
      DATA: lt_extab TYPE slis_t_extab WITH HEADER LINE.

      * APPEND LINES OF rt_extab TO lt_extab.
      * IF sy-tcode = c_views.
      * &excluir: 'MOD', 'OBSERVACIO',
      * 'BTT1', 'BTT2', 'BTT3',
      * 'NUEVA', 'SE16N',
      * 'RUN1', 'RUN2', 'RUN3', 'RUN4',
      * 'LOCALIZACI', 'ELIMINAR', 'ANULAR',
      * 'REFRESH'.
      * ELSE.
      * ENDIF.
      SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLSLVC_FULLSCREEN'
      EXCLUDING lt_extab.

      ENDFORM. "status_set
      *---------------------------------------------------------------------*
      * FORM help *
      *---------------------------------------------------------------------*
      FORM help CHANGING po_partner.
      * Display Search dialog box for Contract Account.
      DATA:
      l_service LIKE sy-ucomm,
      select_value LIKE help_info-fldvalue,
      rsmdy_ret LIKE rsmdy,
      selection,
      help_infos LIKE help_info ,
      dynpselect LIKE dselc OCCURS 0 WITH HEADER LINE,
      dynpvaluetab LIKE dval OCCURS 0 WITH HEADER LINE.


      help_infos-call = 'V'.
      help_infos-object = 'F'.
      help_infos-program = sy-repid.
      help_infos-dynpro = sy-dynnr.
      help_infos-tabname = 'YINTERSEG'.
      help_infos-fieldname = 'PARTNER'.
      * help_infos-fieldtype = 'CHAR'.
      * help_infos-fieldlng = '10'.
      * help_infos-spras = sy-langu.
      * help_infos-menufunct = 'HC'.
      ** help_infos-dynpprog = 'YEPCB0090'.
      ** help_infos-dynprofld = 'YINTERSEG-PARTNER'.
      * help_infos-pfkey = 'ST0220'.
      * help_infos-docuid = 'FE'.
      *
      * dynpselect-fldname = 'PARTNER'.
      * append dynpselect.
      *

      * Alle F4-Hilfe Aufrufe werden hier abgehandelt

      CALL FUNCTION 'DD_SHLP_CALL_FROM_DYNP'
      EXPORTING
      help_infos = help_infos
      IMPORTING
      selection = selection
      select_value = select_value
      rsmdy_ret = rsmdy_ret
      TABLES
      dynpselect = dynpselect
      dynpvaluetab = dynpvaluetab
      EXCEPTIONS
      OTHERS = 2.

      * SELECT SINGLE (all) INTO yinterseg FROM yinterseg
      * WHERE sgtxt EQ select_value.
      * IF sy-subrc NE 0.
      * CLEAR yinterseg.
      * ENDIF.

      ENDFORM. "help

      *--------------------------------------------------------------------*
      * Form actualizar_color
      *--------------------------------------------------------------------*
      FORM actualizar_color USING value(pi_color).
      DATA : it_color TYPE TABLE OF lvc_s_scol.
      DATA : wa_color TYPE lvc_s_scol.

      CLEAR: wa_color, it_color[].
      MOVE pi_color TO wa_color-color-col.
      MOVE '0' TO wa_color-color-int.
      MOVE '0' TO wa_color-color-inv.
      MOVE 'GPART' TO wa_color-fname.
      APPEND wa_color TO it_color.
      t_list-color_cell = it_color[].
      ENDFORM. "actualizar_color


      *---------------------------------------------------------------------*
      * FORM view_YINTERSEG *
      *---------------------------------------------------------------------*
      FORM view_yinterseg
      USING value(pi_action) value(pi_viewname) LIKE dd02v-tabname.


      pi_action = 'S'.
      CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
      EXPORTING
      action = pi_action
      * CORR_NUMBER = ' '
      * GENERATE_MAINT_TOOL_IF_MISSING = ' '
      * SHOW_SELECTION_POPUP = ' '
      view_name = pi_viewname
      * NO_WARNING_FOR_CLIENTINDEP = ' '
      * RFC_DESTINATION_FOR_UPGRADE = ' '
      * CLIENT_FOR_UPGRADE = ' '
      * VARIANT_FOR_SELECTION = ' '
      * COMPLEX_SELCONDS_USED = ' '
      * CHECK_DDIC_MAINFLAG = ' '
      * SUPPRESS_WA_POPUP = ' '
      * TABLES
      * DBA_SELLIST =
      * EXCL_CUA_FUNCT =
      * EXCEPTIONS
      * CLIENT_REFERENCE = 1
      * FOREIGN_LOCK = 2
      * INVALID_ACTION = 3
      * NO_CLIENTINDEPENDENT_AUTH = 4
      * NO_DATABASE_FUNCTION = 5
      * NO_EDITOR_FUNCTION = 6
      * NO_SHOW_AUTH = 7
      * NO_TVDIR_ENTRY = 8
      * NO_UPD_AUTH = 9
      * ONLY_SHOW_ALLOWED = 10
      * SYSTEM_FAILURE = 11
      * UNKNOWN_FIELD_IN_DBA_SELLIST = 12
      * VIEW_NOT_FOUND = 13
      * MAINTENANCE_PROHIBITED = 14
      * OTHERS = 15
      .
      IF sy-subrc <> 0.
      * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      ENDFORM. "view_yinterseg


      *---------------------------------------------------------------------*
      * FORM layout *
      *---------------------------------------------------------------------*
      FORM layout_1.

      alv_layout-numc_sum = c_marked. " Permitir totalización en
      alv_layout-no_sumchoice = c_marked. " No permitir volver a sumar
      alv_layout-no_totalline = c_marked. " Sin linea de totalización
      alv_layout-no_subchoice = c_marked. " No permitir volvera a

      alv_layout-totals_before_items = c_marked. " Mostrar totales tras las

      ENDFORM. "layout_1


      *---------------------------------------------------------------------*
      * FORM write_result_to_clipboard *
      *---------------------------------------------------------------------*
      FORM f_clipboard USING value(pi_txt).
      DATA: mylength TYPE i.
      DATA: myrc TYPE i.
      CLEAR data_itab[].
      APPEND pi_txt TO data_itab.

      CALL METHOD cl_gui_frontend_services=>clipboard_export
      IMPORTING
      data = data_itab[]
      CHANGING
      rc = myrc
      EXCEPTIONS
      cntl_error = 1
      error_no_gui = 2
      OTHERS = 3.

      CALL METHOD cl_gui_frontend_services=>clipboard_import
      IMPORTING
      data = data_itab[]
      length = mylength.




      ENDFORM. "f_clipboard
      ************************************************** **********************
      * User commands
      ************************************************** **********************
      FORM user_command USING rf_ucomm LIKE sy-ucomm
      rs TYPE slis_selfield.
      * CASE rf_ucomm.
      * WHEN 'LOCALIZACI'.
      * $refresh.
      * WHEN 'REFRESH'.
      * PERFORM f_refresh.
      * $refresh.
      * WHEN OTHERS.
      * ENDCASE.
      CLEAR rf_ucomm.
      ENDFORM. "user_command


      *---------------------------------------------------------------------*
      * FORM f_load_t_list *
      *---------------------------------------------------------------------*
      FORM f_load_t_list TABLES t_list.
      CASE 'X'.
      WHEN p1.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE t_list
      FROM csks
      WHERE bukrs EQ p_bukrs.
      WHEN p2.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE t_list
      FROM tgsbt
      WHERE spras EQ sy-langu.
      WHEN p3.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE t_list
      FROM t007s
      WHERE spras EQ sy-langu
      AND kalsm EQ 'TAXES'.
      WHEN p4.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE t_list
      FROM lfa1.
      WHEN p5.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE t_list
      FROM kna1.
      WHEN p6.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE t_list
      FROM skb1
      WHERE bukrs EQ p_bukrs.
      WHEN OTHERS.
      ENDCASE.

      ENDFORM. " f_load_t_list

      ************************************************** **********************
      * Creation of the data for ALV: Field catalog, layout, sorting...
      ************************************************** **********************
      FORM alv_build.
      DATA: ls_fieldcat TYPE slis_fieldcat_alv.
      DATA: lv_index TYPE sy-tabix.

      * PERFORM build_eventtab
      * USING t_events[].


      CASE 'X'.
      WHEN p1.
      PERFORM alv_catalogo
      USING 'CSKS'.
      DELETE t_fc WHERE fieldname EQ 'KALSM'.

      WHEN p2.
      PERFORM alv_catalogo
      USING 'TGSBT'.
      WHEN p3.
      PERFORM alv_catalogo
      USING 'T007S'.

      WHEN p4.
      PERFORM alv_catalogo
      USING 'LFA1'.
      WHEN p5.
      PERFORM alv_catalogo
      USING 'KNA1'.
      WHEN p6.
      PERFORM alv_catalogo
      USING 'SKB1'.
      DELETE t_fc WHERE fieldname EQ 'MWSKZ'.
      WHEN OTHERS.
      ENDCASE.

      LOOP AT t_fc INTO ls_fieldcat.

      CASE ls_fieldcat-fieldname.
      WHEN 'KOSTL' OR 'KALSM' OR 'MWSKZ' OR 'TEXT1'
      OR 'GSBER' OR 'GTEXT' OR 'SAKNR' OR 'BUKRS'
      OR 'KUNNR' OR 'LIFNR'
      OR 'STCDT' OR 'STCD1' OR 'STCD2' OR 'STCEG'.




      WHEN OTHERS.
      DELETE t_fc.
      ENDCASE.
      ENDLOOP.

      * ls_fieldcat-fieldname = 'ICONO'.
      * ls_fieldcat-key = 'X'.
      * ls_fieldcat-col_pos = 1.
      * ls_fieldcat-icon = 'X'.
      * ls_fieldcat-hotspot = 'X'.
      * CLEAR: ls_fieldcat-ref_tabname.
      * ls_fieldcat-seltext_l =
      * ls_fieldcat-seltext_m =
      * ls_fieldcat-seltext_s =
      * ls_fieldcat-reptext_ddic = 'St'.
      * ls_fieldcat-intlen = 3.
      * APPEND ls_fieldcat TO t_fc.
      *
      * ls_fieldcat-fieldname = 'BOX'.
      * ls_fieldcat-no_out = 'X'.
      * ls_fieldcat-checkbox = 'X'.
      * ls_fieldcat-col_pos = 2.
      ** ls_fieldcat-hotspot = 'X'.
      * ls_fieldcat-intlen = 3.
      * APPEND ls_fieldcat TO t_fc.

      alv_layout-info_fieldname = 'COLOR'.
      alv_layout-coltab_fieldname = 'COLOR_CELL'.

      ENDFORM. "alv_build

      Comentario

      • ibecerra

        #4
        yo tengo una solucion simple a ese problema.
        dime cuantas semanas como maximo se debe presentar.
        create tu tabla con los datos necesarios ..
        ejemplo ti_final
        grupo_articulo
        pos001
        pos002
        pos003
        pos004
        pos005
        .
        .
        .
        la logica es la siguiente trabajas con una tabla intermedia
        ejmplo
        ti_FECHA
        Donde TI_FECHA guarda la siguiente info
        TI_FECHA
        campo 1 campo 2(posicion)
        012008 001
        022008 002
        032008 003
        042008 004
        052008 005
        062008 006
        o
        y tambien puede guarda años , meses ect
        [B][FONT=Tahoma]TI_FECHA
        campo 1 campo 2(posicion)
        2008 001
        2009 002
        [B][FONT=Tahoma]2010 003
        2011 004
        2012 005
        entonces cuando haces un loop a tu tabla interna q contenga meses o semanas... o lo q sea.. ejmplo
        ti_data.
        grupo_articulo fecha cantidad.
        001 012008 2
        001 022008 4
        [B][FONT=Tahoma]001 032008 5
        hacer una lectura a la tabla ti_fecha. y para colocar en los campos respectivos utilizas los asign... ejmplo
        read table ti_fecha fecha = '012008'
        capturas la posicion campo 2 = '001'...
        y aqui esta lo interesante los asign.. o field asignid..
        CONCATENATE 'TI_DATA-POS' ti_fecha-POS INTO l_global_name.
        UNASSIGN <POS>.
        ASSIGN (l_global_name) TO <POS>.
        CHECK SY-SUBRC EQ 0.
        ti_final-grupo_articulo = TI_DATA-grupo_articulo.
        <POS> = TI_DATA-cantidad.
        collect ti_final.
        a la declaracion de esas variables es la siguiente.
        DATA:
        l_global_name TYPE string.
        FIELD-SYMBOLS:
        <POS> LIKE ZEMPSRES-VALTOT.
        espera q te sirva.

        Comentario

        • antonio_maltos
          Junior Member
          • ene
          • 3

          #5
          Ejemplo Tabla interna dinamica

          Gracias a todos por sus respuestas, haciendo una combinacion de todos ellos y del post de ibecerra, pude hacer lo que necesitaba, aqui les dejo el codigo que genera la tabla interna dinamica, en este caso solo para los meses, cuestion de logica de programacion para hacer lo demas..


          Saludos y gracias a todos de antemano .

          *&---------------------------------------------------------------------*
          *& Report ZPRUEBAS_ABAP
          *&
          *&---------------------------------------------------------------------*
          *& reporte para la creacion de una tabla interna dinamica.
          *&
          *&---------------------------------------------------------------------*

          REPORT ZPRUEBAS_ABAP.
          DATA: t_fieldcat TYPE lvc_t_fcat,
          t_fieldcat_wa TYPE LINE OF lvc_t_fcat.

          DATA: tabla TYPE REF TO data,
          EP_TABLE TYPE REF TO data,
          EP_line TYPE REF TO data.

          DATA: BEGIN OF MESES OCCURS 0,
          MES(12) TYPE C,
          END OF MESES.

          TYPE-POOLS: slis.


          FIELD-SYMBOLS: <l_table> TYPE ANY TABLE,
          <l_line> TYPE ANY,
          <l_field> TYPE ANY.

          START-OF-SELECTION.

          MESES-MES = 'ENERO'. APPEND MESES.
          MESES-MES = 'FEBRERO'. APPEND MESES.
          MESES-MES = 'MARZO'. APPEND MESES.
          MESES-MES = 'ABRIL'. APPEND MESES.
          MESES-MES = 'MAYO'. APPEND MESES.
          MESES-MES = 'JUNIO'. APPEND MESES.
          MESES-MES = 'JULIO'. APPEND MESES.
          MESES-MES = 'AGOSTO'. APPEND MESES.
          MESES-MES = 'SEPTIEMBRE'. APPEND MESES.
          MESES-MES = 'OCTUBRE'. APPEND MESES.
          MESES-MES = 'NOVIEMBRE'. APPEND MESES.
          MESES-MES = 'DICIEMBRE'. APPEND MESES.

          LOOP AT MESES.
          t_fieldcat_wa-col_pos = SY-TABIX.
          t_fieldcat_wa-fieldname = MESES-MES.
          APPEND t_fieldcat_wa TO t_fieldcat.
          ENDLOOP.

          CALL METHOD cl_alv_table_create=>create_dynamic_table
          EXPORTING
          it_fieldcatalog = t_fieldcat
          IMPORTING
          ep_table = tabla
          EXCEPTIONS
          GENERATE_SUBPOOL_DIR_FULL = 1
          others = 2
          .
          IF sy-subrc = 0.
          * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.

          ASSIGN tabla->* TO <l_table>.
          CREATE DATA ep_line LIKE LINE OF <l_table>.
          ASSIGN ep_line->* TO <l_line>.


          LOOP AT MESES.
          assign component MESES-MES of structure <l_line> to <l_field>.
          <l_field> = SY-TABIX.
          ENDLOOP.
          insert <l_line> into table <l_table>.

          LOOP AT MESES.
          assign component meses-mes of structure <l_line> to <l_field>.
          write: / MESES-MES, ': ', <l_field>.
          ENDLOOP.

          Comentario

          Trabajando...