Datos personales

Mi foto
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

Reportes ALV

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

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 mes
EXCEPTIONS
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.

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.


 
Free counter and web stats