Reportes ALV
Hay que declarar este type siempre:
TYPE-POOLS: slis. "(es necesario para usar ALV)
Hay 3 tipos de ALV:
· List (forma de lista)
· Grid (similar lista pero visualmente mas amigable)
· Hierseq (jerárquico, agrupado).
El formato del ALV queda a cargo de una tabla y un registro llamados:
· Fieldcat (tabla, con un registro por cada campo)
· Layout (registro que maneja la estética del conjunto de campos)
A su vez la fieldcat se puede llenar de 2 formas:
· Manual (especificando registro a registro que campos queremos que nos muestre el ALV)
· Por medio de la función REUSE_ALV_FIELDCATALOG_MERGE (Si se desea mostrar la tabla completa, así y todo la fieldcat posee un campo llamado NO_OUT que me permite ocultar ese campo y que no se vea)
Si es cargada mediante la función la field_cat NO debe tener header (cabecera)
EJEMPLOS:
Por ser idénticas en llamado el ALV-List y el ALV-grid. Solo se dará ejemplos del grid
ALV-Grid con fieldcat a mano:
TABLES: usr21, adrp, adr6.
DATA: BEGIN OF ti_tabla OCCURS 0,
bname LIKE usr21-bname,
persnumber LIKE usr21-persnumber,
addrnumber LIKE usr21-addrnumber,
name_first LIKE adrp-name_first,
name_last LIKE adrp-name_last,
smtp_addr LIKE adr6-smtp_addr,
smtp_srch LIKE adr6-smtp_srch,
END OF ti_tabla.
TYPE-POOLS: slis.
DATA: wa_layout TYPE slis_layout_alv.
DATA: ti_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
START-OF-SELECTION.
PERFORM carga.
PERFORM armadosalida.
PERFORM salida.
*&---------------------------------------------------------------------*
*& Form carga
*&--------------------------------------------------------------------
FORM carga .
SELECT a~bname a~persnumber a~addrnumber b~name_first b~name_last
c~smtp_addr c~smtp_srch
FROM usr21 AS a INNER JOIN adrp AS b ON a~persnumber EQ b~persnumber
INNER JOIN adr6 AS c
ON b~persnumber EQ c~persnumber
INTO TABLE ti_tabla.
ENDFORM. " carga
*&---------------------------------------------------------------------*
*& Form armadosalida
*&--------------------------------------------------------------------
FORM armadosalida .
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'BNAME'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'NOMBRE CLAVE'.
APPEND ti_fieldcat.
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'PERSNUMBER'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'NUMERO DE PERSONA'.
APPEND ti_fieldcat.
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'ADDRNUMBER'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'DIRECCION'.
APPEND ti_fieldcat.
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'NAME_FIRST'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'NOMBRE'.
APPEND ti_fieldcat.
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'NAME_LAST'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'APELLIDO'.
APPEND ti_fieldcat.
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'SMTP_ADDR'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'DIRECCION ELECTRONICA'.
APPEND ti_fieldcat.
CLEAR ti_fieldcat.
ti_fieldcat-fieldname = 'SMTP_SRCH'.
ti_fieldcat-tabname = 'TI_TABLA'.
ti_fieldcat-seltext_l = 'ALGO ELECTRONICO'.
APPEND ti_fieldcat.
ENDFORM. " armadosalida
*&---------------------------------------------------------------------*
*& Form salida
*&--------------------------------------------------------------------
FORM salida .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* i_callback_program = c_repid
* i_callback_pf_status_set = 'PF_STATUS'
* i_callback_user_command = 'USER_COMMAND'
* i_structure_name = 'TI_ALV'
* is_layout = wa_layout
it_fieldcat = ti_fieldcat[]
* i_save = 'A'
TABLES
t_outtab = ti_tabla
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE i398(00) WITH 'fallo la funcion'.
ENDIF.
ENDFORM. " salida
Datos personales
- Damian Sierra
- Soy programador/analista. Mis fuertes es el mundo de sap(como abaper), programador php con gran experiencia en el mundo Wordpress y Joomla.
lunes, 11 de agosto de 2008
viernes, 8 de agosto de 2008
Obtener primer y ultimo día del mes de una fecha dada
Nos pueden pedir alguna vez que obtengamos el ultimo día de un mes. Como hacemos para saber si ese mes tiene 28, 30 o 31 dias?..peor si es viciesto. Con esta función nos salvamos, y obtener el primer día es solo cuestión de reemplazo.
*Codigo
Data: lg_datum type sy-datum.
Data: lg_dia_low type sy-datum.
lg_datum = p_dia. "Nos viene la fecha por parametro y lo asignamos
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING day_in = lg_datum "Ponemos la fecha que nos vino por parametro
IMPORTING last_day_of_month = lg_datumbsi "Obtenemos el ultimo dia del mesEXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
lg_dia_low = lg_datumbsi. "Asigno la fecha del ultimo dia otra variable.
lg_dia_low+6(2) = '01'. "Piso los primeros 2 caracteres de mi fecha con 01. Obteniendo el 1er dia del mes.
Etiquetas:
abap funcion primer ultimo dia del mes
Como usar un field symbols como un work area
* -------------------------------------------------------------------- *
* Internal Tables *
* -------------------------------------------------------------------- *
DATA: ti_BSEG TYPE STANDARD TABLE OF BSEG.
* -------------------------------------------------------------------- *
* FIELD-SYMBOLS *
* -------------------------------------------------------------------- *
FIELD-SYMBOLS: <ref_bseg>LIKE LINE OF ti_BSEG. "construimos segun la tabla interna
*Luego hacemos un select por ejemplo para cargar la tabla interna.
Select *
from BSEG
into table ti_bseg.
*Luego hacemos el loop con el field symbols
Loop ti_bseg
ASSIGNING <ref_bseg>. "Se utiliza ASSIGNING en lugar de into.
*La asignacion de un field symbols se comporta como un work area, osea si hacemos una asignación.
variable = <ref_bseg>-bukrs.
Endloop.
* Internal Tables *
* -------------------------------------------------------------------- *
DATA: ti_BSEG TYPE STANDARD TABLE OF BSEG.
* -------------------------------------------------------------------- *
* FIELD-SYMBOLS *
* -------------------------------------------------------------------- *
FIELD-SYMBOLS: <ref_bseg>
*Luego hacemos un select por ejemplo para cargar la tabla interna.
Select *
from BSEG
into table ti_bseg.
*Luego hacemos el loop con el field symbols
Loop ti_bseg
ASSIGNING <ref_bseg>
variable = <
Etiquetas:
field-symbols workarea abap programacion sap
Suscribirse a:
Entradas (Atom)