FoxPro/Visual FoxPro - Ayuda por favor

 
Vista:

Ayuda por favor

Publicado por CgsFox (39 intervenciones) el 07/05/2003 04:09:02
Saludos!
Tengo el siguiente problema:
tengo que imprimir entre un rango desde / hasta, le doy los parametros desde un formulario, el campo desde donde tengo que seleccionar es Caracter, pero al imprimir me imprime saltado y no los correlativos que debiera.
Ejemplo: le digo que imprima desde "000007" hasta "000018" y me imprime el "000007" el "000014" y el "000018", si alguien me puede ayudar por favor, estare eternamente agradecido, el código que utilizo es el siguiente:

Select Existencias
Set order to nro_invent
If ThisForm.CheckCgs1.value = 1
Report Form Tarjexis.frx noconsole to printer prompt
Else
Report Form Tarjexis.frx for nro_invent >= (desdeinv) and nro_invent <= (hastainv) noconsole to printer prompt
Endif

este código esta en el boton imprimir del formulario donde ingreso los parametros.

Claudio González Soto
Valparaíso - Chile
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda por favor

Publicado por Roman Suazo (2723 intervenciones) el 07/05/2003 05:54:10
No se si te entiendo bien o estoy perdido, pero aun asi checa si mi idea es la correcta. Supongamos que tienes una tabla con un campo caracter
pero en ese campos solo guardas valores numericos como 1, 2, 3, etc.
Entonces, tu decides crear un indice para que los registros se miren
ordenamente, los valores de los registros seria 1,2 3, 7, 11.

Asi simple vista cuando activas el indice tu supones que la tabla se
ordenara en este sentido:

1
2
3
7
11

Pero en realida no es asi, ya que tu estas trabajando con un campo
caracter y por lo tanto los numeros ya no son considerado como tales por lo tanto el orden correcto es el siguiente:

1
11
2
3
7

Ves la diferencia, tal vez por eso tu crees que estan saliendo mal rangos
pero en realidad el asunto esta correcto.

Si lo que te acabo de explicar no sirve, entonces haz tu pregunta un poco
mas simple y clara si tal vez te pueda ayudar.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Eso lo tengo Claro, Pero!

Publicado por CgsFox (39 intervenciones) el 07/05/2003 15:43:01
Lo que dice Roman es cierto, y lo tengo claro, el problema es el siguiente, y se produce al Imprimir Tarjetas de existencia de especies en un inventario, las que se imprime una hoja por cada especie, (es como una ficha de la especie), la que posteriormente se archiva.
El campo caracter al que me refiero, no se altera con el indice ya que antepongo o relleno con ceros "000001", "009999", OK!.
en el formulario donde le doy los parametros a imprimir, tengo las variables desdeinv, hastainv, en los controlsource de cada textbox, donde ingreso por decir; desdeinv = 000007 y en hastainv = 000018. me imprime las siguientes tarjetas, la especie nro. 000007, 000014 y la 000018, si le doy imprimir todo, sucede lo mismo, se salta de 5 en 5, o cada 6 o cada 4, pero no tiene un patron fijo. la mejor forma de imprimir las tarjetas es decirle que imprima; desdeinv = 000014, hastainv = 000016, para que me imprima la tarjeta de la especie nro. 000015. pero el usuario tiene que estar pendiente de eso, y la idea es que deje imprimiendo y pueda dedicarse a otra labor en el entretanto.
Ojala ahora me entiendan mejor. Cualquier ayuda o sugerencia se agredece.

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Eso lo tengo Claro, Pero!

Publicado por Roberto (124 intervenciones) el 07/05/2003 17:20:14
Report Form Tarjexis.frx for nro_invent >= (desdeinv) and nro_invent <= (hastainv)

Me imagino que nro_invent, desdeinv y hastainv son de tipo caracter, ahora que representan tipos "numericos". Si es asi prueba esto:

Report Form Tarjexis.frx for VAL(nro_invent) >= VAL(desdeinv) and VAL(nro_invent) <= VAL(hastainv)

Prueba y me cuentas

Un saludo

Desde Concepcion - CHILE

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ya lo habia probado, Igual!

Publicado por CgsFox (39 intervenciones) el 07/05/2003 17:32:38
Eso tambien lo he probado, pero lo hice denuevo, resultado; me imprimió lo antes descrito Tarjeta Nro 000007, 000014 y 000018, en circunstancias qui existen los datos Nros, 000009, 000010, 000011, 000013, 000014, 000015, 000016, 000017 y 000018

Gracias por contestar, pero sigo con el problema

Saludos

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Otras sugerencias...

Publicado por Roman Suazo (2723 intervenciones) el 07/05/2003 17:38:37
A ver si te ayuda esto...

