Ir al contenido


Foto

"Cast" basado en un arreglo.


  • Por favor identifícate para responder
10 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 07 agosto 2013 - 01:32

Buen día/tarde/noche según aplique, jóvenes.

A ver si ustedes ven el problema donde yo no lo encuentro. Tengo el siguiente código:


delphi
  1. procedure TformReporteadorV2.ImprimeExportaSIS;
  2. var
  3.   ElReporte : TqckrprtPadre;
  4.   wsNombreArchivo : WideString;
  5.   iIndiceI: Integer;
  6.   aReportes: array of TqckrprtPadre;
  7. begin
  8.   SetLength(aReportes,6);
  9.   aReportes[00] := TqrpSIS_SS_PSQ_001;
  10.   aReportes[01] := TqrpSIS_SS_PSQ_012;
  11.   aReportes[02] := TqrpSIS_SS_PSQ_128;
  12.   aReportes[03] := TqrpSIS_SS_PSQ_129;
  13.   aReportes[04] := TqrpSIS_SS_PSQ_130;
  14.   aReportes[05] := TqrpSIS_SS_PSQ_131;
  15.   for iIndiceI := 0 to Length(aReportes) do
  16.   try
  17.       ElReporte := (aReportes[iIndiceI] as TqckrprtPadre).Create(Self);
  18.       MessageDlg('Reporte '+ElReporte.Name+' creado y funcionando.', mtInformation, [mbOK], 0);
  19.   finally
  20.       ElReporte := nil;
  21.   end;
  22. end;



en el cual intento tomar el reporte que corresponda de acuerdo a un índice que apunta a un elemento de un arreglo, pero aparentemente estoy haciendo algo que no debo por que me manda éste error:

[Error] uformReporteadorV2.pas(5364): Incompatible types: 'TqckrprtPadre' and 'Class reference'

Agradeciendo de antemano. ¿Alguna idea que puedan darme para solucionar ésto?
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 07 agosto 2013 - 02:33

¿Dónde declaras el bloque?

TqrpSIS_SS_PSQ_001;
TqrpSIS_SS_PSQ_012;
          ..
TqrpSIS_SS_PSQ_131

  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 agosto 2013 - 02:43

Y esto sucede cuando asignas el arreglo o cuando creas el reporte ?

saludos
  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 07 agosto 2013 - 02:43

¿Dónde declaras el bloque?

TqrpSIS_SS_PSQ_001;
TqrpSIS_SS_PSQ_012;
          ..
TqrpSIS_SS_PSQ_131

Esteeeeeee, ¿a qué te refieres exactamente? Digo, en éste caso es solamente en calidad de prueba, pero la idea es que a partir del elemento del arreglo se dispare la funcionalidad del reporte...
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 07 agosto 2013 - 03:30

Saludos.

No se si esta solución en particular aplica para tu caso, pero es una alternativa.

Pudieras declarar un Class References de TqckrprtPadre, asumo que es un componente de QuickReport , registras tus clases hijos y puedes realizar la creación de los objetos por el nombre.

Con un ejemplo puedes entender mejor:

Declaramos la meta clase;


delphi
  1. Unit TuUnidadReport
  2.   TqckrprtPadre = class(TQuickReport)
  3.   end;
  4.  
  5.   TqckrprtPadreClass = class of TqckrprtPadre;



Declaramos el método para registrar tus clases:


delphi
  1. procedure TformReporteadorV2.RegisterReports;
  2. begin
  3.   RegisterClass('TqrpSIS_SS_PSQ_001');
  4.   RegisterClass('TqrpSIS_SS_PSQ_012');
  5.   RegisterClass('TqrpSIS_SS_PSQ_128');
  6.   RegisterClass('TqrpSIS_SS_PSQ_129');
  7.   RegisterClass('TqrpSIS_SS_PSQ_130');
  8.   RegisterClass('TqrpSIS_SS_PSQ_131');
  9. end;



Declaramos el método para eliminar el registro tus clases:


