#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. |
#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ó. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|