PDA

Ver la Versión Completa : Contar checkbox marcados en ALV


victor94
04/04/16, 18:27:53
Buenas tardes , soy un usuario nuevo tanto en programación de ABAP como en el foro , nunca había posteado ya que siempre encuentro lo q necesito pero esta ves no lo eh encontrado trata de lo siguiente.

Tengo un ALV que tiene una columna de checkbox y al presionar un botón quiero saber cuantos de ellos estan marcados , gracias espero su respuesta.

PD: aprovechando el post y para no publicar otra vez tengo otra duda lo que pasa es que al darle click a otro boton necesito que abra un buscador de carpetas que al seleccionar se guarde ahi mi alv pero en formato txt con un nombre predeterminado.

Jesicka_21
05/04/16, 20:28:34
Buenas tardes Victor94.

Podrías pasar los registros de la tabla, a una tabla interna auxiliar, ordenar por el campo checkbox y realizar un delete a la tabla validando que los registros sean distintos a 'X'.

Luego con la sentencia DESCRIBE TABLE obtenés la cantidad de registros que tiene la tabla.

Quedaría algo así:

it_tabla_auxiliar[] = it_tabla_alv[].

SORT it_tabla_auxiliar
BY checkbox.

DELETE it_tabla_auxiliar
WHERE checkbox NE 'X'.

IF it_tabla_auxiliar[] IS NOT INITIAL.

DESCRIBE TABLE it_tabla_auxiliar
LINES lv_lineas.

ENDIF.


LV_LINEAS tendría la cantidad de registros del ALV con el checkbox activo.

victor94
06/04/16, 05:47:16
Gracias Jesicka_21 funciono a la perfección.

Jesicka_21
06/04/16, 15:44:11
Con respecto a este tema, lo que se me ocurriría es que al momento de seleccionar el botón, realices lo siguiente.

Llamar al siguiente método:

CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Seleccionar carpeta'
initial_folder = 'C:\Users\'
CHANGING
selected_folder = gv_directorio
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3.

Te va a mostrar el directorio desde la ubicación que le pasaste en INITIAL_FOLDER.
Cuando selecciones la carpeta, vas a tener que realizar un concatenate con el nombre predeterminado que vas a usar de la siguiente forma:

IF gv_directorio IS NOT INITIAL.

CONCATENATE gv_directorio
'\'
gv_nombre_predeterminado
'.txt'
INTO gv_directorio.

ENDIF.

Luego llamar a la función GUI_DOWNLOAD de la siguiente manera:

IF gv_directorio IS NOT INITIAL.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = gv_directorio
TABLES
data_tab = gt_tabla
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.

ENDIF.


El código entonces te quedaría de la siguiente manera:

DATA: gv_directorio TYPE string.

CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Seleccionar carpeta'
initial_folder = 'C:\Users\'
CHANGING
selected_folder = gv_directorio
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3.

IF gv_directorio IS NOT INITIAL.

CONCATENATE gv_directorio
'\'
gv_nombre_predeterminado
'.txt'
INTO gv_directorio.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = gv_directorio
TABLES
data_tab = gt_tabla
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.

IF sy-subrc IS NOT INITIAL.

MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1
sy-msgv2
sy-msgv3
sy-msgv4.

ENDIF.

ENDIF.

Espero que te sirva, sino cualquier cosa avisame y lo vemos. :)

victor94
06/04/16, 19:38:46
Gracias , justo lo termine hace unas horas hice algo similar a lo que comentas dejo aquí mi solución.
Gracias por su ayuda.

SELECT lifnr name1 land1 ort01 ort02 adrnr
FROM lfa1
INTO TABLE gt_data.
DATA: p_path_file TYPE string.
DATA : lv_lineas TYPE i,
ms TYPE string,
num TYPE string.
CLEAR lv_lineas.
DESCRIBE TABLE gt_data
LINES lv_lineas.
num = lv_lineas.
CONCATENATE 'Lista_Proveedores' num INTO ms.
DATA: gd_path TYPE string.

CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'File Directory'
initial_folder = 'C:'
CHANGING
selected_folder = gd_path.

CALL METHOD cl_gui_cfw=>flush.

CONCATENATE gd_path '\' ms '.TXT' INTO mc_file.
p_path_file = mc_file.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_path_file
write_field_separator = ','
TABLES
data_tab = gt_data.