PDA

Ver la Versión Completa : Descargar Archivo según Variante de Visualización


eljota
21/09/09, 15:59:51
Hola,

Tengo un ALV Grid que maneja variantes de visualización y me gustaría poder bajar la info a un archivo de texto con algun separador ( |, *, - , ... )

Lo que me gustaría es que los campos a descargar sean dinámicos, según la disposición de columnas elegida por el usuario en pantalla (mediante alguna variante creada o movimiento d columnas)

Veo que las funciones standard del toolbar en el ALV para bajar ficheros hace esta seleccion dinámica, pero no me permite decir que use algún separador.

Espero que me ayuden en identificar en el user_command posiblemente qué columnas están actualmente visibles para poder bajar esa info

salu2

Atlas
21/09/09, 16:09:14
Si bajas el listado como html, creo que si te pone separadores

eljota
21/09/09, 16:18:32
Gracias x la sugerencia, pero al bajarlo como HTML no me solicita algún separador para usar... a no ser q haya hecho algo mal.

Lo que necesito es una de dos:

1.- Utilizo de alguna manera la funcionalidad standard para bajar el contenido del alv a un texto usando un separador ( * , - , | , ... )

o

2.- Desarrollar una funcionalidad que haga esta descarga según los campos visibles en el reporte

Si tienen mas ideas, espero respuestas!!

salu2

Atlas
22/09/09, 08:18:03
Perdona, pero no termino de entender lo que necesitas, ¿Es decirle tu el separador o te vale cualquiera? ya que si lo bajas en formato texto sin conversión te pone '|' como separador y si le da a hoja de calculo y seleccionas .txt te pone un tabulador como separador.

eljota
22/09/09, 13:54:16
Bueno, lo que en realidad necesito es bajar la info separado por | pero no como lo presenta la funcion standard del alv ya que pone info extra en la cabecera.

Solo necesito que salga como lista, tal como si usaras el GUI_DOWNLOAD o funciones similares.

El plus que quiero que tenga la funcionalidad es que los campos que se descarguen sean los que actualmente se muestra en pantalla, es decir, luego que el usuario realice cambios en la disposición de los campos. Así que necesito una función que me devuelva la disposición actual (nuevo fieldcat) y con eso armar una lógica de descarga con un GUI_DOWNLOAD de los campos del nuevo fieldcat cuyo NO_OUT sea diferente de X. A no ser que haya funcionalidad que haga este trabajo

Espero ser claro en lo q intento hacer.

Gracias

Atlas
22/09/09, 14:11:48
ok comprendido

una pregunta mas, el alv es por funciones u objetos???

eljota
22/09/09, 14:14:47
El ALV es por funciones así que me gustaría terminar x ahi. Ahora, si ese camino no es el más facil, no tendría inconveniente en crear un ALV OO

gracias,

eljota
23/09/09, 17:32:31
Bueno,

Les comento que conseguí hacer lo que quería, pero tuve que pasar mi ALV a OO

En la funcionalidad del nuevo botón, invoqué el método:

CALL METHOD GRID1->GET_FRONTEND_FIELDCATALOG
IMPORTING
ET_FIELDCATALOG = L_FIELDCATF.

De modo que en L_FIELDCATF tengo la disposición actual de pantalla, es decir, si el usuario modifica en algo las columnas, agrega / elimina, cambia d posición, etc.. se verá detallado en la variable L_FIELDCATF.

Con eso, agrego mi lógica para concatenar los campos de mi reporte con el separador que yo quiera y en el orden q aparece en pantalla. Les dejo ese codigo d referencia:

FIELD-SYMBOLS: <L_LINEDET> LIKE LINE OF IT_REPORTE,
<L_LINEFCA> TYPE LINE OF LVC_T_FCAT,
<L_FIELD> TYPE ANY.

CLEAR IT_REPDESC[].

LOOP AT IT_REPORTE ASSIGNING <L_LINEDET>.
CLEAR LS_DETALLE.
LOOP AT P_FIELDCATF ASSIGNING <L_LINEFCA>
WHERE NO_OUT NE 'X'
AND TECH NE 'X'. "No se descargan las señales (campo técnico)
ASSIGN COMPONENT <L_LINEFCA>-FIELDNAME OF STRUCTURE <L_LINEDET> TO <L_FIELD>.
WRITE <L_FIELD> TO LD_VALORC.
LD_VALORS = LD_VALORC.
CONDENSE LD_VALORS.
IF LS_DETALLE IS INITIAL.
LS_DETALLE-LINEA = LD_VALORS.
ELSE.
CONCATENATE LS_DETALLE-LINEA LD_VALORS INTO LS_DETALLE-LINEA SEPARATED BY LD_SEPARAD.
ENDIF.
ENDLOOP.
APPEND LS_DETALLE TO IT_REPDESC.
ENDLOOP.

Me parece una funcionalidad muy util ya que permite bajar la disposición que quieras y ponerle el saparador deseado.

PD: No se si exista ya una funcionalidad standard q haga esto :confused: , si existe me avisan :)

salu2

Atlas
24/09/09, 09:49:40
Gracias por la aclaración ^_^ y perdona por no haber contestado, estuve durante dos días ( en los ratos libres que me lo permitían ) intentado hacerlo por funciones y no fuí capaz