Informe vfp 6

Respuesta de
a
Usuario
Hola a todos.

Bueno, mi problema es el siguiente. Tengo más de mil registros en una tabla. En un formulario mustros dichos registros, pero lo que necesito es que cuando encuentre el registro que necesito, pinche un botón y me muestre el informe de solo ese registro. ¿Cómo lo hago?.


Lo otro, es posible crear un informe con datos sacados de un formulario, es decir, en el formulario, relleno los cuadros de texto, ¿luego pinche un botón y muestre en un informe lo que se escribió en el formulario?. ¿Cómo lo hago?.

Ojala puedan ayudar. Es urgente.

Chau!
Avatar
Experto
Para la solución de ambos casos es necesario que mandes el registro que quieres mostrar a una tabla temporal y de ahí mandes el reporte, ya que para que el reporteador funcione es necesario que tenga por lo menos un registro.
Usuario
Hola, nuevamente.

Como hago eso que me indicas.
Avatar
Experto
Lo puedes hacer por medio de "cursores", que se realizan con la instrucción SELECT:

SELECT * from <tabla>;
WHERE <condicion>;
INTO CURSOR _NombreCursor

SELECT _nOMBREcURSOR
report form <REporte> PREVIEW
Avatar
Experto
1. Necesitas crear un cursor, para tomar solo el registro actual, sin cerrar el fuente para poder conocer total de registros, puedes usar la Sig. rutinita:

LOCAL nPos,nTotalRegistros
SELECT ORIGEN
nPos = RECNO()
nTotalREgistros = RECCOUNT()
SELECT * FROM ORIGEN;
WHERE recno() = nPos;
into cursor _Actual

SELECT _ACTUAL
*MUESTRAS TODO LO QUE TENGAS QUE MOSTRAR

? 'reg. actual: '+TRANS(nPos)
? 'Total reg: '+TRANS(nTotalRegistros)

USE IN ('_ACTUAL')

Como verás, el cursor solo te servirá para sacar los datosdel registro que quieres, el cual también te puede servir para algún informe (por su puesto, antes de cerrarlo).:

Select _Actual
REPORT FORM repo TO PRINTER PROMPT

Ó SI LO VAS A PREVIZUALIZAR:

REPORT FORM repo PREVIEW

¿2.? (Necesito una aplicación de la duda, di puedes con ejemplos gráficos)



No te preocupes, no es ninguna molestia el contestar las dudas que me envían, al contrario, es como un alimento para mi ego y un buen pasatiempo para mi, pues no tengo otro que me guste más, aunque no lo creas, prefiero contestar las dudas que me envían que estar chateando...
Siempre que pueda, contestaré las dudas que tengas...

Suerte!
Usuario
Hola, yo nuevamento acudiendo a tu buena voluntad.

Lo que necesito es que en un informe me aparezca un valor que se vaya incrementando en uno (o sea como un numero de boleta o factura).

Por ejemplo: busco a un cliente, luego muestro el informe en en una quina me aparezca el valor 000501 e imprimo.

Luego busco otro cliente y ahora me debería aparecer 000502 y así sucesivamente.

Espero que me entiendas y me puedas ayudar.

Chau!
Avatar
Experto
Lo que podrías hacer es usar una tabla de id's en donde lo acuatilices cada vez que lo requieras:

Te propongo lo siguiente:

-haz una tabla con la sig. estructura:

LLAVE c(15)
ULTIMOVAL N(6)

-Luego haces un rutinita que tenga lo siguiente:
Parameters cLlave
cLlave = upper(allt(cLlave))
Local nDevuelve,cAlias
nDevuelve = 0
cAlias = Alias()

if !Used('contador')
Use Contador in 0 shared
endif

Select contador
Locate for allt(Llave) == cLlave
if !Found()
Append blank
Replace LLave with cLlave
endif
replace contador.UltimoVal with Contador.UltimoVal + 1
Store contador.UltimoVal to nDevuelve

use in ('contador')
If !EMPTY(cAlias)
Select &cAlias
endif

Return nDevuelve

********


Esta rutinita la llamaras cada vez que hagas la búsqueda:


LOCAL nId
.
.
.
nId = GeneraID('BUSQUEDA')
.
.
.
* En 'nID' se almacenará el valor y vcada vez que lo llames se incrementará de 1 en 1. De hecho puedes usarlo para generar mas id's con solo poner en el parametro la cadena que requieras...



Espero que te sirva.
Usuario
Hola, estuve revisando la solución que me envías para obtener un numero que se incrementa automáticamente y tengo lassiguiente dudas:

1.- Cuando dices, haces una rutinita o rutina, te refieres a un ¿código o prg?

2.- Al final me dices que llame a la rutina cada vez que haga la búsqueda, pero ¿qué nombre tiene la rutina y como se llama?

3.- Que significa, GeneraID('BUSQUEDA')

Te ruego que me ayudes una vez más y no te molesto más, te lo suplico es urgente.

Chau!
Avatar
Experto
1. Si una "rutinita" es un prg.

2. La rutina, se yo le llamo GeneraID

3. Significa que estas llamando a la rutina creada con el parámetro "BUSQUEDA", ya que la rutina te servirá también para poder hacer contadores con diferentes llaves, es decir que si le pones:
GeneraID('CLIENTE')
Cada vez que lo llames, la llave CLIENTE se irá incrementanado.
Usuario
Como hago para mostrar este valor en el informe.

Chau!
Usuario
Mira, ya logre hacer que el contador se muestre en un control campo del informe.

Ahora, lo ultimo que me gustaría saber es como darle un formato a ese numero.

Mira, el numero se muestra así 1, luego 2 y así sucesivamente.

Yo necesito darle un formato para que aparezca así : 0001, 0002, 0003,... etc.

Espero puedas ayudarme.
Chau!
Avatar
Experto
Puedes usar la función de relleno de espacios, se llama PADL con la sig sintaxis:
PADL(a,b,c)

a = numero
b = ancho a respetar
c = caracter de relleno


la puedes usar así:

LOCAL nClave,cClave
nClave = 0
nClave = GENERAID('MILLAVE')
cClave = PADL(nClave,5,'0')

*si nClave = 5
* ---> cClave = '00005'

*como podras observar, la funcion te devolvera un valor de tipo cadena, el cual puedes mostrar en tu informe sin ningun problema...
Usuario
Te agradezco un millón el haberme ayudado. He aprendido mucho. Espero poder contar contigo para una próxima oportunidad.
Chau!