nfrfabian
25-09-2007, 18:29:16
Hola, tengo un problema que no pude solucionar y quisiera sus consejos. Mi problema es el siguiente: Utilizo Rave Report para imprimir unas consultas a una base de datos. la impresion la tengo que realizar en 2 impresoras distintas. Tambien utilizo word para imprimir un documento al que le paso unos datos variables (mediante campos), en este caso tambien tengo que imprimir en dos impresoras distintas.
Buscando en el foro encontre la forma de seleccionar la impresora de una lista, tambien pude grabar las selecciones en un archivo para que al inicio de la aplicacion se carguen las impresoras en la que se deben imprimir en cada caso, pero a la hora de imprimir siempre imprime en la impresora por defecto.
Las intrucciones que utilizo son las siguientes:
Para cargar en un combo las impresoras disponibles:
for i := 0 to Printer.Printers.Count-1 do begin
Printer.PrinterIndex := i;
Printer.GetPrinter(Device, Driver, Port, hDMode);
combocertificado.Items.Add(Device);
comboresto.Items.Add(Device);
comborespaldo.Items.Add(Device);
end;
Despues de seleccionar la impresora, guardo en un archivo todas las selecciones necesarias.
Al iniciar la aplicacion cargo en una variable global la impresora por defecto:
gindiceprinterdefault := printers.printer.printerindex;
Despues verifico que las impresoras que se grabaron en el archivo esten disponibles:
// vnombreimpresora es una variable con el nombre de la impresora que se grabo en el archivo
index := Printer.Printers.IndexOf(vnombreimpresora );
if index > -1 then
begin
gindiceprintercertificado := index;
end
else
begin
gindiceprintercertificado := gindiceprinterdefault;
end;
// vnombreimpresora2 es una variable con el nombre de la impresora que se grabo en el archivo
index := Printer.Printers.IndexOf(vnombreimpresora );
if index > -1 then
begin
gindiceprinterrespaldo:= index;
end
else
begin
gindiceprinterrespaldo := gindiceprinterdefault;
end;
Despues se suponia que cuando tenga que imprimir selecciono la impresora que corresponda:
Printer.PrinterIndex := gindiceprintercertificado;
//o
Printer.PrinterIndex := gindiceprinterrespaldo;
Me parece que el error al final porque al ser el Rave Report o Microsoft WORD programas externos, ellos no reciben el indice de la impresora que necesito.
En una parte vi que existe una forma de pasarle la impresora seleccionada a otro generador de reportes:
QuickRep1.PrinterSettins.PrinterIndex := nImpCocina;
Pero ninguno de los componentes de rave report tienen una propiedad para asignarle el indice de la impresora (o yo no lo encuentro). Los componentes que utilizo son:
RvSystem1
RvProject2
RvDataSetConnectioncronorespal
En este caso el componente RvSystem1, tiene para elegir el numero de copias, la pagina inicial, y otras propiedades, pero ninguna para indicarle el inice de la impresora a utilizar.
Para imprimir con MS Word utilizo lo siguiente:
const
wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var
gWord: OLEVariant;
document, Documento: Variant;
begin
...
path := ExtractFilePath(Application.ExeName);
path := path + 'CARPETA\archivo.doc';
Printer.PrinterIndex := gindiceprintercertificado;
gWord := CreateOLEObject('Word.Application');
gWord.Documents.Add(path);
Documento := gWord.Documents.Item(1);
Documento.Variables.Add('nombre', nombre);
Documento.Variables.Add('diaspa', nombreservicio);
Documento.Variables.Add('p', cantcli);
Documento.Variables.Add('n', certificado);
Documento.Variables.Add('v', vencimiento);
Documento.Variables.Add('f', factura);
Documento.Fields.Update;
documento.Fields.ToggleShowCodes;
Document := gWord.ActiveDocument;
Document.PrintOut(false);
gWord.ActiveDocument.Close(wdDoNotSaveChanges);
...
Sinceramente nose donde esta el error (solo la sospecha de que tengo que pasarle el indice de la impresora seleccionada tanto a rave report como a word). Las variables que utilizo tiene datos correctos (las tres variables son distintas: gindiceprinterdefault, gindiceprintercertificado, gindiceprinterrespaldo).
Si me puede ayudar se los voy agradecer, hace dos dias que estoy con esto y no puedo resolverlo. Gracias.
Buscando en el foro encontre la forma de seleccionar la impresora de una lista, tambien pude grabar las selecciones en un archivo para que al inicio de la aplicacion se carguen las impresoras en la que se deben imprimir en cada caso, pero a la hora de imprimir siempre imprime en la impresora por defecto.
Las intrucciones que utilizo son las siguientes:
Para cargar en un combo las impresoras disponibles:
for i := 0 to Printer.Printers.Count-1 do begin
Printer.PrinterIndex := i;
Printer.GetPrinter(Device, Driver, Port, hDMode);
combocertificado.Items.Add(Device);
comboresto.Items.Add(Device);
comborespaldo.Items.Add(Device);
end;
Despues de seleccionar la impresora, guardo en un archivo todas las selecciones necesarias.
Al iniciar la aplicacion cargo en una variable global la impresora por defecto:
gindiceprinterdefault := printers.printer.printerindex;
Despues verifico que las impresoras que se grabaron en el archivo esten disponibles:
// vnombreimpresora es una variable con el nombre de la impresora que se grabo en el archivo
index := Printer.Printers.IndexOf(vnombreimpresora );
if index > -1 then
begin
gindiceprintercertificado := index;
end
else
begin
gindiceprintercertificado := gindiceprinterdefault;
end;
// vnombreimpresora2 es una variable con el nombre de la impresora que se grabo en el archivo
index := Printer.Printers.IndexOf(vnombreimpresora );
if index > -1 then
begin
gindiceprinterrespaldo:= index;
end
else
begin
gindiceprinterrespaldo := gindiceprinterdefault;
end;
Despues se suponia que cuando tenga que imprimir selecciono la impresora que corresponda:
Printer.PrinterIndex := gindiceprintercertificado;
//o
Printer.PrinterIndex := gindiceprinterrespaldo;
Me parece que el error al final porque al ser el Rave Report o Microsoft WORD programas externos, ellos no reciben el indice de la impresora que necesito.
En una parte vi que existe una forma de pasarle la impresora seleccionada a otro generador de reportes:
QuickRep1.PrinterSettins.PrinterIndex := nImpCocina;
Pero ninguno de los componentes de rave report tienen una propiedad para asignarle el indice de la impresora (o yo no lo encuentro). Los componentes que utilizo son:
RvSystem1
RvProject2
RvDataSetConnectioncronorespal
En este caso el componente RvSystem1, tiene para elegir el numero de copias, la pagina inicial, y otras propiedades, pero ninguna para indicarle el inice de la impresora a utilizar.
Para imprimir con MS Word utilizo lo siguiente:
const
wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var
gWord: OLEVariant;
document, Documento: Variant;
begin
...
path := ExtractFilePath(Application.ExeName);
path := path + 'CARPETA\archivo.doc';
Printer.PrinterIndex := gindiceprintercertificado;
gWord := CreateOLEObject('Word.Application');
gWord.Documents.Add(path);
Documento := gWord.Documents.Item(1);
Documento.Variables.Add('nombre', nombre);
Documento.Variables.Add('diaspa', nombreservicio);
Documento.Variables.Add('p', cantcli);
Documento.Variables.Add('n', certificado);
Documento.Variables.Add('v', vencimiento);
Documento.Variables.Add('f', factura);
Documento.Fields.Update;
documento.Fields.ToggleShowCodes;
Document := gWord.ActiveDocument;
Document.PrintOut(false);
gWord.ActiveDocument.Close(wdDoNotSaveChanges);
...
Sinceramente nose donde esta el error (solo la sospecha de que tengo que pasarle el indice de la impresora seleccionada tanto a rave report como a word). Las variables que utilizo tiene datos correctos (las tres variables son distintas: gindiceprinterdefault, gindiceprintercertificado, gindiceprinterrespaldo).
Si me puede ayudar se los voy agradecer, hace dos dias que estoy con esto y no puedo resolverlo. Gracias.