Error en ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • dfma59
    Junior Member
    • nov
    • 19

    #1

    Error en ALV

    Tengo el sigiente problema:
    cuando corro el reporte me imprime la cabecera con sus posiciones , pero cuando le doy alguno de los botones de la barra de sap como el back,el cancelar y el finalizar me duplica las colunmas de la cabecera.

    es un reporte de RH.

    El codigo es el siguiente:

    TABLES: pernr, "Selecciones estándar p.reporting datos maestros HR
    pcl1, "Cluster HR 1
    pcl2, "Cluster HR 2
    t512w, "Valorac.CC-nóminas
    t512t, "Texto de CC-nóminas
    t521b, "Clave de receptor
    t549q, "Períodos de nómina
    t549a, "Áreas de nómina
    t54c1, "Calendario para acumulación
    pa0000. "Registro maestro de personal Infotipo 0000(Medidas)

    *================================================= =====================*
    * T Y P E P O O L S *
    *================================================= =====================*
    TYPE-POOLS: slis.


    *================================================= =====================*
    * I N F O T Y P E S *
    *================================================= =====================*
    INFOTYPES: 0000, "Medidas
    0002, "Registro maestro de personal Infotipo 0002 (Datos pers.)
    0185. "Identificadores.

    *================================================= =====================*
    * C L U S T E R I N T E R N A C I O N A L *
    *================================================= =====================*

    INCLUDE rpc2cd00. "Cluster CD data definition Cluster-Directory

    DATA: BEGIN OF COMMON PART.
    INCLUDE: rpc2rx00. "Definition Cluster RX (I) Internacional
    INCLUDE: rpc2rxx0. "Definition Cluster RX (II)Internacional
    DATA: END OF COMMON PART.

    INCLUDE: rpppxd00. "Definition PCL1/2-Buffer Internacional

    DATA: BEGIN OF COMMON PART buffer.
    INCLUDE rpppxd10. "Common part buffer PCL1/PCL2 Internacional
    DATA: END OF COMMON PART.

    INCLUDE rpppxm00. "Buffer handling routine PCL1/2 Internacional

    INCLUDE rpcmgr00. "CD-Manager-Routinen Internacional

    *================================================= =====================*
    * C L U S T E R *
    *================================================= =====================*


    DATA: BEGIN OF i_evpdir OCCURS 1.
    INCLUDE STRUCTURE pc261.
    DATA: END OF i_evpdir.

    DATA: BEGIN OF i_rgdir OCCURS 1.
    INCLUDE STRUCTURE pc261.
    DATA: END OF i_rgdir.

    DATA: BEGIN OF t_rgdir OCCURS 1.
    INCLUDE STRUCTURE pc261.
    DATA: END OF t_rgdir.

    *================================================= =====================*
    * V A R I A B L E S / C O N S T A N T S
    *================================================= =====================*
    DATA: country(2),
    vacio(10).
    DATA: p_permo LIKE t549a-permo.

    DATA: v_pabrp LIKE t54c1-pabrp.
    DATA: v_mes(3).
    DATA: v_ano(4).
    DATA: m_apor(8).
    DATA: v_ans TYPE c.
    *================================================= =====================*
    * I N T E R N A L T A B L E S *
    *================================================= =====================*
    DATA: BEGIN OF it_datos OCCURS 0,
    pernr LIKE pernr-pernr, "Núm. Empleado
    icnum LIKE p0185-icnum, "Tarjeta de identidad
    vorna LIKE p0002-vorna, "Nombres
    nachn LIKE p0002-nachn, "Primer apellido
    nach2 LIKE p0002-nach2, "Segundo apellido
    patro(11), "No.Patronal Constante
    aem LIKE rt-betrg, "Aportacion Empleado Mensual
    apm LIKE rt-betrg, "Aportacion Patrono Mensual
    monam LIKE t015m-monam, "Mes de la aportacion
    END OF it_datos.

    DATA: BEGIN OF it_periodos OCCURS 0,
    permo LIKE t54c1-permo,
    pabrj LIKE t54c1-pabrj,
    cumty VALUE 'm',
    pabrp LIKE t54c1-pabrp,
    END OF it_periodos.

    *================================================= =====================*
    * DECLARACION PARA SER UTILIZADA EN FUNCION ALV *
    *================================================= =====================*
    *ALV data declarations
    DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    DATA: it_fieldcat TYPE lvc_t_fcat, "slis_t_fieldcat_alv WITH HEADER LINE,
    wa_fieldcat TYPE lvc_s_fcat,

    gd_tab_group TYPE slis_t_sp_group_alv,
    gd_layout TYPE lvc_s_layo, "slis_layout_alv,
    gd_repid LIKE sy-repid.
    *================================================= =====================*

    *================================================= =====================*
    * S E L E C T - O P T I O N S / P A R A M E T E R S *
    *================================================= =====================*
    SELECTION-SCREEN BEGIN OF BLOCK pernom WITH FRAME TITLE text-001.

    PARAMETERS:
    p_perbeg LIKE rpclxxxx-aper_von OBLIGATORY,
    p_perend LIKE rpclxxxx-aper_bis.

    SELECTION-SCREEN END OF BLOCK pernom.
    SELECTION-SCREEN BEGIN OF BLOCK periodo WITH FRAME TITLE text-002.
    PARAMETERS:
    p_pabrj LIKE t54c1-pabrj,
    p_cumno LIKE t54c1-cumno.
    SELECTION-SCREEN END OF BLOCK periodo.
    *================================================= =====================*
    * I N I T I A L I Z A T I O N E V E N T *
    *================================================= =====================*
    INITIALIZATION.

    *================================================= =====================*
    * A T S E L E C T I O N - S C R E E N E V E N T *
    *================================================= =====================*
    * Código para campos obligatorios, y de fechas de periodos en la p-ini *
    *----------------------------------------------------------------------*

    AT SELECTION-SCREEN ON pnpabkrs.

    CLEAR: p_permo, p_pabrj,p_cumno.

    IF pnpabkrs-low IS INITIAL.
    MESSAGE e016(rp)
    WITH 'Area de nómina no puede ir vacia'(e04).
    ENDIF.

    SELECT * FROM t549a WHERE abkrs IN pnpabkrs.
    IF NOT p_permo IS INITIAL
    AND p_permo NE t549a-permo.
    MESSAGE e016(rp)
    WITH 'Existen modificadores de período diferentes'(e03).
    ENDIF.

    p_permo = t549a-permo.

    ENDSELECT.

    AT SELECTION-SCREEN ON p_perend.
    IF NOT p_perend IS INITIAL.
    IF p_perbeg > p_perend.
    MESSAGE e016(rp)
    WITH 'Periodo Final debé ser mayor al inicial'(e04).
    ENDIF.
    ENDIF.

    AT SELECTION-SCREEN ON p_perbeg.
    IF p_perend IS INITIAL.
    p_perend = p_perbeg.
    ENDIF.

    AT SELECTION-SCREEN ON BLOCK pernom.
    "Asignamos la fechas de inicio y fin de periodos
    SELECT SINGLE begda INTO pnpbegda
    FROM t549q
    WHERE permo EQ p_permo AND
    pabrj EQ p_perbeg(4) AND
    pabrp EQ p_perbeg+4(2).

    SELECT SINGLE endda INTO pnpendda
    FROM t549q
    WHERE permo EQ p_permo AND
    pabrj EQ p_perend(4) AND
    pabrp EQ p_perend+4(2).

    ** Obtencion de periodos de acuerdo a los parametros de entrada
    * SELECT * FROM t54c1
    * INTO CORRESPONDING FIELDS OF TABLE it_periodos
    * WHERE permo = p_permo AND
    * pabrj EQ p_perbeg(4) AND
    * cumty = 'M'.
    * break scervantes.

    p_pabrj = pnpbegda(4).
    p_cumno = pnpendda+4(2).

    *================================================= =====================*
    * S T A R T - O F - S E L E C T I O N E V E N T *
    *================================================= =====================*
    START-OF-SELECTION.


    GET pernr.
    REFRESH: i_rgdir.
    CLEAR: it_datos.

    CALL FUNCTION 'CU_READ_RGDIR'
    EXPORTING
    persnr = pernr-pernr
    IMPORTING
    molga = country
    TABLES
    in_rgdir = i_rgdir
    EXCEPTIONS
    no_record_found = 1
    OTHERS = 2.

    IF sy-subrc = 1. "De FUNCTION 'CU_READ_RGDIR'
    ELSE. "de sy-subrc = 1. FUNCTION 'CU_READ_RGDIR'



    */----------obtención de cluster de nómina

    LOOP AT i_rgdir WHERE srtza = 'A' "Indicador de actualidad de registro
    AND fpbeg <= pn-endda "Final del período de nómina (Período para)
    AND fpend >= pn-begda "Incio del período de nómina (Período para)
    AND fpper <> '000000'. "Período para de la nómina


    rx-key-pernr = pernr-pernr.
    rx-key-seqno = i_rgdir-seqnr.
    rp-imp-c2-rx. " Para Nomina Internacional

    PERFORM data_retrieval.
    ENDLOOP. "de i_rgdir
    PERFORM build_fieldcatalog.
    PERFORM build_layout.
    PERFORM display_alv_report.

    ENDIF. "de sy-subrc = 1. FUNCTION 'CU_READ_RGDIR'.


    *================================================= =====================*
    * E N D - O F - S E L E C T I O N E V E N T *
    *================================================= =====================*




    *================================================= =====================*
    * T O P - O F - P A G E E V E N T *
    *================================================= =====================*
    TOP-OF-PAGE.

    *================================================= =====================*
    * A T L I N E - S E L E C T I O N E V E N T *
    *================================================= =====================*
    AT LINE-SELECTION.

    *================================================= =====================*
    * A T U S E R - C O M M A N D E V E N T *
    *================================================= =====================*
    *&---------------------------------------------------------------------*
    *& Form data_retrieval
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*

    FORM data_retrieval.

    CLEAR p0185.
    READ TABLE p0185 WITH KEY pernr = pernr-pernr subty = 'H2'.
    CHECK p0185-pernr = pernr-pernr AND p0185-subty = 'H2'.

    it_datos-pernr = p0185-pernr.
    it_datos-icnum = p0185-icnum.

    READ TABLE p0002 WITH KEY pernr = it_datos-pernr.
    it_datos-vorna = p0002-vorna.
    it_datos-nachn = p0002-nachn.
    it_datos-nach2 = p0002-nach2.
    * Asigna valor coonstante a No. Patronal.
    it_datos-patro = '201970321 1'.

    CLEAR : it_datos-aem,it_datos-apm.

    LOOP AT rt.
    * Asigna valores para las Aportaciones.
    IF rt-lgart = '2H02' . "aportaciones mensuales
    it_datos-aem = it_datos-aem + rt-betrg.
    ENDIF.
    IF rt-lgart = '3H02' . "aportaciones mensuales
    it_datos-apm = it_datos-apm + rt-betrg.
    ENDIF.

    ENDLOOP. " endloop de rt

    * Obtencion del texto del mes y el año de acuerdo a los parametros
    * de entrada que seran utilizados en el campo mes de aportacion

    SELECT SINGLE monam INTO v_mes
    FROM t015m
    WHERE monum = p_cumno AND
    spras = 'S'.
    v_ano = p_pabrj.

    CONCATENATE v_mes '-' v_ano+2(2) INTO m_apor.

    it_datos-monam = m_apor.

    APPEND it_datos.


    ENDFORM. " DATA_RETRIEVAL


    *&---------------------------------------------------------------------*
    *& Form build_fieldcatalog
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM build_fieldcatalog .
    wa_fieldcat-fieldname = 'PERNR'.
    wa_fieldcat-scrtext_m = 'No.Empleado'.
    wa_fieldcat-col_pos = 0.
    wa_fieldcat-outputlen = 8.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'ICNUM'.
    wa_fieldcat-scrtext_m = 'No. de Identidad'.
    wa_fieldcat-col_pos = 1.
    wa_fieldcat-outputlen = 14.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'VORNA'.
    wa_fieldcat-scrtext_m = 'Nombre(s)'.
    wa_fieldcat-col_pos = 2.
    wa_fieldcat-outputlen = 20.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'NACHN'.
    wa_fieldcat-scrtext_m = 'Apellido Paterno'.
    wa_fieldcat-col_pos = 3.
    wa_fieldcat-outputlen = 20.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'NACH2'.
    wa_fieldcat-scrtext_m = 'Apellido Materno'.
    wa_fieldcat-col_pos = 4.
    wa_fieldcat-outputlen = 20.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'PATRO'.
    wa_fieldcat-scrtext_m = 'No.patronal'.
    wa_fieldcat-col_pos = 5.
    wa_fieldcat-outputlen = 11.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'AEM'.
    wa_fieldcat-scrtext_m = 'Ap.Empleado Mensual'.
    wa_fieldcat-col_pos = 6.
    wa_fieldcat-outputlen = 20.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'APM'.
    wa_fieldcat-scrtext_m = 'Ap.Patrono.Mensual'.
    wa_fieldcat-col_pos = 7.
    wa_fieldcat-outputlen = 20.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-fieldname = 'MONAM'.
    wa_fieldcat-scrtext_m = 'Mes de la Aportacion'.
    wa_fieldcat-col_pos = 8.
    wa_fieldcat-outputlen = 17.
    APPEND wa_fieldcat TO it_fieldcat.
    CLEAR wa_fieldcat.


    ENDFORM. " BUILD_FIELDCATALOG

    *&---------------------------------------------------------------------*
    *& Form build_layout
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    **----------------------------------------------------------------------*
    FORM build_layout .

    * Set layout field for field attributes(i.e. input/output)
    gd_layout-stylefname = 'FIELD_STYLE'.
    gd_layout-zebra = 'X'.
    ENDFORM. " BUILD_LAYOUT
    *
    *&---------------------------------------------------------------------*
    *& Form display_alv_report
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM display_alv_report .

    gd_repid = sy-repid.

    * call function 'REUSE_ALV_GRID_DISPLAY'
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
    i_callback_program = 'ZNOM_REP_FOSOVI_HON'
    * i_callback_user_command = 'USER COMMAND '
    is_layout_lvc = gd_layout
    it_fieldcat_lvc = it_fieldcat
    * i_save = 'X'
    TABLES
    t_outtab = it_datos
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    IF sy-subrc <> 0.

    ENDIF.

    si alguien pudiera ayudarme.
  • nenuke
    Member
    • sep
    • 87

    #2
    No entiendo bien tu problema.... si pulsas exit, back o cancelar, por qué te preocupa que se duplique la cabecera?
    De todas formas tu problema se debe a que debes refrescar el ALV despues de cada selección o modificación en los datos.


    Originalmente publicado por dfma59
    *&---------------------------------------------------------------------*
    *& Form display_alv_report
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM display_alv_report .

    gd_repid = sy-repid.

    * call function 'REUSE_ALV_GRID_DISPLAY'
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
    i_callback_program = 'ZNOM_REP_FOSOVI_HON'
    i_callback_user_command = 'USER_COMMAND '
    is_layout_lvc = gd_layout
    it_fieldcat_lvc = it_fieldcat
    * i_save = 'X'
    TABLES
    t_outtab = it_datos
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    IF sy-subrc <> 0.

    ENDIF.

    * y debes añadir el user command

    *----------------------------------------------------
    * FORM user_command
    *----------------------------------------------------
    FORM user_command USING r_ucomm TYPE sy-ucomm
    rs_selfield TYPE slis_selfield.

    rs_selfield-refresh = 'X'.

    ENDFORM. "alv_user_command


    si alguien pudiera ayudarme.

    Comentario

    • dfma59
      Junior Member
      • nov
      • 19

      #3
      Gracias.

      Originalmente publicado por nenuke
      No entiendo bien tu problema.... si pulsas exit, back o cancelar, por qué te preocupa que se duplique la cabecera?
      De todas formas tu problema se debe a que debes refrescar el ALV despues de cada selección o modificación en los datos.
      Gracias, el problema fue resuelto

      Comentario

      Trabajando...