ayuda - ALV EDITABLE

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • FuryNocturn
    Junior Member
    • oct
    • 10

    #1

    ayuda - ALV EDITABLE

    buenas quería pedir ayuda. estoy haciendo varios ejercicios, y cada vez me piden diferentes cosas. hay dos que me he atascado y por mas que leo foros y manuales no me entero. os pongo el códigos de lo que tengo hecho y podáis probar las cosas como me suceden.

    Lo primero cuando hago doble clic en el primer alv tendría que cogerme el numero de reserva. pero solo lo hace si lo hago encima del campo correspondiente, y lo que me interesa es que en cualquier parte de la fila que coja los datos. y para afinar como hay registros sin reserva realizada tendría que cambiar el tipo de búsqueda en vez de hacerlo por numero de reserva tendría que crear un registro en el que me rellene los datos obtenidos que seria fecha, pista y hora. y me lo muestre en el segundo alv que me dejara modificar los campos de cliente y los 4 jugadores. y al dar a un botón de la segunda alv guarde estos datos en la BD, y a la vez me genere el numero de reserva. y al terminar todo me refresque la primera alv para que muestre el registro.

    CODIGO

    Programa principal
    Código:
    REPORT  z04_reservas_alv_04.
    
    INCLUDE:  z04_reservas_alv_04_top,
              z04_reservas_alv_04_cla,
              z04_reservas_alv_04_sta,
              z04_reservas_alv_04_sub.
    
    
    
    START-OF-SELECTION.
    
    PERFORM CAR_DAT.
    
    CALL SCREEN 100.
    INCLUDE: z04_reservas_alv_04_top
    Código:
    *&---------------------------------------------------------------------*
    *&  Include           Z04_RESERVAS_ALV_04_TOP
    *&---------------------------------------------------------------------*
    
    
    *&--------------------------------------------------------------------&*
    *& T A B L A S   E N   U S O   -   S O L O   R E F E R E N C I A      &*
    *&--------------------------------------------------------------------&*
    TABLES: z04_reserva,      " tabla de registro de reservas realizadas.
            z04_pista,        " tabla de pistas activas.
            z04_jugador,      " tabla de usuarios.
            z04_emp,          " tabla de empresas.
            zhoras13_param.   " tabla de parametizacion de horas.
    
    TYPE-POOLS: slis, abap, cndp.
    *&--------------------------------------------------------------------&*
    *&                V A L O R E S   G L O B A L E S                     &*
    *&--------------------------------------------------------------------&*
    
    DATA: BEGIN OF ls_stable,           " Estructura ALV.
        row     TYPE c,
        col     TYPE c,
                END OF ls_stable.
    
    TYPES: BEGIN OF ty_date,            " Typo para tablas y estructura para cuadrante de pistas.
        sel,
        nrev     TYPE znr,
        pista    TYPE znp,
        cliente  TYPE kunnr,
        fecha    TYPE dats,
        hora     TYPE tims,
        nivel    TYPE zlevel,
      style     TYPE lvc_t_styl,
      colors    TYPE lvc_t_scol,
                 END OF ty_date.
    
    TYPES: BEGIN OF ty_REV,             " Typo para tablas y estructuras para cuadrante partido.
        nrev     TYPE znr,
        fecha    TYPE dats,
        hora     TYPE tims,
        pista    TYPE znp,
        cliente  TYPE kunnr,
        jug1     TYPE kunnr,
        jug2     TYPE kunnr,
        jug3     TYPE kunnr,
        jug4     TYPE kunnr,
                 END OF ty_REV.
    
      TYPES: BEGIN OF ty_vmm,           " Typo para tabla de parametros horas.
        vmax(2)    TYPE c,
        vmin(2)    TYPE c,
             END   OF ty_vmm.
    
    
    FIELD-SYMBOLS: <wa_data> TYPE ty_date.    " para cuadrante de horas para modificar bd.
    
    CLASS lcl_event_handler DEFINITION DEFERRED.
    
    
    
    
    *&--------------------------------------------------------------------&*
    *&      D A T O S   A L V                                             &*
    *&--------------------------------------------------------------------&*
    *       En ventana emerjente se cargara el                             *
    *        cuadrante de las pistas.                                      *
    *                                                                      *
    *       - Las variables se declaran en el from para hacerlos           *
    *          privados solo de la alv. EXCEPCION de la variable que       *
    *          estrae los datos para rellenar la dympro de registro.       *
    *----------------------------------------------------------------------*
    
    DATA: ok_code       LIKE sy-ucomm,
          gt_data       TYPE TABLE OF ty_date,
          gs_data       type ty_date,
          gt_juga       TYPE TABLE OF ty_REV,
          gt_juga2      LIKE gt_juga,
          grid1         TYPE REF TO cl_gui_alv_grid,
          grid2         TYPE REF TO cl_gui_alv_grid,
          go_handler    TYPE REF TO lcl_event_handler,
          wa_layout     TYPE lvc_s_layo,
          wa_style      TYPE LINE OF lvc_t_styl,
          wa_colors     TYPE LINE OF lvc_t_scol,
          varcel(10)    TYPE c,
          gv_calc       TYPE DATS,
          splitter      TYPE REF TO cl_gui_easy_splitter_container,
          container_1   TYPE REF TO cl_gui_container,
          container_2   TYPE REF TO cl_gui_container,
          gt_fieldcatd2 TYPE lvc_t_fcat,
          gt_fieldcatd  TYPE lvc_t_fcat.
    INCLUDE: z04_reservas_alv_04_cla
    Código:
    *&---------------------------------------------------------------------*
    *&  Include           Z04_RESERVAS_ALV_04_CLA
    *&---------------------------------------------------------------------*
    
    
    *&--------------------------------------------------------------------&*
    *&       C L A S S       l c l _ e v e n t _ h a n d l e r            &*
    *&--------------------------------------------------------------------&*
    *       clase para recojer datos de la celda señalada en las alv       *
    *                                                                      *
    *                                                                      *
    *                                                                      *
    *                                                                      *
    *----------------------------------------------------------------------*
    
    *&--------------------------------------------------------------------&*
    *&      l c l _ e v e n t _ h a n d l e r   D E F I N I T I O N       &*
    *&--------------------------------------------------------------------&*
    
    CLASS lcl_event_handler DEFINITION.
      PUBLIC SECTION.
        METHODS: on_double_click      FOR EVENT double_click  OF cl_gui_alv_grid IMPORTING es_row_no e_column.
    
    ENDCLASS.                    "lcl_event_handler DEFINITION
    *&--------------------------------------------------------------------&*
    *&  l c l _ e v e n t _ h a n d l e r   I M P L E M E N T A T I O N   &*
    *&--------------------------------------------------------------------&*
    
    CLASS lcl_event_handler IMPLEMENTATION.
      METHOD on_double_click.
        PERFORM show_second_alv.
      ENDMETHOD.                    "on_double_click
    ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
    INCLUDE: z04_reservas_alv_04_sta
    Código:
    *----------------------------------------------------------------------*
    ***INCLUDE Z04_RESERVAS_ALV_04_STA .
    *----------------------------------------------------------------------*
    
    
    *&---------------------------------------------------------------------*
    *&      Module  BOTON_ALV  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    module BOTON_ALV output.
     PERFORM avl_div.
    endmodule.                 " BOTON_ALV  OUTPUT
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    module STATUS_0100 output.
    PERFORM status_0100.
    endmodule.                 " STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_0100  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    module USER_COMMAND_0100 input.
    PERFORM user_command_0100.
    endmodule.                 " USER_COMMAND_0100  INPUT
  • FuryNocturn
    Junior Member
    • oct
    • 10

    #2
    2º parte del codigo

    el resto del codigo
    INCLUDE: z04_reservas_alv_04_sub
    Código:
    *&---------------------------------------------------------------------*
    *&  Include           Z04_RESERVAS_ALV_04_SUB
    *&---------------------------------------------------------------------*
    
    
    
    *&--------------------------------------------------------------------&*
    *&      F o r m     A V L _ D I V                                     &*
    *&--------------------------------------------------------------------&*
    *       Primera ALV de la vista visualizar.                            *
    *                                                                      *
    *                                                                      *
    *                                                                      *
    *    *1   create the splitter control                                  *
    *    *2   get the containers of the splitter control                   *
    *    *3   create the picture controls inside the containers of         *
    *          the splitter                                                *
    *    *4   if grid1 already exists -> refresh it                        *
    *                                                                      *
    *                                                                      *
    *----------------------------------------------------------------------*
    FORM avl_div .
      DATA:     li_grid_setting TYPE lvc_s_glay.
    
    
    
      li_grid_setting-edt_cll_cb = 'X'.
    
      IF splitter IS INITIAL.
        CREATE OBJECT splitter
          EXPORTING
            parent      = cl_gui_container=>default_screen
            orientation = 0
          . "END CREATE OBJECT splitter
        container_1 = splitter->top_left_container.
        container_2 = splitter->bottom_right_container.
      ENDIF.
    
      IF grid1 IS INITIAL.
    
        CREATE OBJECT grid1
          EXPORTING
            i_parent = container_1
          . "END CREATE OBJECT grid1
        CALL METHOD grid1->set_table_for_first_display
          EXPORTING
            is_layout       = wa_layout
            i_save          = 'A'
          CHANGING
            it_outtab       = gt_data
            it_fieldcatalog = gt_fieldcatd.
        . " END CALL METHOD grid1->set_table_for_first_display
    ******************************************
    
    ******************************************
      ELSE.
        ls_stable-row = 'X'.
        ls_stable-col = 'X'.
    
        CALL METHOD grid1->refresh_table_display
          EXPORTING
            is_stable      = ls_stable
            i_soft_refresh = 'X'
          . " END CALL METHOD grid1->refresh_table_display
      ENDIF.
    
    
      CREATE OBJECT go_handler.
      SET HANDLER go_handler->on_double_click FOR grid1
      . " END CREATE OBJECT go_handler.
    ENDFORM.                    " AVL_DIV
    
    *&--------------------------------------------------------------------&*
    *&      F o r m     T A B L E T S                                     &*
    *&--------------------------------------------------------------------&*
    *       Volcado de tablas de dicionario a internas.                    *
    *                                                                      *
    *                                                                      *
    *                                                                      *
    *                                                                      *
    *----------------------------------------------------------------------*
    
    FORM tabla_detalle   TABLES gt_juga.
      SELECT  nrev
              fecha
              hora
              pista
              cliente
              jug1
              jug2
              jug3
              jug4
        FROM z04_reserva
        INTO TABLE gt_juga.
      IF sy-subrc <> 0.
    
      ELSE.
        WRITE 'no hay reservas activas'.
    
      ENDIF.
    ENDFORM.                    " TABLETS
    
    *&---------------------------------------------------------------------*
    *&      Form  tabla_reserva
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM tabla_reserva.
    
      DATA:   lv_pista_ini     TYPE znp,
              lv_pista_fin     TYPE znp,
              lv_pista_aux     TYPE znp,
              lv_hora_ini(2)   TYPE c,
              lv_hora_fin(2)   TYPE c,
              lv_hora_aux(2)   TYPE c,
              lv_dia           TYPE dats,
              lv_tdia          TYPE dats,
              ls_reserva       TYPE ty_rev,
              lv_counter       TYPE i,
              lv_hora          TYPE tims,
              lv_rev           TYPE znr,
              lt_pistas        TYPE TABLE OF z04_pista,
              ls_pistas        TYPE z04_pista,
              lt_horas         TYPE TABLE OF ty_vmm,
              ls_hora          TYPE ty_vmm,
              lv_check         TYPE z04_pista-MANTENIMIENTO.
    
      FIELD-SYMBOLS: <wa_horas> TYPE ty_vmm.
    
    
      PERFORM obt_val         TABLES
                              lt_horas
                              lt_pistas
                              CHANGING
                              lv_hora_aux
                              lv_counter
                              lv_hora_ini
                              lv_dia
                              lv_check.
    
      CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' "marca fecha limite.
        EXPORTING
          date      = sy-datum
          signum    = '+'
          days      = 30
          months    = 0
          years     = 0
        IMPORTING
          calc_date = gv_calc
        . " END CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    
    
      WHILE lv_tdia <= gv_calc.  " RELLENA LA TABLA CON LA FECHAS
        CLEAR: gs_data.
    
    * machaca la variable temporal de la fecha.
        lv_tdia = lv_dia.
    
         LOOP AT lt_pistas into ls_pistas .
    
           lv_pista_aux = ls_pistas-id.
    
          LOOP AT lt_horas INTO ls_hora.
    
            lv_hora_aux = ls_hora-vmin.
    
            WHILE lv_hora_aux <= ls_hora-vmax.  " RELLENA LA TABLA CON HORAS
    
    ****************************************
              CASE lv_hora_aux.       " AJUSTES DE HORARIOS REALES
                WHEN 1.
                  lv_hora = '010000'.
                WHEN 2.
                  lv_hora = '020000'.
                WHEN 3.
                  lv_hora = '030000'.
                WHEN 4.
                  lv_hora = '040000'.
                WHEN 5.
                  lv_hora = '050000'.
                WHEN 6.
                  lv_hora = '060000'.
                WHEN 7.
                  lv_hora = '070000'.
                WHEN 8.
                  lv_hora = '080000'.
                WHEN 9.
                  lv_hora = '090000'.
                WHEN 10.
                  lv_hora = '100000'.
                WHEN 11.
                  lv_hora = '110000'.
                WHEN 12.
                  lv_hora = '120000'.
                WHEN 13.
                  lv_hora = '130000'.
                WHEN 14.
                  lv_hora = '140000'.
                WHEN 15.
                  lv_hora = '150000'.
                WHEN 16.
                  lv_hora = '160000'.
                WHEN 17.
                  lv_hora = '170000'.
                WHEN 18.
                  lv_hora = '180000'.
                WHEN 19.
                  lv_hora = '190000'.
                WHEN 20.
                  lv_hora = '200000'.
                WHEN 21.
                  lv_hora = '210000'.
                WHEN 22.
                  lv_hora = '220000'.
                WHEN 23.
                  lv_hora = '230000'.
                WHEN 24.
                  lv_hora = '240000'.
              ENDCASE.
    
    ****************************************
    * RELLENA PARTE DE LA ESTRUCTURA QUE SERA AÑADIDA A LA TABLA
    ****************************************
              gs_data-pista     = lv_pista_aux.
              gs_data-fecha     = lv_dia.
              gs_data-hora      = lv_hora.
    ****************************************
    
              lv_counter = 0.
    
              CLEAR ls_reserva.
              READ TABLE gt_juga
                                  WITH KEY fecha = lv_dia
                                           pista = lv_pista_aux
                                           hora  = lv_hora
                                                               INTO ls_reserva.
    
              IF sy-subrc EQ 0.
                IF ls_reserva-jug1 <> space OR ls_reserva-jug1 IS NOT INITIAL OR ls_reserva-jug1 <> ' ' OR ls_reserva-jug1 <> ''.
                  lv_counter = lv_counter + 1.
                ENDIF.
    
                IF ls_reserva-jug2 <> space OR ls_reserva-jug2 IS NOT INITIAL OR ls_reserva-jug2 <> ' ' OR ls_reserva-jug2 <> ''.
                  lv_counter = lv_counter + 1.
                ENDIF.
    
                IF ls_reserva-jug3 <> space OR ls_reserva-jug3 IS NOT INITIAL OR ls_reserva-jug3 <> ' ' OR ls_reserva-jug3 <> ''.
                  lv_counter = lv_counter + 1.
                ENDIF.
    
                IF ls_reserva-jug4 <> space OR ls_reserva-jug4 IS NOT INITIAL OR ls_reserva-jug4 <> ' ' OR ls_reserva-jug4 <> ''.
                  lv_counter = lv_counter + 1.
                ENDIF.
              ENDIF.
    ****************************************
    * RELLENA RESTO DE CAMPOS DE LA ESTRUCTURA
    ****************************************
              gs_data-cliente   = ls_reserva-cliente.
              gs_data-nrev      = ls_reserva-nrev.
              gs_data-nivel     = lv_counter.
    *****************************************
              APPEND gs_data TO gt_data.  " AÑADE LA STRUCTURA COMO REGISTRO NUEVO EN TABLA
              CLEAR gs_data.
    
              """"""""""""""""""""""""
              lv_hora_aux = lv_hora_aux + 1.  " AÑADE UNA AL CONTADOR HORA
            ENDWHILE.
          ENDLOOP.
          lv_pista_aux = lv_pista_aux + 1.  " AÑADE UNA AL CONTADOR PISTA
          lv_hora_aux = lv_hora_ini.        " REINICIA EL CONTADOR  HORAS
         ENDLOOP.
        lv_pista_aux = lv_pista_ini.        " REINICIA EL CONTADOR  PISTA
    
        CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
          EXPORTING
            date      = lv_tdia
            signum    = '+'
            days      = 1
            months    = 0
            years     = 0
          IMPORTING
            calc_date = lv_dia
          . " END CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    
      ENDWHILE.
    *********************************************************************************************************
    * PINTA LOS CAMPOS DE OCUPACION                                                                         *
    *********************************************************************************************************
    
      LOOP AT gt_data ASSIGNING <wa_data>.
        IF <wa_data>-nivel = 0 OR
           <wa_data>-nivel = 1 OR
           <wa_data>-nivel = 2 OR
           <wa_data>-nivel = 3 OR
           <wa_data>-nivel = 4.
    
          wa_style-fieldname = 'NIVEL'.
          wa_style-style = cl_gui_alv_grid=>mc_style_disabled.
    
          APPEND wa_style TO <wa_data>-style.
          CLEAR wa_style.
    
          wa_colors-fname = 'NIVEL'.
          IF <wa_data>-nivel = 0.
            wa_colors-color-col = 5.
          ELSEIF <wa_data>-nivel = 1 OR
                 <wa_data>-nivel = 2 OR
                 <wa_data>-nivel = 3.
            wa_colors-color-col = 3.
          ELSE.
            wa_colors-color-col = 6.
          ENDIF.
    
          wa_colors-color-int = 1.
    
          APPEND wa_colors TO <wa_data>-colors.
          CLEAR wa_colors.
    
        ENDIF.
    
      ENDLOOP.
    ENDFORM.                    " TABLA_RESERVA
    
    *&---------------------------------------------------------------------*
    *&      Form  TABLA_DETALLE_ACT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM tabla_detalle_act.
      DATA ls_juga2 TYPE ty_rev.
    
      SELECT  nrev
            fecha
            hora
            pista
            cliente
            jug1
            jug2
            jug3
            jug4
            FROM z04_reserva
                             UP TO 1 ROWS INTO TABLE gt_juga2
                             WHERE nrev = varcel.
    
      IF sy-subrc <> 0.
        ls_juga2-nrev      = ''.
        ls_juga2-fecha     = ''.
        ls_juga2-hora      = ''.
        ls_juga2-pista     = ''.
        ls_juga2-cliente   = ''.
        ls_juga2-jug1      = ''.
        ls_juga2-jug2      = ''.
        ls_juga2-jug3      = ''.
        ls_juga2-jug4      = ''.
        APPEND ls_juga2 TO gt_juga2.
      ELSE.
        gt_juga2[] = gt_juga[].
        DELETE gt_juga2 WHERE nrev <> varcel.
      ENDIF.
    ENDFORM.                    "TABLA_DETALLE_ACT
    
    
    *&--------------------------------------------------------------------&*
    *&      F o r m     S H O W _ S E C O N D _ A L V                     &*
    *&--------------------------------------------------------------------&*
    *       Segunda ALV de la vista visualizar.                            *
    *                                                                      *
    *                                                                      *
    *  *1  recover value from selected cell                                *
    *  *2  unwanted entries are deleted                                    *
    *  *3  if grid2 doesnt exist, create it                                *
    *  *4  if grid2 already exists -> refresh it                           *
    *                                                                      *
    *----------------------------------------------------------------------*
    
    FORM show_second_alv .
      DATA:      ls_juga2 TYPE ty_rev.
    
      PERFORM alv2_ini_fieldcat.
    
    
      grid1->get_current_cell( IMPORTING e_value = varcel ).
      PERFORM tabla_detalle_act.
    
      IF grid2 IS INITIAL.
    
        CREATE OBJECT grid2
          EXPORTING
            i_parent = container_2.
        CALL METHOD grid2->set_table_for_first_display
          CHANGING
            it_outtab       = gt_juga2
            it_fieldcatalog = gt_fieldcatd2.
      ELSE.
        ls_stable-row = 'X'.
        ls_stable-col = 'X'.
    
        CALL METHOD grid2->refresh_table_display
          EXPORTING
            is_stable      = ls_stable
            i_soft_refresh = 'X'.
      ENDIF.
    
    ENDFORM.                    " SHOW_SECOND_ALV
    
    *&---------------------------------------------------------------------*
    *&      Form  ALV_INI_FIELDCAT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM alv_ini_fieldcat .
      TYPES: slis.
      CLEAR gt_fieldcatd.
    
      DATA:
            st_fieldcat2 TYPE lvc_s_fcat.
    
      st_fieldcat2-fieldname = 'PISTA'. "Nombre del campo de la tabla
      st_fieldcat2-tabname   = 'GT_DATA'. "Nombre del campo de la tabla
      st_fieldcat2-coltext   = 'PISTA'. "Descripción media
      APPEND st_fieldcat2 TO gt_fieldcatd.
    
      st_fieldcat2-fieldname = 'FECHA'.
      st_fieldcat2-tabname   = 'GT_DATA'.
      st_fieldcat2-key       = 'X'.
      st_fieldcat2-coltext   = 'DIA'.
      APPEND st_fieldcat2 TO gt_fieldcatd.
    
      st_fieldcat2-fieldname = 'HORA'.
      st_fieldcat2-tabname   = 'GT_DATA'.
      st_fieldcat2-coltext   = 'HORA'.
      APPEND st_fieldcat2 TO gt_fieldcatd.
    
      st_fieldcat2-fieldname = 'NIVEL'.
      st_fieldcat2-tabname   = 'GT_DATA'.
      st_fieldcat2-coltext   = 'NIVEL'.
      APPEND st_fieldcat2 TO gt_fieldcatd.
    
      st_fieldcat2-fieldname = 'NREV'.
      st_fieldcat2-tabname   = 'GT_DATA'.
      st_fieldcat2-coltext   = 'Nº RESERVA'.
      APPEND st_fieldcat2 TO gt_fieldcatd.
    
      st_fieldcat2-fieldname = 'CLIENTE'.
      st_fieldcat2-tabname   = 'GT_DATA'.
      st_fieldcat2-coltext   = 'CLIENTE'.
      APPEND st_fieldcat2 TO gt_fieldcatd.
    
    
    
      wa_layout-box_fname     = 'SEL'.
      wa_layout-stylefname    = 'STYLE'.
      wa_layout-ctab_fname    = 'COLORS'.
    
    
    
    
    ENDFORM.                    " ALV_INI_FIELDCAT
    
    *&---------------------------------------------------------------------*
    *&      Form  f_authority_check
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_authority_check.
    * Incluir AUTHORITY-CHECK
      DATA: lt_tcode TYPE TABLE OF tcode,
      lv_tcode TYPE tcode,
      lv_flg_check_ok TYPE boolean_flg.
    
      CLEAR: lv_tcode.
      SELECT tcode INTO TABLE lt_tcode
      FROM tstc
      WHERE pgmna = sy-repid.
    
      IF sy-subrc EQ 0.
        CLEAR lv_flg_check_ok.
        LOOP AT lt_tcode INTO lv_tcode.
          AUTHORITY-CHECK OBJECT 'S_TCODE'
          ID 'TCD' FIELD lv_tcode.
          IF sy-subrc = 0.
            lv_flg_check_ok = 'X'.
            EXIT.
          ENDIF.
        ENDLOOP.
    * Dar error si no se tiene acceso a ninguna de las transacciones
        IF lv_flg_check_ok IS INITIAL.
          MESSAGE s077(s#) DISPLAY LIKE 'E' WITH lv_tcode.
          LEAVE PROGRAM.
        ENDIF.
      ENDIF.
    ENDFORM.                    "f_authority_check
    
    
    *&---------------------------------------------------------------------*
    *&      Form  ALV2_INI_FIELDCAT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM alv2_ini_fieldcat .
      TYPES: slis.
      CLEAR gt_fieldcatd2.
    
      DATA:
            st_fieldcat3 TYPE lvc_s_fcat.
    
      st_fieldcat3-fieldname = 'NREV'.
      st_fieldcat3-tabname = 'GT_JUGA2'.
      st_fieldcat3-coltext = 'Nª RESERVA'.
      APPEND st_fieldcat3 TO gt_fieldcatd2.
    
      st_fieldcat3-fieldname = 'CLIENTE'.
      st_fieldcat3-tabname = 'GT_JUGA2'.
      st_fieldcat3-coltext = 'RESERVADO POR'.
      st_fieldcat3-edit = 'X'.
      APPEND st_fieldcat3 TO gt_fieldcatd2.
    
      st_fieldcat3-fieldname = 'JUG1'.
      st_fieldcat3-tabname = 'GT_JUGA2'.
      st_fieldcat3-coltext = 'JUGADOR 1'.
      st_fieldcat3-edit = 'X'.
      APPEND st_fieldcat3 TO gt_fieldcatd2.
    
      st_fieldcat3-fieldname = 'JUG2'.
      st_fieldcat3-tabname = 'GT_JUGA2'.
      st_fieldcat3-coltext = 'JUGADOR 2'.
      st_fieldcat3-edit = 'X'.
      APPEND st_fieldcat3 TO gt_fieldcatd2.
    
      st_fieldcat3-fieldname = 'JUG3'.
      st_fieldcat3-tabname = 'GT_JUGA2'.
      st_fieldcat3-coltext = 'JUGADOR 3'.
      st_fieldcat3-edit = 'X'.
      APPEND st_fieldcat3 TO gt_fieldcatd2.
    
    
      st_fieldcat3-fieldname = 'JUG4'.
      st_fieldcat3-tabname = 'GT_JUGA2'.
      st_fieldcat3-coltext = 'JUGADOR 4'.
      st_fieldcat3-edit = 'X'.
      APPEND st_fieldcat3 TO gt_fieldcatd2.
    
    
    
    
    ENDFORM.                    "alv2_ini_fieldcat
    *&---------------------------------------------------------------------*
    *&      Form  status_0100
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM status_0100 .
      SET PF-STATUS 'SCREEN100'.
      SET TITLEBAR 'TITLE100'.
    ENDFORM.                    " STATUS_0100
    
    *&---------------------------------------------------------------------*
    *&      Form  user_command_0100
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM user_command_0100 .
      CASE sy-ucomm.
        WHEN 'BACK' OR 'CANC'.
          CALL SCREEN 100.
        WHEN 'EXIT'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDFORM.                    " USER_COMMAND_0100
    
    
    *&---------------------------------------------------------------------*
    *&      Form  OBT_VAL
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM obt_val              TABLES
                              lt_horas
                              lt_pistas
                              CHANGING
                              lv_hora_aux
                              lv_counter
                              lv_hora_ini
                              lv_dia
                              lv_check.
    
      DATA: lv_min(2) TYPE c,
            lv_max(2) TYPE c.
    
      lv_counter = 0.
      lv_dia = sy-datum.
    
    CLEAR lv_check.
    
      SELECT vmax vmin
        FROM zhoras13_param
        INTO TABLE lt_horas
        WHERE programa EQ 'Z04_RESERVAS_ALV_04'
          AND var EQ 'HORA'.
      IF sy-subrc = 0.
    
      ENDIF.
    
    
      SELECT *
        FROM z04_pista
        INTO TABLE lt_pistas
        WHERE  MANTENIMIENTO = lv_check.
      IF sy-subrc = 0.
    
      ENDIF.
    
    
    
    ENDFORM.                    " OBT_VAL
    *&---------------------------------------------------------------------*
    *&      Form  CAR_DAT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM car_dat .
    
      PERFORM tabla_detalle TABLES gt_juga.
    
      PERFORM tabla_reserva.
    
      PERFORM alv_ini_fieldcat.
    
    ENDFORM.                    " CAR_DAT

    dynpro 100
    Código:
    PROCESS BEFORE OUTPUT.
      MODULE STATUS_0100.
      MODULE BOTON_ALV.
    
    PROCESS AFTER INPUT.
      MODULE USER_COMMAND_0100.

    Comentario

    • FuryNocturn
      Junior Member
      • oct
      • 10

      #3
      Código:
      CREATE OBJECT go_handler.
        SET HANDLER go_handler->on_double_click FOR grid1
        . " END CREATE OBJECT go_handler.
      para este método quiero que en vez de cogerme el campo donde ago el doble clic como he de ponerlo para que me recoja toda la fila en una estructura, ejemplo LS_SELECT.

      Comentario

      • daniAND
        Junior Member
        • dic
        • 7

        #4
        Originalmente publicado por FuryNocturn
        Código:
        CREATE OBJECT go_handler.
          SET HANDLER go_handler->on_double_click FOR grid1
          . " END CREATE OBJECT go_handler.
        para este método quiero que en vez de cogerme el campo donde ago el doble clic como he de ponerlo para que me recoja toda la fila en una estructura, ejemplo LS_SELECT.
        No me puse a analizar el código completo, pero deberias encontrar alguna forma de obtener el INDEX del registro al cual pertenece el campo donde hiciste click, obteniendo el INDEX por medio de una lectura a la tabla podrás obtener el registro completo.

        Comentario

        • FuryNocturn
          Junior Member
          • oct
          • 10

          #5
          EJEMPLO de codigo Y aplicacion editor de texto - con alv editables.



          aquí dejo el enlace a la aplicación para ver el código de abap fuera de la aplicación con el editor de texto sublime.

          AQUÍ PUEDES DESCARGAR

          tenbien os pongo una aplicacion que sirve para generar alv sencillas.

          ALV-GENERATOR


          y un ejemplo de alv´s.

          este tiene 4 alv que están enlazadas entre si, dando doble clic en la primera o la segunda alv (superiores) muestra en el 3 alv los detalles del seleccionado en el que se podrá modificar el registro, cancelarlo o reactivarlo. en caso de dar en alguno de los jugadores se mostrara el detalle de dichos jugadores.

          en la carpeta aparte de encontrar los códigos encontraras capturas de las BD que usa con sus tipos.

          CARPETA EJEMPLO PISTAS PADEL

          Comentario

          Trabajando...