PDA

Ver la Versión Completa : AYUDA URGENTE borrar lineas tabla interna


miguel.esteban.martin
02/03/09, 15:03:54
Tengo un alv y borro los registros seleccionados.
si solo selecciono un registro me lo borra bien, si selecciono dos o mas solo me borra uno.

os pongo mi codigo:

CLEAR lt_rows.
REFRESH lt_rows.

CALL METHOD g_grid2->get_selected_rows
IMPORTING
et_index_rows = lt_rows.

CALL METHOD cl_gui_cfw=>flush.
IF lt_rows IS NOT INITIAL.
CLEAR i_pos[].
REFRESH i_pos.
LOOP AT lt_rows INTO ls_selected_line.

READ TABLE i_pos_bulto INTO lw_posiciones
INDEX ls_selected_line-index TRANSPORTING ALL FIELDS.

MOVE-CORRESPONDING lw_posiciones TO i_pos.

APPEND i_pos.

ENDLOOP.


sort i_pos by bulto equnr.
sort i_pos_bulto by bulto equnr.

IF i_pos IS NOT INITIAL.
LOOP AT i_pos_bulto.
READ TABLE i_pos INTO borra_linea.
check sy-subrc = '0'.
DELETE i_pos_bulto WHERE bulto = borra_linea-bulto AND equnr =
borra_linea-equnr.
ENDLOOP.
ENDIF.


________________________________________----

En i_pos guardo las lineas que he seleccionado en el alv.
i_pos_bulto es mi tabla interna.

He debugueado el programa y depues de los sort a las dos tablas los datos son correctos y bien ordenados, cuando da el problema es en el loop que no compriueba la primera posicion con la primera y no se porqeu

me podeis echar una mano.

ppchico
02/03/09, 15:23:56
Tengo un alv y borro los registros seleccionados.
si solo selecciono un registro me lo borra bien, si selecciono dos o mas solo me borra uno.

os pongo mi codigo:

CLEAR lt_rows.
REFRESH lt_rows.

CALL METHOD g_grid2->get_selected_rows
IMPORTING
et_index_rows = lt_rows.

CALL METHOD cl_gui_cfw=>flush.
IF lt_rows IS NOT INITIAL.
CLEAR i_pos[].
REFRESH i_pos.
LOOP AT lt_rows INTO ls_selected_line.

READ TABLE i_pos_bulto INTO lw_posiciones
INDEX ls_selected_line-index TRANSPORTING ALL FIELDS.

MOVE-CORRESPONDING lw_posiciones TO i_pos.

APPEND i_pos.

ENDLOOP.


sort i_pos by bulto equnr.
sort i_pos_bulto by bulto equnr.

IF i_pos IS NOT INITIAL.
LOOP AT i_pos_bulto.
READ TABLE i_pos INTO borra_linea.
check sy-subrc = '0'.
DELETE i_pos_bulto WHERE bulto = borra_linea-bulto AND equnr =
borra_linea-equnr.
ENDLOOP.
ENDIF.


________________________________________----

En i_pos guardo las lineas que he seleccionado en el alv.
i_pos_bulto es mi tabla interna.

He debugueado el programa y depues de los sort a las dos tablas los datos son correctos y bien ordenados, cuando da el problema es en el loop que no compriueba la primera posicion con la primera y no se porqeu

me podeis echar una mano.

Saludos Miguel,

El problema está en que el READ TABLE que tienes dentro del último LOOP lo haces sin condiciones, por lo que entiendo que siempre leerá lo mismo, supongo que la primera línea, o la última, no se cual, pero siempre lee una, por eso no te borra el resto de líneas, debería ser según he mirado el código:

READ TABLE i_pos INTO borra_linea WITH KEY bulto = i_pos_bulto-bulto.

Espero haber sido de ayuda.

Un Saludo,