delphi
  1. procedure TformReporteadorV2.UnRegisterReports;
  2. begin
  3.   UnRegisterClass('TqrpSIS_SS_PSQ_001');
  4.   UnRegisterClass('TqrpSIS_SS_PSQ_012');
  5.   UnRegisterClass('TqrpSIS_SS_PSQ_128');
  6.   UnRegisterClass('TqrpSIS_SS_PSQ_129');
  7.   UnRegisterClass('TqrpSIS_SS_PSQ_130');
  8.   UnRegisterClass('TqrpSIS_SS_PSQ_131');
  9. end;



Registramos/eliminamos las clases.


delphi
  1. procedure TformReporteadorV2.Create(Sender: TObject)
  2. begin
  3.   RegisterReports; 
  4. end;
  5.  
  6. procedure TformReporteadorV2.FormDestroy(Sender: TObject);
  7. begin
  8.   UnRegisterReports;
  9. end;



Hacemos la creación de los componentes.


delphi
  1. procedure TformReporteadorV2.ImprimeExportaSIS;
  2. var
  3.   ElReporte : TqckrprtPadre;
  4.   iIndiceI: Integer;
  5.   aReportes: array of string;
  6. begin
  7.   SetLength(aReportes,6);
  8.   aReportes[00] := 'TqrpSIS_SS_PSQ_001';
  9.   aReportes[01] := 'TqrpSIS_SS_PSQ_012';
  10.   aReportes[02] := 'TqrpSIS_SS_PSQ_128';
  11.   aReportes[03] := 'TqrpSIS_SS_PSQ_129';
  12.   aReportes[04] := 'TqrpSIS_SS_PSQ_130';
  13.   aReportes[05] := 'TqrpSIS_SS_PSQ_131';
  14.   for iIndiceI := 0 to Length(aReportes) do
  15.   try
  16.       ElReporte :=  TqckrprtPadreClass(GetClass(aReportes[iIndiceI])).Create(Self);
  17.       MessageDlg('Reporte '+ElReporte.Name+' creado y funcionando.', mtInformation, [mbOK], 0);
  18.   finally
  19.       ElReporte := nil;
  20.   end;
  21. end;



Prueba y nos avisa.

Happy Coding!!
  • 0

#6 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 08 agosto 2013 - 01:12

Rolphi, entiendo que en algún lado tienes que tener algo como



delphi
  1. var
  2.   TqrpSIS_SS_PSQ_001: TqckrprtPadreClass;



Cierto??

  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 08 agosto 2013 - 06:08

Rolphi, entiendo que en algún lado tienes que tener algo como



delphi
  1. var
  2.   TqrpSIS_SS_PSQ_001: TqckrprtPadreClass;



Cierto??


Saludos.

Cadetill realmente no, la meta clase (Class Reference) es solo para la clase padre, por lo que se puede apreciar en el código las clases TqrpSIS_SS_PSQ_xxx son descendiente de TqckrprtPadre.

Por lo que en código sería algo así:


delphi
  1. type
  2.   TqrpSIS_SS_PSQ_001 = class(TqckrprtPadre)
  3. end;


  • 0

#8 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 08 agosto 2013 - 09:27

Ah, ok, ahora lo entiendo. Es que no veía claro de dónde salían los TqrpSIS_SS_PSQ_XXX, que pensaba eran variables. No caí en que fueran clases jejejeje
  • 0

#9 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 08 agosto 2013 - 09:55

Gracias a todos por sus aportaciones, pero se decidió hacer otro tipo de procesamiento para imprimir los reportes.
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 agosto 2013 - 10:49

Gracias a todos por sus aportaciones, pero se decidió hacer otro tipo de procesamiento para imprimir los reportes.


¿ Y puedes decirnos como ?

Saludos
  • 0

#11 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 08 agosto 2013 - 12:20

Mi patrón decidió que el procesamiento sería secuencial, uno por uno y llamado por nombre.

Cosas de la vida. :
  • 0




IP.Board spam blocked by CleanTalk.