You are on page 1of 9

ALV CON BOTN DE REFRESH Y GUARDAR.

Crear la tabla de la caul se van a extraer los datos o identificar los campos.

REPORT ZALV_CAMEDIT_CAG *&---------------------------------------------------------------------* *& PROGRAMA: REPORT ZALV_CAMEDIT_CAG. *&---------------------------------------------------------------------* *& AUTOR:CECILIA ALEJANDRO GONZALEZ *&---------------------------------------------------------------------* *& DESCRIPCIN: El programa hace que se muestre un ALV seleccionando solo *& el estatus E, con su campo editable zzestatu y lo *& guarda solo guardar el status E o T, cuando se cambi a *& el campo realiza el refresh y solo mostrar los datos que *& tienes el valor de E. *&---------------------------------------------------------------------* REPORT ZALV_CAMEDIT_CAG MESSAGE-ID Z0 NO STANDARD PAGE HEADING LINE-SIZE 132 LINE-COUNT 65. *&---------------------------------------------------------------------* *& 1.- Declaramos las tablas a utilizar y la libreria ICON. *&---------------------------------------------------------------------* TABLES: ZTD_SOLIC_CAG. "Sociedades

INCLUDE <ICON>. "Para llamar al catalogo de iconos *&---------------------------------------------------------------------* *& 2.- Declaramos la estructura de nuestra tabla interna. *&---------------------------------------------------------------------* * DECLARACIN DEL SLIS Y DEL OK_CODE. TYPE-POOLS: SLIS. DATA: OK_CODE TYPE SY-UCOMM. DATA: BEGIN OF T_OUTTAB OCCURS 0, SELECTED TYPE C. INCLUDE STRUCTURE ZTD_SOLIC_CAG.

DATA: WRBTR LIKE BSEG-WRBTR, LINE_COLOR(4) TYPE C, ADICIONAL(5) TYPE C. DATA: END OF T_OUTTAB. TYPES : BEGIN IDENT GUID OBJECT_ID UDATE UTIME ZZESTATUS OF TYPE TYPE TYPE TYPE TYPE TYPE

"Importe en la moneda del documento "Pinta lineas de color "Campo para mostar el icono en el ALV

TY_TDSOLIC, "Estructura para el campo editable. ZTD_SOLIC_CAG-IDENT, ZTD_SOLIC_CAG-GUID, ZTD_SOLIC_CAG-OBJECT_ID, ZTD_SOLIC_CAG-UDATE, ZTD_SOLIC_CAG-UTIME, ZTD_SOLIC_CAG-ZZESTATUS,

END OF TY_TDSOLIC. *Tabla interna y work area para modificar y guardad los datos editados. DATA : IT_OUT TYPE TABLE OF TY_TDSOLIC, WA_OUT TYPE TY_TDSOLIC, WA_OUT1 TYPE ZTD_SOLIC_CAG, IT_EVENTEXIT TYPE SLIS_T_EVENT_EXIT,"Tabla interna para el "efecto del boton refresh. WA_EVENTEXIT TYPE SLIS_EVENT_EXIT."Work area para el efecto "del boton refresh. *&---------------------------------------------------------------------* *& 3.- Variables Globales *&---------------------------------------------------------------------* DATA: W_USRID W_POSI(2) W_SETT01(56) W_TIPBUS LIKE TYPE TYPE TYPE PA0105-USRID, N, C, C.

DATA: W_PROGNAME TYPE SYREPID, "contiene el nombre del programa actual W_DYNNUM TYPE SYDYNNR, "el numero de pantalla con el que estas trabajando DYNPRO_VALUES TYPE TABLE OF DYNPREAD, FIELD_VALUE LIKE LINE OF DYNPRO_VALUES. *&---------------------------------------------------------------------* *& 4.- Definimos los datos y tablas necesarios para la ALV. *&---------------------------------------------------------------------* * Catlogo de campos: contiene la descripcin de los campos de salida DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE, "Posicionar los campos de salida GT_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE, "Ordenamient o de los campos * Especificaciones de la disposicin de la lista: descripcin de la * estructura de salida GS_LAYOUT TYPE SLIS_LAYOUT_ALV, "Determinar las propieda des del ALV GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER, " para las cabeceras GT_EVENTS TYPE SLIS_T_EVENT, "eventos GS_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,

LS_VARI ayout G_REPID

TYPE DISVARIANT, "tipo de estructura para el l LIKE SY-REPID. "nombre del programa

* Tabla de excluir funciones DATA: GT_EXCLUDE TYPE SLIS_T_EXTAB WITH HEADER LINE. *&---------------------------------------------------------------------* *& 5.- Definimos nuestros parametros de entrada a utilizar. *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK BLOCK01 WITH FRAME TITLE TEXT-S01. SELECT-OPTIONS: S_STAT FOR ZTD_SOLIC_CAG-ZZESTATUS. "Sociedad SELECTION-SCREEN SKIP 1. SELECTION-SCREEN END OF BLOCK BLOCK01. *&---------------------------------------------------------------------* *& 6.- Definimos los eventos y el proceso principal. *&---------------------------------------------------------------------* AT SELECTION-SCREEN. INITIALIZATION. START-OF-SELECTION. PERFORM CARGA_DATOS. PERFORM CARGAR_ALV. END-OF-SELECTION. *&---------------------------------------------------------------------* *& 7.- Cargamos los datos. *&---------------------------------------------------------------------* FORM CARGA_DATOS. REFRESH: T_OUTTAB. * Solo trae el Estatus = 'E' SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_OUT FROM ZTD_SOLIC_CAG WHERE ZZESTATUS = 'E'."IN S_STAT. " ENDFORM. " CARGA_DATOS *&---------------------------------------------------------------------* *& 8.- Invocamos a los procesimientos de la ALV. *&---------------------------------------------------------------------* FORM CARGAR_ALV. * Refrescar los datos PERFORM EVENT_EXITS. * Carga de Campos para ALV PERFORM INIT_FIELDCAT. * Atributos de ALV PERFORM INIT_LAYOUT. *Muestra los datos del ALV. PERFORM MOSTRAR_ALV_01. ENDFORM. " CARGAR_ALV

*Subrutina para RFRESH. FORM EVENT_EXITS. CLEAR WA_EVENTEXIT. WA_EVENTEXIT-UCOMM = '&REFRESH'. " Refrescar WA_EVENTEXIT-AFTER = 'X'. APPEND WA_EVENTEXIT TO IT_EVENTEXIT. ENDFORM. "event_exits *&---------------------------------------------------------------------* *& 9.- Declaramos el catalogo de salida de nuestros datos en al ALV. *&---------------------------------------------------------------------* FORM INIT_FIELDCAT. REFRESH: GT_FIELDCAT. CLEAR W_POSI. "Posiciones de los campos * nombre del Programa G_REPID = SY-REPID. * Mediante esta tabla vamos a definir los campos que queremos mostrar * en el listado de salida. * IDENT W_POSI = W_POSI + 1. GT_FIELDCAT-TABNAME GT_FIELDCAT-FIELDNAME GT_FIELDCATDDICTXT = 'L'. "Field GT_FIELDCAT-SELTEXT_L GT_FIELDCAT-COL_POS GT_FIELDCAT-REF_TABNAME GT_FIELDCAT-REF_FIELDNAME APPEND GT_FIELDCAT. CLEAR * GUID W_POSI = W_POSI + 1. GT_FIELDCAT-TABNAME GT_FIELDCAT-FIELDNAME GT_FIELDCATDDICTXT = 'L'. "Field GT_FIELDCAT-SELTEXT_L GT_FIELDCAT-COL_POS GT_FIELDCAT-REF_TABNAME GT_FIELDCAT-REF_FIELDNAME APPEND GT_FIELDCAT. CLEAR * OBJECT_ID W_POSI = W_POSI + 1. GT_FIELDCAT-TABNAME GT_FIELDCAT-FIELDNAME GT_FIELDCATDDICTXT = 'L'. "Field GT_FIELDCAT-SELTEXT_L GT_FIELDCAT-COL_POS GT_FIELDCAT-REF_TABNAME

= 'T_OUTTAB'. = 'IDENT'. Label del elemento de datos S, L, M = 'IDENT'."TEXT-C01. = W_POSI. = 'ZTD_SOLIC_CAG'. "Tabla de Referencia = 'IDENT'. "Campo Referencia en Tabla GT_FIELDCAT.

= 'T_OUTTAB'. = 'GUID'. Label del elemento de datos S, L, M = 'GUID'."TEXT-C01. = W_POSI. = 'ZTD_SOLIC_CAG'. "Tabla de Referencia = 'GUID'. "Campo Referencia en Tabla GT_FIELDCAT.

= 'T_OUTTAB'. = 'OBJECT_ID'. Label del elemento de datos S, L, M = 'OBJECT_ID'."TEXT-C01. = W_POSI. = 'ZTD_SOLIC_CAG'. "Tabla de Referencia

GT_FIELDCAT-REF_FIELDNAME = 'OBJECT_ID'. APPEND GT_FIELDCAT. CLEAR GT_FIELDCAT. * UDATE W_POSI = W_POSI + 1. GT_FIELDCAT-TABNAME GT_FIELDCAT-FIELDNAME GT_FIELDCATDDICTXT = 'L'. "Field GT_FIELDCAT-SELTEXT_L GT_FIELDCAT-COL_POS GT_FIELDCAT-REF_TABNAME GT_FIELDCAT-REF_FIELDNAME APPEND GT_FIELDCAT. CLEAR * UTIME W_POSI = W_POSI + 1. GT_FIELDCAT-TABNAME GT_FIELDCAT-FIELDNAME GT_FIELDCATDDICTXT = 'L'. "Field GT_FIELDCAT-SELTEXT_L GT_FIELDCAT-COL_POS GT_FIELDCAT-REF_TABNAME GT_FIELDCAT-REF_FIELDNAME * gt_fieldcat-key * gt_fieldcat-down * GT_FIELDCAT-HOTSPOT APPEND GT_FIELDCAT. CLEAR * ZZESTATUS W_POSI = W_POSI + 1. GT_FIELDCAT-TABNAME GT_FIELDCAT-FIELDNAME GT_FIELDCATDDICTXT = 'L'. "Field GT_FIELDCAT-SELTEXT_L GT_FIELDCAT-ROW_POS GT_FIELDCAT-COL_POS GT_FIELDCAT-REF_TABNAME GT_FIELDCAT-REF_FIELDNAME GT_FIELDCAT-EDIT = APPEND GT_FIELDCAT. CLEAR

"Campo Referencia en Tabla

= 'T_OUTTAB'. = 'UDATE'. Label del elemento de datos S, L, M = 'UDATE'."TEXT-C01. = W_POSI. = 'ZTD_SOLIC_CAG'. "Tabla de Referencia = 'UDATE'. "Campo Referencia en Tabla GT_FIELDCAT.

= 'T_OUTTAB'. = 'UTIME'. Label del elemento de datos S, L, M = 'UTIME'."TEXT-C01. = W_POSI. = 'ZTD_SOLIC_CAG'. "Tabla de Referencia = 'UTIME'. "Campo Referencia en Tabla = 'X'. "Tratarlo como Clave = 'X'. "Orden Descendente = 'X'. "Navegar al Doble Click GT_FIELDCAT.

= 'T_OUTTAB'. = 'ZZESTATUS'. Label del elemento de datos S, L, M = 'ZZESTATUS'."TEXT-C01. = W_POSI. = W_POSI. = 'ZTD_SOLIC_CAG'. "Tabla de Referencia = 'ZZESTATUS'. "Campo Referencia en Tabla 'X'. GT_FIELDCAT.

ENDFORM. " init_fieldcat *&---------------------------------------------------------------------* *& Form init_layout *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM INIT_LAYOUT. GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. GS_LAYOUT-ZEBRA = 'X'. GS_LAYOUT-NO_INPUT = ' '. GS_LAYOUT-INFO_FIELDNAME = 'LINE_COLOR'. GS_LAYOUT-BOX_FIELDNAME = 'SELECTED'.

ENDFORM.

" init_layout

*&---------------------------------------------------------------------* *& 10.- Imprimimos la ALV. y funciones adicionales. *&---------------------------------------------------------------------* FORM MOSTRAR_ALV_01. * Inicializacin de Variante de Trabajo LS_VARI-REPORT = SY-REPID. LS_VARI-HANDLE = SPACE. "Coloca un espacio en blanco tipo caracter LS_VARI-LOG_GROUP = SPACE. LS_VARI-USERNAME = SPACE. LS_VARI-VARIANT = SPACE. LS_VARI-TEXT = SPACE. LS_VARI-DEPENDVARS = SPACE. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = G_REPID I_CALLBACK_USER_COMMAND = 'USER_COMMAND_01' I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE_01' * I_STRUCTURE_NAME = 'T_OUTTAB' * IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT[] IT_EXCLUDING = GT_EXCLUDE[] IT_EVENT_EXIT = IT_EVENTEXIT "Lines para el re fresh. * I_SAVE = ' ' "Grabar Variante TABLES T_OUTTAB = IT_OUT EXCEPTIONS PROGRAM_ERROR = 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. ENDFORM. " MOSTRAR_ALV_01

*---------------------------------------------------------------------* * FORM USER_COMMAND_01 Process Call Back Events (Begin) * *---------------------------------------------------------------------* FORM USER_COMMAND_01 USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD. "llama al SLIS para la posicin del cursor * sy-ucomm permite la interaccin del usuario con el reporte *** READ TABLE T_OUTTAB INDEX SELFIELD-TABINDEX. "cuenta los registros *** CHECK SY-SUBRC = 0. DATA :IT_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA : IS_VALID. *Funcin para actualizar la tabla interna.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = IT_GRID.

*Funcin validacin para entes de hacer click en guardar. CALL METHOD IT_GRID->CHECK_CHANGED_DATA IMPORTING E_VALID = IS_VALID . CASE UCOMM. *Efecto del botn guardar. WHEN '&DATA_SAVE'. IF IS_VALID = 'X'. LOOP AT IT_OUT INTO WA_OUT. "Verificar si el estatus solo sea 'E' o 'T' para guardar. IF WA_OUT-ZZESTATUS = 'E' OR WA_OUT-ZZESTATUS = 'T'. "Actualizacin de los datos de la tabla. MOVE-CORRESPONDING WA_OUT TO WA_OUT1. MODIFY ZTD_SOLIC_CAG FROM WA_OUT1. ELSE. "Si no cumple mostrara el mensaje. MESSAGE 'Dato no valido' TYPE 'S'. ENDIF. ENDLOOP. ENDIF. *Efecto del botn Refresh. WHEN '&REFRESH'. *Llama a la subrutina de cargar datos para que los muestre ya actualizado s. PERFORM CARGA_DATOS. SELFIELD-REFRESH = 'X'. SELFIELD-COL_STABLE = 'X' . SELFIELD-ROW_STABLE = 'X' . ENDCASE. ENDFORM. "user_command_01 *---------------------------------------------------------------------* * FORM TOP_OF_PAGE_01 * *---------------------------------------------------------------------* FORM TOP-OF-PAGE_01. DATA: T_HEADER TYPE SLIS_T_LISTHEADER, WA_HEADER TYPE SLIS_LISTHEADER, T_LINE LIKE WA_HEADER-INFO, LD_LINES TYPE I, LD_LINESC(10) TYPE C. * Title WA_HEADER-TYP = 'H'. " H = Header, S = Selection, A = Action WA_HEADER-INFO = 'ALV editable, guarda y realiza refresh-Report'. APPEND WA_HEADER TO T_HEADER. CLEAR WA_HEADER. * Date WA_HEADER-TYP = 'S'. " H = Header, S = Selection, A = Action WA_HEADER-KEY = 'Date: '.

CONCATENATE

SY-DATUM+6(2) '.' SY-DATUM+4(2) '.' SY-DATUM(4) INTO WA_HEADER-INFO. APPEND WA_HEADER TO T_HEADER. CLEAR: WA_HEADER.

"todays date

* USUARIO WA_HEADER-TYP = 'H'. " H = Header, S = Selection, A = Action CONCATENATE 'USUARIO: ' SY-UNAME INTO WA_HEADERINFO SEPARATED BY SPACE. APPEND WA_HEADER TO T_HEADER. CLEAR WA_HEADER.

* Total No. of Records Selected DESCRIBE TABLE IT_OUT LINES LD_LINES. LD_LINESC = LD_LINES. CONCATENATE 'Total No. de registros Seleccionados ' LD_LINESC INTO T_LINE SEPARATED BY SPACE. WA_HEADER-TYP = 'A'. " H = Header, S = Selection, A = Action WA_HEADER-INFO = T_LINE. APPEND WA_HEADER TO T_HEADER. CLEAR: WA_HEADER, T_LINE. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' "manda traer toda la cabecer a EXPORTING IT_LIST_COMMENTARY = T_HEADER I_LOGO = 'ZLOGO'. "OAER Transaccin para guardar el log o del ALV ENDFORM. "TOP-OF-PAGE_01

Guardar

, Compilar

, Activar

y Ejecutamos

Cuando lo ejecutamos nos trae solo los datos con status E, dejando el campo status para editar.

Colocamos cualquier otro estatus y seleccionamos guardar, si es diferente el status de E o T mandar un mensaje de Dato no vlido.

Cuando le asignamos el valor de status E, lo guardamos y lo actualizamos nos actualiza el numero de registros seleccionados y quitara en que hemos modificado ya que tiene status T.

You might also like