Ordenar datos en un reporte

Bien, aquí estoy de vuelta con otra inquietud y quisiera pedirte una ayudita en esto:
Existe un reporte que esta amarrado a una tabla y cuando se ejecuta me muestra los registros de los campos código, nit y nombre (hasta aquí funciona bien). Me gustaría que el reporte se mostrara ordenado por el campo "codigo" (que esta definido como campo clave y tipo carácter).
Por ejemplo, el campo código tiene estos registros : 1,2,3,10,20,21...
En el reporte los esta mostrando así : 1,10,2,20,21,3...
El reporte debería ordenarlos de esta manera: 1,2,3,10,20,21...
Necesito que conserve el tipo de campo "caracter".
Respuesta
1
Si la tabla se abre desde el entorno de datos del formulario debes acceder al entorno de datos y hacer click derecho sobre la tabla, selecciona propiedades y busca la propiedad order y selecciona el índice por el cual deseas ordenar la tabla.
Si la tabla no se abre desde el entorno de datos del formulario, o no deseas ordenarla antes del reporte debes incluir la siguiente línea antes del comando report form...
select mitabla
set order to codigo asc
Gracias por su interés de ayudarme.
Indudablemente estas soluciones funcionarían si el campo es de tipo numérico o carácter (que contenga unicamente letras).
El problema que tengo es que existe un campo código de tipo carácter donde se almacenan números (no quiero convertirlo a tipo numérico porque no requiero hacer cálculos matemáticos), por eso te explicaba con un ejemplo la siguiente situación : si se han ingresado 10 registros : 1,2,11,18,3,20,4,5,31,32... y si trato de ordenarlos como me explicaste anteriormente, el vfp "trata de organizarlos", pero obviamente no lo hace bien porque como son de tipo carácter, al final quedan "organizados" de esta forma: 1,11,18,2,20,3,31,32,4,5...
Y debería quedar así : 1,2,3,4,5,11,18,20,31,32, etc.
Aunque este comentario no tiene nada que ver con la pregunta te informo que algo similar se me presento cuando trataba de rellenar un control list con el código, nit y nombre, organizada por código, y la solución fue construir una instrucción select de sql y anteponerle al campo código esto : padl(alltrim(código), 2,'0')... etc.
Con esta instrucción lo que hacia era agregarle un "0" a la izquierda a cada registro quedando así: 01,02,03,04,05,11,18,20,31,32... etc (lo importante es que me lo organizaba ascendentemente).
Desafortunadamente como no tengo mucha experiencia en el vfp, no se si es posible construir una especie de consulta o cursor ordenada ascendemente por código (usando padl) y pasar esta información directamente al report... o de que otra forma se podría hacer.
Mil gracias
Te pido disculpas !
No advertí el detalle de que el campo es de tipo carácter.
La solución es muy simple:
1) Modifica la estructura de la tabla.
2) Ve directamente a la Pestaña Indices.
3) Crea un índice nuevo "adicional" para el campo: En el nombre ponle por ejemplo numcodi, tipo normal, en donde dice expresión haz click sobre el botón ... y escribe val(nombre_del_campo), luego le das click a aceptar y listo.
4) Luego abre la tabla desde la ventana de comandos:
Use mitabla in 0
5) Finalmente ordena la tabla por el nuevo índice:
Set order to numcodi
Listo.
Te reitero mis disculpas por la respuesta anterior.
Gracias por responder.
El ejemplo funciona bien para organizar los datos de la tabla y mediante la orden browse se puede apreciar que se ordena el código...
Sin embargo cuando trato de generar el reporte me lo sigue mostrando en desorden, la orden que le doy para el reporte es esta:
Use tabla
set order to num_codigo (el nuevo campo indice)
report form i_informe.frx for codigo=" " preview in screen (para que me muestre todos los codigos en el reporte)
El resultado es un reporte que muestra código, nit y nombre en forma desordenada...
Como se podría solucionar este problemita.?
Gracias
Es extraño que no se ordenen los datos !
Verifica que la tabla en cuestión no sea abierta por entorno de datos del formulario o por el entorno de datos del reporte.
Es probable que la tabla se abra automáticamente desde el formulario o desde el entorno de datos del reporte y que no tenga un orden establecido.
Es lo único que se me ocurre que puede estar sucediendo.
Por favor mantenme al tanto de los resultados.
Que pena molestar tanto, pero lo he intentado y nada que funciona.
Usted me podría enviar un ejemplo de un caso parecido, es decir una tabla con tres campos: código (c), nit(c), nombre (c); el campo código que tenga estos datos : 1,11,3,4,35,41 y que al generar un reporte se pueda observar que se ordene por código, es decir que salga así: 1,3,4,11,35,41.
De esta forma podría aprender más fácilmente la técnica que me estas explicando. Mi correo es [email protected].
Mil gracias.
No es molestia. Al contrario, me apena no haber sido útil hasta aquí.
Para enviarte un ejemplo debería crear un proyecto, una base de datos y un reporte, todo esto para poder generar un índice estructural como el que tu creaste ayer. Te propongo que realicemos la última prueba y si no funciona te desarrollo el ejemplo que me pides.
Por favor sigue los siguientes pasos:
1) Modifica tu reporte y asegúrate que el entorno de datos no tenga ninguna tabla.
2) En la ventana de comandos escribe las siguientes instrucciones:
use tabla in 0 && tabla= el nombre de tu tabla
select tabla
set order to num_codigo && (nuevo índice)
brow && verifica si los registros están ordenados como tú deseas.
report form mireporte preview in screen
***
No hay razón para que no funcione ! Yo lo he probado con una tabla de mi base de datos y funciona perfectamente.
Si al realizar esta prueba obtienes los resultados deseados, avísame porque el problema puede estar en el programa o formulario que llama al reporte.
Aguardo tus comentarios.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas