MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 15/04/10, 19:41:14
jessiepeque jessiepeque is offline
Junior Member
 
Fecha de Ingreso: sep 2009
Mensajes: 7
Red face 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.
Responder Con Cita
  #2  
Viejo 19/04/10, 12:20:14
Neo_25 Neo_25 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 51
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ó.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 23:40:15.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web