Ver Mensaje Individual
  #4  
Antiguo 28-01-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Reputación: 10
marcoszorrilla Va por buen camino
La opción 1 no la he citado porque eso supondría imprimir con el Canvas de la impresora lo cual resulta harto complicado cuando además habrá que alinear números por la derecha etc...

Mira un extracto para que te hagas una idea del problema:

Código Delphi [-]
   
  procedure ImpAlba(n:Integer);
  var
  nSaltLin:Integer;
  nSaltPun:Integer;
  nLinea:Integer;
  lEuro:Boolean;
  cCadena:String;
  begin
  //1 Albarán en Euros
  nSaltLin:=0;
   
  DmXXXX.Cli.IndexName:='Codigos'; //Para poder buscar quien es el cliente.
  DmXXXX.Cli.FindKey([DmXXXX.AlbaCodCliente.Value]);
   
    SetPaperSize(DmXXXX.ConfAltoAlbaran.Value,DmXXXX.ConfAnchoAlbaran.Value);
    Printer.Canvas.Font.Size:=DmXXXX.ConfFontSizeEncabezado.value;
    Printer.Canvas.Font.Name:=DmXXXX.ConfFontEncabezado.Value;
   
   
      With Printer.canvas do
         Begin
   
          printer.BeginDoc;
                 HeadIMpalba(1);
               //Datos del Detalle del Alabarán
                Printer.Canvas.Font.Size:=DmXXXX.ConfFontSizeDetalle.value;
                Printer.Canvas.Font.Name:=DmXXXX.ConfFontDetalle.Value;
   
                DmXXXX.Linalba.First;
                nSaltLin:=0;
                nSaltPun:=DmXXXX.ConfASaltoLinea.Value;
                While Not DmXXXX.LinAlba.Eof do
                begin
                nLinea:=nLinea + 1; //control de número de líneas por albarán
   
                  if nLinea > DmXXXX.ConfASaltoPagina.Value then
                  begin
                  Textout(DmXXXX.ConfAcolDescripcion.value,DmXXXX.ConfAlinNArticulo.Value + (nSaltLin * nSaltPun) ,'..........');
                  nLinea:=0;
                  nSaltLin:=0;
                  Printer.NewPage;
                  HeadImpalba(1);
                  end;
   
                  
   
               cCadena:=numero2Texto(DmXXXX.AlbaRecargo1.Value,2,7);
               Textout(DmXXXX.ConfAcolRecTtl.value ,DmXXXX.ConfAlinBase.Value + (nSaltLin * nSaltPun) , cCadena);
   
                  end;
                  nSaltLin:= nSaltLin + 1;
               end;
   
   
                  //Ver si tiene recargo 1
                  if DmXXXX.AlbaRecargo3.Value <> 0 then
                  begin
               cCadena:=numero2Texto(DmXXXX.AlbaTRec3.Value,2,5);
               Textout(DmXXXX.ConfAcolRec100.value ,DmXXXX.ConfAlinBase.Value + (nSaltLin * nSaltPun) , cCadena);
               cCadena:=numero2Texto(DmXXXX.AlbaRecargo3.Value,2,7);
               Textout(DmXXXX.ConfAcolRecTtl.value ,DmXXXX.ConfAlinBase.Value + (nSaltLin * nSaltPun) , cCadena);
                  end;
                  nSaltLin:= nSaltLin + 1;
               end;
   
               //Pesetas en posición fija
               cCadena:=numero2Texto(DmXXXX.AlbaETotal.Value,0,11);
               //Se quitan las pesetas 01-04-04 Laura
               //Textout(DmXXXX.ConfAcolEuros.value ,DmXXXX.ConfAlinEuros.Value  , cCadena);
   
               Printer.EndDoc;
         end;
  end;

Esto con un Constructor de informes sin embargo es pan comido.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita