Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   error en el report manager (https://www.clubdelphi.com/foros/showthread.php?t=61948)

Anyu 27-11-2008 20:05:42

error en el report manager
 
hola a todos, si este no es el lugar correcto donde debi haber posteado mi duda me disculpo con ustedes, pero tengo el sgte. problema:

necesito imprimir una chequera de clientes, nada mas, no traigo nada de una base de datos ni nada... simplemente tengo una ventana hecha en delphi que trae un report al que se le pasa parametros como, nombre de cliente, monto a abonar, y el mes donde debe abonar, es todo, todo se llena en la interfaz y se pasa como parametro, esta todo hecho, el problema es que en mi informe me salta un error que dice, "indice de la lista fuera de rango (10)", :( no se que pueda ser, ni como corregir.

desde ya les cuento que no cree ninguna conexion a ninguna base de datos ni nada que se le paresca porque no era necesario, osea no existe una base de datos, solo parametros a imprimir.

maeyanes 27-11-2008 20:27:58

Hola...

Por el mensaje de error, estás saliendote del rango de una lista o un arreglo. Esto es, tu aplicación está tratando de obtener un valor con índice 10 de alguna lista o arreglo, pero este no existe.

Si puedes el código donde te produce el error podríamos ayudarte un poco más.


Saludos...

Anyu 27-11-2008 20:34:17

no uso ningun arreglo en ninguna parte, esto es mi codigo en delphi:

Código Delphi [-]
unit chequera;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, rpcompobase, rpclxreport, Mask;

type
  Tf_chequera = class(TForm)
    TITULO: TPanel;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    contrato: TEdit;
    codigo: TEdit;
    cuota: TEdit;
    titular: TEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    new: TBitBtn;
    print: TBitBtn;
    Shape1: TShape;
    report: TCLXReport;
    mes: TMaskEdit;
    exit: TBitBtn;
    procedure newClick(Sender: TObject);
    procedure printClick(Sender: TObject);
    procedure exitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  f_chequera: Tf_chequera;

implementation

{$R *.dfm}

procedure Tf_chequera.newClick(Sender: TObject);
begin
mes.Enabled:=true;
codigo.Enabled:=true;
contrato.Enabled:=true;
cuota.Enabled:=true;
titular.Enabled:=true;
Edit1.Enabled:=true;
Edit2.Enabled:=true;
Edit3.Enabled:=true;
Edit4.Enabled:=true;
print.Enabled:=true;
end;

procedure Tf_chequera.printClick(Sender: TObject);
var cont: Integer;
begin
mes.Enabled:=false;
codigo.Enabled:=false;
contrato.Enabled:=false;
cuota.Enabled:=false;
titular.Enabled:=false;
Edit1.Enabled:=false;
Edit2.Enabled:=false;
Edit3.Enabled:=false;
Edit4.Enabled:=false;
print.Enabled:=false;
report.Filename:=f_chequera.report.Filename;
report.Report.Params[0].Value:= titular.Text;
report.Report.Params[1].Value:= StrToInt(cuota.Text);
report.Report.Params[2].Value:= contrato.Text;
report.Report.Params[3].Value:= StrToInt(codigo.Text);
report.Report.Params[4].Value:=StrToDate(mes.Text);
report.Report.Params[5].Value:=StrToInt(Edit1.Text);
report.Report.Params[6].Value:=StrToInt(Edit2.Text);
report.Report.Params[7].Value:=StrToInt(Edit3.Text);
report.Report.Params[8].Value:=StrToInt(Edit4.Text);
report.Execute;
end;

procedure Tf_chequera.exitClick(Sender: TObject);
begin
Close;
end;

procedure Tf_chequera.FormCreate(Sender: TObject);
begin
mes.Text:=DateToStr(now);
end;

end.

como ven es algo estupido y simple, es una ventana donde deben llenar datos, estos se les pasa al report y deberia imprimir pero no pasa nada, ahora tengo otro error que me dice que no hay espacio para imprimir y no entiendo porque el tamaño de mi pagina es mas grande que el de mi informe, es para una hoja tamaño 2100*3100, es para una matricial epson lx-300 que utiliza aun el lpt1

maeyanes 27-11-2008 20:40:42

Hola...

A simple vista no se ve donde pueda estar el error. ¿En que línea te indica que ocurre el error?

Revisa la pila de ejecución de la aplicación al momento que ocurre el error, esto te puede dar una idea en que método se produce este.


Saludos...

Anyu 27-11-2008 20:45:40

prove mi ejecutable en otras maquinas, el error es en el informe no en mi codigo delphi es el informe, me dice que no hay espacio para imprimir, y no entiendo como, porque yo creo haber puesto la configuracion de la pagina e impresora correctamente

Lepe 27-11-2008 21:59:06

Yo es que no entiendo esto:
Código Delphi [-]
report.Filename:=f_chequera.report.Filename;
report.Report.Params[0].Value:= titular.Text;

¿me puedes explicar qué es qué?
porque report es un TCLXReport, pero f_chequera.report ¿no es acaso el mismo? ¿usas varias instancia del mismo form con distinta variable?

Otro detalle: ¿estás programando en linux o pretendes que sea compatible? Al menos yo he usado el TVCLReport

¿donde has configurado el tamaño de página? ¿dentro de Report Designer?
Cita:

es para una hoja tamaño 2100*3100
pero ¿en qué unidades? porque Reportman usa twips y una pulgada son 1440 twips, por tanto 2100 vendría a ser 4 centímetros y pico, pero no sé si 2100 es el ancho o el alto.


Saludos

Anyu 29-11-2008 15:24:35

hola lepe:

eso de las medidas me intereso quizas este en eso mi problema, quisieras explicarme mejor por favor como es eso....:o

por ejemplo para un papel continuo de 23 cm (ancho) por 26 cm (largo) como seria en el repor manager?, porque en las propiedades de su ancho y alto le pngo asi nomas, tal cual

Lepe 29-11-2008 17:01:55

empieza por Archivo -> configurar impresión, ahí debe aparecer tu tamaño de página, si no aparece, tendrás que añadir uno en windows para que esté disponible ahí.

Te aconsejo que mires en Archivo -> configurar página ->configurar impresion -> configurar, ahí viene muchas opciones, igual tienes que especificar la impresora, en la mayoría solo cabe un folio A4, pero la tuya es distinta.

Aquí me parece que hay un error:
Código Delphi [-]
report.Filename:=f_chequera.report.Filename;

Por otra parte, si configuras en el Inspector de objetos el alto y ancho, estás haciéndolo para la banda detalle, no para el informe completo.

Saludos

Anyu 02-12-2008 14:03:46

ya logre que aparesca, ahora solo debo ubicar bien los parametros para que imprima en el lugar correcto, el error estaba en que en el detalle de mi informe le ponia el mismo alto que mi hoja y eso no debe ser asi por lo que veo, me entero, y lo comento por si a alguien le alla pasado lo mismo, el detalle nunca debe ser del mismo tamaño que la hoja, debe ser menor al menos en el alto.

y la parte donde me dices que hubo un error, la verdad que a mi no me lanza ningun error el delphi, si no es de la forma en que lo he puesto, entonces como asigno a mi objeto del report el nombre del reporte que debe ejecutar?

Lepe 02-12-2008 15:00:32

Dime como creas la ventana tf_chequera y depués te cuento.

¿usas Applicacion.CreateForm(f_chequera, tf_chequera)?
o
¿usas algo así Miform := Tf_chequera.Create(....)?

¿usas ambas formas? ¿cómo? pon algo de código

No digo que es un error, lo que digo es que puede ser un error, dependiendo de cómo lo uses, puedes tener Access violation al ejecutarlo.


saludos

Anyu 02-12-2008 16:25:27

este es el form create que utilizo
Código Delphi [-]procedure Tf_chequera.FormCreate(Sender: TObject); begin mes.Text:=DateToStr(now); end;

simplemente hago que la fecha sea por defecto la del dia, despues todos mis TEdit son Código Delphi [-]enable :=false

, y nada mas, mi TCLXReport se llama report, y la ruta del informe esta en la propiedad de filename por eso le pasaba de esta forma
Código Delphi [-]report.Filename:=f_chequera.report.Filename;


entiendes, me estas empezando a confundir jeje, porque es algo muy simple lo que estoy intentando hacer...

y la verdad que ya lo termine, funciona, el unico problema era como dije mas arriba, que el detalle del informe debe ser de menor tamaño que el tamaño de la pagina no el mismo.

maeyanes 02-12-2008 16:28:39

Hola...

Algo me dice que creas todas las formas al iniciar tu aplicación. Es por eso que esa llamada no te produce ningún error de violación de acceso a memoria.


Saludos...

Lepe 02-12-2008 19:18:32

vale, entiendo. La solución es simple, elimina la linea:
Código Delphi [-]
report.Filename:=f_chequera.report.Filename;

porque realmente no hace nada. La propiedad report.Filename la tienes puesta en tiempo de diseño, así que no hace falta ponerla después.

esa línea viene a ser:
Código Delphi [-]
 a:= a


Saludos

Anyu 02-12-2008 19:20:04

ah.... ok, gracias, la elimino entonces, saludos

Anyu 02-12-2008 19:42:22

si funciona igual, tenias razon, gracias.
tengo una consultita mas que hacerte, cuando envio los parametros a mi report los meto en un try en el caso de que carguen datos incorrectos como caracteres donde solo acepta enteros, asi me evito el tener que validarlos uno a uno ya que son TEdits nada mas, ya lo probe y funciona, es solo que me gustaria que en la ventanita de mi aviso aparesca un titulo como 'Atención', y el mensaje, como podria lograr eso con el showmensage?

Código Delphi [-]
ShowMessage('Verifique que los parámetros pasados sean los correctos');

maeyanes 02-12-2008 19:44:49

Hola...

Tienes que usar un MessageBox. Busca en la ayuda de Delphi por TApplication.MessageBox.


Saludos...

Anyu 02-12-2008 19:59:59

si....!!! gracias, ya esta!, ahora me voy a entregar el trabajito, jajaja
gracias a todos muchachos, quedo chupete el trabajo jeje.

Anyu 03-12-2008 13:22:38

Hola lepe, veo que estas en linea, ayer tuve un problemita con el trabajo este que lleve, en mi computadora funciona el ejecutable pero haya no, me lanza un error que dice:

"Error al iniciar la aplicación porque no se encontró qtintf.dll. la reinstalación de la aplicación puede solucionar el problema."


una compañera me dijo que eso se debe a que existen ciertos paquetes que hay que instalar del borlan para que funcionen los ejecutables en otras maquinas que no tienen instalados el delphi, o quizas a mi se me este pasando alguna propiedad antes de compilarlo, no se, te agradeceria que me ayudaras, porque ayer quede con que se lo llevaba hoy, ensima es para una funeraria, tetrico....

Lepe 03-12-2008 14:28:14

Parece que has incluido una unidad que no es para windows, por ejemplo, has puesto algo así como "uses QDialogs, Qprinters"... debes borrar la "Q" que tiene delante, ya que esas unidades están pensadas para aplicaciones CLX. Tú lo que estás usando es VCL.

Este fallo puede venir por usar un reportCLX (para linux) cuando en realidad debes usar reportVCL (para windows).

Ya que estás usando reportman, que no se olvide llevarte el archivo reportmanres.es (que lo tienes en la carpeta de instalación de reportman) y coloca ese archivo en la misma carpeta que tu ejecutable. De esa forma, si has usado el report.language := 1, te saldrán los mensajes en español, así como todos los mensajes de la vista preliminar.

Normalmente un programa hecho en delphi no necesita de nada más para ejecutarse, por ejemplo un form con TEdits, botones. Si incluyes Bases de datos ya es otro cantar, puedes necesitar algunas cosas más.

Estaba en linea, pero se vé que no actualicé los enlaces recientes, porque no ví este mensaje.


Para evitar todos estos inconvenientes, (faltan archivos para ejecutarse), te aconsejo usar virtualización (VirtualBox), básicamente es tener un windows dentro de otro, así puedes hacer las pruebas como si tuvieras un segundo ordenador sin delphi instalado, y ver todos esos errores que te pueden dar al ejecutar ese programa que estás haciendo.

Saludos

Anyu 03-12-2008 14:40:25

este es mi codigo, la unica ventana que tengo:

Código Delphi [-]
unit chequera;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, rpcompobase, rpclxreport, Mask;

type
  Tf_chequera = class(TForm)
    TITULO: TPanel;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    contrato: TEdit;
    codigo: TEdit;
    cuota: TEdit;
    titular: TEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    new: TBitBtn;
    print: TBitBtn;
    Shape1: TShape;
    report: TCLXReport;
    mes: TMaskEdit;
    exit: TBitBtn;
    procedure newClick(Sender: TObject);
    procedure printClick(Sender: TObject);
    procedure exitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  f_chequera: Tf_chequera;

implementation

{$R *.dfm}

procedure Tf_chequera.newClick(Sender: TObject);
begin
mes.Enabled:=true;
mes.Text:=DateToStr(now);
codigo.Enabled:=true;
codigo.Text:='0';
contrato.Enabled:=true;
contrato.Text:='0';
cuota.Enabled:=true;
cuota.Text:='0';
titular.Enabled:=true;
titular.Text:='';
Edit1.Enabled:=true;
Edit1.Text:='0';
Edit2.Enabled:=true;
Edit2.Text:='0';
Edit3.Enabled:=true;
Edit3.Text:='0';
Edit4.Enabled:=true;
Edit4.Text:='0';
print.Enabled:=true;
end;

procedure Tf_chequera.printClick(Sender: TObject);
var cont: Integer;
begin
mes.Enabled:=false;
codigo.Enabled:=false;
contrato.Enabled:=false;
cuota.Enabled:=false;
titular.Enabled:=false;
Edit1.Enabled:=false;
Edit2.Enabled:=false;
Edit3.Enabled:=false;
Edit4.Enabled:=false;
print.Enabled:=false;
try
report.Report.Params[0].Value:= titular.Text;
report.Report.Params[1].Value:= StrToInt(cuota.Text);
report.Report.Params[2].Value:= contrato.Text;
report.Report.Params[3].Value:= StrToInt(codigo.Text);
report.Report.Params[4].Value:=StrToDate(mes.Text);
report.Report.Params[5].Value:=StrToInt(Edit1.Text);
report.Report.Params[6].Value:=StrToInt(Edit2.Text);
report.Report.Params[7].Value:=StrToInt(Edit3.Text);
report.Report.Params[8].Value:=StrToInt(Edit4.Text);
report.Execute;
except
 with Application do
  begin
    NormalizeTopMosts;
    MessageBox('Verifique que los parámetros pasados sean los correctos', 'Atención', MB_OK);
    RestoreTopMosts;
  end;
end;
end;

procedure Tf_chequera.exitClick(Sender: TObject);
begin
Close;
end;

procedure Tf_chequera.FormCreate(Sender: TObject);
begin
mes.Text:=DateToStr(now);
end;

end.


como veras no uso ningun componente que tenga una Q en frente, sera que no hay algun paquete que deba llevar a instalar en la maquina del cliente?


La franja horaria es GMT +2. Ahora son las 04:42:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi