PDA

Ver la Versión Completa : Like a QRGroup pero sin serlo....


Cabanyaler
22-07-2003, 12:54:58
Hola compañeros, antes de nada excusarme, pero aún no he tenido tiempo de responder un par de hilos abiertos por mi en relación a la transacción en SQl, pero lo haré.

Bueno, el problema que me lleva algún día ya de cabeza es relacionado con la impresión de un conjunto de informes, me explico.

Quiero imprimir un número determinado de informes, viniendo ese número marcado por el número de tuplas de una tabla, es decir, imprimir un informe diferente por cada tupla de una tabla.

Actualmente lo hago según indico con el siguiente fragmento de código, pero al segundo intento de imprimir el segundo report al volver del "Preview", ya no se me ejecuta el storeprocedure correctamente y parece como que no cambia de tupla en la tabla.

He cambiado el : FQRListForm.QRListado.Preview;
por un showmessage(DM.ADOQ_TecnicoNombre.Value);
y avanzo correctamente de tupla,por lo que hay algo que hace el QReport que no veo y parece como que me vuelve al principio de la tabla.

Sé que podría de modo alternativo, cambiar la consulta y hacer en el QReport mediate un TQRGroup el mismo fin, pero prefiero en este caso hacerlo así, porque el usuario puede elegir porque inpresorá de la red emitir cada uno de los informes.


Código

// Imprime todos los tecnicos con todas sus obra , técnico por técnico
procedure TFPrincipal.TodoslostecnicosClick(Sender: TObject);
begin
// Recorro secuencialmente todos los tecnicos los imprimo tecnico por tecnico hasta el último
DM.ADOQ_Tecnico.First;
while Not(DM.ADOQ_Tecnico.Eof) do
begin
// ****
// Ejecuto la consulta con el nuevo parametro del tecnico
DM.ADOSP_Rel_CabLin.Close;
DM.ADOSP_Rel_CabLin.Parameters[1].Value := DM.ADOQ_TecnicoCodigo_Tec.Value;
DM.ADOSP_Rel_CabLin.ExecProc;
DM.ADOSP_Rel_CabLin.Open; // *** Llamada a la ejecucion del SP
// ****
// Asigno valores a etiquetas del listado
FQRListForm.QRLabTecnico.caption := DM.ADOQ_TecnicoNombre.Value;
// Previsualizo el informe
FQRListForm.QRListado.Preview;
// Avanzo al siguiente tecnico
DMCierre.ADOQ_Tecnico.Next;
end;
end;


Nota:
El DataSource del QReport está asociado al del ADOSP_Rel_CabLin.

¿Alguien sabría decirme lo que puede hacer el QReport al cerrarse y volverse a abrir y que yo no veo?

marcoszorrilla
22-07-2003, 16:07:20
Por qué no pruebas a poner el DataSet del Qr a nulo y reasignarlo después de hacer cada consulta.

Un Saludo.

Cabanyaler
23-07-2003, 09:16:09
:( , pues tampoco.
Lo he cambiado asignandole nulo, tanto al Dataset del QReport como a cada uno de los campos justo antes y justo después de realizar de nuevo cada consulta, y no ha dado resultado.


FListForm.QRListado.DataSet:= NIL;
FListForm.QRListado.DataSet:= DM.ADOSP_Rel_CabLin;
FListForm.QRDBTxtNumObra.DataSet := NIL;
FListForm.QRDBTxtNumObra.DataField := '';
FListForm.QRDBTxtNumObra.DataSet := DM.ADOSP_Rel_CabLin; FListForm.QRDBTxtNumObra.DataField := 'DM.ADOSP_Rel_CabLinNum_OPROD';


No obstante gracias y si alguien sabe algo....

MANU1102
24-07-2003, 11:39:02
EN EL REPORT SE VA AL PRIMER REGISTRO DEL DATASET AL ABRIR.
NO HAGAS UN NEXT, GUARDA EL REGISTRO POR EL QUE VAS EN UNA VARIABLE Y DESPUES DEL REPORT HAZ UN GOTO(VARIABLE)
PRUEBA.

Cabanyaler
24-07-2003, 13:51:57
:D Efectivamente, era por el posicionamiento en la primera tupla cada vez quese abría. Con un GetBookmark y su complementario GotoBookmark, se ha solucionado.

Otra cosa ha sido averiguar que el preview no refresca en la banda de datalle los valores a imprimir, por lo que he tenido que realizar directamente un print.

En fin, me doy por satisfecho con esta solución, aunque no pueda seleccionar diferentes impresoras para diferentes print a partir del preview.

Gracias a todos.