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 26/06/12, 23:03:23
x27christian27x x27christian27x is offline
Junior Member
 
Fecha de Ingreso: jun 2012
Localización: lima, peru
Mensajes: 12
Eliminar Registro De Un Alv

Hola a todos, soy nuevo en abap y estoy haciendo un programa de mantenimiento de una tabla,me explico: he creado una tabla (ztab_usu) con los campos (CODIGO,NOMBRE,APELLIDO,DIRECCION,TELEFONO), ya hize una dynpro con un ALV-GRID y 2 botones (nuevo,borrar); he logrado añadir datos, pero lo que no puedo es eliminar el(los) registro(s) que selecciono en el alv. espero su ayuda porfavor, le dejo una parte del codigo. Gracias.

TABLES: ztab_usu.

TYPES BEGIN OF ty_ztab_usu.
INCLUDE STRUCTURE ztab_usu.
TYPES END OF ty_ztab_usu.

DATA: it_ztab_usu TYPE STANDARD TABLE OF ty_ztab_usu.

FIELD-SYMBOLS: <fs_ztab_usu> LIKE LINE OF it_ztab_usu.


*DECLARACION DE VARIABLES ALV*
DATA: gs_layout_usu TYPE lvc_s_layo,
gt_fieldcat_usu TYPE lvc_t_fcat,
gs_fieldcat_usu TYPE lvc_s_fcat,
i_index_rows TYPE lvc_t_row,
i_selected_row LIKE lvc_s_row.

DATA: cnt_name_usu TYPE scrfname VALUE 'CUSTOM_ALV',
container_alv_usu TYPE REF TO cl_gui_custom_container,
alv_grid_usu TYPE REF TO cl_gui_alv_grid.

FIELD-SYMBOLS: <fs_fieldcat> LIKE LINE OF gt_fieldcat_usu.

START-OF-SELECTION.
CALL SCREEN '100'.

*----------------------------------------------------------------------*
**FUNCIONES DEL ALV**

FORM load_data .
REFRESH it_ztab_usu.

SELECT codigo nombre apellido direccion telefono
INTO CORRESPONDING FIELDS OF TABLE it_ztab_usu
FROM ztab_usu.
ENDFORM. " load_data
*&---------------------------------------------------------------------*
*& Form fill_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_layout .
gs_layout_usu-sel_mode = 'A'.
* gs_layout_usu-no_toolbar = 'X'.
ENDFORM. " fill_layout
*&---------------------------------------------------------------------*
*& Form fill_catalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_catalog .
REFRESH gt_fieldcat_usu.

CLEAR gs_fieldcat_usu.
gs_fieldcat_usu-tabname = 'it_ztab_usu'.
gs_fieldcat_usu-fieldname = 'CODIGO'.
gs_fieldcat_usu-reptext = 'Codigo'.
gs_fieldcat_usu-col_pos = 1.
gs_fieldcat_usu-outputlen = 7.
APPEND gs_fieldcat_usu TO gt_fieldcat_usu.

CLEAR gs_fieldcat_usu.
gs_fieldcat_usu-tabname = 'it_ztab_usu'.
gs_fieldcat_usu-fieldname = 'NOMBRE'.
gs_fieldcat_usu-reptext = 'Nombres'.
gs_fieldcat_usu-col_pos = 2.
gs_fieldcat_usu-outputlen = 8.
APPEND gs_fieldcat_usu TO gt_fieldcat_usu.

CLEAR gs_fieldcat_usu.
gs_fieldcat_usu-tabname = 'it_ztab_usu'.
gs_fieldcat_usu-fieldname = 'APELLIDO'.
gs_fieldcat_usu-reptext = 'Apellidos'.
gs_fieldcat_usu-col_pos = 3.
gs_fieldcat_usu-outputlen = 10.
APPEND gs_fieldcat_usu TO gt_fieldcat_usu.

CLEAR gs_fieldcat_usu.
gs_fieldcat_usu-tabname = 'it_ztab_usu'.
gs_fieldcat_usu-fieldname = 'DIRECCION'.
gs_fieldcat_usu-reptext = 'Direccion'.
gs_fieldcat_usu-col_pos = 4.
gs_fieldcat_usu-outputlen = 10.
APPEND gs_fieldcat_usu TO gt_fieldcat_usu.

CLEAR gs_fieldcat_usu.
gs_fieldcat_usu-tabname = 'it_ztab_usu'.
gs_fieldcat_usu-fieldname = 'TELEFONO'.
gs_fieldcat_usu-reptext = 'Telefono'.
gs_fieldcat_usu-col_pos = 4.
gs_fieldcat_usu-outputlen = 8.
APPEND gs_fieldcat_usu TO gt_fieldcat_usu.
ENDFORM. " fill_catalog
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv .
IF container_alv_usu IS INITIAL.

CREATE OBJECT container_alv_usu
EXPORTING
container_name = cnt_name_usu
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.

IF sy-subrc EQ 0.

CREATE OBJECT alv_grid_usu
EXPORTING
i_parent = container_alv_usu.

CALL METHOD alv_grid_usu->set_table_for_first_display
EXPORTING
i_save = 'A'
i_default = 'X'
is_layout = gs_layout_usu
CHANGING
it_outtab = it_ztab_usu
it_fieldcatalog = gt_fieldcat_usu
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.

CALL METHOD alv_grid_usu->set_ready_for_input
EXPORTING
i_ready_for_input = 0.

ELSE.
CALL METHOD alv_grid_usu->refresh_table_display.
ENDIF.
ENDIF.
ENDFORM. " display_alv
*&---------------------------------------------------------------------*
*& Form refresh_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh_alv .
CALL METHOD alv_grid_usu->set_frontend_layout
EXPORTING
is_layout = gs_layout_usu.

CALL METHOD alv_grid_usu->refresh_table_display.
ENDFORM. " refresh_alv
*&---------------------------------------------------------------------*
*& Form eliminar_registro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM eliminar_registro .
**ESTO ES LO QUE ME FALTA
ENDFORM. " eliminar_registro

Úlima edición por x27christian27x fecha: 26/06/12 a las 23:06:13.
Responder Con Cita
  #2  
Viejo 27/06/12, 14:27:45
Duarco Duarco is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 54
El ALV se forma según los registros de la tabla interna, por lo tanto debes activar un boton de eliminar, en el cual se deben identificar los registros seleccionados (para esto existe un método que retorna en una tabla los indices de los registros marcados), al conocer los indices que se desean eliminar, los pasos siguientes son recorrer la tabla interna del alv, borrar los registros según el indice y hacer el refresh del alv.


espero haberme explicado bien.

saludos!
Responder Con Cita
  #3  
Viejo 27/06/12, 14:43:11
SAPING SAPING is offline
Senior Member
 
Fecha de Ingreso: may 2010
Localización: Buenos Aires, Argentina
Mensajes: 199
- Primero tenes que crear en tu tabla de la cual mostras el alv con un campo para flag (TYPE c).

-Despues tenes que declararla en el fieldcat:
gw_fieldcat-checkbox = 'X'.
gw_fieldcat-edit = 'X'.

- Crea un nuevo STATUS_GUI con un boton que diga "Eliminar"

- En la funcion donde llamas al ALV tenes que pasarle un user command:
i_callback_user_command = 'FR_USER_COMMAND' => debes crear un form

- En este form colocas:
IF pe_ucomm = '%ANUL'. "si presiono el boton "Eliminar"

CLEAR lf_change.
* estas funciones son para actualizar el campo flag que creaste al principio
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = cl_ref1.

CALL METHOD cl_ref1->check_changed_data
IMPORTING
e_valid = lf_change.

* valido que se hayan seleccionado al menos un documento para anular
READ TABLE gt_alv WITH KEY anular = co_x TRANSPORTING NO FIELDS.
IF sy-subrc IS INITIAL.

CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = text-002 "Anular Compensaciones
text_question = text-003 "Se procederá a la anulación de los documentos seleccionados. ¿Desea Continuar?
default_button = '2'
display_cancel_button = 'X'
IMPORTING
answer = lf_answer.
IF sy-subrc IS INITIAL.

IF lf_answer = co_1.
* anulo las compensaciones marcadas
PERFORM fr_anular_docs.
ENDIF.

ENDIF.

ELSE.
* Seleccionar al menos un documento.
MESSAGE i004(zfbank) DISPLAY LIKE 'E'.
ENDIF.

ENDIF.

Espero te sirva.
Slds.
Responder Con Cita
  #4  
Viejo 27/06/12, 14:43:13
x27christian27x x27christian27x is offline
Junior Member
 
Fecha de Ingreso: jun 2012
Localización: lima, peru
Mensajes: 12
eliminar alv

claro, te entendi, el detalle es que solo sé capturar el indice de una tabla (dynpro), pero de un alv no se como hacerlo

TABLES: ztab_usu.

TYPES BEGIN OF ty_ztab_usu.
INCLUDE STRUCTURE ztab_usu.
TYPES END OF ty_ztab_usu.

DATA: it_ztab_usu TYPE STANDARD TABLE OF ty_ztab_usu.

FIELD-SYMBOLS: <fs_ztab_usu> LIKE LINE OF it_ztab_usu.

DATA : t_intab1 LIKE TABLE OF ztab_usu WITH HEADER LINE,
t_intab2 LIKE TABLE OF ztab_usu WITH HEADER LINE,
w_intab1 LIKE LINE OF t_intab1.

*DECLARACION DE VARIABLES ALV*
DATA: gs_layout_usu TYPE lvc_s_layo,
gt_fieldcat_usu TYPE lvc_t_fcat,
gs_fieldcat_usu TYPE lvc_s_fcat,
i_index_rows TYPE lvc_t_row,
i_selected_row LIKE lvc_s_row.



FORM eliminar_registro .
DATA : i_lines TYPE i.

CLEAR : t_intab2.
REFRESH : t_intab2.

* Capturar Indice de Fila Marcada
CALL METHOD alv_grid_usu->get_selected_rows
IMPORTING
et_index_rows = i_index_rows.
*
DESCRIBE TABLE i_index_rows LINES i_lines.

* IF i_lines = 0.
** MESSAGE t999 WITH 'Para Eliminar...Debe Marcar un Registro.'.
* EXIT.
* ENDIF.

* Lee Filas Marcacadas en TBI para Borrado
LOOP AT i_index_rows INTO i_selected_row.
READ TABLE t_intab1 INDEX i_selected_row-index INTO w_intab1.
APPEND w_intab1 TO t_intab2.
ENDLOOP.
* Borra Las Filas Marcadas en TBI de Borrado
LOOP AT t_intab2 INTO w_intab1.
DELETE t_intab1 WHERE CODIGO = w_intab1-CODIGO.
* AND mstae = w_intab1-mstae.

DELETE FROM ztab_usu WHERE CODIGO = w_intab1-CODIGO.
* AND mstae = w_intab1-mstae.
ENDLOOP.

COMMIT WORK.
*delete it_ztab_usu where CODIGO = ztab_wa-CODIGO.
*delete from ztab_usu where CODIGO = ztab_wa-CODIGO.
perform refresh_alv.

* IF sy-subrc = 0.
* MESSAGE i000 WITH 'Proceso de Borrado Ok.'.
* ELSE.
* MESSAGE i000 WITH 'Fallo el Proceso de Borrado'.
* ENDIF.
ENDFORM. " eliminar_registro
Responder Con Cita
  #5  
Viejo 27/06/12, 15:05:43
Duarco Duarco is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 54
Hechate una mirada al metodo GET_SELECTED_ROWS de la clase CL_GUI_ALV_GRID, si mal no estoy, el te retorna una tabla con los indices de los registros que seleccionas en el ALV.
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 07:14:29.


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