 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 18 Oct, 2003 11:28 pm Asunto: Función para impresoras de Matriz, o mini printers, |
|
|
hola, alguien sabe donde puedo encontrar una función que me permita impirmir directamente, y evitar el spooller de windos, es decir, al enviar a una impresora de matriz, para crear un inventario (digamoslo asi), que no se utilice el spooler de windows, si alguien sabe como hacerlo, le agradeceria que compartiera su conocimiento conmigo, esto debe servir para imprimir mas rapido, y no utilizar por mencionarlo al quickreport. o igual para imprimir una factura, es tambien funcionable..
de antemando, un saludo _________________
 |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 20 Oct, 2003 4:24 pm Asunto: |
|
|
Hola Cesar.
Yo he pasado por algun apuro con esto mismo y al final lo he resuelto todo con la funcion Printer(). Sigue imprimiendo a través de Win, pero te permite un control mas directo de la impresión. Tal vez te pueda servir para algo, porque seguro que a través del puerto paralelo, dirigir algo a la impresora va ser muy dificil.
En cualquier caso desden hace mucho tiempo paso de queickreport, Crystal Report o o que sea Report. Para lo único que sirven es a la larga para dar problemas y al fial te hacen perder mas tiempo del que al principio creias.
Suerte! |
|
| Volver arriba |
|
 |
jotny Master


Registrado: 17 Feb 2004Mensajes: 226Ubicación: santiago
|
Publicado: Sab 02 Dic, 2006 3:12 am Asunto: Como se puede manejar los saltos |
|
|
Estimado CESAR.
He visto una funcion que pusiste en Trucos, pero a mi me se me corre ya que los enter me corren muy abajo las lineas en la factura y dejar inmediatamente los datos en la siguiente linea dejan corrido para arriba.
Espero me de a antener, la cosa es que cómo se puede indicar la medida del interlineado?.... |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 02 Dic, 2006 3:58 am Asunto: |
|
|
Viendo la función de Tips & Trucos, imagino que generas la impresion en un TStringList, (Memo->Lines) TStringList, etc etc, la cuestion en si es que en cada una de las lineas que usas, se imprimen por bandas, es decir
-------------------------
1.dir
2.nom
3.telf
4.
5.
6.
7.a 10.0 10.0
8.b 2.0 2.0
9.
10.
11. 12.00
12.
------------------------
supongamos que estas usando 12 lineas de un TStringList bien asi como lo estas manejando la impresion recorre las 12 lineas y las imprime a excepcion que la impresora que usas NO sea de matriz de puntos,
pero yo mismo he probado la funcion en una impresora Lasser y no he tenido ese problema que mencionas.
si puedes poner algo de tu codigo para pueda reproducir el error creo que puedo ayudarte con algo mas.
Saludos. _________________
 |
|
| Volver arriba |
|
 |
jotny Master


Registrado: 17 Feb 2004Mensajes: 226Ubicación: santiago
|
Publicado: Sab 02 Dic, 2006 3:13 pm Asunto: Lo unico que hago es lo siguiente |
|
|
Gracias por responer Cesar.
un ejemplo del Memo que genero es el siguiente. ( la enumeracion de lineas no se pone)
| Código: |
1- VIERNES 01 DICIEMBRE 06
2- NOMBRE COMPLETO DIRECCION #CASA
3- 10.000
4- 1.900
5- 11.900
|
ya que la factura es prediseñada en papel continuo, y debo ponerle los espacios neccesarios para que se imprima en donde corresponda. La funcion la ocupo tal cual está en los trucos, no he puesto modificaciones
Al enviar la impresion del primer memo, la impresion se corre hacia abajo, ya que los saltos de linea no son proporsionales a los saltos que tiene el formulario continuo diseñado y queda todo corrido mas abajo que los titulos. el interlineado queda mas largo que lo necesario.
Ejemlo .... Señor (a) :
NOMBRE COMPLETO
En caso que no ponga los saltos de linea en el memo queda de esta forma
| Código: |
1- VIERNES 01 DICIEMBRE 06
2- NOMBRE COMPLETO DIRECCION #CASA
3- 10.000
4- 1.900
5- 11.900
|
y los interlineados con muy cortos y queda asi de corrido.
NOMBRE COMPLETO
Ejemlo .... Señor (a) :
En ambos caso la primera linea queda super bien ajustada, pero los que vienen para abajo quedan corridos o para arriba o para abajo de la posicion que deben adoptar.
La llamada es la siguiente:
| Código: |
1// TStringList* MyList = new TStringList();
2// MyList->AddStrings(this->Memo1->Lines);
3// ImprimirLineas(MyList,"\xF","\x12","\xC","HP DeskJet 420","PRUEBA");
4//----------
5// ANEXO ("\x0d\x0a" Fin y nueva linea)
|
Lo que me gustaria saber es que significa cada parametro, a lo mejor ahi está la solucion, y la linea 5 no entiendo.
La funcion que utilizo puesta por ti en trucos es la siguiente:
| Código: |
//-----------------------------------------------------------------------------
////////////Impresion EN MODO TEXTO PARA EVITAR EL SPOOLER DE WINDOW
// PARA IMPRESORAS DE MATRIZ TAMBIEN SIRVE PARA IMPRESORA FISCAL
// O MINIPRINTER
// REALIZADA POR:
// CESAR CUAUHTEMOC SALAZAR GONZALEZ.
// 06/04/04, ESPERO LES SIRVA..
//
// PARAMETROS DE LA FUNCION
//
// LINEAS ->lo que se desea imprimir, ARREGLO DE LINEAS.
// INICIO -> HABILITAR TIPO LETRAS EN MATRIZ, "\xF"-CONDENSADO "\xE"-EXPAND
// FIN -> DESHABILITAR TIPO LETRAS "\X12" IMPRESION NORMAL
// EJECT -> EXPULSAR HOJA O PONER MAS LINEAS "\xC"-EXPL "\N\N\N"-MAS LINEAS
// IMPRESORA -> A DONDE? LOCAL "EPSON" O RED "\\EPSON" // BAJO WINDOS.
// TITULO -> TITULO DE IMPRESION.
//
// POR EJEMPLO
// TStringList* MyList = new TStringList();
// MyList->AddStrings(this->Memo1->Lines);
// ImprimirLineas(MyList,"\xF","\x12","\xC","HP DeskJet 420","PRUEBA");
//----------
// ANEXO ("\x0d\x0a" Fin y nueva linea)
////////////////////////////////////////////////////////////////////////////
void __fastcall ImprimirLineas( TStringList *LINEAS,char *INICIO,char *FIN,
char *EJECT,AnsiString IMPRESORA,
AnsiString TITULO){
struct {
char *DocName;
char *OutputFile;
char *DataType;
} DocInfo;
DocInfo.DocName = TITULO.c_str();
DocInfo.OutputFile = 0;
DocInfo.DataType = "RAW";
// Obtener un handle de impresora
HANDLE hPrinter;
if (! OpenPrinter(IMPRESORA.c_str(), &hPrinter, 0))
throw Exception("Operación inválida con la impresora");
try {
// Informar al spooler del comienzo de impresión
if (StartDocPrinter(hPrinter, 1, LPBYTE(&DocInfo)) == 0)
throw Exception("Operación inválida con la impresora");
try {
// Iniciar una página
if (! StartPagePrinter(hPrinter))
throw Exception("Operación inválida con la impresora");
try {
// Enviar los datos directamente
///////////////////////
// PREPARAR LA ULTIMA LINEA
for(int i=0;i < LINEAS->Count;i++){
// INICIO CADENA \R\N FIN
AnsiString vLinea=INICIO+LINEAS->Strings[i]+FIN+"\x0d\x0a";
char* lineToPrint;
DWORD numBytesWritten;
lineToPrint=vLinea.c_str(); // convertir linea a cadena
WritePrinter(hPrinter,(LPVOID)lineToPrint,(DWORD) strlen(lineToPrint), &numBytesWritten);
}
char* lineToPrint;
DWORD numBytesWritten;
lineToPrint=EJECT; // si lleva se expulas "\xC"
WritePrinter(hPrinter,(LPVOID)lineToPrint,(DWORD) strlen(lineToPrint), &numBytesWritten);
////////////////////
}
__finally {
// Terminar la página
if (! EndPagePrinter(hPrinter))
throw Exception("Operación inválida con la impresora");
}
}
__finally {
// Informar al spooler del fin de impresión
if (! EndDocPrinter(hPrinter))
throw Exception("Operación inválida con la impresora");
}
}
__finally {
// Devolver el handle de impresora
ClosePrinter(hPrinter);
}
}
|
Me interesa demasiado el asunto ya que tengo que enviar a umpresora a imprimir unas 200 facturas continuas.
De antemano muchas gracias |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 02 Dic, 2006 6:14 pm Asunto: |
|
|
Bien lo de los parametros en la misma funcion esta definidos
| Cita: |
ImprimirLineas(MyList,"\xF","\x12","\xC","HP DeskJet 420","PRUEBA");
ImprimirLineas(LINEAS,INICIO,CONDENSADO,FIN,EJECT,IMPRESORA,TITULO);
|
| Cita: |
// PARAMETROS DE LA FUNCION
//
// LINEAS ->lo que se desea imprimir, ARREGLO DE LINEAS.
// INICIO -> HABILITAR TIPO LETRAS EN MATRIZ, "\xF"-CONDENSADO "\xE"-EXPAND
// FIN -> DESHABILITAR TIPO LETRAS "\X12" IMPRESION NORMAL
// EJECT -> EXPULSAR HOJA O PONER MAS LINEAS "\xC"-EXPL "\N\N\N"-MAS LINEAS
// IMPRESORA -> A DONDE? LOCAL "EPSON" O RED "\\EPSON" // BAJO WINDOS.
// TITULO -> TITULO DE IMPRESION.
|
Ahora bien los parametros, que pongo, tales como inicio, condensado, fin, y ejec, funcionan solo para impresoras de matriz, ya que son condigos de expancion, para cada uno de ellos
Por ejemplo uso esta forma para crear el ticket de una compañia
| Código: |
TStringList *Ticket = new TStringList();
int renglones;
// encabezado
Ticket->Clear();
Ticket->Add("\x1B\x74\x10");//Inicio de la MiniPrinter
FechaFolio += " Folio:"+::Rellena(IntToStr(DMREMOTO->TicketTK_FOLIO->Value).Trim(),'0',5);
Ticket->Add("\x1B\x61\x31"+FechaFolio);
Ticket->Add("\x1B\x61\x31\x1B\x21\x5C"+DMREMOTO->EmpresaE_NOMBRE->Value+"\x1B\x21\x00");
Ticket->Add("\x1B\x61\x31RFC: "+DMREMOTO->EmpresaE_RFC->Value);
Ticket->Add("\x1B\x61\x31"+DMREMOTO->EmpresaE_CALLE->Value);
Ticket->Add("\x1B\x61\x31"+DMREMOTO->EmpresaE_CIUDAD->Value+"; "+DMREMOTO->EmpresaE_ESTADO->Value);
Ticket->Add("\x1B\x61\x31 CP:"+DMREMOTO->EmpresaE_CODIGO_POSTAL->Value);
Ticket->Add("\x1B\x61\x31---------------*--------------");
|
Los codigos Arriba mencionados tales como "\x1B\x61\x31" son codigos que la impresora de matriz acepta (Secuencias de Escape) y por cada linea le establezco el codigo, algo asi como centrado, izquierdad, derecha etc etc,
La impresora es una Epson TMD-200 de las minimprinter,
y la forma de Imprimir es la siguiente
| Código: | ImprimirLineas(Ticket,"\x1B\x65\x4","","\x1B\xC",prnTicket,"Ticket de Venta"); |
y los parametros queda de la siguiente manera
LINEAS -> Ticket
INICIO -> "\x1B\x65\x4"
FIN -> ""
EJECT -> "\x1B\xC"
IMPRESORA -> prnTicket <- Es una cadena que tiene el nombre de la Impresora
TITULO -> "Ticket"
Espero que con esto puedas comprender el uso de la funcion.
puedes ubicar tu impresora y verificar los codigos o secuencias de Escape, en la página de fabricante tienen un manual que determina como enviar secuencias de escape a la impresora, eso puede ayudarte, es decir, debes preparar el Arreglo de Lineas, para que tenga las secuencias de escape correctas, asi tu impresora las va a respetar
Es como el trabajo de Previsualizacion que hace Word, debes indicar como queda, para que asi como quede deba imprimirse, pero esto debes hacerlo con las secuencias de Escape. _________________
 |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Mar 24 Abr, 2007 8:12 pm Asunto: |
|
|
Hola.
Después de mucho tiempo queriendo evitar esta solución, me uno a vosotros. He hecho un pequeño programa con un timer, que cuando aparece un archivo para impresión desde un programa msdos, lo imprime. Pero tengo unos cuantos problemas, o mejor dicho, uno solo.
Los comandos ESC no todos acaban "bien". Hay algunos que al final terminan en 0, lo cual le indica al C que se ha acabado la linea (char). (ejem subrayado: ESC - 1 para activar y ESC - 0 para desactivar).
Como no se lo que queda detrás del 0 de desactivación, no puedo saber cuantos caracteres quedan. Lo que si puedo es cargar todo el archivo y mandarlo de golpe a la impresora.
Estoy en ello, pero agradecería sugerencias
Saludos, Bosoft |
|
| Volver arriba |
|
 |
tronxx Lt JG


Registrado: 30 May 2003Mensajes: 56Ubicación: Merida, Yucatan, Mexico
|
Publicado: Mie 25 Abr, 2007 5:38 pm Asunto: funcion Imprime |
|
|
Hola amigos, este problema lo he vivido desde hace mucho tiempo, bien que en Windows la impresora al final la ve como un archivo, entonces para mandarlo a la impresora ( y funciona para las impresoras de red tambien) uso:
| Código: |
#ifndef IMPRI_GRAPH
#define IMPRI_GRAPH
#include <vcl>
#pragma hdrstop
int imprime_gra (String nomarch_z);
int manda_imp (String nomarch_z, String rutaimp_z, int tipoimp, int ff);
int imprime_txt (String nomarch_z, String rutaimp_z, int ff);
//---------------------------------------------------------------------------
#pragma package(smart_init)
#endif
|
y
| Código: |
// Utilería que sirve para Imprimir un archivo de Modo Texto en Grafico
// DRBR 26 de Agosto de 2002
//---------------------------------------------------------------------------
#include <stdio>
#include "imprigra.h"
#include "impre.h"
#include "Frm_prever.h"
int manda_imp (String nomarch_z, String rutaimp_z, int tipoimp, int ff)
{
const int IMPRESORA_GRAFICA = 1;
const int IMPRESORA_MATRIZ = 2;
switch (tipoimp) {
case IMPRESORA_GRAFICA: imprime_gra(nomarch_z); break;
case IMPRESORA_MATRIZ : imprime_txt(nomarch_z, rutaimp_z, ff); break;
}
return 0;
}
int imprime_txt (String nomarch_z, String rutaimp_z, int ff)
{
String cmd_z;
cmd_z = "copy \"" + nomarch_z + "\" " + rutaimp_z + " /b";
system(cmd_z.c_str());
if(ff) {
cmd_z = "copy \\windows\\ff.txt " + rutaimp_z + " /b";
system(cmd_z.c_str());
}
return (mrOk);
}
int imprime_gra (String nomarch_z)
{
const int OK = 1;
const int MI_ERROR = -1;
const int PLANO = 0;
const int ESCAPE = 1;
const int SUBRAYADO = 2;
const int TAM_PICA = 12;
const int TAM_ELITE = 10;
const int TAM_PICA_COND = 6;
const int TAM_ELITE_COND = 4;
const int TAM_DOBLE = 16;
const int SCAPE = 27;
const int CONDENSED_ON = 15;
const int CONDENSED_OFF = 18;
const int EXPANDED_ON = 14;
const int EXPANDED_OFF = 20;
const int FORM_FEED = 12;
int MAX_LIN_X_PAG = 66;
int lineas_z=0, modo_z=0, tamfont_z, anttmfont_z, doble_z=0;
String result_z = "";
char car_z;
FILE *archin;
Timpre *graimpre;
if ((archin = fopen((nomarch_z).c_str(), "rt")) == NULL) {
Application->MessageBox(("No puedo abrir el archivo de Lectura\n"+nomarch_z).c_str(), "Archivo Invalido", MB_ICONEXCLAMATION);
return (MI_ERROR);
}
graimpre = new Timpre();
graimpre->cambia_nombrefont("Lucida Console");
graimpre->cambia_tamfont(TAM_PICA);
tamfont_z = TAM_PICA; anttmfont_z = tamfont_z; doble_z =0;
while ( (car_z = fgetc(archin)) != EOF) {
switch (modo_z) {
case PLANO:
switch(car_z) {
case SCAPE: modo_z = ESCAPE; break;
case '\n' :
if(doble_z) {
graimpre->cambia_tamfont(doble_z); tamfont_z = doble_z;
doble_z = 0;
}
lineas_z++; graimpre->saltalin();
if(lineas_z > MAX_LIN_X_PAG) { graimpre->saltapag(); lineas_z = 0; }
break;
case FORM_FEED: graimpre->saltapag(); lineas_z = 0; break;
case CONDENSED_ON:
switch (tamfont_z) {
case TAM_PICA: tamfont_z =TAM_PICA_COND; break;
case TAM_ELITE: tamfont_z =TAM_ELITE_COND; break;
}
graimpre->cambia_tamfont(tamfont_z);
break;
case CONDENSED_OFF:
switch (tamfont_z) {
case TAM_PICA_COND: tamfont_z =TAM_PICA; break;
case TAM_ELITE_COND: tamfont_z =TAM_ELITE; break;
}
graimpre->cambia_tamfont(tamfont_z);
break;
case EXPANDED_OFF:
if(doble_z) {
graimpre->cambia_tamfont(doble_z); tamfont_z = doble_z;
doble_z = 0;
}
break;
case EXPANDED_ON:
anttmfont_z = tamfont_z; doble_z = anttmfont_z;
switch (tamfont_z) {
case TAM_PICA_COND: tamfont_z =TAM_PICA; break;
case TAM_ELITE_COND: tamfont_z =TAM_ELITE; break;
case TAM_PICA:
case TAM_ELITE: tamfont_z =TAM_DOBLE; break;
}
graimpre->cambia_tamfont(tamfont_z);
break;
default : graimpre->imprime_car(car_z); break;
}
break;
case ESCAPE:
switch(car_z) {
case '-': modo_z = SUBRAYADO; break;
case 'M':
switch (tamfont_z) {
case TAM_PICA_COND: tamfont_z =TAM_ELITE_COND; break;
case TAM_PICA: tamfont_z =TAM_ELITE; break;
}
graimpre->cambia_tamfont(tamfont_z); modo_z = PLANO; break;
case 'P':
switch (tamfont_z) {
case TAM_ELITE_COND: tamfont_z =TAM_PICA_COND; break;
case TAM_ELITE: tamfont_z =TAM_PICA; break;
}
graimpre->cambia_tamfont(tamfont_z); modo_z = PLANO; break;
case 'E': graimpre->font_bold_on(); modo_z = PLANO; break;
case 'F': graimpre->font_bold_off(); modo_z = PLANO; break;
case '0': graimpre->alto_z -= 2; MAX_LIN_X_PAG = 88; modo_z = PLANO; break;
case '1': graimpre->alto_z += 2; MAX_LIN_X_PAG = 66; modo_z = PLANO; break;
default : modo_z = PLANO; break;
}
break;
case SUBRAYADO:
switch(car_z) {
case '0': graimpre->font_underline_off(); modo_z = PLANO; break;
case '1': graimpre->font_underline_on(); modo_z = PLANO; break;
}
break;
}
}
graimpre->cierraimpre();
delete graimpre;
fclose(archin);
// -> Fin del Archivo
return (OK);
}
// ------------------------------------------
|
esta en una clase que mande hace tiempo en tips & tricks
espero que les sea útil,
ahora bien que para generar el reporte yo uso:
| Código: |
void __fastcall TForm_capentpro::imprimeExecute(TObject *Sender)
{
double piva_z=0, importe_z=0, iva_z=0, total_z=0, costo_z=0, totcos_z=0,
fletes_z=0, desxap_z=0, ctofincomp_z=0, ctofin_z=0, mub_z=0;
String arch_z = Name+".txt", serie_z="", ciu_z="",
prove_z="", codigo_z="", alm_z="";
int nentrada_z=0, nartics_z=0;
mensaje_z = "Desea imprimir " + este_z + " " + titulo_z;
titmsg_z = "Impresión de " + titulo_z;
if(Application->MessageBox(mensaje_z.c_str(), titmsg_z.c_str(), MB_ICONQUESTION+MB_YESNO) != mrYes) return;
if( (archout = fopen(arch_z.c_str(), "wt")) == NULL) {
Application->MessageBox("No puedo abrir el archivo textual de salida", "Error", MB_ICONQUESTION);
return;
}
qry_renentra->DisableControls();
qry_renentra->Tag == NO_REFRESH;
nentrada_z = qry_entradas->FieldByName("numero")->AsInteger;
prove_z = qry_entradas->FieldByName("prove")->AsString;
alm_z = qry_entradas->FieldByName("alm")->AsString;
// if(!qry_renentra->IsEmpty())
// zona_z = qry_renpogas->FieldByName("zona")->AsInteger;
pagina_z = 1; report_encab();
for(qry_renentra->First(); !qry_renentra->Eof; qry_renentra->Next()) {
if(lineas_z > LIN_X_PAG) {
fprintf(archout, "%c", 12); pagina_z++; report_encab();
}
if(!nartics_z) {
codigo_z = qry_renentra->FieldByName("codinv")->AsString;
}
if(codigo_z != qry_renentra->FieldByName("codinv")->AsString) {
if(nartics_z > 1) {
fprintf(archout, "%s|", cjust("Total de Este Articulo:", 44));
fprintf(archout, "%s|", rjust(FormatFloat("####0", nartics_z), 5));
fprintf(archout, "%s", rjust(FormatFloat("#,###,##0.00", totcos_z), 12));
}
fprintf(archout, "\n");
codigo_z = qry_renentra->FieldByName("codinv")->AsString;
nartics_z=0; totcos_z = 0;
}
if( sTipo != "Q") {
costo_z = qry_renentra->FieldByName("costou")->AsFloat;
} else {
costo_z = qry_renentra->FieldByName("prvta")->AsFloat;
}
totcos_z += qry_renentra->FieldByName("costou")->AsFloat;
nartics_z++; mub_z = -1;
if (qry_renentra->FieldByName("precio")->AsFloat != 0)
mub_z = (qry_renentra->FieldByName("precio")->AsFloat -
qry_renentra->FieldByName("costoneto")->AsFloat ) /
qry_renentra->FieldByName("precio")->AsFloat * 100;
fprintf(archout, "%s %s|%s|%s|%s|%s|%s\n",
ljust(qry_renentra->FieldByName("codinv")->AsString, 13),
ljust(qry_renentra->FieldByName("descri")->AsString, 30),
rjust(IntToStr(qry_renentra->FieldByName("folent")->AsInteger), 5),
rjust(FormatFloat("#,###,##0.00", costo_z), 12),
rjust(FormatFloat("#,###,##0.00", qry_renentra->FieldByName("costoneto")->AsFloat), 12),
rjust(FormatFloat("#,###,##0.00", qry_renentra->FieldByName("precio")->AsFloat), 12),
rjust(FormatFloat("##0.00", mub_z), 5)
);
piva_z = qry_renentra->FieldByName("piva")->AsFloat;
importe_z += costo_z;
iva_z += qry_renentra->FieldByName("costou")->AsFloat * (piva_z / 100);
total_z = importe_z + iva_z;
}
if(nartics_z > 1) {
fprintf(archout, "%s|", cjust("Total de Este Articulo:", 44));
fprintf(archout, "%s|", rjust(FormatFloat("####0", nartics_z), 5));
fprintf(archout, "%s\n", rjust(FormatFloat("#,###,##0.00", totcos_z), 12));
}
fprintf(archout, "%s\n",
rjust(
"Importe:" + FormatFloat("#,###,##0.00", importe_z) +
" Iva:" + FormatFloat("#,###,##0.00", iva_z) +
" Total:" + FormatFloat("#,###,##0.00", total_z), 63
)
);
totcos_z = qry_entradas->FieldByName("importe")->AsFloat +
qry_entradas->FieldByName("iva")->AsFloat;
fletes_z = qry_entradas->FieldByName("fletes")->AsFloat;
desxap_z = qry_entradas->FieldByName("desxap")->AsFloat;
ctofincomp_z = qry_entradas->FieldByName("ctofincomp")->AsFloat;
ctofin_z = qry_entradas->FieldByName("ctofin")->AsFloat;
totcos_z = totcos_z- fletes_z + ctofin_z + ctofincomp_z + desxap_z;
fprintf(archout, "Fletes: %s Descuento x Aplicar: %s Costo Financiero de Compra: %s\n",
ljust(FormatFloat("#,###,##0.00", fletes_z), 12),
ljust(FormatFloat("#,###,##0.00", desxap_z), 12),
ljust(FormatFloat("#,###,##0.00", ctofincomp_z), 12)
);
fprintf(archout, " Costo Financiero de Proveedor: %s %s\n",
ljust(FormatFloat("#,###,##0.00", ctofin_z), 12),
rjust("Gran Total: " + FormatFloat("#,###,##0.00", totcos_z), 33)
);
fprintf(archout, "%s%s%s\n", serie_z.StringOfChar('=',80),
dm->font_impre(dm->impre_z, ELITE),
dm->font_impre(dm->impre_z, SUBRAYADO_ON)
);
fprintf(archout, "%s|%s|%s|%s|%s|%s|%s|%s%s\n",
"Lta",
cjust("Vence", 10),
rjust("Costo_F.Comp", 12),
rjust("Capital", 12),
rjust("Interes", 12),
rjust("IVA", 12),
rjust("DescxAplicar",12),
rjust("Saldo",12),
dm->font_impre(dm->impre_z, SUBRAYADO_OFF)
);
qry_mventpag->Close();
qry_mventpag->ParamByName("entrada")->AsInteger = nentrada_z;
qry_mventpag->ParamByName("prove")->AsString = prove_z;
qry_mventpag->ParamByName("cia")->AsInteger = cia_z;
qry_mventpag->Open();
totcos_z = 0;
for(qry_mventpag->First(); !qry_mventpag->Eof; qry_mventpag->Next()) {
fprintf(archout, "%s|%s|%s|%s|%s|%s|%s|%s\n",
rjust(qry_mventpag->FieldByName("pagare")->AsString, 3),
rjust(FormatDateTime("dd-mm-yyyy", qry_mventpag->FieldByName("vence")->AsDateTime), 10),
rjust(FormatFloat("##,##0.00", qry_mventpag->FieldByName("cfc")->AsFloat), 12),
rjust(FormatFloat("##,##0.00", qry_mventpag->FieldByName("capital")->AsFloat), 12),
rjust(FormatFloat("##,##0.00", qry_mventpag->FieldByName("interes")->AsFloat), 12),
rjust(FormatFloat("##,##0.00", qry_mventpag->FieldByName("iva")->AsFloat), 12),
rjust(FormatFloat("##,##0.00", qry_mventpag->FieldByName("desxap")->AsFloat), 12),
rjust(FormatFloat("##,##0.00", qry_mventpag->FieldByName("saldo")->AsFloat), 12)
);
totcos_z += qry_mventpag->FieldByName("saldo")->AsFloat;
}
fprintf(archout, "%sVencimiento:%s %s %s%s\n",
dm->font_impre(dm->impre_z, SUBRAYADO_ON),
rjust(FormatDateTime("dd-mm-yyyy", qry_entradas->FieldByName("vence")->AsDateTime), 10),
rjust("Total:", 56),
rjust(FormatFloat("##,##0.00", totcos_z), 12),
dm->font_impre(dm->impre_z, SUBRAYADO_OFF)
);
TQuery *qry_observs = new TQuery (this);
qry_observs->DatabaseName = qry_entradas->DatabaseName;
qry_observs->SQL->Text=("select * from observent where tipo = :Tipo and alm =:Almac and numero = :Numero and cia = :Cia order by conse");
qry_observs->ParamByName("tipo")->AsString = sTipo;
qry_observs->ParamByName("almac")->AsString = alm_z;
qry_observs->ParamByName("numero")->AsInteger = nentrada_z;
qry_observs->ParamByName("cia")->AsInteger = cia_z;
qry_observs->Open();
for(qry_observs->First(); !qry_observs->Eof; qry_observs->Next()) {
fprintf(archout, "%s %s\n",
FormatDateTime("dd/mm/yyyy ", qry_observs->FieldByName("fecha")->AsDateTime),
qry_observs->FieldByName("observs")->AsString
);
}
qry_observs->Close();
delete qry_observs;
fclose(archout);
// vehiculo, kmts, serv, descri, chofer, costo, cambio
qry_renentra->Tag == SI_REFRESH;
qry_renentra->EnableControls();
if(dm->preview_z) {
VistaPrevia(this, arch_z, dm->rutaimp_z, dm->tipoimp_z, dm->ff_z);
} else {
manda_imp(arch_z, dm->rutaimp_z, dm->tipoimp_z, dm->ff_z);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm_capentpro::report_encab()
{
fprintf(archout, "%s%s%s\n", dm->font_impre(dm->impre_z, PICA_PITCH),
dm->font_impre(dm->impre_z, CONDENSADO_OFF), cjust(dm->nemp_z, 80)
);
fprintf(archout, "%s%s%s%s Pag:%d\n", dm->font_impre(dm->impre_z, CONDENSADO_ON),
FormatDateTime("dd-mm-yyyy hh:mm", Now()),
dm->font_impre(dm->impre_z, CONDENSADO_OFF), cjust(dm->diremp_z, 64), pagina_z
);
fprintf(archout, "Impresion de %s\n", titulo_z);
fprintf(archout, "Numero:%6d Almacen:%s %s Fecha:%s\n",
qry_entradas->FieldByName("numero")->AsInteger,
qsAlmacen->FieldByName("clave")->AsString,
qsAlmacen->FieldByName("nombre")->AsString,
FormatDateTime("dd-mm-yyyy", qry_entradas->FieldByName("fecha")->AsDateTime),
dm->font_impre(dm->impre_z, CONDENSADO_ON)
);
fprintf(archout, "%s%s%s|%s|%s|%s|%s|%s%s\n",
dm->font_impre(dm->impre_z, SUBRAYADO_ON),
dm->font_impre(dm->impre_z, CONDENSADO_ON),
cjust("Articulo", 44),
rjust("Folio", 5),
rjust("Costo.Unitar", 12),
rjust("Costo Neto", 12),
ljust("Precio Lista", 12),
"MUB",
dm->font_impre(dm->impre_z, SUBRAYADO_OFF)
);
lineas_z = 5;
// report_subencab();
}
//---------------------------------------------------------------------------
|
donde la funcion
dm->font_impre(dm->impre_z, SUBRAYADO_OFF)
esta definida como:
| Código: |
String __fastcall Tdm::font_impre(int impre, int font)
{
String fnt_z, secuen_z;
char car_z, cad_z[50];
memset(cad_z, 0, 50);
int ii_z=0;
qry_fonts->Close();
qry_fonts->ParamByName("impre")->AsInteger = impre;
qry_fonts->ParamByName("font")->AsInteger = font;
qry_fonts->Open();
if(!qry_fonts->IsEmpty()) {
secuen_z=qry_fonts->FieldByName("secuen")->AsString;
for(ii_z = 1; ii_z <qry_fonts>FieldByName("ncars")->AsInteger; ii_z++) {
car_z = secuen_z.SubString( ( (ii_z -1)*3 + 1 ), 3).ToIntDef(0);
cad_z[ii_z - 1] = car_z;
}
}
fnt_z = cad_z;
return (fnt_z);
}
//---------------------------------------------------------------------------
|
uff, un poco largo no ?
bien que qry_fonts es
select * from fonts where impre = :IMPRE and numero = :FONT
y mi tabla fonts es:
CREATE TABLE FONTS (
IMPRE SMALLINT,
NUMERO SMALLINT,
NOMBRE CHAR(20),
NCARS SMALLINT,
SECUEN CHAR(150));
y el contenido es:
I fonts.dat Row 1 Col 1 11:38 Ctrl-K H for help
'1','1','ITALICAS_ON ','2','027052
'1','2','ITALICAS_OFF ','2','027053
'1','3','COURIER ','3','027107000
'1','4','SANSERIF ','3','027107001
'1','5','LETTER-GOTHIC ','3','027107002
'1','6','ORATOR ','3','027107003
'1','7','SCRIPT ','3','027107004
'1','8','OCR-B ','3','027107005
'1','9','TW-LIGHT ','3','027107006
'1','10','CINEMA ','3','027107007
'1','11','PICA-PITCH ','2','027080
'1','12','ELITE ','2','027077
'1','13','CONDENSADO_ON ','1','015
'1','14','CONDENSADO_OFF ','1','018
'1','15','ON LINE EXPANDED ON ','1','014
'1','16','ON LINE EXPANDED OFF','1','020
'1','17','EMPHAIZED ON ','2','027069
'1','18','EMPHAIZED OFF ','2','027070
'1','19','SUBRAYADO ON ','3','027045049
'1','20','SUBRAYADO OFF ','3','027045048
'1','21','SUPERAYADO ON ','3','027095049
'1','22','SUPERAYADO OFF ','3','027095048
'1','23','SUBSCRIPT ON ','3','027083049
'1','25','SUPER-SUBSCRIPT OFF ','2','027084
'1','26','REVERSE LF ','2','027010
'1','27','OCTAVOS ','2','027048
'1','28','ESPACIO 7/72 ','2','027049
'1','29','SEXTOS ','2','027050
'1','30','FORM-FEED FF ','1','012
'1','31','REVERSE FEED FF ','2','027012
'1','32','ZERO SLASH ','3','027126049
'1','33','ZERO NOT SLASH ','3','027126048
'1','34','RESET ','2','027064
'1','35','DISABLE PAPER-OUT ','2','027056
'1','36','ENABLE PAPER-OUT ','2','027057
'1','37','SET ON-LINE ','1','017
'1','38','SET OFF-LINE ','1','019
'1','39','MAST-COND-ENF-ON ','3','027033004
'1','40','MAST-COND-ENF-OFF ','3','027033000
esto es para una impresora Esc/P2
ufff. a ver si alguien se anima a leer todo esto. Espero que les sirva:
 _________________ La caja decía, requiere Win95 o superior así que instalé Linux. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Mie 25 Abr, 2007 7:09 pm Asunto: |
|
|
He entendido la respuesta.
Reinterpretas la manera de imprimir, y lo haces desde windows.
Yo me refería a imprimir un archivo que contiene los comandos ESC, pero claro tiene algún que otro 0 por ahí metido.
Estoy haciendo pruebas y ya he conseguido hacer funcionar el programita, aunque faltan algunas cosillas. En cuanto chute bien lo publico. Hace lo mismo que el sistema de comandos copy prn, pero en modo automático y "de momento" sin problemas.
Estudiare tu código profundamente (tengo para rato) y sobre todo la conversión de los caracteres a modo win puesto que ya hace tiempo intente hacerlo y no me salia correcto. Mira mi post
https://cppbuilder.es/viewtopic.php?t=12128
Creo que tu lo has conseguido. En cambio yo no me aclaro con el tetxwidth.
Como ya te he dicho estudiare profundamente tu código.
Muchas gracias
Saludos, bosoft. |
|
| Volver arriba |
|
 |
Dream Lt JG


Registrado: 14 Feb 2003Mensajes: 57Ubicación: TOLEDO
|
Publicado: Dom 24 May, 2015 5:10 pm Asunto: Imprime caracteres extra |
|
|
Buenas tardes,
Utilizo la funcion ImprimeLineas, y funciona bien. Pero no se porque al inicio de la impresión, me imprime los siguientes caracteres .nP
No son caracteres que mande yo imprimir, eso si, si apago la impresora y la enciendo, en la primera impresión no imprime dichos caracteres.
Os agradezco de antemano la ayuda
Gracias |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|