color en fila de ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jessiepeque
    Junior Member
    • sep
    • 7

    #1

    color en fila de ALV

    Hola

    Llevo muy poco en programación de reportes ALV, por lo tanto, necesito la ayuda de ustedes.
    Tengo un reporte, en el cual, incorpore una fila con los Totales y a esta requiero dejar en otro color, asi poder diferenciar de las otras filas.
    Por lo que he estado viendo, tengo que agregar una columna en la tabla interna que indque el color, a esta columna la llame COLOR y le grabe el dato 'C601'. Pero ahora no se como insertar esto. Adjunto fuente por si alguien me ayuda y me indque donde debo hacer los cambios.
    De antemano, muchas gracias.

    REPORT ZSD_ALV_MARCAS_PROPIAS.

    TYPE-POOLS: slis.

    * se definen tablas que se van a utilizar en el programa
    TABLES: T179T, MARA, BSIS, VBRK, VBRP.

    Data : ls_layo type slis_layout_alv,
    lt_fcat type slis_t_fieldcat_alv with header line,
    GT_GRUPO TYPE SLIS_T_SP_GROUP_ALV WITH HEADER LINE,
    * variable para subtotalizar
    gt_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.

    * creacion de tablas de paso
    Data: Begin Of tab_marcas Occurs 0,
    PRODH Like T179T-PRODH, "código marca
    VTEXT Like T179T-VTEXT, "descripción de la marca
    End Of tab_marcas.

    Data: Begin Of tab_final Occurs 0,
    PRODH Like T179T-PRODH, "marca
    VTEXT Like T179T-VTEXT, "descripción de la marca
    PRDHA Like T179T-PRODH, "codigo marca
    FKIMG Type P, "cantidad vendida
    NETWR Type P, "venta
    WAVWR Type P, "costo
    MARGEN Type P Decimals 2, "margen
    CONTRI Type P, "contribucion
    COLOR(4) Type C,
    End Of tab_final.

    Data: Begin Of tab_codigos Occurs 0,
    PRODH Like T179T-PRODH, "código marca
    MATNR Like MARA-MATNR, "material
    FKIMG Like VBRP-FKIMG, "cantidad vendida
    NETWR Like VBRP-NETWR, "venta
    WAVWR Like VBRP-WAVWR, "costo
    End Of tab_codigos.

    Data: Begin Of tab_ventas Occurs 0,
    VBELN Like VBRK-VBELN, "factura
    FKDAT Like VBRK-FKDAT, "fecha de contabilizacion
    FKART Like VBRK-FKART, "tipo de documento
    End Of tab_ventas.

    * aqui se definen las variables que se ocupan el el programa
    DATA: existe_w(1) Type n, "switch de existencia de datos
    grabar_w(1) Type n,
    prdha_w Like T179T-PRODH,
    fkimg_w Like VBRP-FKIMG, "cantidad vendida
    fkimg_t Like VBRP-FKIMG, "total cantidad vendida
    netwr_w Like VBRP-NETWR, "venta
    netwr_t Like VBRP-NETWR, "total venta
    wavwr_w Like VBRP-WAVWR, "costo
    wavwr_t Like VBRP-WAVWR, "total costo
    vbeln_i Like VBRP-VBELN, "numero inicial
    vbeln_f Like VBRP-VBELN, "numero final
    margen_w(7) Type P Decimals 2, "margen
    ano_l(4) Type n, "año de consulta desde
    mes_l(2) Type n, "mes de consulta desde
    dia_l(2) Type n, "dia de consulta desde
    ano_h(4) Type n, "año de consulta hasta
    mes_h(2) Type n, "mes de consulta hasta
    dia_h(2) Type n, "dia de consulta hasta
    contri_w Type P,
    n_reg(10) Type P.

    * Variables necesarias para el listado ALV
    DATA: fieldtab TYPE slis_t_fieldcat_alv,
    heading TYPE slis_t_listheader,
    layout TYPE slis_layout_alv,
    events TYPE slis_t_event,
    repname LIKE sy-repid,
    f2code LIKE sy-ucomm VALUE 'PICK',
    g_save(1) TYPE c,
    g_exit(1) TYPE c,
    g_variant LIKE disvariant,
    gx_variant LIKE disvariant.

    CONSTANTS: formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.

    * digitacion de datos por pantalla
    SELECTION-SCREEN BEGIN OF BLOCK block03 WITH FRAME TITLE text-001.
    PARAMETERS : p_bukrs Like bseg-bukrs OBLIGATORY DEFAULT 'BP01'.
    SELECT-OPTIONS : FECHA_W FOR BSIS-BUDAT Obligatory DEFAULT SY-DATUM.
    SELECT-OPTIONS : WERKS_W FOR VBRP-WERKS.
    SELECTION-SCREEN END OF BLOCK block03.

    SELECTION-SCREEN BEGIN OF BLOCK VLK2 WITH FRAME TITLE TEXT-002.
    PARAMETERS : Propia TYPE C RADIOBUTTON GROUP RAD.
    PARAMETERS : Todas TYPE C RADIOBUTTON GROUP RAD.
    SELECTION-SCREEN END OF BLOCK VLK2.

    INITIALIZATION.
    repname = sy-repid.

    START-OF-SELECTION.

    * procedimientos propios del ALV
    PERFORM build_eventtab USING events[].
    PERFORM initialize_variant.
    PERFORM build_layout USING layout.

    * Logiva Principal
    PERFORM Carga_Datos.
    PERFORM Muestra_Informacion.
    END-OF-SELECTION.
    * FIN PROGRAMA PRINCIPAL

    *&---------------------------------------------------------------------*
    *& Form build_eventtab
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * -->P_EVENTS text
    *----------------------------------------------------------------------*
    FORM build_eventtab USING p_events TYPE slis_t_event.
    DATA: ls_event TYPE slis_alv_event.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = p_events.

    READ TABLE p_events WITH KEY name = slis_ev_top_of_page
    INTO ls_event.
    IF sy-subrc = 0.
    MOVE formname_top_of_page TO ls_event-form.
    APPEND ls_event TO p_events.
    ENDIF.

    ** Leer evento 'USER_COMMAND'
    * READ TABLE p_events WITH KEY name = slis_ev_user_command
    * INTO ls_event.
    ** Asignar Rutina FORM 'USER_COMMAND' a evento
    * IF sy-subrc = 0.
    * MOVE slis_ev_user_command TO ls_event-form.
    * APPEND ls_event TO p_events.
    * ENDIF.

    ENDFORM. "build_eventtab

    *&---------------------------------------------------------------------*
    *& Form top_of_page
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    FORM top_of_page.

    DATA: lt_commentary TYPE slis_t_listheader WITH HEADER LINE,
    text(120) TYPE c.

    ** Header
    lt_commentary-typ = 'H'.
    If Propia = 'X'.
    MOVE 'Informe de Marcas Propias' TO lt_commentary-info.
    EndIf.
    If Todas = 'X'.
    MOVE 'Informe de Todas las Marcas' TO lt_commentary-info.
    EndIf.
    APPEND lt_commentary.

    **
    CLEAR lt_commentary.
    CLEAR text.
    lt_commentary-typ = 'S'.
    lt_commentary-key = 'Fecha'.
    ANO_L = FECHA_W-LOW+0(4).
    MES_L = FECHA_W-LOW+4(2).
    DIA_L = FECHA_W-LOW+6(2).
    ANO_H = FECHA_W-HIGH+0(4).
    MES_H = FECHA_W-HIGH+4(2).
    DIA_H = FECHA_W-HIGH+6(2).

    CONCATENATE DIA_L '.' MES_L '.' ANO_L ' Al'
    DIA_H '.' MES_H '.' ANO_H
    INTO text SEPARATED BY SPACE.
    lt_commentary-info = text.
    APPEND lt_commentary.

    **
    CLEAR lt_commentary.
    CLEAR text.
    lt_commentary-typ = 'S'.
    lt_commentary-key = 'Centro'.
    If werks_w-high+1(3) > 0.
    CONCATENATE werks_w-low ' Al ' werks_w-high
    INTO text SEPARATED BY SPACE.
    EndIf.
    If werks_w-low+1(3) > 0 And
    werks_w-high+1(3) = 0.
    MOVE werks_w-low TO text.
    EndIf.
    If werks_w-low+1(3) = 0 And
    werks_w-high+1(3) = 0.
    MOVE 'Todos Los Centros' TO text.
    EndIf.
    lt_commentary-info = text.
    APPEND lt_commentary.

    **
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = lt_commentary[].
    ENDFORM. "top_of_page

    *&---------------------------------------------------------------------*
    *& Form initialize_variant
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    FORM initialize_variant.
    g_save = 'A'.
    CLEAR g_variant.
    g_variant-report = repname.
    gx_variant = g_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
    i_save = g_save
    CHANGING
    cs_variant = gx_variant
    EXCEPTIONS
    not_found = 2.
    ENDFORM. " INITIALIZE_VARIANT
    *&---------------------------------------------------------------------*
    *& Form build_layout
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * -->P_LAYOUT text
    *----------------------------------------------------------------------*
    FORM build_layout USING p_layout TYPE slis_layout_alv.
    p_layout-f2code = f2code.
    p_layout-zebra = 'X'.
    p_layout-detail_popup = 'X'.
    p_layout-totals_text = 'TOTAL'.
    * p_layo?t-colwidth_optimize = 'X'.
    * p_layout-box_fieldname = 'SEL'.
    * p_layout-box_tabname = 'GT_OUTTAB'.
    ENDFORM.

    *&---------------------------------------------------------------------*
    *& Form Muestra_Informacion
    * --> muestra la in formacion final, es decir, el conyenido
    * <-- de la tabla tab_final
    *----------------------------------------------------------------------*
    FORM Muestra_Informacion .

    SORT tab_final BY prodh.
    DESCRIBE TABLE tab_final LINES n_reg.
    If n_reg <= 0.
    CALL FUNCTION 'WS_MSG'
    EXPORTING
    msg_type = 'E'
    text = 'NO Existen Datos con los Criterios Seleccionados'
    titl = 'ERROR'.
    Else.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'PRODH'.
    lt_fcat-RepText_DDIC = 'Marca'.
    lt_fcat-Col_Pos = 1.
    lt_fcat-OutPutLen = 10.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'VTEXT'.
    lt_fcat-RepText_DDIC = 'Descripción'.
    lt_fcat-Col_Pos = 2.
    lt_fcat-OutPutLen = 35.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'FKIMG'.
    lt_fcat-RepText_DDIC = 'Vol. Vtas Ctd'.
    lt_fcat-Col_Pos = 3.
    lt_fcat-OutPutLen = 13.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'NETWR'.
    lt_fcat-RepText_DDIC = 'Vol. Neg. PV'.
    lt_fcat-Col_Pos = 4.
    lt_fcat-OutPutLen = 12.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'WAVWR'.
    lt_fcat-RepText_DDIC = 'Vol. Neg. PC'.
    lt_fcat-Col_Pos = 5.
    lt_fcat-OutPutLen = 12.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'MARGEN'.
    lt_fcat-RepText_DDIC = 'Margen'.
    lt_fcat-Col_Pos = 6.
    lt_fcat-OutPutLen = 10.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CLEAR lt_fcat.
    lt_fcat-TABNAME = 'tab_final'.
    lt_fcat-FIX_COLUMN = 'X'.
    lt_fcat-FIELDNAME = 'CONTRI'.
    lt_fcat-RepText_DDIC = 'Contribución'.
    lt_fcat-Col_Pos = 7.
    lt_fcat-OutPutLen = 12.
    lt_fcat-sp_group = 'A'.
    APPEND lt_fcat.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_program = repname
    is_layout = layout
    it_fieldcat = lt_fcat[]
    i_default = 'A'
    i_save = g_save
    is_variant = g_variant
    it_events = events[]
    IT_SPECIAL_GROUPS = GT_GRUPO[]
    IT_Sort = GT_Sort[]
    TABLES
    t_outtab = tab_final.
    EndIf.
    ENDFORM. " Muestra_Informacion

    *&---------------------------------------------------------------------*
    *& Form Carga_Datos
    *&---------------------------------------------------------------------*
    * llena tabla de paso tab_paso1 con informacion de ventas segun filtro digitado
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM Carga_Datos .

    * lmpiar tablas de paso
    CLEAR tab_marcas.
    CLEAR tab_codigos.
    CLEAR tab_ventas.
    CLEAR tab_final.

    * ventas en el rango de fechas
    Select VBELN FKDAT FKART
    From VBRK CLIENT SPECIFIED
    Into Corresponding Fields Of Table tab_ventas
    Where MANDT = SY-MANDT
    And BUKRS = p_bukrs
    And FKDAT IN FECHA_W
    And ( FKART = 'Z001'
    Or FKART = 'Z002'
    Or FKART = 'Z003'
    Or FKART = 'Z004'
    Or FKART = 'Z006' ).

    * tabla de marcas
    Select PRODH VTEXT
    From T179T CLIENT SPECIFIED
    Into Corresponding Fields Of Table tab_marcas
    Where MANDT = SY-MANDT
    And SPRAS = 'S'.

    Loop AT tab_marcas.

    existe_w = 0.
    Grabar_w = 0.
    prdha_w = ''.

    If Propia = 'X'.
    If tab_marcas-prodh+0(6) = 'PROPI-'.
    Grabar_w = 1.
    EndIf.
    EndIf.
    If Todas = 'X'.
    If tab_marcas-prodh+0(6) = 'PROPI-' Or
    tab_marcas-prodh+0(6) = 'TERCE-'.

    Grabar_w = 1.
    EndIf.
    EndIf.

    If Grabar_w = 1.

    prdha_w = tab_marcas-prodh+6.

    Loop AT tab_final
    Where prdha = tab_marcas-prodh.
    existe_w = 1.
    EndLoop. "fin tab_final
    If existe_w = 0.
    MOVE prdha_w TO tab_final-prodh.
    MOVE tab_marcas-vtext TO tab_final-vtext.
    MOVE tab_marcas-prodh TO tab_final-prdha.
    APPEND tab_final.
    EndIf.
    EndIf.

    EndLoop. "fin tab_marcas

    Loop AT tab_ventas.
    vbeln_i = tab_ventas-vbeln.
    Exit.
    EndLoop. "fin tab_ventas
    Loop AT tab_ventas.
    vbeln_f = tab_ventas-vbeln.
    EndLoop. "fin tab_ventas

    CLEAR tab_codigos.
    Select PRODH MATNR FKIMG NETWR WAVWR
    From VBRP CLIENT SPECIFIED
    Into Corresponding Fields Of Table tab_codigos
    Where MANDT = SY-MANDT
    And VBELN >= vbeln_i
    And VBELN <= vbeln_f
    And PRSDT IN FECHA_W
    And WERKS IN WERKS_W.

    Loop AT tab_final.

    fkimg_w = 0.
    netwr_w = 0.
    wavwr_w = 0.
    margen_w = 0.
    contri_w = 0.

    Loop AT tab_codigos
    Where prodh = tab_final-prdha.
    netwr_w = netwr_w + ( tab_codigos-netwr * 100 ).
    wavwr_w = wavwr_w + ( tab_codigos-wavwr * 100 ).
    If tab_codigos-netwr > 0.
    fkimg_w = fkimg_w + tab_codigos-fkimg.
    EndIf.
    If tab_codigos-netwr < 0.
    fkimg_w = fkimg_w + ( tab_codigos-fkimg * -1 ).
    EndIf.
    EndLoop. "fin tab_codigos

    If fkimg_w > 0.
    If netwr_w > 0.
    margen_w = ( ( netwr_w - wavwr_w ) / netwr_w ) * 100.
    EndIf.

    contri_w = ( netwr_w - wavwr_w ).
    fkimg_t = fkimg_t + fkimg_w.
    netwr_t = netwr_t + netwr_w.
    wavwr_t = wavwr_t + wavwr_w.

    MOVE fkimg_w TO tab_final-fkimg.
    MOVE netwr_w TO tab_final-netwr.
    MOVE wavwr_w TO tab_final-wavwr.
    MOVE margen_w TO tab_final-margen.
    MOVE contri_w TO tab_final-contri.
    MODIFY tab_final.
    Else.
    DELETE tab_final.
    EndIf.
    EndLoop. "fin tab_final

    CLEAR prdha_w.

    If netwr_t > 0.
    margen_w = ( ( netwr_t - wavwr_t ) / netwr_t ) * 100.
    EndIf.

    contri_w = ( netwr_t - wavwr_t ).

    MOVE prdha_w TO tab_final-prodh.
    MOVE 'Totales' TO tab_final-vtext.
    MOVE fkimg_t TO tab_final-fkimg.
    MOVE netwr_t TO tab_final-netwr.
    MOVE wavwr_t TO tab_final-wavwr.
    MOVE margen_w TO tab_final-margen.
    MOVE contri_w TO tab_final-contri.
    MOVE 'C601' TO tab_final-color.
    APPEND tab_final.

    ENDFORM.
    Jessie
  • Neo_25
    Member
    • jun
    • 51

    #2
    A ver si te puedo ayudar:

    1) En tu tabla del ALV crea una tabla dentro de ella:
    No se como la meterás, yo no uso tablas con OCCURS

    Data: Begin Of tab_final Occurs 0,
    PRODH Like T179T-PRODH, "marca
    VTEXT Like T179T-VTEXT, "descripción de la marca
    PRDHA Like T179T-PRODH, "codigo marca
    FKIMG Type P, "cantidad vendida
    NETWR Type P, "venta
    WAVWR Type P, "costo
    MARGEN Type P Decimals 2, "margen
    CONTRI Type P, "contribucion
    COLOR(4) Type C, "NOOO
    TYPES: line_color TYPE slis_t_specialcol_alv. "SII
    End Of tab_final.

    2) Añadir el color
    En tu código cuando sea añade el color:
    lw_color-fieldname = 'NOMBRE COLUMNA'.
    lw_color-color-col = 6.
    lw_color-color-int = 0.
    lw_color-color-inv = 0.
    APPEND lw_color TO <fs_tabla>-line_color.

    3) En tu layout, añade la línea que te digo.

    *----------------------------------------------------------------------*
    * -->P_LAYOUT text
    *----------------------------------------------------------------------*
    FORM build_layout USING p_layout TYPE slis_layout_alv.
    p_layout-f2code = f2code.
    p_layout-zebra = 'X'.
    p_layout-detail_popup = 'X'.
    p_layout-totals_text = 'TOTAL'.
    * p_layo?t-colwidth_optimize = 'X'.
    * p_layout-box_fieldname = 'SEL'.
    * p_layout-box_tabname = 'GT_OUTTAB'.
    * nombre de la tabla agregada a la estructura del diccionario (pero por código)
    po_layout-ctab_fname = 'LINE_COLOR'.


    ENDFORM.

    Ya dirás si te sirvió.
    Si tienes dudas pregunta, pero ando liadillo.
    A mi me funcionó.

    Comentario

    Trabajando...