Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como Imprimir Ticket desde QuickReport (https://www.clubdelphi.com/foros/showthread.php?t=63936)

chino150 09-03-2009 21:48:04

Como Imprimir Ticket desde QuickReport
 
Hola a todos

La consulta es lo siguiente, e desarollado un sistema en Delphi 6, MySQL, Zeos 6.6 donde los tickets se imprimian directamente al la impresora, pero ahora el cliente desea que le muestre un preview ante de imprimir el ticket. Necesito ayuda en como lograr esto en Quick Report o en Free Report.


Muchas Gracias!!!!

Ferrari 09-03-2009 23:26:42

Hola...pues simplemente en lugar de darle en QuickReport:

Código Delphi [-]
Qreport.Print; 

cambiarlo por:

QReport.Preview;

chino150 09-03-2009 23:43:50

Cita:

Empezado por Ferrari (Mensaje 340756)
Hola...pues simplemente en lugar de darle en QuickReport:

Código Delphi [-]Qreport.Print; cambiarlo por: QReport.Preview;

Gracias pero creo que me esplique mal cuando hablo de directamente al printer estoy diciendo al canvas, el ticket no esta ello en quick report quiero saber como mandarle los datos al quick report este es el codigo que utlizo para imprimir el ticket
Código Delphi [-]
procedure TfrmMain.BitBtn1Click(Sender: TObject);
var Fecha : String;
Ticket: TextFile;
Total, Efectivo, Cambio : Double;
xdes, xval, xtot, xpag, xcam: ShortString;
xsum: Double;
begin
    Fecha := DateToStr(Now);
     TIngresosFecha.AsString := Fecha;
     Total := TIngresosValor.Value;
     Efectivo := TIngresosEfectivo.Value;
     Cambio := Total - Efectivo;
     TIngresosCambio.Value := Cambio;
     TIngresos.Post;

     try
    AssignPrn(Ticket);
    //AssignFile(Ticket, 'LPT1');
    Rewrite(Ticket);
    Writeln(Ticket,#27#64);
    Writeln(Ticket,'Ministerio Bendicion Inc.');
    Writeln(Ticket,'C/Ambar No.109 Ens. Papagayo');
    Writeln(Ticket,'La Romana RD. 22000');
    Writeln(Ticket,'Tel: 809-556-4914');
    Writeln(Ticket,'Tel: 809-550-8266');
    Writeln(Ticket,'RNC: #4-12-02047-1');
    Writeln(Ticket,'E-Mail: bendicionfm@hotmail.com');
    Writeln(Ticket,'Website: www.bendicionfm.com');
    Writeln(Ticket,'');
    Writeln(Ticket,'Fecha: '+DateToStr(Now));
    Writeln(Ticket,'Recibo: '+DBText1.Caption+'');
    Writeln(Ticket,'Colaborador: '+ QConsulta.FieldByName('Nombre').asString);
    Writeln(Ticket,'');
    QConsulta.Close;
    QConsulta.SQL.Clear;
    QConsulta.SQL.ADD('Select * From Ingresos where NoRecibo='+DBText1.Caption);
    QConsulta.Open;
    Writeln(Ticket,'-------------------------------');
    Writeln(Ticket,'Descripcion              Valor ');
    Writeln(Ticket,'-------------------------------');
    xsum := 0;
    QConsulta.Close;
    QConsulta.SQL.Clear;
    QConsulta.SQL.Add('Select * from Ingresos where NoRecibo='+DBText1.Caption);
    QConsulta.Open;
    QConsulta.First;
     while not QConsulta.Eof do
     begin
     xdes := copy(QConsulta.fieldbyname('desc').AsString,1,20);
     xval := format('%8.2f',[QConsulta.fieldbyname('valor').asFloat]);
     xsum := xsum + QConsulta.fieldbyname('valor').AsFloat;
     Writeln(Ticket,xdes+'                    '+xval);
     QConsulta.Next;
     end;
     Writeln(Ticket,'-------------------------------');
     xtot := FloatToSTR(xsum);
     xpag := FloatToSTR(Efectivo);
     xcam := FloatToSTR(Cambio);
     Writeln(Ticket,'Total:  RD$'+xtot);
     Writeln(Ticket,'Efectivo:  RD$'+xpag);
     Writeln(Ticket,'Cambio:  RD$'+xcam);
     Writeln(Ticket,'-------------------------------');
     Writeln(Ticket,'Dios les Bendiga');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,'');
     Writeln(Ticket,#27#105); // Cortar
     finally
      CloseFile(Ticket);
     end;
end;

esto es lo que quiero hacer pero via quick report

ContraVeneno 10-03-2009 00:57:14

Pues según yo, solo sería necesario seleccionar el tamaño del ticket. Diseñar tu reporte exactamente a como haces el ticket y enlazarlo a tu consulta.

¿que es lo que has intentado?

chino150 10-03-2009 01:13:24

Cita:

Empezado por ContraVeneno (Mensaje 340768)
Pues según yo, solo sería necesario seleccionar el tamaño del ticket. Diseñar tu reporte exactamente a como haces el ticket y enlazarlo a tu consulta.

¿que es lo que has intentado?

Gracia ContraVeneno no e intentado nada, me puedes mostra como lograr lo que dices.

AzidRain 10-03-2009 04:17:27

Por lo que veo no estás usando nada grafico por lo que tu solución es la siguiente:

1.- En lugar de mandar todos los writelns a la impresora, utiliza un TMemo y le añades las cadenas que vas imprmiendo.

En lugar de ...
Código Delphi [-]
    Writeln(Ticket,#27#64);
    Writeln(Ticket,'Ministerio Bendicion Inc.');
    Writeln(Ticket,'C/Ambar No.109 Ens. Papagayo');
    Writeln(Ticket,'La Romana RD. 22000');

Código Delphi [-]
   //MiPreview es un TMemo
    MiPreview.Lines.Add(#27#64);
    MiPreview.Lines.Add('Ministerio Bendicion Inc.');
    MiPreview.Lines.Add('C/Ambar No.109 Ens. Papagayo');
    MiPreview.Lines.Add('La Romana RD. 22000');

Y en automático lo tendrás mostrado en pantalla, ahora para imprimirlo:
Código Delphi [-]
//recorremos todas las lineas del memo y las mandamos a la impresora

  for i:=0 to MiPreview.Lines.Count - 1 Do
   Writeln(Ticket,Mipreview.Lines.Strings[i]);

Limpias Mipreview con MiPreview.Lines.clear y estas listo para otra impresión.

chino150 10-03-2009 15:53:16

Cita:

Empezado por AzidRain (Mensaje 340784)
Por lo que veo no estás usando nada grafico por lo que tu solución es la siguiente:

1.- En lugar de mandar todos los writelns a la impresora, utiliza un TMemo y le añades las cadenas que vas imprmiendo.

En lugar de ...
Código Delphi [-] Writeln(Ticket,#27#64); Writeln(Ticket,'Ministerio Bendicion Inc.'); Writeln(Ticket,'C/Ambar No.109 Ens. Papagayo'); Writeln(Ticket,'La Romana RD. 22000');


Código Delphi [-] //MiPreview es un TMemo MiPreview.Lines.Add(#27#64); MiPreview.Lines.Add('Ministerio Bendicion Inc.'); MiPreview.Lines.Add('C/Ambar No.109 Ens. Papagayo'); MiPreview.Lines.Add('La Romana RD. 22000');


Y en automático lo tendrás mostrado en pantalla, ahora para imprimirlo:
Código Delphi [-]//recorremos todas las lineas del memo y las mandamos a la impresora for i:=0 to MiPreview.Lines.Count - 1 Do Writeln(Ticket,Mipreview.Lines.Strings[i]);


Limpias Mipreview con MiPreview.Lines.clear y estas listo para otra impresión.

Gracias pero me sale un error de que el campo Ticket no esta en la tabla pero verdaderamente esta este es el codigo a ver si me puedes seguir ayudando
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Fecha : String;
Ticket: TextFile;
Total, Efectivo, Cambio : Double;
xdes, xval, xtot, xpag, xcam: ShortString;
xsum: Double;
i: integer;
begin
     Fecha := DateToStr(Now);
     TIngresosFecha.AsString := Fecha;
     Total := TIngresosAporte.Value;
     Efectivo := TIngresosEfectivo.Value;
     Cambio := Total - Efectivo;
     TIngresosCambio.Value := Cambio;
     TIngresos.Post;

     try
        Memo1.Lines.Add(#27#64);
        Memo1.Lines.Add('Ministerio Bendición Inc.');
        Memo1.Lines.Add('C/Ambar No.109 Ens. Papagayo');
        Memo1.Lines.Add('La Romana RD. 22000');
        Memo1.Lines.Add('Tel: 809-556-4914');
        Memo1.Lines.Add('Tel: 809-550-8266');
        Memo1.Lines.Add('RNC: #4-12-02047-1');
        Memo1.Lines.Add('E-Mail: bendicionfm@hotmail.com');
        Memo1.Lines.Add('Website: www.bendicionfm.com');
        Memo1.Lines.Add('');
        Memo1.Lines.Add('Fecha: '+DateToStr(Now));
        Memo1.Lines.Add('Recibo: '+ qConsulta.FieldByName('Ticket').AsString);
        Memo1.Lines.Add('');
        qConsulta.Close;
        qConsulta.SQL.Clear;
        qConsulta.SQL.Add('Select Max(Ticket)from Bonos');
        qConsulta.Open;
        Memo1.Lines.add('-------------------------------');
        memo1.Lines.add('Descripción              Valor ');
        memo1.lines.add('-------------------------------');
         xsum := 0;
    QConsulta.Close;
    QConsulta.SQL.Clear;
    QConsulta.SQL.Add('Select Max(Ticket)from Bonos ');
    QConsulta.Open;
    QConsulta.First;
     while not QConsulta.Eof do
     begin
     xdes := copy(QConsulta.fieldbyname('descripcion').AsString,1,20);
     xval := format('%8.2f',[QConsulta.fieldbyname('aporte').asFloat]);
     xsum := xsum + QConsulta.fieldbyname('aporte').AsFloat;
     memo1.Lines.Add(xdes+'                    '+xval);
     QConsulta.Next;
     end;
     Memo1.Lines.Add('-------------------------------');
     xtot := FloatToSTR(xsum);
     xpag := FloatToSTR(Efectivo);
     xcam := FloatToSTR(Cambio);
     Memo1.Lines.Add('Total:  RD$'+xtot);
     Memo1.Lines.Add('Efectivo:  RD$'+xpag);
     memo1.Lines.Add('Cambio:  RD$'+xcam);
     memo1.Lines.Add('-------------------------------');
     memo1.Lines.Add('Dios les Bendiga');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add('');
     memo1.Lines.Add(#27#105);
     for i := 0 to Memo1.Lines.Count - 1 do
         Writeln(Ticket,Memo1.Lines.Strings[i]);
         finally
         Memo1.Lines.Clear;
         end;


end;
otra duda es esto lo muestra antes de imprimir y si es asi como lo manda a imprimir el usuario.

Gracias.


La franja horaria es GMT +2. Ahora son las 08:15:37.

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