Es posible que el FOR te este dando problemas, es decir, supongamos
que en la tabla esta en el registro tres y que corres el reporte, tu supondrias que el FOR se corre desde el principio pero es posible (
no estoy seguro) que en realidad se corra desde el registro actual,
para resolver esto posiblemente con GO TOP todo este solucionado.

Basicamente los informes se deben ejecutar asi:

-Seleccionas la tabla
-activas el indice indicado
-creas un cursor con los datos que quieres, es decir, a partir de un
SELECT
-seleccionas el cursor
-corres el informe
-borras el cursor

Hice un ejemplo parecido a tu caso y todo funciono bien, con este SELEC hice el cursor:

SELEC * from tabla where campo>=thisform.text.value and ;
campo<=thisform.text2.value into cursor 'X'

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Otras sugerencias...

Publicado por CgsFox (39 intervenciones) el 07/05/2003 17:58:37
La verdad que no me manocon los cursores, nunca los he usado, pero lo puse así.

Select Historia
Set Order to nro_invent
Go Top
SELEC * from Historia where nro_invent>=thisform.Campocgs1.value and ;
Nro_invent<=thisform.campocgs2.value into cursor prueba

Select prueba

If ThisForm.CheckCgs1.Value = 1
Report Form Tarjhist.frx noconsole to printer prompt
Else
report form tarjhist.frx for Val(nro_invent) >= Val(desdeinv) and Val(nro_invent) <= Val(hastainv) noconsole to printer prompt
Endif

Asi resultó lo mismo, si no está bien me dices por favor.

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Sigamos Sugeriendo

Publicado por Roberto (124 intervenciones) el 07/05/2003 18:04:02
Select Historia
Set Order to nro_invent
Go Top
SET FILTER TO Val(nro_invent) >= Val(desdeinv) and Val(nro_invent) <= Val(hastainv)
Go Top
report form tarjhist.frx

me imagino que dentro de tu reporte no tienes ninguna tabla o es asi

Saludos nuevamente desde CONCEPCION -CHILE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Sigamos Sugeriendo

Publicado por CgsFox (39 intervenciones) el 07/05/2003 18:15:42
Gracias Compatriota!

La verdad es que sí, en todos los reportes que hago incluyo las vistas o tablas necesarias, Eso implica algo?.
Al parecer sí, ya que hice lo que me sugeristes, pero el filtro no tomó, por lo que me tiro a imprimir todo el archivo, menos mal que primero lo tiro a imprimir a PDF.

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Ok....Una vez mas

Publicado por Roberto (124 intervenciones) el 07/05/2003 18:32:29
Entonces:

Ahora sigamos intentando dentro de tu entorno de datos del Informe selecciona la tabla principal y luegos vas a las propiedades de esta y elige Filter y digita Val(nro_invent) >= Val(desdeinv) and Val(nro_invent) <= Val(hastainv)

si te da error las variables desdeinv y hastainv colocalas como PUBLIC, me imagino que tu tabla principal es la que contiene los correlativos que vas a seleccionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Sigo molestando.

Publicado por CgsFox (39 intervenciones) el 07/05/2003 18:52:11
Sigo molestando, es que la verdad que me parece extraña esta situación, cosas que son logicas, no se pueden efectuar, No entiendo!
Hice lo que me dijistes, puse el filtro en el entorno de datos propiedades de la tabla Historia, funciona el filtro, ya que en el boton de imprimir solo puse el comando para imprimir el report, osea "Report Form Tarjhist.frx noconsole to printer prompt".
Le di otros parametros, los cuales verifique si existian los datos, dentro del parametro que menciono existenm todos los datos, son los siguientes "000060 al 000070", me imprimio solo el 000060 y el 000065, ya no se que hacer.

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: mmmmmm Extraño!

Publicado por Roberto (124 intervenciones) el 07/05/2003 19:07:13
Verifiquemos:

Sin imprimir......Selecciona la tabla Historia (Examinar), en la ventana de comando haz el SET FILTER TO Val(nro_invent) >= Val("000060") and Val(nro_invent) <= Val("000070")
Go Top
a) Examina ¿Estan todos los datos?
luego activa el index, Set Index to tag nro_invent
Go Top
b) Examina ¿Estan todos los datos?
si en a) se ven todos los datos estamos Ok cierto
si en b) no se ven quiere decir que el index hay que reindexarlo

Ahora si te interesa...me envias la tabla Historias con el reporte o las tablas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Algo pasa con los indice

Publicado por CgsFox (39 intervenciones) el 07/05/2003 19:38:07
Algo pasa, por aqui parece,
Hice lo que me dijistes, pero al poner, Set Index to tag nro_invent,
Me sale un mensaje, "El archivo no existe, "c:\Aplicaciones ServPC\Tablas\Nro_invent.ndx" no existe.
Los indices los creo dentro del asistente para tablas como normal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Para Roberto

Publicado por CgsFox (39 intervenciones) el 07/05/2003 19:44:09
Roberto, Yo uso Indices CDX
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Otras sugerencias...

Publicado por Roman Suazo (2723 intervenciones) el 07/05/2003 19:29:49
Creo que no entiendes lo que trato de decir, el punto es que el cursor es
la fuente de informacion para tu reporte, ya las tablas no son utiles. Ademas seguiste usando el FOR cuando ya habias filtrado la informacion con el SELEC. Esto lo que debes hacer: quitas las tablas
del dataenvironment del informe, cerciorate que los campo en el informe
tienen de fuente los campos del cursor y no las tablas. En la forma
en el boton del reporte creas el cursor con los registro filtrados, y despues ejecutas tu informe sin el FOR.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Roman

Publicado por CgsFox (39 intervenciones) el 07/05/2003 19:42:10
Gracias por ayudarme, pero la verdades que no entiendo esa parte de los cursores, sin usar las tablas, cuando yo creo el reporte en el entorno de datos se crean los cursores, que hago con ellos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Roman

Publicado por Roman Suazo (2723 intervenciones) el 08/05/2003 03:08:13
Haz esto:

En tu informe quita todas las tablas del dataenvironment, y en los campos del informe quita todos los alias, es decir, en la expresion
de los campos tienes algo como esto Alias.campo, bueno, quita el
alias y que solo quede el nombre del campo.

Ya en el boton del formulario

-selecciona la tabla donde esta la informacion
-activas el indice
-haces el selec como te dije, generando un cursor.

* un cursor es basicamente un tabla temporal en la cual por omision los
datos solo son de lectura.

-seleccionas el cursor
-imprimes el report sin los FORs
-borras o cierras el cursor.

Obviamente los campos del cursor y las tablas son los mismos por
eso el informe te mostrara los datos del cursor sin importar el nombre
de este.
Con esto por lo menos se debe imprimir el reporte, aunque no se si
se arregla tu problema.

Ah! por cierto, haz esto en un backup del informe.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Roman

Publicado por CgsFox (39 intervenciones) el 08/05/2003 03:54:24
Hice lo que me recomendaste, saque la tablas del Entorno de Datos y le quite los alias a los campos, puse este código en el boton de imprimir:

If ThisForm.Check1.Value = 1
Report Form Tarjhist.frx noconsole to printer prompt
Else
Select *From Historia Where Val(Nro_invent) >= Val(DesdeInv) and Val(Nro_Invent) <= Val(HastaInv) Into Cursor Tarjeta Order By Nro_invent asc
Select Tarjeta
Go Top
report form tarjhist.frx noconsole to printer prompt
Endif

Sabes Imprime solo 3 registros, el unico cambio fue, que imprimio en forma descendente, osea el "000017" se salto el "0000165", e imprimio el "000015" y el "000014". que te parece el problemita?

Por otra parte gracias, hoy aprendi un poco mas, aprendi lo que era un cursor, y trataré de darle algunos otros usos, cuando sea necesario.
Mil gracias.
Seguire buscando la solucion, si tienes otra idea, me la cuentas.

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Roman

Publicado por Roman Suazo (2723 intervenciones) el 08/05/2003 06:18:11
Mira, haz lo que se te sugerio anteriomente, es decir, checa que el cursor
se este filtrando correctamente, eso para determinar si el problema esta
en el filtro o algo en el informe. PAra que mires el cursor sin necesidad
del informe haz esto

SEELC bla, bla, bla, bla into cursor 'x'
BROWSE

Te va salir un mensaje , no le pares bola, asi veras el cursor (en una ventana examinar).
Otro detalle, yo te habia contado que yo habia hecho un mini simulacro
de tu app, y que todo habia salido bien, lo hice sin VAL(), quitale esa
funcion a tu selec, ya creo que no te sirve sino que hace puede hacer que la creacion del cursor se mas lenta.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Roman

Publicado por CgsFox (39 intervenciones) el 08/05/2003 16:35:16
Hola Roman!
Lo que dices ya lo hice, lo del Browse, lo de sacar el Val, también:
Lo del Browse, me muestra los datos correctos, ósea, 10 registros, pero el report sigue con 3 a imprimir.

Por otra parte me complica, el trabajar con cursor, ya que necesito 3 tablas más, y no se como relacionarlas


Gracias amigo

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Disculpa

Publicado por Roberto (124 intervenciones) el 07/05/2003 21:00:33

No era Set Index to tag nro_invent sino Set Order To Tag nro_invent

haz la verificacion que te dije anteriormente y me cuentas

Please

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Con el permiso de ustedes

Publicado por Oscar (32 intervenciones) el 08/05/2003 00:18:04
Este problema lo experimente yo hace algun tiempo, y los resolvi de la siguiente manera:

a - Asignale a variables los datos de los filtros, de manera que puedas arrastrar esos valores al reporte
b- En el enviroment coloca la tabla o tablas requeridas
c- en el evento init del reporte a traves de select Sql crea un cursor con los valores que desas mostrar en el reporte
Ejemplo
Select * from xxxx into cursor nombredecursor where campo1 > varable

Esto funciona perfectamente, ademas que es muy sencillo.

Si lo desea te puedo enviar un ejemplo a tu correo.

P.D. Set filter, set Delete no tienen efecto sibre selec SQL

Sauldos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Oscar

Publicado por CgsFox (39 intervenciones) el 08/05/2003 02:19:26
Oscar, sabes hice lo del select * from, y al pulsar el boton para imprimir, sale encima del formulario de parametros lo siguiente: "10 registros seleccionados en 0,00 segundos", lo que seria correcto según los parametros dados, pero igual me imprime 2 registros.
Puse lo siguiente en el Init del dataenvironment:: "Select * from historia into cursor Prueba where nro_invent >= Trim(desdeinv) and nro_invent <= Trim(hastainv)

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda por favor

Publicado por Taikos (188 intervenciones) el 08/05/2003 08:00:20
A ver, no he revisado las otras respuestas, pero espero que si sigue la falla te sirva mi respuesta:

En la propiedad format del objeto en el form que controla el límite inferior del rango de impresión coloca: R y en la propiedad inputmask coloca por ejemplo 999. Lo anterior lo vas a hacer también para el objeto en el form que controla el límite superior del rango de impresión.

Vamos a asumir que el objeto en el form para el límite superior se llamará: desde y que el objeto para el límite superior se llamará hasta.

Hasta ahí estamos bien.

Ahora según veo tu comparas los valores introducidos en el form con los encontrados en una tabla. Entonces tu problema puede radicar en que cuando cargas dichos valores en la tabla no los estás almacenando tomando en cuenta el último valor que ya estaba registrado, es decir, que si el último valor era: 350, entonces el siguiente valor será 350 +1 y ese será el dato que deberás registrar en la tabla pero como veo que almacenas como caracter pues haces la suma anteriormente mostrada y luego la llevas a caracter y la guardas, pero primero debes tomar el último registro y llevar el valor a numero para poder hacer la suma. Eso es una idea del por qué de la falla, la falla puede llegar a solucionarse con solo lo que te indico abajo.

Fin primera parte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

II parte de la respuesta

Publicado por Taikos (188 intervenciones) el 08/05/2003 08:01:53
Cuando vayas a hacer la comparación para extraer los registros pues usa lo siguiente:

Report Form Tarjexis for desde <= VAL(dato_en_tabla) and ;
VAL(dato_en_tabla) <= hasta noconsole to printer prompt

Convierto a numérico el dato en la tabla para evitar molestias de tener que reprogramar el código donde guardas o manipulas dicho dato de la tabla.

Espero haberte ayudado amigo

TAIKOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Para Taikos

Publicado por CgsFox (39 intervenciones) el 08/05/2003 17:07:54
Gracia amigo por responder!

Lo que tu dices, es correcto, yo ingreso numeros correlativos, en caracteres, anteponiendo ceros, hasta completar 6. para que no se confundan los ordenes de numeración.

Prové lo que me dijistes, pero el problema persiste.
Es mas el Problema no es como estemos manejando las variables o los campos, ni tampoco es problema de los cursores, he descubierto que al parecer es del Report, ya que si le doy la opción de imprimir todo, sin parametros, me imprime 1299 registros en circuntancias que son 6078, los que debiera listar, saltandose, por ejemplo: del 7, al 14, 21, 28, 33 y 44, no siguiendo ningún patron en comun, como puedes darte cuenta. Entonces què?

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda por favor (Gracias a todos)

Publicado por CgsFox (39 intervenciones) el 08/05/2003 17:12:04
Gracias amigos por responder!

Prové todo lo que me han recomemdado, pero el problema persiste.
Es mas el Problema no es como estemos manejando las variables o los campos, ni tampoco es problema de los cursores, he descubierto que al parecer es del Report, ya que si le doy la opción de imprimir todo, sin parametros, me imprime 1299 registros en circuntancias que son 6078, los que debiera listar, saltandose, por ejemplo: del 7, al 14, 21, 28, 33 y 44, no siguiendo ningún patron en comun, como pueden darse cuenta. Entonces què?

Quien podrá responder este problema, ya que creo que no es problema nuestro? (De los que programamos en VFP).

Claudio González Soto
Valparaíso - Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar